refactor CHORUS
This commit is contained in:
		| @@ -133,7 +133,7 @@ CHORUS currently implements a **comprehensive P2P autonomous agent system** with | |||||||
| | **HAP Interface** | ❌ Not implemented | Required | **Phase 2-3** | | | **HAP Interface** | ❌ Not implemented | Required | **Phase 2-3** | | ||||||
|  |  | ||||||
| ### Shared Runtime Components | ### Shared Runtime Components | ||||||
| Both `bzzz-agent` and `bzzz-hap` will share: | Both `chorus-agent` and `chorus-hap` will share: | ||||||
|  |  | ||||||
| - **P2P networking** and peer discovery | - **P2P networking** and peer discovery | ||||||
| - **Agent identity** and cryptographic signing | - **Agent identity** and cryptographic signing | ||||||
| @@ -155,7 +155,7 @@ Both `bzzz-agent` and `bzzz-hap` will share: | |||||||
| 4. **Gradual enhancement** - start with basic HAP, add features incrementally | 4. **Gradual enhancement** - start with basic HAP, add features incrementally | ||||||
|  |  | ||||||
| ### Key Principles | ### Key Principles | ||||||
| - **Backward compatibility**: Existing BZZZ deployments unaffected | - **Backward compatibility**: Existing CHORUS deployments unaffected | ||||||
| - **Shared protocols**: Human and machine agents are indistinguishable on P2P mesh | - **Shared protocols**: Human and machine agents are indistinguishable on P2P mesh | ||||||
| - **Common codebase**: Maximum code reuse between binaries | - **Common codebase**: Maximum code reuse between binaries | ||||||
| - **Incremental delivery**: Each phase delivers working functionality | - **Incremental delivery**: Each phase delivers working functionality | ||||||
| @@ -171,7 +171,7 @@ Both `bzzz-agent` and `bzzz-hap` will share: | |||||||
| ## 📈 Success Metrics | ## 📈 Success Metrics | ||||||
|  |  | ||||||
| ### Phase 1 Success | ### Phase 1 Success | ||||||
| - [ ] `make build` produces both `bzzz-agent` and `bzzz-hap` binaries | - [ ] `make build` produces both `chorus-agent` and `chorus-hap` binaries | ||||||
| - [ ] Existing autonomous agent functionality unchanged | - [ ] Existing autonomous agent functionality unchanged | ||||||
| - [ ] Both binaries can join same P2P mesh | - [ ] Both binaries can join same P2P mesh | ||||||
|  |  | ||||||
| @@ -217,7 +217,7 @@ Both `bzzz-agent` and `bzzz-hap` will share: | |||||||
|  |  | ||||||
| ## 📚 Resources & References | ## 📚 Resources & References | ||||||
|  |  | ||||||
| - **Original HAP Plan**: `archive/bzzz_hap_dev_plan.md` | - **Original HAP Plan**: `archive/chorus_hap_dev_plan.md` | ||||||
| - **Current Architecture**: `pkg/` directory structure | - **Current Architecture**: `pkg/` directory structure | ||||||
| - **P2P Infrastructure**: `p2p/`, `pubsub/`, `pkg/dht/` | - **P2P Infrastructure**: `p2p/`, `pubsub/`, `pkg/dht/` | ||||||
| - **Agent Identity**: `pkg/agentid/`, `pkg/crypto/` | - **Agent Identity**: `pkg/agentid/`, `pkg/crypto/` | ||||||
| @@ -225,4 +225,4 @@ Both `bzzz-agent` and `bzzz-hap` will share: | |||||||
| - **Context System**: `pkg/ucxl/`, `pkg/ucxi/` | - **Context System**: `pkg/ucxl/`, `pkg/ucxi/` | ||||||
| - **Configuration**: `pkg/config/`, role definitions | - **Configuration**: `pkg/config/`, role definitions | ||||||
|  |  | ||||||
| The current BZZZ implementation provides an excellent foundation for the HAP vision. The primary challenge is architectural restructuring rather than building new functionality from scratch. | The current CHORUS implementation provides an excellent foundation for the HAP vision. The primary challenge is architectural restructuring rather than building new functionality from scratch. | ||||||
|   | |||||||
| @@ -1018,9 +1018,9 @@ func (s *SetupManager) executeSudoCommand(client *ssh.Client, password string, c | |||||||
| 		// SECURITY: Use here-document to avoid password exposure in process list | 		// SECURITY: Use here-document to avoid password exposure in process list | ||||||
| 		// This keeps the password out of command line arguments and process lists | 		// This keeps the password out of command line arguments and process lists | ||||||
| 		escapedPassword := strings.ReplaceAll(password, "'", "'\"'\"'") | 		escapedPassword := strings.ReplaceAll(password, "'", "'\"'\"'") | ||||||
| 		secureCommand := fmt.Sprintf(`sudo -S %s <<'BZZZ_EOF' | 		secureCommand := fmt.Sprintf(`sudo -S %s <<'CHORUS_EOF' | ||||||
| %s | %s | ||||||
| BZZZ_EOF`, safeCommand, escapedPassword) | CHORUS_EOF`, safeCommand, escapedPassword) | ||||||
| 		 | 		 | ||||||
| 		return s.executeSSHCommand(client, secureCommand) | 		return s.executeSSHCommand(client, secureCommand) | ||||||
| 	} else { | 	} else { | ||||||
| @@ -1977,7 +1977,7 @@ github: | |||||||
|  |  | ||||||
| p2p: | p2p: | ||||||
|   service_tag: "CHORUS-peer-discovery" |   service_tag: "CHORUS-peer-discovery" | ||||||
|   bzzz_topic: "CHORUS/coordination/v1" |   chorus_topic: "CHORUS/coordination/v1" | ||||||
|   hmmm_topic: "hmmm/meta-discussion/v1" |   hmmm_topic: "hmmm/meta-discussion/v1" | ||||||
|   discovery_timeout: 10s |   discovery_timeout: 10s | ||||||
|   escalation_webhook: "https://n8n.home.deepblack.cloud/webhook-test/human-escalation" |   escalation_webhook: "https://n8n.home.deepblack.cloud/webhook-test/human-escalation" | ||||||
| @@ -2160,7 +2160,7 @@ github: | |||||||
|  |  | ||||||
| p2p: | p2p: | ||||||
|   service_tag: "CHORUS-peer-discovery" |   service_tag: "CHORUS-peer-discovery" | ||||||
|   bzzz_topic: "CHORUS/coordination/v1" |   chorus_topic: "CHORUS/coordination/v1" | ||||||
|   hmmm_topic: "hmmm/meta-discussion/v1" |   hmmm_topic: "hmmm/meta-discussion/v1" | ||||||
|   discovery_timeout: 10s |   discovery_timeout: 10s | ||||||
|   escalation_webhook: "" |   escalation_webhook: "" | ||||||
|   | |||||||
| @@ -131,9 +131,9 @@ func WithPubsub(enabled bool) Option { | |||||||
| } | } | ||||||
|  |  | ||||||
| // WithTopics sets the Bzzz and HMMM topic names | // WithTopics sets the Bzzz and HMMM topic names | ||||||
| func WithTopics(bzzzTopic, hmmmTopic string) Option { | func WithTopics(chorusTopic, hmmmTopic string) Option { | ||||||
| 	return func(c *Config) { | 	return func(c *Config) { | ||||||
| 		c.BzzzTopic = bzzzTopic | 		c.BzzzTopic = chorusTopic | ||||||
| 		c.HmmmTopic = hmmmTopic | 		c.HmmmTopic = hmmmTopic | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -241,13 +241,13 @@ func TestConfig_GetBootstrapPeers(t *testing.T) { | |||||||
|  |  | ||||||
| func TestConfigWithEnvironmentOverrides(t *testing.T) { | func TestConfigWithEnvironmentOverrides(t *testing.T) { | ||||||
| 	// Set environment variables | 	// Set environment variables | ||||||
| 	os.Setenv("BZZZ_AGENT_ID", "env-test-agent") | 	os.Setenv("CHORUS_AGENT_ID", "env-test-agent") | ||||||
| 	os.Setenv("BZZZ_P2P_PORT", "9999") | 	os.Setenv("CHORUS_P2P_PORT", "9999") | ||||||
| 	os.Setenv("BZZZ_ENCRYPTION_ENABLED", "false") | 	os.Setenv("CHORUS_ENCRYPTION_ENABLED", "false") | ||||||
| 	defer func() { | 	defer func() { | ||||||
| 		os.Unsetenv("BZZZ_AGENT_ID") | 		os.Unsetenv("CHORUS_AGENT_ID") | ||||||
| 		os.Unsetenv("BZZZ_P2P_PORT") | 		os.Unsetenv("CHORUS_P2P_PORT") | ||||||
| 		os.Unsetenv("BZZZ_ENCRYPTION_ENABLED") | 		os.Unsetenv("CHORUS_ENCRYPTION_ENABLED") | ||||||
| 	}() | 	}() | ||||||
|  |  | ||||||
| 	cfg := DefaultConfig() | 	cfg := DefaultConfig() | ||||||
|   | |||||||
| @@ -24,34 +24,34 @@ type HybridConfig struct { | |||||||
| } | } | ||||||
|  |  | ||||||
| type HybridDHTConfig struct { | type HybridDHTConfig struct { | ||||||
| 	Backend             string        `env:"BZZZ_DHT_BACKEND" default:"mock" json:"backend" yaml:"backend"` | 	Backend             string        `env:"CHORUS_DHT_BACKEND" default:"mock" json:"backend" yaml:"backend"` | ||||||
| 	BootstrapNodes      []string      `env:"BZZZ_DHT_BOOTSTRAP_NODES" json:"bootstrap_nodes" yaml:"bootstrap_nodes"` | 	BootstrapNodes      []string      `env:"CHORUS_DHT_BOOTSTRAP_NODES" json:"bootstrap_nodes" yaml:"bootstrap_nodes"` | ||||||
| 	FallbackOnError     bool          `env:"BZZZ_FALLBACK_ON_ERROR" default:"true" json:"fallback_on_error" yaml:"fallback_on_error"` | 	FallbackOnError     bool          `env:"CHORUS_FALLBACK_ON_ERROR" default:"true" json:"fallback_on_error" yaml:"fallback_on_error"` | ||||||
| 	HealthCheckInterval time.Duration `env:"BZZZ_HEALTH_CHECK_INTERVAL" default:"30s" json:"health_check_interval" yaml:"health_check_interval"` | 	HealthCheckInterval time.Duration `env:"CHORUS_HEALTH_CHECK_INTERVAL" default:"30s" json:"health_check_interval" yaml:"health_check_interval"` | ||||||
| 	MaxRetries          int           `env:"BZZZ_DHT_MAX_RETRIES" default:"3" json:"max_retries" yaml:"max_retries"` | 	MaxRetries          int           `env:"CHORUS_DHT_MAX_RETRIES" default:"3" json:"max_retries" yaml:"max_retries"` | ||||||
| 	RetryBackoff        time.Duration `env:"BZZZ_DHT_RETRY_BACKOFF" default:"1s" json:"retry_backoff" yaml:"retry_backoff"` | 	RetryBackoff        time.Duration `env:"CHORUS_DHT_RETRY_BACKOFF" default:"1s" json:"retry_backoff" yaml:"retry_backoff"` | ||||||
| 	OperationTimeout    time.Duration `env:"BZZZ_DHT_OPERATION_TIMEOUT" default:"10s" json:"operation_timeout" yaml:"operation_timeout"` | 	OperationTimeout    time.Duration `env:"CHORUS_DHT_OPERATION_TIMEOUT" default:"10s" json:"operation_timeout" yaml:"operation_timeout"` | ||||||
| } | } | ||||||
|  |  | ||||||
| type HybridUCXLConfig struct { | type HybridUCXLConfig struct { | ||||||
| 	CacheEnabled       bool          `env:"BZZZ_UCXL_CACHE_ENABLED" default:"true" json:"cache_enabled" yaml:"cache_enabled"` | 	CacheEnabled       bool          `env:"CHORUS_UCXL_CACHE_ENABLED" default:"true" json:"cache_enabled" yaml:"cache_enabled"` | ||||||
| 	CacheTTL          time.Duration `env:"BZZZ_UCXL_CACHE_TTL" default:"5m" json:"cache_ttl" yaml:"cache_ttl"` | 	CacheTTL          time.Duration `env:"CHORUS_UCXL_CACHE_TTL" default:"5m" json:"cache_ttl" yaml:"cache_ttl"` | ||||||
| 	UseDistributed    bool          `env:"BZZZ_UCXL_USE_DISTRIBUTED" default:"false" json:"use_distributed" yaml:"use_distributed"` | 	UseDistributed    bool          `env:"CHORUS_UCXL_USE_DISTRIBUTED" default:"false" json:"use_distributed" yaml:"use_distributed"` | ||||||
| 	MaxCacheSize      int           `env:"BZZZ_UCXL_MAX_CACHE_SIZE" default:"10000" json:"max_cache_size" yaml:"max_cache_size"` | 	MaxCacheSize      int           `env:"CHORUS_UCXL_MAX_CACHE_SIZE" default:"10000" json:"max_cache_size" yaml:"max_cache_size"` | ||||||
| } | } | ||||||
|  |  | ||||||
| type DiscoveryConfig struct { | type DiscoveryConfig struct { | ||||||
| 	MDNSEnabled       bool          `env:"BZZZ_MDNS_ENABLED" default:"true" json:"mdns_enabled" yaml:"mdns_enabled"` | 	MDNSEnabled       bool          `env:"CHORUS_MDNS_ENABLED" default:"true" json:"mdns_enabled" yaml:"mdns_enabled"` | ||||||
| 	DHTDiscovery      bool          `env:"BZZZ_DHT_DISCOVERY" default:"false" json:"dht_discovery" yaml:"dht_discovery"` | 	DHTDiscovery      bool          `env:"CHORUS_DHT_DISCOVERY" default:"false" json:"dht_discovery" yaml:"dht_discovery"` | ||||||
| 	AnnounceInterval  time.Duration `env:"BZZZ_ANNOUNCE_INTERVAL" default:"30s" json:"announce_interval" yaml:"announce_interval"` | 	AnnounceInterval  time.Duration `env:"CHORUS_ANNOUNCE_INTERVAL" default:"30s" json:"announce_interval" yaml:"announce_interval"` | ||||||
| 	ServiceName       string        `env:"BZZZ_SERVICE_NAME" default:"CHORUS" json:"service_name" yaml:"service_name"` | 	ServiceName       string        `env:"CHORUS_SERVICE_NAME" default:"CHORUS" json:"service_name" yaml:"service_name"` | ||||||
| } | } | ||||||
|  |  | ||||||
| type MonitoringConfig struct { | type MonitoringConfig struct { | ||||||
| 	Enabled           bool          `env:"BZZZ_MONITORING_ENABLED" default:"true" json:"enabled" yaml:"enabled"` | 	Enabled           bool          `env:"CHORUS_MONITORING_ENABLED" default:"true" json:"enabled" yaml:"enabled"` | ||||||
| 	MetricsInterval   time.Duration `env:"BZZZ_METRICS_INTERVAL" default:"15s" json:"metrics_interval" yaml:"metrics_interval"` | 	MetricsInterval   time.Duration `env:"CHORUS_METRICS_INTERVAL" default:"15s" json:"metrics_interval" yaml:"metrics_interval"` | ||||||
| 	HealthEndpoint    string        `env:"BZZZ_HEALTH_ENDPOINT" default:"/health" json:"health_endpoint" yaml:"health_endpoint"` | 	HealthEndpoint    string        `env:"CHORUS_HEALTH_ENDPOINT" default:"/health" json:"health_endpoint" yaml:"health_endpoint"` | ||||||
| 	MetricsEndpoint   string        `env:"BZZZ_METRICS_ENDPOINT" default:"/metrics" json:"metrics_endpoint" yaml:"metrics_endpoint"` | 	MetricsEndpoint   string        `env:"CHORUS_METRICS_ENDPOINT" default:"/metrics" json:"metrics_endpoint" yaml:"metrics_endpoint"` | ||||||
| } | } | ||||||
|  |  | ||||||
| // LoadHybridConfig loads configuration from environment variables with defaults | // LoadHybridConfig loads configuration from environment variables with defaults | ||||||
| @@ -60,37 +60,37 @@ func LoadHybridConfig() (*HybridConfig, error) { | |||||||
| 	 | 	 | ||||||
| 	// Load DHT configuration | 	// Load DHT configuration | ||||||
| 	config.DHT = HybridDHTConfig{ | 	config.DHT = HybridDHTConfig{ | ||||||
| 		Backend:             getEnvString("BZZZ_DHT_BACKEND", "mock"), | 		Backend:             getEnvString("CHORUS_DHT_BACKEND", "mock"), | ||||||
| 		BootstrapNodes:      getEnvStringSlice("BZZZ_DHT_BOOTSTRAP_NODES", []string{}), | 		BootstrapNodes:      getEnvStringSlice("CHORUS_DHT_BOOTSTRAP_NODES", []string{}), | ||||||
| 		FallbackOnError:     getEnvBool("BZZZ_FALLBACK_ON_ERROR", true), | 		FallbackOnError:     getEnvBool("CHORUS_FALLBACK_ON_ERROR", true), | ||||||
| 		HealthCheckInterval: getEnvDuration("BZZZ_HEALTH_CHECK_INTERVAL", 30*time.Second), | 		HealthCheckInterval: getEnvDuration("CHORUS_HEALTH_CHECK_INTERVAL", 30*time.Second), | ||||||
| 		MaxRetries:          getEnvInt("BZZZ_DHT_MAX_RETRIES", 3), | 		MaxRetries:          getEnvInt("CHORUS_DHT_MAX_RETRIES", 3), | ||||||
| 		RetryBackoff:        getEnvDuration("BZZZ_DHT_RETRY_BACKOFF", 1*time.Second), | 		RetryBackoff:        getEnvDuration("CHORUS_DHT_RETRY_BACKOFF", 1*time.Second), | ||||||
| 		OperationTimeout:    getEnvDuration("BZZZ_DHT_OPERATION_TIMEOUT", 10*time.Second), | 		OperationTimeout:    getEnvDuration("CHORUS_DHT_OPERATION_TIMEOUT", 10*time.Second), | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Load UCXL configuration | 	// Load UCXL configuration | ||||||
| 	config.UCXL = HybridUCXLConfig{ | 	config.UCXL = HybridUCXLConfig{ | ||||||
| 		CacheEnabled:    getEnvBool("BZZZ_UCXL_CACHE_ENABLED", true), | 		CacheEnabled:    getEnvBool("CHORUS_UCXL_CACHE_ENABLED", true), | ||||||
| 		CacheTTL:        getEnvDuration("BZZZ_UCXL_CACHE_TTL", 5*time.Minute), | 		CacheTTL:        getEnvDuration("CHORUS_UCXL_CACHE_TTL", 5*time.Minute), | ||||||
| 		UseDistributed:  getEnvBool("BZZZ_UCXL_USE_DISTRIBUTED", false), | 		UseDistributed:  getEnvBool("CHORUS_UCXL_USE_DISTRIBUTED", false), | ||||||
| 		MaxCacheSize:    getEnvInt("BZZZ_UCXL_MAX_CACHE_SIZE", 10000), | 		MaxCacheSize:    getEnvInt("CHORUS_UCXL_MAX_CACHE_SIZE", 10000), | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Load Discovery configuration | 	// Load Discovery configuration | ||||||
| 	config.Discovery = DiscoveryConfig{ | 	config.Discovery = DiscoveryConfig{ | ||||||
| 		MDNSEnabled:      getEnvBool("BZZZ_MDNS_ENABLED", true), | 		MDNSEnabled:      getEnvBool("CHORUS_MDNS_ENABLED", true), | ||||||
| 		DHTDiscovery:     getEnvBool("BZZZ_DHT_DISCOVERY", false), | 		DHTDiscovery:     getEnvBool("CHORUS_DHT_DISCOVERY", false), | ||||||
| 		AnnounceInterval: getEnvDuration("BZZZ_ANNOUNCE_INTERVAL", 30*time.Second), | 		AnnounceInterval: getEnvDuration("CHORUS_ANNOUNCE_INTERVAL", 30*time.Second), | ||||||
| 		ServiceName:      getEnvString("BZZZ_SERVICE_NAME", "CHORUS"), | 		ServiceName:      getEnvString("CHORUS_SERVICE_NAME", "CHORUS"), | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Load Monitoring configuration | 	// Load Monitoring configuration | ||||||
| 	config.Monitoring = MonitoringConfig{ | 	config.Monitoring = MonitoringConfig{ | ||||||
| 		Enabled:         getEnvBool("BZZZ_MONITORING_ENABLED", true), | 		Enabled:         getEnvBool("CHORUS_MONITORING_ENABLED", true), | ||||||
| 		MetricsInterval: getEnvDuration("BZZZ_METRICS_INTERVAL", 15*time.Second), | 		MetricsInterval: getEnvDuration("CHORUS_METRICS_INTERVAL", 15*time.Second), | ||||||
| 		HealthEndpoint:  getEnvString("BZZZ_HEALTH_ENDPOINT", "/health"), | 		HealthEndpoint:  getEnvString("CHORUS_HEALTH_ENDPOINT", "/health"), | ||||||
| 		MetricsEndpoint: getEnvString("BZZZ_METRICS_ENDPOINT", "/metrics"), | 		MetricsEndpoint: getEnvString("CHORUS_METRICS_ENDPOINT", "/metrics"), | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Validate configuration | 	// Validate configuration | ||||||
|   | |||||||
| @@ -606,9 +606,9 @@ services: | |||||||
|   CHORUS-crypto: |   CHORUS-crypto: | ||||||
|     image: CHORUS/crypto-service:latest |     image: CHORUS/crypto-service:latest | ||||||
|     environment: |     environment: | ||||||
|       - BZZZ_CONFIG_PATH=/etc/CHORUS/config.yaml |       - CHORUS_CONFIG_PATH=/etc/CHORUS/config.yaml | ||||||
|       - BZZZ_LOG_LEVEL=info |       - CHORUS_LOG_LEVEL=info | ||||||
|       - BZZZ_AUDIT_STORAGE=postgresql |       - CHORUS_AUDIT_STORAGE=postgresql | ||||||
|     volumes: |     volumes: | ||||||
|       - ./config:/etc/CHORUS |       - ./config:/etc/CHORUS | ||||||
|       - ./logs:/var/log/CHORUS |       - ./logs:/var/log/CHORUS | ||||||
| @@ -621,7 +621,7 @@ services: | |||||||
|   postgresql: |   postgresql: | ||||||
|     image: postgres:13 |     image: postgres:13 | ||||||
|     environment: |     environment: | ||||||
|       - POSTGRES_DB=bzzz_audit |       - POSTGRES_DB=chorus_audit | ||||||
|       - POSTGRES_USER=CHORUS |       - POSTGRES_USER=CHORUS | ||||||
|       - POSTGRES_PASSWORD_FILE=/run/secrets/db_password |       - POSTGRES_PASSWORD_FILE=/run/secrets/db_password | ||||||
|     volumes: |     volumes: | ||||||
| @@ -676,9 +676,9 @@ spec: | |||||||
|         - containerPort: 8443 |         - containerPort: 8443 | ||||||
|           name: https |           name: https | ||||||
|         env: |         env: | ||||||
|         - name: BZZZ_CONFIG_PATH |         - name: CHORUS_CONFIG_PATH | ||||||
|           value: "/etc/CHORUS/config.yaml" |           value: "/etc/CHORUS/config.yaml" | ||||||
|         - name: BZZZ_LOG_LEVEL |         - name: CHORUS_LOG_LEVEL | ||||||
|           value: "info" |           value: "info" | ||||||
|         volumeMounts: |         volumeMounts: | ||||||
|         - name: config |         - name: config | ||||||
| @@ -761,7 +761,7 @@ key_integrity_status{role="backend_developer",status="valid"} | |||||||
| ```yaml | ```yaml | ||||||
| # Prometheus alerting rules | # Prometheus alerting rules | ||||||
| groups: | groups: | ||||||
| - name: bzzz_crypto_security | - name: chorus_crypto_security | ||||||
|   rules: |   rules: | ||||||
|   - alert: HighSecurityRiskAccess |   - alert: HighSecurityRiskAccess | ||||||
|     expr: security_risk_score > 0.8 |     expr: security_risk_score > 0.8 | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ import ( | |||||||
| // TestSecurityConfig tests SecurityConfig enforcement | // TestSecurityConfig tests SecurityConfig enforcement | ||||||
| func TestSecurityConfig(t *testing.T) { | func TestSecurityConfig(t *testing.T) { | ||||||
| 	// Create temporary audit log file | 	// Create temporary audit log file | ||||||
| 	tmpDir, err := ioutil.TempDir("", "bzzz_security_test") | 	tmpDir, err := ioutil.TempDir("", "chorus_security_test") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		t.Fatalf("Failed to create temp dir: %v", err) | 		t.Fatalf("Failed to create temp dir: %v", err) | ||||||
| 	} | 	} | ||||||
| @@ -259,7 +259,7 @@ func TestDHTSecurityIntegration(t *testing.T) { | |||||||
|  |  | ||||||
| // TestAuditLogging tests comprehensive audit logging | // TestAuditLogging tests comprehensive audit logging | ||||||
| func TestAuditLogging(t *testing.T) { | func TestAuditLogging(t *testing.T) { | ||||||
| 	tmpDir, err := ioutil.TempDir("", "bzzz_audit_test") | 	tmpDir, err := ioutil.TempDir("", "chorus_audit_test") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		t.Fatalf("Failed to create temp dir: %v", err) | 		t.Fatalf("Failed to create temp dir: %v", err) | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -445,24 +445,24 @@ func (s *McpServer) callTool(params map[string]interface{}) (map[string]interfac | |||||||
| 	args, _ := params["arguments"].(map[string]interface{}) | 	args, _ := params["arguments"].(map[string]interface{}) | ||||||
| 	 | 	 | ||||||
| 	switch toolName { | 	switch toolName { | ||||||
| 	case "bzzz_announce": | 	case "chorus_announce": | ||||||
| 		return s.handleBzzzAnnounce(args) | 		return s.handleBzzzAnnounce(args) | ||||||
| 	case "bzzz_lookup": | 	case "chorus_lookup": | ||||||
| 		return s.handleBzzzLookup(args) | 		return s.handleBzzzLookup(args) | ||||||
| 	case "bzzz_get": | 	case "chorus_get": | ||||||
| 		return s.handleBzzzGet(args) | 		return s.handleBzzzGet(args) | ||||||
| 	case "bzzz_post": | 	case "chorus_post": | ||||||
| 		return s.handleBzzzPost(args) | 		return s.handleBzzzPost(args) | ||||||
| 	case "bzzz_thread": | 	case "chorus_thread": | ||||||
| 		return s.handleBzzzThread(args) | 		return s.handleBzzzThread(args) | ||||||
| 	case "bzzz_subscribe": | 	case "chorus_subscribe": | ||||||
| 		return s.handleBzzzSubscribe(args) | 		return s.handleBzzzSubscribe(args) | ||||||
| 	default: | 	default: | ||||||
| 		return nil, fmt.Errorf("unknown tool: %s", toolName) | 		return nil, fmt.Errorf("unknown tool: %s", toolName) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| // handleBzzzAnnounce implements the bzzz_announce tool | // handleBzzzAnnounce implements the chorus_announce tool | ||||||
| func (s *McpServer) handleBzzzAnnounce(args map[string]interface{}) (map[string]interface{}, error) { | func (s *McpServer) handleBzzzAnnounce(args map[string]interface{}) (map[string]interface{}, error) { | ||||||
| 	agentID, ok := args["agent_id"].(string) | 	agentID, ok := args["agent_id"].(string) | ||||||
| 	if !ok { | 	if !ok { | ||||||
|   | |||||||
| @@ -13,8 +13,8 @@ import ( | |||||||
| 	"github.com/prometheus/client_golang/prometheus/promauto" | 	"github.com/prometheus/client_golang/prometheus/promauto" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // BZZZMetrics provides comprehensive Prometheus metrics for the CHORUS system | // CHORUSMetrics provides comprehensive Prometheus metrics for the CHORUS system | ||||||
| type BZZZMetrics struct { | type CHORUSMetrics struct { | ||||||
| 	registry       *prometheus.Registry | 	registry       *prometheus.Registry | ||||||
| 	httpServer     *http.Server | 	httpServer     *http.Server | ||||||
| 	 | 	 | ||||||
| @@ -138,15 +138,15 @@ func DefaultMetricsConfig() *MetricsConfig { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| // NewBZZZMetrics creates a new metrics collector | // NewCHORUSMetrics creates a new metrics collector | ||||||
| func NewBZZZMetrics(config *MetricsConfig) *BZZZMetrics { | func NewCHORUSMetrics(config *MetricsConfig) *CHORUSMetrics { | ||||||
| 	if config == nil { | 	if config == nil { | ||||||
| 		config = DefaultMetricsConfig() | 		config = DefaultMetricsConfig() | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	registry := prometheus.NewRegistry() | 	registry := prometheus.NewRegistry() | ||||||
| 	 | 	 | ||||||
| 	metrics := &BZZZMetrics{ | 	metrics := &CHORUSMetrics{ | ||||||
| 		registry:  registry, | 		registry:  registry, | ||||||
| 		startTime: time.Now(), | 		startTime: time.Now(), | ||||||
| 	} | 	} | ||||||
| @@ -161,11 +161,11 @@ func NewBZZZMetrics(config *MetricsConfig) *BZZZMetrics { | |||||||
| } | } | ||||||
|  |  | ||||||
| // initializeMetrics initializes all Prometheus metrics | // initializeMetrics initializes all Prometheus metrics | ||||||
| func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | func (m *CHORUSMetrics) initializeMetrics(config *MetricsConfig) { | ||||||
| 	// System metrics | 	// System metrics | ||||||
| 	m.systemInfo = promauto.NewGaugeVec( | 	m.systemInfo = promauto.NewGaugeVec( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_system_info", | 			Name: "chorus_system_info", | ||||||
| 			Help: "System information", | 			Help: "System information", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"node_id", "version", "go_version", "cluster", "environment"}, | 		[]string{"node_id", "version", "go_version", "cluster", "environment"}, | ||||||
| @@ -173,7 +173,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.uptime = promauto.NewGauge( | 	m.uptime = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_uptime_seconds", | 			Name: "chorus_uptime_seconds", | ||||||
| 			Help: "System uptime in seconds", | 			Help: "System uptime in seconds", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| @@ -181,14 +181,14 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	// P2P metrics | 	// P2P metrics | ||||||
| 	m.p2pConnectedPeers = promauto.NewGauge( | 	m.p2pConnectedPeers = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_p2p_connected_peers", | 			Name: "chorus_p2p_connected_peers", | ||||||
| 			Help: "Number of connected P2P peers", | 			Help: "Number of connected P2P peers", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.p2pMessagesSent = promauto.NewCounterVec( | 	m.p2pMessagesSent = promauto.NewCounterVec( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_p2p_messages_sent_total", | 			Name: "chorus_p2p_messages_sent_total", | ||||||
| 			Help: "Total number of P2P messages sent", | 			Help: "Total number of P2P messages sent", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"message_type", "peer_id"}, | 		[]string{"message_type", "peer_id"}, | ||||||
| @@ -196,7 +196,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.p2pMessagesReceived = promauto.NewCounterVec( | 	m.p2pMessagesReceived = promauto.NewCounterVec( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_p2p_messages_received_total", | 			Name: "chorus_p2p_messages_received_total", | ||||||
| 			Help: "Total number of P2P messages received", | 			Help: "Total number of P2P messages received", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"message_type", "peer_id"}, | 		[]string{"message_type", "peer_id"}, | ||||||
| @@ -204,7 +204,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.p2pMessageLatency = promauto.NewHistogramVec( | 	m.p2pMessageLatency = promauto.NewHistogramVec( | ||||||
| 		prometheus.HistogramOpts{ | 		prometheus.HistogramOpts{ | ||||||
| 			Name:    "bzzz_p2p_message_latency_seconds", | 			Name:    "chorus_p2p_message_latency_seconds", | ||||||
| 			Help:    "P2P message round-trip latency", | 			Help:    "P2P message round-trip latency", | ||||||
| 			Buckets: config.LatencyBuckets, | 			Buckets: config.LatencyBuckets, | ||||||
| 		}, | 		}, | ||||||
| @@ -214,7 +214,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	// DHT metrics | 	// DHT metrics | ||||||
| 	m.dhtPutOperations = promauto.NewCounterVec( | 	m.dhtPutOperations = promauto.NewCounterVec( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_dht_put_operations_total", | 			Name: "chorus_dht_put_operations_total", | ||||||
| 			Help: "Total number of DHT put operations", | 			Help: "Total number of DHT put operations", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"status"}, | 		[]string{"status"}, | ||||||
| @@ -222,7 +222,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.dhtGetOperations = promauto.NewCounterVec( | 	m.dhtGetOperations = promauto.NewCounterVec( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_dht_get_operations_total", | 			Name: "chorus_dht_get_operations_total", | ||||||
| 			Help: "Total number of DHT get operations", | 			Help: "Total number of DHT get operations", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"status"}, | 		[]string{"status"}, | ||||||
| @@ -230,7 +230,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.dhtOperationLatency = promauto.NewHistogramVec( | 	m.dhtOperationLatency = promauto.NewHistogramVec( | ||||||
| 		prometheus.HistogramOpts{ | 		prometheus.HistogramOpts{ | ||||||
| 			Name:    "bzzz_dht_operation_latency_seconds", | 			Name:    "chorus_dht_operation_latency_seconds", | ||||||
| 			Help:    "DHT operation latency", | 			Help:    "DHT operation latency", | ||||||
| 			Buckets: config.LatencyBuckets, | 			Buckets: config.LatencyBuckets, | ||||||
| 		}, | 		}, | ||||||
| @@ -239,21 +239,21 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.dhtProviderRecords = promauto.NewGauge( | 	m.dhtProviderRecords = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_dht_provider_records", | 			Name: "chorus_dht_provider_records", | ||||||
| 			Help: "Number of DHT provider records", | 			Help: "Number of DHT provider records", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.dhtContentKeys = promauto.NewGauge( | 	m.dhtContentKeys = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_dht_content_keys", | 			Name: "chorus_dht_content_keys", | ||||||
| 			Help: "Number of DHT content keys", | 			Help: "Number of DHT content keys", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.dhtReplicationFactor = promauto.NewGaugeVec( | 	m.dhtReplicationFactor = promauto.NewGaugeVec( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_dht_replication_factor", | 			Name: "chorus_dht_replication_factor", | ||||||
| 			Help: "DHT replication factor by key", | 			Help: "DHT replication factor by key", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"key_hash"}, | 		[]string{"key_hash"}, | ||||||
| @@ -262,14 +262,14 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	// PubSub metrics | 	// PubSub metrics | ||||||
| 	m.pubsubTopics = promauto.NewGauge( | 	m.pubsubTopics = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_pubsub_topics", | 			Name: "chorus_pubsub_topics", | ||||||
| 			Help: "Number of active PubSub topics", | 			Help: "Number of active PubSub topics", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.pubsubMessages = promauto.NewCounterVec( | 	m.pubsubMessages = promauto.NewCounterVec( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_pubsub_messages_total", | 			Name: "chorus_pubsub_messages_total", | ||||||
| 			Help: "Total number of PubSub messages", | 			Help: "Total number of PubSub messages", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"topic", "direction", "message_type"}, | 		[]string{"topic", "direction", "message_type"}, | ||||||
| @@ -277,7 +277,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.pubsubMessageLatency = promauto.NewHistogramVec( | 	m.pubsubMessageLatency = promauto.NewHistogramVec( | ||||||
| 		prometheus.HistogramOpts{ | 		prometheus.HistogramOpts{ | ||||||
| 			Name:    "bzzz_pubsub_message_latency_seconds", | 			Name:    "chorus_pubsub_message_latency_seconds", | ||||||
| 			Help:    "PubSub message latency", | 			Help:    "PubSub message latency", | ||||||
| 			Buckets: config.LatencyBuckets, | 			Buckets: config.LatencyBuckets, | ||||||
| 		}, | 		}, | ||||||
| @@ -287,14 +287,14 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	// Election metrics | 	// Election metrics | ||||||
| 	m.electionTerm = promauto.NewGauge( | 	m.electionTerm = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_election_term", | 			Name: "chorus_election_term", | ||||||
| 			Help: "Current election term", | 			Help: "Current election term", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.electionState = promauto.NewGaugeVec( | 	m.electionState = promauto.NewGaugeVec( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_election_state", | 			Name: "chorus_election_state", | ||||||
| 			Help: "Current election state (1 for active state)", | 			Help: "Current election state (1 for active state)", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"state"}, | 		[]string{"state"}, | ||||||
| @@ -302,21 +302,21 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.heartbeatsSent = promauto.NewCounter( | 	m.heartbeatsSent = promauto.NewCounter( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_heartbeats_sent_total", | 			Name: "chorus_heartbeats_sent_total", | ||||||
| 			Help: "Total number of heartbeats sent", | 			Help: "Total number of heartbeats sent", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.heartbeatsReceived = promauto.NewCounter( | 	m.heartbeatsReceived = promauto.NewCounter( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_heartbeats_received_total", | 			Name: "chorus_heartbeats_received_total", | ||||||
| 			Help: "Total number of heartbeats received", | 			Help: "Total number of heartbeats received", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.leadershipChanges = promauto.NewCounter( | 	m.leadershipChanges = promauto.NewCounter( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_leadership_changes_total", | 			Name: "chorus_leadership_changes_total", | ||||||
| 			Help: "Total number of leadership changes", | 			Help: "Total number of leadership changes", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| @@ -324,7 +324,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	// Health metrics | 	// Health metrics | ||||||
| 	m.healthChecksPassed = promauto.NewCounterVec( | 	m.healthChecksPassed = promauto.NewCounterVec( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_health_checks_passed_total", | 			Name: "chorus_health_checks_passed_total", | ||||||
| 			Help: "Total number of health checks passed", | 			Help: "Total number of health checks passed", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"check_name"}, | 		[]string{"check_name"}, | ||||||
| @@ -332,7 +332,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.healthChecksFailed = promauto.NewCounterVec( | 	m.healthChecksFailed = promauto.NewCounterVec( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_health_checks_failed_total", | 			Name: "chorus_health_checks_failed_total", | ||||||
| 			Help: "Total number of health checks failed", | 			Help: "Total number of health checks failed", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"check_name", "reason"}, | 		[]string{"check_name", "reason"}, | ||||||
| @@ -340,14 +340,14 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.systemHealthScore = promauto.NewGauge( | 	m.systemHealthScore = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_system_health_score", | 			Name: "chorus_system_health_score", | ||||||
| 			Help: "Overall system health score (0-1)", | 			Help: "Overall system health score (0-1)", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.componentHealthScore = promauto.NewGaugeVec( | 	m.componentHealthScore = promauto.NewGaugeVec( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_component_health_score", | 			Name: "chorus_component_health_score", | ||||||
| 			Help: "Component health score (0-1)", | 			Help: "Component health score (0-1)", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"component"}, | 		[]string{"component"}, | ||||||
| @@ -356,21 +356,21 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	// Task metrics | 	// Task metrics | ||||||
| 	m.tasksActive = promauto.NewGauge( | 	m.tasksActive = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_tasks_active", | 			Name: "chorus_tasks_active", | ||||||
| 			Help: "Number of active tasks", | 			Help: "Number of active tasks", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.tasksQueued = promauto.NewGauge( | 	m.tasksQueued = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_tasks_queued", | 			Name: "chorus_tasks_queued", | ||||||
| 			Help: "Number of queued tasks", | 			Help: "Number of queued tasks", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.tasksCompleted = promauto.NewCounterVec( | 	m.tasksCompleted = promauto.NewCounterVec( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_tasks_completed_total", | 			Name: "chorus_tasks_completed_total", | ||||||
| 			Help: "Total number of completed tasks", | 			Help: "Total number of completed tasks", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"status", "task_type"}, | 		[]string{"status", "task_type"}, | ||||||
| @@ -378,7 +378,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.taskDuration = promauto.NewHistogramVec( | 	m.taskDuration = promauto.NewHistogramVec( | ||||||
| 		prometheus.HistogramOpts{ | 		prometheus.HistogramOpts{ | ||||||
| 			Name:    "bzzz_task_duration_seconds", | 			Name:    "chorus_task_duration_seconds", | ||||||
| 			Help:    "Task execution duration", | 			Help:    "Task execution duration", | ||||||
| 			Buckets: config.LatencyBuckets, | 			Buckets: config.LatencyBuckets, | ||||||
| 		}, | 		}, | ||||||
| @@ -388,7 +388,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	// SLURP metrics | 	// SLURP metrics | ||||||
| 	m.slurpGenerated = promauto.NewCounterVec( | 	m.slurpGenerated = promauto.NewCounterVec( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_slurp_contexts_generated_total", | 			Name: "chorus_slurp_contexts_generated_total", | ||||||
| 			Help: "Total number of contexts generated by SLURP", | 			Help: "Total number of contexts generated by SLURP", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"role", "status"}, | 		[]string{"role", "status"}, | ||||||
| @@ -396,7 +396,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.slurpGenerationTime = promauto.NewHistogram( | 	m.slurpGenerationTime = promauto.NewHistogram( | ||||||
| 		prometheus.HistogramOpts{ | 		prometheus.HistogramOpts{ | ||||||
| 			Name:    "bzzz_slurp_generation_time_seconds", | 			Name:    "chorus_slurp_generation_time_seconds", | ||||||
| 			Help:    "SLURP context generation time", | 			Help:    "SLURP context generation time", | ||||||
| 			Buckets: []float64{0.1, 0.5, 1.0, 2.0, 5.0, 10.0, 30.0, 60.0, 120.0}, | 			Buckets: []float64{0.1, 0.5, 1.0, 2.0, 5.0, 10.0, 30.0, 60.0, 120.0}, | ||||||
| 		}, | 		}, | ||||||
| @@ -404,7 +404,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.slurpQueueLength = promauto.NewGauge( | 	m.slurpQueueLength = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_slurp_queue_length", | 			Name: "chorus_slurp_queue_length", | ||||||
| 			Help: "Length of SLURP generation queue", | 			Help: "Length of SLURP generation queue", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| @@ -412,7 +412,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	// UCXI metrics | 	// UCXI metrics | ||||||
| 	m.ucxiRequests = promauto.NewCounterVec( | 	m.ucxiRequests = promauto.NewCounterVec( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_ucxi_requests_total", | 			Name: "chorus_ucxi_requests_total", | ||||||
| 			Help: "Total number of UCXI requests", | 			Help: "Total number of UCXI requests", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"method", "status"}, | 		[]string{"method", "status"}, | ||||||
| @@ -420,7 +420,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.ucxiResolutionLatency = promauto.NewHistogram( | 	m.ucxiResolutionLatency = promauto.NewHistogram( | ||||||
| 		prometheus.HistogramOpts{ | 		prometheus.HistogramOpts{ | ||||||
| 			Name:    "bzzz_ucxi_resolution_latency_seconds", | 			Name:    "chorus_ucxi_resolution_latency_seconds", | ||||||
| 			Help:    "UCXI address resolution latency", | 			Help:    "UCXI address resolution latency", | ||||||
| 			Buckets: config.LatencyBuckets, | 			Buckets: config.LatencyBuckets, | ||||||
| 		}, | 		}, | ||||||
| @@ -429,21 +429,21 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	// Resource metrics | 	// Resource metrics | ||||||
| 	m.cpuUsage = promauto.NewGauge( | 	m.cpuUsage = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_cpu_usage_ratio", | 			Name: "chorus_cpu_usage_ratio", | ||||||
| 			Help: "CPU usage ratio (0-1)", | 			Help: "CPU usage ratio (0-1)", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.memoryUsage = promauto.NewGauge( | 	m.memoryUsage = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_memory_usage_bytes", | 			Name: "chorus_memory_usage_bytes", | ||||||
| 			Help: "Memory usage in bytes", | 			Help: "Memory usage in bytes", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| 	 | 	 | ||||||
| 	m.diskUsage = promauto.NewGaugeVec( | 	m.diskUsage = promauto.NewGaugeVec( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_disk_usage_ratio", | 			Name: "chorus_disk_usage_ratio", | ||||||
| 			Help: "Disk usage ratio (0-1)", | 			Help: "Disk usage ratio (0-1)", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"mount_point"}, | 		[]string{"mount_point"}, | ||||||
| @@ -451,7 +451,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.goroutines = promauto.NewGauge( | 	m.goroutines = promauto.NewGauge( | ||||||
| 		prometheus.GaugeOpts{ | 		prometheus.GaugeOpts{ | ||||||
| 			Name: "bzzz_goroutines", | 			Name: "chorus_goroutines", | ||||||
| 			Help: "Number of goroutines", | 			Help: "Number of goroutines", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| @@ -459,7 +459,7 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	// Error metrics | 	// Error metrics | ||||||
| 	m.errors = promauto.NewCounterVec( | 	m.errors = promauto.NewCounterVec( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_errors_total", | 			Name: "chorus_errors_total", | ||||||
| 			Help: "Total number of errors", | 			Help: "Total number of errors", | ||||||
| 		}, | 		}, | ||||||
| 		[]string{"component", "error_type"}, | 		[]string{"component", "error_type"}, | ||||||
| @@ -467,20 +467,20 @@ func (m *BZZZMetrics) initializeMetrics(config *MetricsConfig) { | |||||||
| 	 | 	 | ||||||
| 	m.panics = promauto.NewCounter( | 	m.panics = promauto.NewCounter( | ||||||
| 		prometheus.CounterOpts{ | 		prometheus.CounterOpts{ | ||||||
| 			Name: "bzzz_panics_total", | 			Name: "chorus_panics_total", | ||||||
| 			Help: "Total number of panics", | 			Help: "Total number of panics", | ||||||
| 		}, | 		}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
| // registerMetrics registers all metrics with the registry | // registerMetrics registers all metrics with the registry | ||||||
| func (m *BZZZMetrics) registerMetrics() { | func (m *CHORUSMetrics) registerMetrics() { | ||||||
| 	// All metrics are auto-registered with the default registry | 	// All metrics are auto-registered with the default registry | ||||||
| 	// For custom registry, we would need to register manually | 	// For custom registry, we would need to register manually | ||||||
| } | } | ||||||
|  |  | ||||||
| // StartServer starts the Prometheus metrics HTTP server | // StartServer starts the Prometheus metrics HTTP server | ||||||
| func (m *BZZZMetrics) StartServer(config *MetricsConfig) error { | func (m *CHORUSMetrics) StartServer(config *MetricsConfig) error { | ||||||
| 	mux := http.NewServeMux() | 	mux := http.NewServeMux() | ||||||
| 	 | 	 | ||||||
| 	// Use custom registry | 	// Use custom registry | ||||||
| @@ -511,7 +511,7 @@ func (m *BZZZMetrics) StartServer(config *MetricsConfig) error { | |||||||
| } | } | ||||||
|  |  | ||||||
| // StopServer stops the metrics HTTP server | // StopServer stops the metrics HTTP server | ||||||
| func (m *BZZZMetrics) StopServer() error { | func (m *CHORUSMetrics) StopServer() error { | ||||||
| 	if m.httpServer != nil { | 	if m.httpServer != nil { | ||||||
| 		ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) | 		ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) | ||||||
| 		defer cancel() | 		defer cancel() | ||||||
| @@ -522,69 +522,69 @@ func (m *BZZZMetrics) StopServer() error { | |||||||
|  |  | ||||||
| // P2P Metrics Methods | // P2P Metrics Methods | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetConnectedPeers(count int) { | func (m *CHORUSMetrics) SetConnectedPeers(count int) { | ||||||
| 	m.p2pConnectedPeers.Set(float64(count)) | 	m.p2pConnectedPeers.Set(float64(count)) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementMessagesSent(messageType, peerID string) { | func (m *CHORUSMetrics) IncrementMessagesSent(messageType, peerID string) { | ||||||
| 	m.p2pMessagesSent.WithLabelValues(messageType, peerID).Inc() | 	m.p2pMessagesSent.WithLabelValues(messageType, peerID).Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementMessagesReceived(messageType, peerID string) { | func (m *CHORUSMetrics) IncrementMessagesReceived(messageType, peerID string) { | ||||||
| 	m.p2pMessagesReceived.WithLabelValues(messageType, peerID).Inc() | 	m.p2pMessagesReceived.WithLabelValues(messageType, peerID).Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) ObserveMessageLatency(messageType string, latency time.Duration) { | func (m *CHORUSMetrics) ObserveMessageLatency(messageType string, latency time.Duration) { | ||||||
| 	m.p2pMessageLatency.WithLabelValues(messageType).Observe(latency.Seconds()) | 	m.p2pMessageLatency.WithLabelValues(messageType).Observe(latency.Seconds()) | ||||||
| } | } | ||||||
|  |  | ||||||
| // DHT Metrics Methods | // DHT Metrics Methods | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementDHTPutOperations(status string) { | func (m *CHORUSMetrics) IncrementDHTPutOperations(status string) { | ||||||
| 	m.dhtPutOperations.WithLabelValues(status).Inc() | 	m.dhtPutOperations.WithLabelValues(status).Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementDHTGetOperations(status string) { | func (m *CHORUSMetrics) IncrementDHTGetOperations(status string) { | ||||||
| 	m.dhtGetOperations.WithLabelValues(status).Inc() | 	m.dhtGetOperations.WithLabelValues(status).Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) ObserveDHTOperationLatency(operation, status string, latency time.Duration) { | func (m *CHORUSMetrics) ObserveDHTOperationLatency(operation, status string, latency time.Duration) { | ||||||
| 	m.dhtOperationLatency.WithLabelValues(operation, status).Observe(latency.Seconds()) | 	m.dhtOperationLatency.WithLabelValues(operation, status).Observe(latency.Seconds()) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetDHTProviderRecords(count int) { | func (m *CHORUSMetrics) SetDHTProviderRecords(count int) { | ||||||
| 	m.dhtProviderRecords.Set(float64(count)) | 	m.dhtProviderRecords.Set(float64(count)) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetDHTContentKeys(count int) { | func (m *CHORUSMetrics) SetDHTContentKeys(count int) { | ||||||
| 	m.dhtContentKeys.Set(float64(count)) | 	m.dhtContentKeys.Set(float64(count)) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetDHTReplicationFactor(keyHash string, factor float64) { | func (m *CHORUSMetrics) SetDHTReplicationFactor(keyHash string, factor float64) { | ||||||
| 	m.dhtReplicationFactor.WithLabelValues(keyHash).Set(factor) | 	m.dhtReplicationFactor.WithLabelValues(keyHash).Set(factor) | ||||||
| } | } | ||||||
|  |  | ||||||
| // PubSub Metrics Methods | // PubSub Metrics Methods | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetPubSubTopics(count int) { | func (m *CHORUSMetrics) SetPubSubTopics(count int) { | ||||||
| 	m.pubsubTopics.Set(float64(count)) | 	m.pubsubTopics.Set(float64(count)) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementPubSubMessages(topic, direction, messageType string) { | func (m *CHORUSMetrics) IncrementPubSubMessages(topic, direction, messageType string) { | ||||||
| 	m.pubsubMessages.WithLabelValues(topic, direction, messageType).Inc() | 	m.pubsubMessages.WithLabelValues(topic, direction, messageType).Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) ObservePubSubMessageLatency(topic string, latency time.Duration) { | func (m *CHORUSMetrics) ObservePubSubMessageLatency(topic string, latency time.Duration) { | ||||||
| 	m.pubsubMessageLatency.WithLabelValues(topic).Observe(latency.Seconds()) | 	m.pubsubMessageLatency.WithLabelValues(topic).Observe(latency.Seconds()) | ||||||
| } | } | ||||||
|  |  | ||||||
| // Election Metrics Methods | // Election Metrics Methods | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetElectionTerm(term int) { | func (m *CHORUSMetrics) SetElectionTerm(term int) { | ||||||
| 	m.electionTerm.Set(float64(term)) | 	m.electionTerm.Set(float64(term)) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetElectionState(state string) { | func (m *CHORUSMetrics) SetElectionState(state string) { | ||||||
| 	// Reset all state gauges | 	// Reset all state gauges | ||||||
| 	states := []string{"idle", "discovering", "electing", "reconstructing", "complete"} | 	states := []string{"idle", "discovering", "electing", "reconstructing", "complete"} | ||||||
| 	for _, s := range states { | 	for _, s := range states { | ||||||
| @@ -594,118 +594,118 @@ func (m *BZZZMetrics) SetElectionState(state string) { | |||||||
| 	m.electionState.WithLabelValues(state).Set(1) | 	m.electionState.WithLabelValues(state).Set(1) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementHeartbeatsSent() { | func (m *CHORUSMetrics) IncrementHeartbeatsSent() { | ||||||
| 	m.heartbeatsSent.Inc() | 	m.heartbeatsSent.Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementHeartbeatsReceived() { | func (m *CHORUSMetrics) IncrementHeartbeatsReceived() { | ||||||
| 	m.heartbeatsReceived.Inc() | 	m.heartbeatsReceived.Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementLeadershipChanges() { | func (m *CHORUSMetrics) IncrementLeadershipChanges() { | ||||||
| 	m.leadershipChanges.Inc() | 	m.leadershipChanges.Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| // Health Metrics Methods | // Health Metrics Methods | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementHealthCheckPassed(checkName string) { | func (m *CHORUSMetrics) IncrementHealthCheckPassed(checkName string) { | ||||||
| 	m.healthChecksPassed.WithLabelValues(checkName).Inc() | 	m.healthChecksPassed.WithLabelValues(checkName).Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementHealthCheckFailed(checkName, reason string) { | func (m *CHORUSMetrics) IncrementHealthCheckFailed(checkName, reason string) { | ||||||
| 	m.healthChecksFailed.WithLabelValues(checkName, reason).Inc() | 	m.healthChecksFailed.WithLabelValues(checkName, reason).Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetSystemHealthScore(score float64) { | func (m *CHORUSMetrics) SetSystemHealthScore(score float64) { | ||||||
| 	m.systemHealthScore.Set(score) | 	m.systemHealthScore.Set(score) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetComponentHealthScore(component string, score float64) { | func (m *CHORUSMetrics) SetComponentHealthScore(component string, score float64) { | ||||||
| 	m.componentHealthScore.WithLabelValues(component).Set(score) | 	m.componentHealthScore.WithLabelValues(component).Set(score) | ||||||
| } | } | ||||||
|  |  | ||||||
| // Task Metrics Methods | // Task Metrics Methods | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetActiveTasks(count int) { | func (m *CHORUSMetrics) SetActiveTasks(count int) { | ||||||
| 	m.tasksActive.Set(float64(count)) | 	m.tasksActive.Set(float64(count)) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetQueuedTasks(count int) { | func (m *CHORUSMetrics) SetQueuedTasks(count int) { | ||||||
| 	m.tasksQueued.Set(float64(count)) | 	m.tasksQueued.Set(float64(count)) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementTasksCompleted(status, taskType string) { | func (m *CHORUSMetrics) IncrementTasksCompleted(status, taskType string) { | ||||||
| 	m.tasksCompleted.WithLabelValues(status, taskType).Inc() | 	m.tasksCompleted.WithLabelValues(status, taskType).Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) ObserveTaskDuration(taskType, status string, duration time.Duration) { | func (m *CHORUSMetrics) ObserveTaskDuration(taskType, status string, duration time.Duration) { | ||||||
| 	m.taskDuration.WithLabelValues(taskType, status).Observe(duration.Seconds()) | 	m.taskDuration.WithLabelValues(taskType, status).Observe(duration.Seconds()) | ||||||
| } | } | ||||||
|  |  | ||||||
| // SLURP Metrics Methods | // SLURP Metrics Methods | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementSLURPGenerated(role, status string) { | func (m *CHORUSMetrics) IncrementSLURPGenerated(role, status string) { | ||||||
| 	m.slurpGenerated.WithLabelValues(role, status).Inc() | 	m.slurpGenerated.WithLabelValues(role, status).Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) ObserveSLURPGenerationTime(duration time.Duration) { | func (m *CHORUSMetrics) ObserveSLURPGenerationTime(duration time.Duration) { | ||||||
| 	m.slurpGenerationTime.Observe(duration.Seconds()) | 	m.slurpGenerationTime.Observe(duration.Seconds()) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetSLURPQueueLength(length int) { | func (m *CHORUSMetrics) SetSLURPQueueLength(length int) { | ||||||
| 	m.slurpQueueLength.Set(float64(length)) | 	m.slurpQueueLength.Set(float64(length)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // UCXI Metrics Methods | // UCXI Metrics Methods | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementUCXIRequests(method, status string) { | func (m *CHORUSMetrics) IncrementUCXIRequests(method, status string) { | ||||||
| 	m.ucxiRequests.WithLabelValues(method, status).Inc() | 	m.ucxiRequests.WithLabelValues(method, status).Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) ObserveUCXIResolutionLatency(latency time.Duration) { | func (m *CHORUSMetrics) ObserveUCXIResolutionLatency(latency time.Duration) { | ||||||
| 	m.ucxiResolutionLatency.Observe(latency.Seconds()) | 	m.ucxiResolutionLatency.Observe(latency.Seconds()) | ||||||
| } | } | ||||||
|  |  | ||||||
| // Resource Metrics Methods | // Resource Metrics Methods | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetCPUUsage(usage float64) { | func (m *CHORUSMetrics) SetCPUUsage(usage float64) { | ||||||
| 	m.cpuUsage.Set(usage) | 	m.cpuUsage.Set(usage) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetMemoryUsage(usage float64) { | func (m *CHORUSMetrics) SetMemoryUsage(usage float64) { | ||||||
| 	m.memoryUsage.Set(usage) | 	m.memoryUsage.Set(usage) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetDiskUsage(mountPoint string, usage float64) { | func (m *CHORUSMetrics) SetDiskUsage(mountPoint string, usage float64) { | ||||||
| 	m.diskUsage.WithLabelValues(mountPoint).Set(usage) | 	m.diskUsage.WithLabelValues(mountPoint).Set(usage) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) SetGoroutines(count int) { | func (m *CHORUSMetrics) SetGoroutines(count int) { | ||||||
| 	m.goroutines.Set(float64(count)) | 	m.goroutines.Set(float64(count)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // Error Metrics Methods | // Error Metrics Methods | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementErrors(component, errorType string) { | func (m *CHORUSMetrics) IncrementErrors(component, errorType string) { | ||||||
| 	m.errors.WithLabelValues(component, errorType).Inc() | 	m.errors.WithLabelValues(component, errorType).Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) IncrementPanics() { | func (m *CHORUSMetrics) IncrementPanics() { | ||||||
| 	m.panics.Inc() | 	m.panics.Inc() | ||||||
| } | } | ||||||
|  |  | ||||||
| // System Metrics Methods | // System Metrics Methods | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) UpdateSystemInfo(nodeID, version, goVersion, cluster, environment string) { | func (m *CHORUSMetrics) UpdateSystemInfo(nodeID, version, goVersion, cluster, environment string) { | ||||||
| 	m.systemInfo.WithLabelValues(nodeID, version, goVersion, cluster, environment).Set(1) | 	m.systemInfo.WithLabelValues(nodeID, version, goVersion, cluster, environment).Set(1) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *BZZZMetrics) UpdateUptime() { | func (m *CHORUSMetrics) UpdateUptime() { | ||||||
| 	m.uptime.Set(time.Since(m.startTime).Seconds()) | 	m.uptime.Set(time.Since(m.startTime).Seconds()) | ||||||
| } | } | ||||||
|  |  | ||||||
| // CollectMetrics starts background metric collection | // CollectMetrics starts background metric collection | ||||||
| func (m *BZZZMetrics) CollectMetrics(config *MetricsConfig) { | func (m *CHORUSMetrics) CollectMetrics(config *MetricsConfig) { | ||||||
| 	systemTicker := time.NewTicker(config.SystemMetricsInterval) | 	systemTicker := time.NewTicker(config.SystemMetricsInterval) | ||||||
| 	resourceTicker := time.NewTicker(config.ResourceMetricsInterval) | 	resourceTicker := time.NewTicker(config.ResourceMetricsInterval) | ||||||
| 	 | 	 | ||||||
|   | |||||||
| @@ -49,7 +49,7 @@ var ( | |||||||
| 	pathPattern    = regexp.MustCompile(`^/[a-zA-Z0-9\-_/\.]*$|^$`) | 	pathPattern    = regexp.MustCompile(`^/[a-zA-Z0-9\-_/\.]*$|^$`) | ||||||
| 	 | 	 | ||||||
| 	// Full URI pattern for validation | 	// Full URI pattern for validation | ||||||
| 	bzzzURIPattern = regexp.MustCompile(`^CHORUS://([a-zA-Z0-9\-_*]|any):([a-zA-Z0-9\-_*]|any)@([a-zA-Z0-9\-_*]|any):([a-zA-Z0-9\-_*]|any)(/[a-zA-Z0-9\-_/\.]*)?(\?[^#]*)?(\#.*)?$`) | 	chorusURIPattern = regexp.MustCompile(`^CHORUS://([a-zA-Z0-9\-_*]|any):([a-zA-Z0-9\-_*]|any)@([a-zA-Z0-9\-_*]|any):([a-zA-Z0-9\-_*]|any)(/[a-zA-Z0-9\-_/\.]*)?(\?[^#]*)?(\#.*)?$`) | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // ParseBzzzURI parses a CHORUS:// URI string into a BzzzURI struct | // ParseBzzzURI parses a CHORUS:// URI string into a BzzzURI struct | ||||||
| @@ -104,7 +104,7 @@ func ParseBzzzURI(uri string) (*BzzzURI, error) { | |||||||
| 	task := parts[1] | 	task := parts[1] | ||||||
| 	 | 	 | ||||||
| 	// Create BzzzURI instance | 	// Create BzzzURI instance | ||||||
| 	bzzzURI := &BzzzURI{ | 	chorusURI := &BzzzURI{ | ||||||
| 		Agent:    agent, | 		Agent:    agent, | ||||||
| 		Role:     role, | 		Role:     role, | ||||||
| 		Project:  project, | 		Project:  project, | ||||||
| @@ -116,11 +116,11 @@ func ParseBzzzURI(uri string) (*BzzzURI, error) { | |||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Validate components | 	// Validate components | ||||||
| 	if err := bzzzURI.Validate(); err != nil { | 	if err := chorusURI.Validate(); err != nil { | ||||||
| 		return nil, fmt.Errorf("validation failed: %w", err) | 		return nil, fmt.Errorf("validation failed: %w", err) | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	return bzzzURI, nil | 	return chorusURI, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| // Validate validates all components of the BzzzURI | // Validate validates all components of the BzzzURI | ||||||
| @@ -298,7 +298,7 @@ func ValidateBzzzURIString(uri string) error { | |||||||
| 		return fmt.Errorf("empty URI") | 		return fmt.Errorf("empty URI") | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	if !bzzzURIPattern.MatchString(uri) { | 	if !chorusURIPattern.MatchString(uri) { | ||||||
| 		return fmt.Errorf("invalid CHORUS:// URI format") | 		return fmt.Errorf("invalid CHORUS:// URI format") | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
|   | |||||||
| @@ -579,146 +579,146 @@ func (cfg *SLURPLeaderConfig) GetEffectiveConfig() *SLURPLeaderConfig { | |||||||
| 	return &effective | 	return &effective | ||||||
| } | } | ||||||
|  |  | ||||||
| // ToBaseBZZZConfig converts SLURP leader config to base CHORUS config format | // ToBaseCHORUSConfig converts SLURP leader config to base CHORUS config format | ||||||
| func (cfg *SLURPLeaderConfig) ToBaseBZZZConfig() *config.Config { | func (cfg *SLURPLeaderConfig) ToBaseCHORUSConfig() *config.Config { | ||||||
| 	// TODO: Convert to base CHORUS config structure | 	// TODO: Convert to base CHORUS config structure | ||||||
| 	// This would map SLURP-specific configuration to the existing | 	// This would map SLURP-specific configuration to the existing | ||||||
| 	// CHORUS configuration structure for compatibility | 	// CHORUS configuration structure for compatibility | ||||||
| 	 | 	 | ||||||
| 	bzzzConfig := &config.Config{ | 	chorusConfig := &config.Config{ | ||||||
| 		// Map core settings | 		// Map core settings | ||||||
| 		// Map agent settings | 		// Map agent settings | ||||||
| 		// Map security settings | 		// Map security settings | ||||||
| 		// etc. | 		// etc. | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	return bzzzConfig | 	return chorusConfig | ||||||
| } | } | ||||||
|  |  | ||||||
| // overrideWithEnvironment applies environment variable overrides to configuration | // overrideWithEnvironment applies environment variable overrides to configuration | ||||||
| func overrideWithEnvironment(cfg *SLURPLeaderConfig) error { | func overrideWithEnvironment(cfg *SLURPLeaderConfig) error { | ||||||
| 	// Core configuration overrides | 	// Core configuration overrides | ||||||
| 	if val := os.Getenv("BZZZ_NODE_ID"); val != "" { | 	if val := os.Getenv("CHORUS_NODE_ID"); val != "" { | ||||||
| 		cfg.Core.NodeID = val | 		cfg.Core.NodeID = val | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_CLUSTER_ID"); val != "" { | 	if val := os.Getenv("CHORUS_CLUSTER_ID"); val != "" { | ||||||
| 		cfg.Core.ClusterID = val | 		cfg.Core.ClusterID = val | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_DATA_DIRECTORY"); val != "" { | 	if val := os.Getenv("CHORUS_DATA_DIRECTORY"); val != "" { | ||||||
| 		cfg.Core.DataDirectory = val | 		cfg.Core.DataDirectory = val | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_LISTEN_ADDRESS"); val != "" { | 	if val := os.Getenv("CHORUS_LISTEN_ADDRESS"); val != "" { | ||||||
| 		cfg.Core.ListenAddress = val | 		cfg.Core.ListenAddress = val | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_ADVERTISE_ADDRESS"); val != "" { | 	if val := os.Getenv("CHORUS_ADVERTISE_ADDRESS"); val != "" { | ||||||
| 		cfg.Core.AdvertiseAddress = val | 		cfg.Core.AdvertiseAddress = val | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_DEBUG_MODE"); val != "" { | 	if val := os.Getenv("CHORUS_DEBUG_MODE"); val != "" { | ||||||
| 		if debug, err := strconv.ParseBool(val); err == nil { | 		if debug, err := strconv.ParseBool(val); err == nil { | ||||||
| 			cfg.Core.DebugMode = debug | 			cfg.Core.DebugMode = debug | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_VERBOSE_LOGGING"); val != "" { | 	if val := os.Getenv("CHORUS_VERBOSE_LOGGING"); val != "" { | ||||||
| 		if verbose, err := strconv.ParseBool(val); err == nil { | 		if verbose, err := strconv.ParseBool(val); err == nil { | ||||||
| 			cfg.Core.VerboseLogging = verbose | 			cfg.Core.VerboseLogging = verbose | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Capabilities override | 	// Capabilities override | ||||||
| 	if val := os.Getenv("BZZZ_CAPABILITIES"); val != "" { | 	if val := os.Getenv("CHORUS_CAPABILITIES"); val != "" { | ||||||
| 		cfg.Core.Capabilities = strings.Split(val, ",") | 		cfg.Core.Capabilities = strings.Split(val, ",") | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_PROJECT_MANAGER_ENABLED"); val != "" { | 	if val := os.Getenv("CHORUS_PROJECT_MANAGER_ENABLED"); val != "" { | ||||||
| 		if enabled, err := strconv.ParseBool(val); err == nil { | 		if enabled, err := strconv.ParseBool(val); err == nil { | ||||||
| 			cfg.Core.ProjectManagerEnabled = enabled | 			cfg.Core.ProjectManagerEnabled = enabled | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_CONTEXT_CURATION_ENABLED"); val != "" { | 	if val := os.Getenv("CHORUS_CONTEXT_CURATION_ENABLED"); val != "" { | ||||||
| 		if enabled, err := strconv.ParseBool(val); err == nil { | 		if enabled, err := strconv.ParseBool(val); err == nil { | ||||||
| 			cfg.Core.ContextCurationEnabled = enabled | 			cfg.Core.ContextCurationEnabled = enabled | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Election configuration overrides | 	// Election configuration overrides | ||||||
| 	if val := os.Getenv("BZZZ_ELECTION_TIMEOUT"); val != "" { | 	if val := os.Getenv("CHORUS_ELECTION_TIMEOUT"); val != "" { | ||||||
| 		if duration, err := time.ParseDuration(val); err == nil { | 		if duration, err := time.ParseDuration(val); err == nil { | ||||||
| 			cfg.Election.ElectionTimeout = duration | 			cfg.Election.ElectionTimeout = duration | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_HEARTBEAT_INTERVAL"); val != "" { | 	if val := os.Getenv("CHORUS_HEARTBEAT_INTERVAL"); val != "" { | ||||||
| 		if duration, err := time.ParseDuration(val); err == nil { | 		if duration, err := time.ParseDuration(val); err == nil { | ||||||
| 			cfg.Election.HeartbeatInterval = duration | 			cfg.Election.HeartbeatInterval = duration | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_HEARTBEAT_TIMEOUT"); val != "" { | 	if val := os.Getenv("CHORUS_HEARTBEAT_TIMEOUT"); val != "" { | ||||||
| 		if duration, err := time.ParseDuration(val); err == nil { | 		if duration, err := time.ParseDuration(val); err == nil { | ||||||
| 			cfg.Election.HeartbeatTimeout = duration | 			cfg.Election.HeartbeatTimeout = duration | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_MIN_QUORUM_SIZE"); val != "" { | 	if val := os.Getenv("CHORUS_MIN_QUORUM_SIZE"); val != "" { | ||||||
| 		if size, err := strconv.Atoi(val); err == nil { | 		if size, err := strconv.Atoi(val); err == nil { | ||||||
| 			cfg.Election.MinQuorumSize = size | 			cfg.Election.MinQuorumSize = size | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_REQUIRE_QUORUM"); val != "" { | 	if val := os.Getenv("CHORUS_REQUIRE_QUORUM"); val != "" { | ||||||
| 		if require, err := strconv.ParseBool(val); err == nil { | 		if require, err := strconv.ParseBool(val); err == nil { | ||||||
| 			cfg.Election.RequireQuorum = require | 			cfg.Election.RequireQuorum = require | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Context management configuration overrides | 	// Context management configuration overrides | ||||||
| 	if val := os.Getenv("BZZZ_MAX_CONCURRENT_GENERATION"); val != "" { | 	if val := os.Getenv("CHORUS_MAX_CONCURRENT_GENERATION"); val != "" { | ||||||
| 		if max, err := strconv.Atoi(val); err == nil { | 		if max, err := strconv.Atoi(val); err == nil { | ||||||
| 			cfg.ContextManagement.MaxConcurrentGeneration = max | 			cfg.ContextManagement.MaxConcurrentGeneration = max | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_GENERATION_TIMEOUT"); val != "" { | 	if val := os.Getenv("CHORUS_GENERATION_TIMEOUT"); val != "" { | ||||||
| 		if duration, err := time.ParseDuration(val); err == nil { | 		if duration, err := time.ParseDuration(val); err == nil { | ||||||
| 			cfg.ContextManagement.GenerationTimeout = duration | 			cfg.ContextManagement.GenerationTimeout = duration | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_CONTEXT_CACHE_SIZE"); val != "" { | 	if val := os.Getenv("CHORUS_CONTEXT_CACHE_SIZE"); val != "" { | ||||||
| 		if size, err := strconv.Atoi(val); err == nil { | 		if size, err := strconv.Atoi(val); err == nil { | ||||||
| 			cfg.ContextManagement.ContextCacheSize = size | 			cfg.ContextManagement.ContextCacheSize = size | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Health monitoring overrides | 	// Health monitoring overrides | ||||||
| 	if val := os.Getenv("BZZZ_HEALTH_CHECK_INTERVAL"); val != "" { | 	if val := os.Getenv("CHORUS_HEALTH_CHECK_INTERVAL"); val != "" { | ||||||
| 		if duration, err := time.ParseDuration(val); err == nil { | 		if duration, err := time.ParseDuration(val); err == nil { | ||||||
| 			cfg.Health.HealthCheckInterval = duration | 			cfg.Health.HealthCheckInterval = duration | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_HEALTH_CHECK_TIMEOUT"); val != "" { | 	if val := os.Getenv("CHORUS_HEALTH_CHECK_TIMEOUT"); val != "" { | ||||||
| 		if duration, err := time.ParseDuration(val); err == nil { | 		if duration, err := time.ParseDuration(val); err == nil { | ||||||
| 			cfg.Health.HealthCheckTimeout = duration | 			cfg.Health.HealthCheckTimeout = duration | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Performance overrides | 	// Performance overrides | ||||||
| 	if val := os.Getenv("BZZZ_WORKER_POOL_SIZE"); val != "" { | 	if val := os.Getenv("CHORUS_WORKER_POOL_SIZE"); val != "" { | ||||||
| 		if size, err := strconv.Atoi(val); err == nil { | 		if size, err := strconv.Atoi(val); err == nil { | ||||||
| 			cfg.Performance.WorkerPoolSize = size | 			cfg.Performance.WorkerPoolSize = size | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_QUEUE_BUFFER_SIZE"); val != "" { | 	if val := os.Getenv("CHORUS_QUEUE_BUFFER_SIZE"); val != "" { | ||||||
| 		if size, err := strconv.Atoi(val); err == nil { | 		if size, err := strconv.Atoi(val); err == nil { | ||||||
| 			cfg.Performance.QueueBufferSize = size | 			cfg.Performance.QueueBufferSize = size | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	// Observability overrides | 	// Observability overrides | ||||||
| 	if val := os.Getenv("BZZZ_METRICS_ENABLED"); val != "" { | 	if val := os.Getenv("CHORUS_METRICS_ENABLED"); val != "" { | ||||||
| 		if enabled, err := strconv.ParseBool(val); err == nil { | 		if enabled, err := strconv.ParseBool(val); err == nil { | ||||||
| 			cfg.Observability.MetricsEnabled = enabled | 			cfg.Observability.MetricsEnabled = enabled | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_METRICS_PORT"); val != "" { | 	if val := os.Getenv("CHORUS_METRICS_PORT"); val != "" { | ||||||
| 		if port, err := strconv.Atoi(val); err == nil { | 		if port, err := strconv.Atoi(val); err == nil { | ||||||
| 			cfg.Observability.MetricsPort = port | 			cfg.Observability.MetricsPort = port | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if val := os.Getenv("BZZZ_LOG_LEVEL"); val != "" { | 	if val := os.Getenv("CHORUS_LOG_LEVEL"); val != "" { | ||||||
| 		cfg.Observability.LogLevel = val | 		cfg.Observability.LogLevel = val | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ type EnhancedLeaderManager struct { | |||||||
| 	 | 	 | ||||||
| 	// Enhanced components | 	// Enhanced components | ||||||
| 	healthMonitor     *SLURPHealthMonitor | 	healthMonitor     *SLURPHealthMonitor | ||||||
| 	metricsCollector  *metrics.BZZZMetrics | 	metricsCollector  *metrics.CHORUSMetrics | ||||||
| 	leadershipHistory *LeadershipHistory | 	leadershipHistory *LeadershipHistory | ||||||
| 	 | 	 | ||||||
| 	// Lifecycle management | 	// Lifecycle management | ||||||
| @@ -269,7 +269,7 @@ func NewEnhancedLeaderManager( | |||||||
| 	intelligence intelligence.IntelligenceEngine, | 	intelligence intelligence.IntelligenceEngine, | ||||||
| 	storage storage.ContextStore, | 	storage storage.ContextStore, | ||||||
| 	resolver slurpContext.ContextResolver, | 	resolver slurpContext.ContextResolver, | ||||||
| 	metricsCollector *metrics.BZZZMetrics, | 	metricsCollector *metrics.CHORUSMetrics, | ||||||
| 	config *EnhancedManagerConfig, | 	config *EnhancedManagerConfig, | ||||||
| ) *EnhancedLeaderManager { | ) *EnhancedLeaderManager { | ||||||
| 	if config == nil { | 	if config == nil { | ||||||
|   | |||||||
| @@ -283,7 +283,7 @@ func (sys *SLURPLeaderSystem) initializeElectionSystem(ctx context.Context) erro | |||||||
| 	sys.logger.Debug("Initializing election system") | 	sys.logger.Debug("Initializing election system") | ||||||
| 	 | 	 | ||||||
| 	// Convert to base CHORUS config | 	// Convert to base CHORUS config | ||||||
| 	bzzzConfig := sys.config.ToBaseBZZZConfig() | 	chorusConfig := sys.config.ToBaseCHORUSConfig() | ||||||
| 	 | 	 | ||||||
| 	// Create SLURP election configuration | 	// Create SLURP election configuration | ||||||
| 	slurpElectionConfig := &election.SLURPElectionConfig{ | 	slurpElectionConfig := &election.SLURPElectionConfig{ | ||||||
| @@ -311,7 +311,7 @@ func (sys *SLURPLeaderSystem) initializeElectionSystem(ctx context.Context) erro | |||||||
| 	// Create SLURP election manager | 	// Create SLURP election manager | ||||||
| 	sys.slurpElection = election.NewSLURPElectionManager( | 	sys.slurpElection = election.NewSLURPElectionManager( | ||||||
| 		ctx, | 		ctx, | ||||||
| 		bzzzConfig, | 		chorusConfig, | ||||||
| 		sys.host, | 		sys.host, | ||||||
| 		sys.pubsub, | 		sys.pubsub, | ||||||
| 		sys.nodeID, | 		sys.nodeID, | ||||||
|   | |||||||
| @@ -839,7 +839,7 @@ func (s *Server) getCollaborationStatus() map[string]interface{} { | |||||||
| 		}, | 		}, | ||||||
| 		"pubsub": map[string]interface{}{ | 		"pubsub": map[string]interface{}{ | ||||||
| 			"topics": map[string]interface{}{ | 			"topics": map[string]interface{}{ | ||||||
| 				"bzzz_coordination": "CHORUS/coordination/v1", | 				"chorus_coordination": "CHORUS/coordination/v1", | ||||||
| 				"hmmm_meta_discussion": "hmmm/meta-discussion/v1", | 				"hmmm_meta_discussion": "hmmm/meta-discussion/v1", | ||||||
| 				"context_feedback": "CHORUS/context-feedback/v1", | 				"context_feedback": "CHORUS/context-feedback/v1", | ||||||
| 			}, | 			}, | ||||||
|   | |||||||
| @@ -21,12 +21,12 @@ type PubSub struct { | |||||||
| 	cancel context.CancelFunc | 	cancel context.CancelFunc | ||||||
| 	 | 	 | ||||||
| 	// Topic subscriptions | 	// Topic subscriptions | ||||||
| 	bzzzTopic     *pubsub.Topic | 	chorusTopic     *pubsub.Topic | ||||||
| 	hmmmTopic     *pubsub.Topic | 	hmmmTopic     *pubsub.Topic | ||||||
| 	contextTopic  *pubsub.Topic | 	contextTopic  *pubsub.Topic | ||||||
| 	 | 	 | ||||||
| 	// Message subscriptions | 	// Message subscriptions | ||||||
| 	bzzzSub     *pubsub.Subscription | 	chorusSub     *pubsub.Subscription | ||||||
| 	hmmmSub       *pubsub.Subscription | 	hmmmSub       *pubsub.Subscription | ||||||
| 	contextSub  *pubsub.Subscription | 	contextSub  *pubsub.Subscription | ||||||
| 	 | 	 | ||||||
| @@ -37,7 +37,7 @@ type PubSub struct { | |||||||
| 	dynamicSubsMux   sync.RWMutex | 	dynamicSubsMux   sync.RWMutex | ||||||
|  |  | ||||||
| 	// Configuration | 	// Configuration | ||||||
| 	bzzzTopicName     string | 	chorusTopicName     string | ||||||
| 	hmmmTopicName     string | 	hmmmTopicName     string | ||||||
| 	contextTopicName  string | 	contextTopicName  string | ||||||
|  |  | ||||||
| @@ -121,14 +121,14 @@ type Message struct { | |||||||
| } | } | ||||||
|  |  | ||||||
| // NewPubSub creates a new PubSub instance for Bzzz coordination and HMMM meta-discussion | // NewPubSub creates a new PubSub instance for Bzzz coordination and HMMM meta-discussion | ||||||
| func NewPubSub(ctx context.Context, h host.Host, bzzzTopic, hmmmTopic string) (*PubSub, error) { | func NewPubSub(ctx context.Context, h host.Host, chorusTopic, hmmmTopic string) (*PubSub, error) { | ||||||
| 	return NewPubSubWithLogger(ctx, h, bzzzTopic, hmmmTopic, nil) | 	return NewPubSubWithLogger(ctx, h, chorusTopic, hmmmTopic, nil) | ||||||
| } | } | ||||||
|  |  | ||||||
| // NewPubSubWithLogger creates a new PubSub instance with hypercore logging | // NewPubSubWithLogger creates a new PubSub instance with hypercore logging | ||||||
| func NewPubSubWithLogger(ctx context.Context, h host.Host, bzzzTopic, hmmmTopic string, logger HypercoreLogger) (*PubSub, error) { | func NewPubSubWithLogger(ctx context.Context, h host.Host, chorusTopic, hmmmTopic string, logger HypercoreLogger) (*PubSub, error) { | ||||||
| 	if bzzzTopic == "" { | 	if chorusTopic == "" { | ||||||
| 		bzzzTopic = "CHORUS/coordination/v1" | 		chorusTopic = "CHORUS/coordination/v1" | ||||||
| 	} | 	} | ||||||
| 	if hmmmTopic == "" { | 	if hmmmTopic == "" { | ||||||
| 		hmmmTopic = "hmmm/meta-discussion/v1" | 		hmmmTopic = "hmmm/meta-discussion/v1" | ||||||
| @@ -154,7 +154,7 @@ func NewPubSubWithLogger(ctx context.Context, h host.Host, bzzzTopic, hmmmTopic | |||||||
| 		host:              h, | 		host:              h, | ||||||
| 		ctx:               pubsubCtx, | 		ctx:               pubsubCtx, | ||||||
| 		cancel:            cancel, | 		cancel:            cancel, | ||||||
| 		bzzzTopicName:    bzzzTopic, | 		chorusTopicName:    chorusTopic, | ||||||
| 		hmmmTopicName:    hmmmTopic, | 		hmmmTopicName:    hmmmTopic, | ||||||
| 		contextTopicName: contextTopic, | 		contextTopicName: contextTopic, | ||||||
| 		dynamicTopics:     make(map[string]*pubsub.Topic), | 		dynamicTopics:     make(map[string]*pubsub.Topic), | ||||||
| @@ -173,7 +173,7 @@ func NewPubSubWithLogger(ctx context.Context, h host.Host, bzzzTopic, hmmmTopic | |||||||
| 	go p.handleHmmmMessages() | 	go p.handleHmmmMessages() | ||||||
| 	go p.handleContextFeedbackMessages() | 	go p.handleContextFeedbackMessages() | ||||||
|  |  | ||||||
| 	fmt.Printf("📡 PubSub initialized - Bzzz: %s, HMMM: %s, Context: %s\n", bzzzTopic, hmmmTopic, contextTopic) | 	fmt.Printf("📡 PubSub initialized - Bzzz: %s, HMMM: %s, Context: %s\n", chorusTopic, hmmmTopic, contextTopic) | ||||||
| 	return p, nil | 	return p, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -190,17 +190,17 @@ func (p *PubSub) SetContextFeedbackHandler(handler func(msg Message, from peer.I | |||||||
| // joinStaticTopics joins the main Bzzz, HMMM, and Context Feedback topics | // joinStaticTopics joins the main Bzzz, HMMM, and Context Feedback topics | ||||||
| func (p *PubSub) joinStaticTopics() error { | func (p *PubSub) joinStaticTopics() error { | ||||||
| 	// Join Bzzz coordination topic | 	// Join Bzzz coordination topic | ||||||
| 	bzzzTopic, err := p.ps.Join(p.bzzzTopicName) | 	chorusTopic, err := p.ps.Join(p.chorusTopicName) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("failed to join Bzzz topic: %w", err) | 		return fmt.Errorf("failed to join Bzzz topic: %w", err) | ||||||
| 	} | 	} | ||||||
| 	p.bzzzTopic = bzzzTopic | 	p.chorusTopic = chorusTopic | ||||||
|  |  | ||||||
| 	bzzzSub, err := bzzzTopic.Subscribe() | 	chorusSub, err := chorusTopic.Subscribe() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("failed to subscribe to Bzzz topic: %w", err) | 		return fmt.Errorf("failed to subscribe to Bzzz topic: %w", err) | ||||||
| 	} | 	} | ||||||
| 	p.bzzzSub = bzzzSub | 	p.chorusSub = chorusSub | ||||||
|  |  | ||||||
| 	// Join HMMM meta-discussion topic | 	// Join HMMM meta-discussion topic | ||||||
| 	hmmmTopic, err := p.ps.Join(p.hmmmTopicName) | 	hmmmTopic, err := p.ps.Join(p.hmmmTopicName) | ||||||
| @@ -366,8 +366,8 @@ func (p *PubSub) PublishRaw(topicName string, payload []byte) error { | |||||||
|  |  | ||||||
|     // Static topics by name |     // Static topics by name | ||||||
|     switch topicName { |     switch topicName { | ||||||
|     case p.bzzzTopicName: |     case p.chorusTopicName: | ||||||
|         return p.bzzzTopic.Publish(p.ctx, payload) |         return p.chorusTopic.Publish(p.ctx, payload) | ||||||
|     case p.hmmmTopicName: |     case p.hmmmTopicName: | ||||||
|         return p.hmmmTopic.Publish(p.ctx, payload) |         return p.hmmmTopic.Publish(p.ctx, payload) | ||||||
|     case p.contextTopicName: |     case p.contextTopicName: | ||||||
| @@ -391,7 +391,7 @@ func (p *PubSub) PublishBzzzMessage(msgType MessageType, data map[string]interfa | |||||||
| 		return fmt.Errorf("failed to marshal message: %w", err) | 		return fmt.Errorf("failed to marshal message: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return p.bzzzTopic.Publish(p.ctx, msgBytes) | 	return p.chorusTopic.Publish(p.ctx, msgBytes) | ||||||
| } | } | ||||||
|  |  | ||||||
| // PublishHmmmMessage publishes a message to the HMMM meta-discussion topic | // PublishHmmmMessage publishes a message to the HMMM meta-discussion topic | ||||||
| @@ -468,7 +468,7 @@ func (p *PubSub) PublishRoleBasedMessage(msgType MessageType, data map[string]in | |||||||
| 		 ProjectUpdate, DeliverableReady: | 		 ProjectUpdate, DeliverableReady: | ||||||
| 		topic = p.hmmmTopic // Use HMMM topic for role-based messages | 		topic = p.hmmmTopic // Use HMMM topic for role-based messages | ||||||
| 	default: | 	default: | ||||||
| 		topic = p.bzzzTopic // Default to Bzzz topic | 		topic = p.chorusTopic // Default to Bzzz topic | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return topic.Publish(p.ctx, msgBytes) | 	return topic.Publish(p.ctx, msgBytes) | ||||||
| @@ -521,7 +521,7 @@ type MessageOptions struct { | |||||||
| // handleBzzzMessages processes incoming Bzzz coordination messages | // handleBzzzMessages processes incoming Bzzz coordination messages | ||||||
| func (p *PubSub) handleBzzzMessages() { | func (p *PubSub) handleBzzzMessages() { | ||||||
| 	for { | 	for { | ||||||
| 		msg, err := p.bzzzSub.Next(p.ctx) | 		msg, err := p.chorusSub.Next(p.ctx) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			if p.ctx.Err() != nil { | 			if p.ctx.Err() != nil { | ||||||
| 				return // Context cancelled | 				return // Context cancelled | ||||||
| @@ -534,13 +534,13 @@ func (p *PubSub) handleBzzzMessages() { | |||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		var bzzzMsg Message | 		var chorusMsg Message | ||||||
| 		if err := json.Unmarshal(msg.Data, &bzzzMsg); err != nil { | 		if err := json.Unmarshal(msg.Data, &chorusMsg); err != nil { | ||||||
| 			fmt.Printf("❌ Failed to unmarshal Bzzz message: %v\n", err) | 			fmt.Printf("❌ Failed to unmarshal Bzzz message: %v\n", err) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		p.processBzzzMessage(bzzzMsg, msg.ReceivedFrom) | 		p.processBzzzMessage(chorusMsg, msg.ReceivedFrom) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -768,8 +768,8 @@ func (p *PubSub) processContextFeedbackMessage(msg Message, from peer.ID) { | |||||||
| func (p *PubSub) Close() error { | func (p *PubSub) Close() error { | ||||||
| 	p.cancel() | 	p.cancel() | ||||||
| 	 | 	 | ||||||
| 	if p.bzzzSub != nil { | 	if p.chorusSub != nil { | ||||||
| 		p.bzzzSub.Cancel() | 		p.chorusSub.Cancel() | ||||||
| 	} | 	} | ||||||
| 	if p.hmmmSub != nil { | 	if p.hmmmSub != nil { | ||||||
| 		p.hmmmSub.Cancel() | 		p.hmmmSub.Cancel() | ||||||
| @@ -778,8 +778,8 @@ func (p *PubSub) Close() error { | |||||||
| 		p.contextSub.Cancel() | 		p.contextSub.Cancel() | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	if p.bzzzTopic != nil { | 	if p.chorusTopic != nil { | ||||||
| 		p.bzzzTopic.Close() | 		p.chorusTopic.Close() | ||||||
| 	} | 	} | ||||||
| 	if p.hmmmTopic != nil { | 	if p.hmmmTopic != nil { | ||||||
| 		p.hmmmTopic.Close() | 		p.hmmmTopic.Close() | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ import ( | |||||||
| // Note: This is a light test around name routing; full pubsub requires network. | // Note: This is a light test around name routing; full pubsub requires network. | ||||||
| func TestPublishRaw_NameRouting_NoSubscription(t *testing.T) { | func TestPublishRaw_NameRouting_NoSubscription(t *testing.T) { | ||||||
|     // Build a minimal PubSub with names set but no subscriptions. |     // Build a minimal PubSub with names set but no subscriptions. | ||||||
|     p := &PubSub{ bzzzTopicName: "CHORUS/coordination/v1", hmmmTopicName: "hmmm/meta-discussion/v1", contextTopicName: "CHORUS/context-feedback/v1" } |     p := &PubSub{ chorusTopicName: "CHORUS/coordination/v1", hmmmTopicName: "hmmm/meta-discussion/v1", contextTopicName: "CHORUS/context-feedback/v1" } | ||||||
|     if err := p.PublishRaw("nonexistent/topic", []byte("{}")); err == nil { |     if err := p.PublishRaw("nonexistent/topic", []byte("{}")); err == nil { | ||||||
|         t.Fatalf("expected error for unknown topic") |         t.Fatalf("expected error for unknown topic") | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 anthonyrawlins
					anthonyrawlins