Skip to main content

create-runtime-setting

Create a new RuntimeSetting that can be changed at runtime via `agent config set/get` and the config API

الانتقال إلى التثبيت

معلومات المصدر

المستودع
DataDog/datadog-agent
آخر نشاط في المصدر
١٦ يوليو ٢٠٢٦ في ١٨:٤٢
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٣٬٧٥٤
التفرعات
١٬٤٩٨

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
create-runtime-setting
description
Create a new RuntimeSetting that can be changed at runtime via `agent config set/get` and the config API
allowed-tools
Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
argument-hint
[setting-name]
model
sonnet
Create a new RuntimeSetting implementation for the Datadog Agent. RuntimeSettings are settings that can be read and changed at runtime via: - The CLI: `agent config get <setting>`, `agent config set <setting> <value>`, `agent config list-runtime` - The HTTP API: `GET /config/{setting}`, `POST /config/{setting}` ## Instructions ### Step 1: Gather information from the user Use `AskUserQuestion` to collect the following. If `$ARGUMENTS` provides the setting name, skip that question. 1. **Setting name** (the config key, e.g. `log_payloads`, `dogstatsd_stats`): the name used to register and access the setting via the API. 2. **Value type**: What type of value does this setting hold? - Boolean (true/false) - Integer - String - String slice (list of strings) 3. **Description**: A human-readable description of what this setting controls (shown in `/config/list-runtime`). 4. **Hidden**: Should this setting be hidden from the public runtime settings list? (default: false) 5. **Scope**: Where should this setting live? - **Shared** (`pkg/config/settings/`) — Used by multiple agent services (agent, trace-agent, process-agent, etc.) - **Agent-specific** (`cmd/agent/subcommands/run/internal/settings/`) — Only used by the core agent 6. **Config key**: The `datadog.yaml` config key this setting maps to (e.g. `log_payloads`, `internal_profiling.enabled`). Often the same as the setting name, but can differ. 7. **Which services should register it**: Ask which services should have this setting registered: - Core Agent (`cmd/agent/subcommands/run/command.go`) - Cluster Agent (`cmd/cluster-agent/subcommands/start/command.go`) - Trace Agent (`cmd/trace-agent/subcommands/run/command.go`) - Process Agent (`cmd/process-agent/subcommands/run/command.go`) - Security Agent (`cmd/security-agent/subcommands/runtime/command.go`) - System Probe (`cmd/system-probe/subcommands/run/command.go`) - DogStatsD (`cmd/dogstatsd/subcommands/start/command.go`) ### Step 2: Read reference examples from the codebase Before writing any code, read the appropriate reference files to follow existing patterns exactly. 1. **Read the interface** defined in `comp/core/settings/component.go` to understand the `RuntimeSetting` methods. 2. **Read an existing implementation** matching the chosen value type. Use `Glob` with pattern `pkg/config/settings/runtime_setting_*.go` to list available examples, then read one that matches the desired type (boolean, integer, string, etc.). 3. **Read the test file** alongside the chosen reference to see the test pattern. 4. **Read a registration site**: Look at one of the `command.go` files listed in Step 1.7 to see how settings are added to the `Settings` map. ### Step 3: Create the RuntimeSetting implementation file **File naming convention**: `runtime_setting_<feature_name>.go` **File location**: - Shared: `pkg/config/settings/runtime_setting_<feature>.go` - Agent-specific: `cmd/agent/subcommands/run/internal/settings/runtime_setting_<feature>.go` Create the implementation following the patterns from the reference file read in Step 2. Every RuntimeSetting needs: 1. **Struct** with a `ConfigKey string` field 2. **Constructor** `New<Name>RuntimeSetting()` that sets the config key 3. **`Description()`** — returns the human-readable description 4. **`Hidden()`** — returns whether hidden from list-runtime 5. **`Name()`** — returns the config key 6. **`Get(config)`** — reads the current value using the appropriate typed getter 7. **`Set(config, v, source)`** — validates/converts the input value, then calls `config.Set()` **Type conversion in Set()**: for Boolean and Integer types, use the `GetBool(v)` / `GetInt(v)` helper functions from `pkg/config/settings` — these handle string-to-type conversion. For agent-specific settings, import the helpers via `settings "github.com/DataDog/datadog-agent/pkg/config/settings"`. ### Step 4: Create a unit test file Create a test file alongside the implementation: `runtime_setting_<feature>_test.go` Follow the test patterns from the reference test file read in Step 2. The test should verify: - `Name()`, `Description()`, `Hidden()` return expected values - `Get` returns the correct value from config - `Set` with a valid value updates the config - `Set` with a string representation works (e.g. `"true"`/`"false"` for bools) - `Set` with an invalid value returns an error ### Step 5: Register the setting Find the `settings.Params` provider in the appropriate `command.go` file(s) for each selected service (from Step 1.7). Add the new setting to the `Settings` map following the existing pattern in that file. The import alias convention and registration format are visible in the existing entries. ### Step 6: Verify 1. Run the new test: ```bash dda inv test --targets=<package_path> ``` 2. Run the linter on changed files: ```bash dda inv linter.go ``` 3. Report the results to the user. If tests or linting fail, fix the issues. ## Important Notes - The `RuntimeSetting` interface is defined in `comp/core/settings/component.go` - Helper functions `GetBool` and `GetInt` are in `pkg/config/settings/runtime_setting.go` - All `Set` methods receive a `model.Source` parameter for config source tracking — always pass it through to `config.Set()` - Settings are exposed via HTTP at `/config/{setting_name}` (GET to read, POST to write) and via the CLI: `agent config get <setting>`, `agent config set <setting> <value>`, `agent config list-runtime` - Follow existing code style: use the same comment patterns, error formatting, and naming conventions as existing RuntimeSettings ## Usage - `/create-runtime-setting` — Interactive: prompts for all details - `/create-runtime-setting my_new_setting` — Pre-fills the setting name, prompts for the rest
عرض على GitHub