mirror of
https://github.com/syntrex-lab/gomcp.git
synced 2026-04-28 05:46:22 +02:00
Release prep: 54 engines, self-hosted signatures, i18n, dashboard updates
This commit is contained in:
parent
694e32be26
commit
41cbfd6e0a
178 changed files with 36008 additions and 399 deletions
91
cmd/sidecar/main.go
Normal file
91
cmd/sidecar/main.go
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
// Package main provides the Universal Sidecar CLI entry point (§5.5).
|
||||
//
|
||||
// Usage:
|
||||
//
|
||||
// sentinel-sidecar --sensor-type=sentinel-core --log-path=/var/log/core.log --bus-url=http://localhost:9100
|
||||
// sentinel-sidecar --sensor-type=shield --stdin --bus-url=http://localhost:9100
|
||||
// echo "[DETECT] engine=jailbreak confidence=0.95 pattern=DAN" | sentinel-sidecar --sensor-type=sentinel-core --stdin
|
||||
//
|
||||
// Environment variables:
|
||||
//
|
||||
// SIDECAR_SENSOR_TYPE sentinel-core|shield|immune|generic
|
||||
// SIDECAR_LOG_PATH Path to sensor log file (or "stdin")
|
||||
// SIDECAR_BUS_URL SOC Event Bus URL (default: http://localhost:9100)
|
||||
// SIDECAR_SENSOR_ID Sensor ID for registration
|
||||
// SIDECAR_API_KEY Sensor API key
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/syntrex/gomcp/internal/application/sidecar"
|
||||
)
|
||||
|
||||
func main() {
|
||||
sensorType := flag.String("sensor-type", env("SIDECAR_SENSOR_TYPE", "sentinel-core"),
|
||||
"Sensor type: sentinel-core, shield, immune, generic")
|
||||
logPath := flag.String("log-path", env("SIDECAR_LOG_PATH", ""),
|
||||
"Path to sensor log file")
|
||||
useStdin := flag.Bool("stdin", false,
|
||||
"Read from stdin instead of log file")
|
||||
busURL := flag.String("bus-url", env("SIDECAR_BUS_URL", "http://localhost:9100"),
|
||||
"SOC Event Bus URL")
|
||||
sensorID := flag.String("sensor-id", env("SIDECAR_SENSOR_ID", ""),
|
||||
"Sensor registration ID")
|
||||
apiKey := flag.String("api-key", env("SIDECAR_API_KEY", ""),
|
||||
"Sensor API key")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
// Derive sensor ID from type if not set.
|
||||
if *sensorID == "" {
|
||||
*sensorID = fmt.Sprintf("sidecar-%s", *sensorType)
|
||||
}
|
||||
|
||||
// Determine log source.
|
||||
source := *logPath
|
||||
if *useStdin || source == "" {
|
||||
source = "stdin"
|
||||
}
|
||||
|
||||
cfg := sidecar.Config{
|
||||
SensorType: *sensorType,
|
||||
LogPath: source,
|
||||
BusURL: *busURL,
|
||||
SensorID: *sensorID,
|
||||
APIKey: *apiKey,
|
||||
PollInterval: 200 * time.Millisecond,
|
||||
}
|
||||
|
||||
slog.Info("sentinel-sidecar starting",
|
||||
"sensor_type", cfg.SensorType,
|
||||
"log_path", cfg.LogPath,
|
||||
"bus_url", cfg.BusURL,
|
||||
"sensor_id", cfg.SensorID,
|
||||
)
|
||||
|
||||
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
|
||||
defer stop()
|
||||
|
||||
sc := sidecar.New(cfg)
|
||||
if err := sc.Run(ctx); err != nil {
|
||||
slog.Error("sidecar exited with error", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
slog.Info("sentinel-sidecar stopped", "stats", sc.GetStats())
|
||||
}
|
||||
|
||||
func env(key, fallback string) string {
|
||||
if v := os.Getenv(key); v != "" {
|
||||
return v
|
||||
}
|
||||
return fallback
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue