feat: Production readiness improvements for WHOOSH council formation
Major security, observability, and configuration improvements:
## Security Hardening
- Implemented configurable CORS (no more wildcards)
- Added comprehensive auth middleware for admin endpoints
- Enhanced webhook HMAC validation
- Added input validation and rate limiting
- Security headers and CSP policies
## Configuration Management
- Made N8N webhook URL configurable (WHOOSH_N8N_BASE_URL)
- Replaced all hardcoded endpoints with environment variables
- Added feature flags for LLM vs heuristic composition
- Gitea fetch hardening with EAGER_FILTER and FULL_RESCAN options
## API Completeness
- Implemented GetCouncilComposition function
- Added GET /api/v1/councils/{id} endpoint
- Council artifacts API (POST/GET /api/v1/councils/{id}/artifacts)
- /admin/health/details endpoint with component status
- Database lookup for repository URLs (no hardcoded fallbacks)
## Observability & Performance
- Added OpenTelemetry distributed tracing with goal/pulse correlation
- Performance optimization database indexes
- Comprehensive health monitoring
- Enhanced logging and error handling
## Infrastructure
- Production-ready P2P discovery (replaces mock implementation)
- Removed unused Redis configuration
- Enhanced Docker Swarm integration
- Added migration files for performance indexes
## Code Quality
- Comprehensive input validation
- Graceful error handling and failsafe fallbacks
- Backwards compatibility maintained
- Following security best practices
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
			
			
This commit is contained in:
		
							
								
								
									
										144
									
								
								vendor/go.opentelemetry.io/otel/sdk/trace/snapshot.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								vendor/go.opentelemetry.io/otel/sdk/trace/snapshot.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,144 @@ | ||||
| // Copyright The OpenTelemetry Authors | ||||
| // | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| //     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
|  | ||||
| package trace // import "go.opentelemetry.io/otel/sdk/trace" | ||||
|  | ||||
| import ( | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/sdk/instrumentation" | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
|  | ||||
| // snapshot is an record of a spans state at a particular checkpointed time. | ||||
| // It is used as a read-only representation of that state. | ||||
| type snapshot struct { | ||||
| 	name                  string | ||||
| 	spanContext           trace.SpanContext | ||||
| 	parent                trace.SpanContext | ||||
| 	spanKind              trace.SpanKind | ||||
| 	startTime             time.Time | ||||
| 	endTime               time.Time | ||||
| 	attributes            []attribute.KeyValue | ||||
| 	events                []Event | ||||
| 	links                 []Link | ||||
| 	status                Status | ||||
| 	childSpanCount        int | ||||
| 	droppedAttributeCount int | ||||
| 	droppedEventCount     int | ||||
| 	droppedLinkCount      int | ||||
| 	resource              *resource.Resource | ||||
| 	instrumentationScope  instrumentation.Scope | ||||
| } | ||||
|  | ||||
| var _ ReadOnlySpan = snapshot{} | ||||
|  | ||||
| func (s snapshot) private() {} | ||||
|  | ||||
| // Name returns the name of the span. | ||||
| func (s snapshot) Name() string { | ||||
| 	return s.name | ||||
| } | ||||
|  | ||||
| // SpanContext returns the unique SpanContext that identifies the span. | ||||
| func (s snapshot) SpanContext() trace.SpanContext { | ||||
| 	return s.spanContext | ||||
| } | ||||
|  | ||||
| // Parent returns the unique SpanContext that identifies the parent of the | ||||
| // span if one exists. If the span has no parent the returned SpanContext | ||||
| // will be invalid. | ||||
| func (s snapshot) Parent() trace.SpanContext { | ||||
| 	return s.parent | ||||
| } | ||||
|  | ||||
| // SpanKind returns the role the span plays in a Trace. | ||||
| func (s snapshot) SpanKind() trace.SpanKind { | ||||
| 	return s.spanKind | ||||
| } | ||||
|  | ||||
| // StartTime returns the time the span started recording. | ||||
| func (s snapshot) StartTime() time.Time { | ||||
| 	return s.startTime | ||||
| } | ||||
|  | ||||
| // EndTime returns the time the span stopped recording. It will be zero if | ||||
| // the span has not ended. | ||||
| func (s snapshot) EndTime() time.Time { | ||||
| 	return s.endTime | ||||
| } | ||||
|  | ||||
| // Attributes returns the defining attributes of the span. | ||||
| func (s snapshot) Attributes() []attribute.KeyValue { | ||||
| 	return s.attributes | ||||
| } | ||||
|  | ||||
| // Links returns all the links the span has to other spans. | ||||
| func (s snapshot) Links() []Link { | ||||
| 	return s.links | ||||
| } | ||||
|  | ||||
| // Events returns all the events that occurred within in the spans | ||||
| // lifetime. | ||||
| func (s snapshot) Events() []Event { | ||||
| 	return s.events | ||||
| } | ||||
|  | ||||
| // Status returns the spans status. | ||||
| func (s snapshot) Status() Status { | ||||
| 	return s.status | ||||
| } | ||||
|  | ||||
| // InstrumentationScope returns information about the instrumentation | ||||
| // scope that created the span. | ||||
| func (s snapshot) InstrumentationScope() instrumentation.Scope { | ||||
| 	return s.instrumentationScope | ||||
| } | ||||
|  | ||||
| // InstrumentationLibrary returns information about the instrumentation | ||||
| // library that created the span. | ||||
| func (s snapshot) InstrumentationLibrary() instrumentation.Library { | ||||
| 	return s.instrumentationScope | ||||
| } | ||||
|  | ||||
| // Resource returns information about the entity that produced the span. | ||||
| func (s snapshot) Resource() *resource.Resource { | ||||
| 	return s.resource | ||||
| } | ||||
|  | ||||
| // DroppedAttributes returns the number of attributes dropped by the span | ||||
| // due to limits being reached. | ||||
| func (s snapshot) DroppedAttributes() int { | ||||
| 	return s.droppedAttributeCount | ||||
| } | ||||
|  | ||||
| // DroppedLinks returns the number of links dropped by the span due to limits | ||||
| // being reached. | ||||
| func (s snapshot) DroppedLinks() int { | ||||
| 	return s.droppedLinkCount | ||||
| } | ||||
|  | ||||
| // DroppedEvents returns the number of events dropped by the span due to | ||||
| // limits being reached. | ||||
| func (s snapshot) DroppedEvents() int { | ||||
| 	return s.droppedEventCount | ||||
| } | ||||
|  | ||||
| // ChildSpanCount returns the count of spans that consider the span a | ||||
| // direct parent. | ||||
| func (s snapshot) ChildSpanCount() int { | ||||
| 	return s.childSpanCount | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Claude Code
					Claude Code