Migrate config to cameleer.server.* naming convention
Move all configuration properties under the cameleer.server.* namespace with all-lowercase dot-separated names and mechanical env var mapping (dots→underscores, uppercase). This aligns with the agent's convention (cameleer.agent.*) and establishes a predictable pattern across all components. Changes: - Move 6 config prefixes under cameleer.server.*: agent-registry, ingestion, security, license, clickhouse, and cameleer.tenant/runtime/indexer - Rename all kebab-case properties to concatenated lowercase (e.g., bootstrap-token → bootstraptoken, jar-storage-path → jarstoragepath) - Update all env vars to CAMELEER_SERVER_* mechanical mapping - Fix container-cpu-request/container-cpu-shares mismatch bug - Remove displayName from AgentRegistrationRequest (redundant with instanceId) - Update agent container env vars to CAMELEER_AGENT_* convention - Update K8s manifests and CI workflow for new env var names - Update CLAUDE.md, HOWTO.md, SERVER-CAPABILITIES.md documentation Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -26,12 +26,12 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void registerNewAgent_createsWithLiveState() {
|
||||
AgentInfo agent = registry.register("agent-1", "Order Agent", "order-svc", "default",
|
||||
AgentInfo agent = registry.register("agent-1", "agent-1", "order-svc", "default",
|
||||
"1.0.0", List.of("route1", "route2"), Map.of("feature", "tracing"));
|
||||
|
||||
assertThat(agent).isNotNull();
|
||||
assertThat(agent.instanceId()).isEqualTo("agent-1");
|
||||
assertThat(agent.displayName()).isEqualTo("Order Agent");
|
||||
assertThat(agent.displayName()).isEqualTo("agent-1");
|
||||
assertThat(agent.applicationId()).isEqualTo("order-svc");
|
||||
assertThat(agent.version()).isEqualTo("1.0.0");
|
||||
assertThat(agent.routeIds()).containsExactly("route1", "route2");
|
||||
@@ -44,14 +44,14 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void reRegisterSameId_updatesMetadataAndTransitionsToLive() {
|
||||
registry.register("agent-1", "Old Name", "old-group", "default",
|
||||
registry.register("agent-1", "agent-1", "old-group", "default",
|
||||
"1.0.0", List.of("route1"), Map.of());
|
||||
|
||||
AgentInfo updated = registry.register("agent-1", "New Name", "new-group", "default",
|
||||
AgentInfo updated = registry.register("agent-1", "agent-1", "new-group", "default",
|
||||
"2.0.0", List.of("route1", "route2"), Map.of("new", "cap"));
|
||||
|
||||
assertThat(updated.instanceId()).isEqualTo("agent-1");
|
||||
assertThat(updated.displayName()).isEqualTo("New Name");
|
||||
assertThat(updated.displayName()).isEqualTo("agent-1");
|
||||
assertThat(updated.applicationId()).isEqualTo("new-group");
|
||||
assertThat(updated.version()).isEqualTo("2.0.0");
|
||||
assertThat(updated.routeIds()).containsExactly("route1", "route2");
|
||||
@@ -62,11 +62,11 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void reRegisterSameId_updatesRegisteredAtAndLastHeartbeat() {
|
||||
AgentInfo first = registry.register("agent-1", "Name", "group", "default",
|
||||
AgentInfo first = registry.register("agent-1", "agent-1", "group", "default",
|
||||
"1.0.0", List.of(), Map.of());
|
||||
Instant firstRegisteredAt = first.registeredAt();
|
||||
|
||||
AgentInfo second = registry.register("agent-1", "Name", "group", "default",
|
||||
AgentInfo second = registry.register("agent-1", "agent-1", "group", "default",
|
||||
"1.0.0", List.of(), Map.of());
|
||||
|
||||
assertThat(second.registeredAt()).isAfterOrEqualTo(firstRegisteredAt);
|
||||
@@ -79,7 +79,7 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void heartbeatKnownAgent_returnsTrue() {
|
||||
registry.register("agent-1", "Name", "group", "default", "1.0.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "group", "default", "1.0.0", List.of(), Map.of());
|
||||
|
||||
boolean result = registry.heartbeat("agent-1");
|
||||
|
||||
@@ -88,7 +88,7 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void heartbeatKnownAgent_updatesLastHeartbeat() {
|
||||
registry.register("agent-1", "Name", "group", "default", "1.0.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "group", "default", "1.0.0", List.of(), Map.of());
|
||||
Instant before = registry.findById("agent-1").lastHeartbeat();
|
||||
|
||||
registry.heartbeat("agent-1");
|
||||
@@ -106,7 +106,7 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void heartbeatStaleAgent_transitionsToLive() {
|
||||
registry.register("agent-1", "Name", "group", "default", "1.0.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "group", "default", "1.0.0", List.of(), Map.of());
|
||||
registry.transitionState("agent-1", AgentState.STALE);
|
||||
|
||||
assertThat(registry.findById("agent-1").state()).isEqualTo(AgentState.STALE);
|
||||
@@ -171,7 +171,7 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void transitionState_setsStaleTransitionTimeWhenGoingStale() {
|
||||
registry.register("agent-1", "Name", "group", "default", "1.0.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "group", "default", "1.0.0", List.of(), Map.of());
|
||||
|
||||
registry.transitionState("agent-1", AgentState.STALE);
|
||||
|
||||
@@ -186,8 +186,8 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void findAll_returnsAllAgents() {
|
||||
registry.register("agent-1", "A1", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-2", "A2", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-2", "agent-2", "g", "default", "1.0", List.of(), Map.of());
|
||||
|
||||
List<AgentInfo> all = registry.findAll();
|
||||
|
||||
@@ -197,8 +197,8 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void findByState_filtersCorrectly() {
|
||||
registry.register("agent-1", "A1", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-2", "A2", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-2", "agent-2", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.transitionState("agent-2", AgentState.STALE);
|
||||
|
||||
List<AgentInfo> live = registry.findByState(AgentState.LIVE);
|
||||
@@ -217,7 +217,7 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void findById_knownReturnsAgent() {
|
||||
registry.register("agent-1", "A1", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "g", "default", "1.0", List.of(), Map.of());
|
||||
|
||||
AgentInfo result = registry.findById("agent-1");
|
||||
|
||||
@@ -231,7 +231,7 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void addCommand_createsPendingCommand() {
|
||||
registry.register("agent-1", "A1", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "g", "default", "1.0", List.of(), Map.of());
|
||||
|
||||
AgentCommand cmd = registry.addCommand("agent-1", CommandType.CONFIG_UPDATE, "{\"key\":\"val\"}");
|
||||
|
||||
@@ -246,7 +246,7 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void addCommand_notifiesEventListener() {
|
||||
registry.register("agent-1", "A1", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "g", "default", "1.0", List.of(), Map.of());
|
||||
|
||||
AtomicReference<AgentCommand> received = new AtomicReference<>();
|
||||
registry.setEventListener((agentId, command) -> received.set(command));
|
||||
@@ -259,7 +259,7 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void acknowledgeCommand_transitionsStatus() {
|
||||
registry.register("agent-1", "A1", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "g", "default", "1.0", List.of(), Map.of());
|
||||
AgentCommand cmd = registry.addCommand("agent-1", CommandType.REPLAY, "{}");
|
||||
|
||||
boolean acked = registry.acknowledgeCommand("agent-1", cmd.id());
|
||||
@@ -269,7 +269,7 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void acknowledgeCommand_unknownReturnsFalse() {
|
||||
registry.register("agent-1", "A1", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "g", "default", "1.0", List.of(), Map.of());
|
||||
|
||||
boolean acked = registry.acknowledgeCommand("agent-1", "nonexistent-cmd");
|
||||
|
||||
@@ -278,7 +278,7 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void findPendingCommands_returnsOnlyPending() {
|
||||
registry.register("agent-1", "A1", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "g", "default", "1.0", List.of(), Map.of());
|
||||
AgentCommand cmd1 = registry.addCommand("agent-1", CommandType.CONFIG_UPDATE, "{}");
|
||||
AgentCommand cmd2 = registry.addCommand("agent-1", CommandType.DEEP_TRACE, "{}");
|
||||
registry.acknowledgeCommand("agent-1", cmd1.id());
|
||||
@@ -291,7 +291,7 @@ class AgentRegistryServiceTest {
|
||||
|
||||
@Test
|
||||
void markDelivered_updatesStatus() {
|
||||
registry.register("agent-1", "A1", "g", "default", "1.0", List.of(), Map.of());
|
||||
registry.register("agent-1", "agent-1", "g", "default", "1.0", List.of(), Map.of());
|
||||
AgentCommand cmd = registry.addCommand("agent-1", CommandType.CONFIG_UPDATE, "{}");
|
||||
|
||||
registry.markDelivered("agent-1", cmd.id());
|
||||
@@ -305,7 +305,7 @@ class AgentRegistryServiceTest {
|
||||
void expireOldCommands_removesExpiredPendingCommands() {
|
||||
// Use 1ms expiry for test
|
||||
AgentRegistryService shortRegistry = new AgentRegistryService(90_000, 300_000, 1);
|
||||
shortRegistry.register("agent-1", "A1", "g", "default", "1.0", List.of(), Map.of());
|
||||
shortRegistry.register("agent-1", "agent-1", "g", "default", "1.0", List.of(), Map.of());
|
||||
shortRegistry.addCommand("agent-1", CommandType.CONFIG_UPDATE, "{}");
|
||||
|
||||
try { Thread.sleep(5); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }
|
||||
|
||||
Reference in New Issue
Block a user