Skip to content

Commit 38ef59e

Browse files
author
DeepShield Dev
committed
refactor: rename ZeroTrace → DeepShield across entire server codebase
- Rename all zerotrace_*.go files to deepshield_*.go (19 files) - Rename Go type ZeroTrace → DeepShield, NewZeroTrace → NewDeepShield - Update log prefixes [zerotrace] → [deepshield] - Update config field ZeroTraceDebugReceiver → DeepShieldDebugReceiver - Update yaml key zerotrace-debug-receiver → deepshield-debug-receiver - Update docker-compose service names and container names - Update deploy.sh, entrypoint.sh, README, docs - Update AI prompt text: ZeroTrace → DeepShield - Update env vars: ZEROTRACE_CONTROLLER_IP → DEEP_SHIELD_CONTROLLER_IP - Preserve ZT_HTTP_TRANSPORT_* env vars (agent runtime, not server name) - Verified: CGO_ENABLED=0 go build passes with zero errors
1 parent 7b2f5c5 commit 38ef59e

33 files changed

Lines changed: 216 additions & 216 deletions

‎README.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# What is Zerotrace Server
1+
# What is DeepShield Server
22

3-
**Zerotrace Server** is the data ingestion, storage, and query engine of the Zerotrace platform. Built on DeepFlow's high-performance telemetry pipeline, it receives observability data from Zerotrace Agents via a custom gRPC-based protocol, enriches it with resource metadata and tags, and persists it into ClickHouse for low-latency analytical queries. The Server manages up to 100,000 agents across multiple regions and provides a unified query language spanning metrics, traces, logs, and events.
3+
**DeepShield Server** is the data ingestion, storage, and query engine of the DeepShield platform. Built on DeepFlow's high-performance telemetry pipeline, it receives observability data from DeepShield Agents via a custom gRPC-based protocol, enriches it with resource metadata and tags, and persists it into ClickHouse for low-latency analytical queries. The Server manages up to 100,000 agents across multiple regions and provides a unified query language spanning metrics, traces, logs, and events.
44

55
# Key Features
66

‎controller/config/config.go‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ type ControllerConfig struct {
114114
AllAgentConnectToNatIP bool `default:"false" yaml:"all-agent-connect-to-nat-ip"`
115115
NoIPOverlapping bool `default:"false" yaml:"no-ip-overlapping"`
116116
AgentCommandTimeout int `default:"30" yaml:"agent-cmd-timeout"`
117-
ZeroTraceDatabase string `default:"zerotrace" yaml:"zerotrace-database"`
118-
ZeroTraceDebugReceiver bool `default:"false" yaml:"zerotrace-debug-receiver"`
117+
DeepShieldDatabase string `default:"deepshield" yaml:"deepshield-database"`
118+
DeepShieldDebugReceiver bool `default:"false" yaml:"deepshield-debug-receiver"`
119119

120120
// SiteGuard agent chat & pricing configuration (pushed via heartbeat)
121121
SiteGuard SiteGuardConfig `yaml:"siteguard"`

controller/http/router/agent/zerotrace.go renamed to controller/http/router/agent/deepshield.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Package zerotrace exposes the HTTP endpoints a ZeroTrace agent uses to talk to
1+
// Package deepshield exposes the HTTP endpoints a DeepShield agent uses to talk to
22
// the server, replacing the legacy bidirectional gRPC stream. Agent lifecycle
33
// (register/heartbeat/config/time) is persisted to MySQL (vtap table); submitted
44
// signals (metric/trace/log/profile/event/custom) are persisted to ClickHouse.
@@ -26,9 +26,9 @@ import (
2626
// maxBodyBytes caps a single request body after decompression (32 MiB).
2727
const maxBodyBytes = 32 << 20
2828

29-
// ZeroTrace is the registrant for the ZeroTrace agent-facing HTTP API. It reuses
29+
// DeepShield is the registrant for the DeepShield agent-facing HTTP API. It reuses
3030
// the package-level `log` declared in logger.go.
31-
type ZeroTrace struct {
31+
type DeepShield struct {
3232
cfg *config.ControllerConfig
3333
store *Store
3434
grpc *agentGRPCHandlers
@@ -38,14 +38,14 @@ type ZeroTrace struct {
3838
chatLimiter *rateLimiter
3939
}
4040

41-
func NewZeroTrace(cfg *config.ControllerConfig) *ZeroTrace {
42-
store := NewStore(cfg.ClickHouseCfg, cfg.ZeroTraceDatabase)
41+
func NewDeepShield(cfg *config.ControllerConfig) *DeepShield {
42+
store := NewStore(cfg.ClickHouseCfg, cfg.DeepShieldDatabase)
4343
if err := store.Err(); err != nil {
44-
log.Errorf("[zerotrace] clickhouse init failed, data endpoints will return 503: %v", err)
44+
log.Errorf("[deepshield] clickhouse init failed, data endpoints will return 503: %v", err)
4545
}
4646
// Build chat proxy config from server.yaml siteguard section (with fallback defaults).
4747
chatCfg := buildChatProxyConfig(cfg)
48-
a := &ZeroTrace{
48+
a := &DeepShield{
4949
cfg: cfg,
5050
store: store,
5151
grpc: newAgentGRPCHandlers(),
@@ -83,7 +83,7 @@ func buildChatProxyConfig(cfg *config.ControllerConfig) ChatProxyConfig {
8383
}
8484

8585
// RegisterTo mounts all endpoints under /api/v1 behind API_KEY authentication.
86-
func (a *ZeroTrace) RegisterTo(e *gin.Engine) {
86+
func (a *DeepShield) RegisterTo(e *gin.Engine) {
8787
g := e.Group("/api/v1", APIKeyAuth())
8888

8989
g.POST("/agent/register", a.handleRegister)
@@ -102,7 +102,7 @@ func (a *ZeroTrace) RegisterTo(e *gin.Engine) {
102102
a.registerSyncRoutes(g)
103103

104104
// Observability-data upload: agent's native wire frames -> ingester pipeline
105-
// (same storage as the TCP path). See zerotrace_ingest.go.
105+
// (same storage as the TCP path). See deepshield_ingest.go.
106106
g.POST("/data/ingest", a.handleAgentDataIngest)
107107

108108
// SiteGuard probe data upload — bulk structured tables into siteguard.* DB
@@ -162,7 +162,7 @@ func (a *ZeroTrace) RegisterTo(e *gin.Engine) {
162162

163163
// handleSchedulerStatus returns the current scheduler state.
164164
// GET /api/v1/probe/scheduler/status
165-
func (a *ZeroTrace) handleSchedulerStatus(c *gin.Context) {
165+
func (a *DeepShield) handleSchedulerStatus(c *gin.Context) {
166166
if a.scheduler == nil {
167167
c.JSON(http.StatusOK, SchedulerStatus{Running: false})
168168
return
@@ -172,7 +172,7 @@ func (a *ZeroTrace) handleSchedulerStatus(c *gin.Context) {
172172

173173
// handleSchedulerStart starts the analysis engine scheduler.
174174
// POST /api/v1/probe/scheduler/start
175-
func (a *ZeroTrace) handleSchedulerStart(c *gin.Context) {
175+
func (a *DeepShield) handleSchedulerStart(c *gin.Context) {
176176
if a.scheduler == nil {
177177
c.JSON(http.StatusServiceUnavailable, gin.H{"error": "scheduler not initialized"})
178178
return
@@ -183,7 +183,7 @@ func (a *ZeroTrace) handleSchedulerStart(c *gin.Context) {
183183

184184
// handleSchedulerStop stops the analysis engine scheduler.
185185
// POST /api/v1/probe/scheduler/stop
186-
func (a *ZeroTrace) handleSchedulerStop(c *gin.Context) {
186+
func (a *DeepShield) handleSchedulerStop(c *gin.Context) {
187187
if a.scheduler == nil {
188188
c.JSON(http.StatusOK, gin.H{"status": "already stopped"})
189189
return
@@ -211,7 +211,7 @@ func bindJSON(c *gin.Context, v any) error {
211211
if len(body) == 0 {
212212
return fmt.Errorf("empty request body")
213213
}
214-
log.Infof("[zerotrace] %s received data from %s, length=%d", c.Request.URL.Path, c.ClientIP(), len(body))
214+
log.Infof("[deepshield] %s received data from %s, length=%d", c.Request.URL.Path, c.ClientIP(), len(body))
215215
if err := json.Unmarshal(body, v); err != nil {
216216
return fmt.Errorf("invalid json: %w", err)
217217
}

controller/http/router/agent/zerotrace_alert_rules.go renamed to controller/http/router/agent/deepshield_alert_rules.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type AlertRule struct {
3434

3535
// handleListAlertRules returns all alert rules for the given org.
3636
// GET /api/v1/agent/alert-rules
37-
func (a *ZeroTrace) handleListAlertRules(c *gin.Context) {
37+
func (a *DeepShield) handleListAlertRules(c *gin.Context) {
3838
orgID := getOrgID(c)
3939
if orgID <= 0 {
4040
orgID = mysqlcommon.DEFAULT_ORG_ID
@@ -75,7 +75,7 @@ func (a *ZeroTrace) handleListAlertRules(c *gin.Context) {
7575

7676
// handleCreateAlertRule creates a new alert rule.
7777
// POST /api/v1/agent/alert-rules
78-
func (a *ZeroTrace) handleCreateAlertRule(c *gin.Context) {
78+
func (a *DeepShield) handleCreateAlertRule(c *gin.Context) {
7979
var req AlertRule
8080
if err := bindJSON(c, &req); err != nil {
8181
return
@@ -134,7 +134,7 @@ func (a *ZeroTrace) handleCreateAlertRule(c *gin.Context) {
134134

135135
// handleDeleteAlertRule deletes an alert rule by ID.
136136
// DELETE /api/v1/agent/alert-rules/:id
137-
func (a *ZeroTrace) handleDeleteAlertRule(c *gin.Context) {
137+
func (a *DeepShield) handleDeleteAlertRule(c *gin.Context) {
138138
id := c.Param("id")
139139
if id == "" {
140140
c.JSON(http.StatusBadRequest, gin.H{"error": "id is required"})
@@ -164,7 +164,7 @@ func (a *ZeroTrace) handleDeleteAlertRule(c *gin.Context) {
164164

165165
// handleToggleAlertRule enables/disables an alert rule.
166166
// POST /api/v1/agent/alert-rules/:id/toggle
167-
func (a *ZeroTrace) handleToggleAlertRule(c *gin.Context) {
167+
func (a *DeepShield) handleToggleAlertRule(c *gin.Context) {
168168
id := c.Param("id")
169169
if id == "" {
170170
c.JSON(http.StatusBadRequest, gin.H{"error": "id is required"})

controller/http/router/agent/zerotrace_apikey.go renamed to controller/http/router/agent/deepshield_apikey.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ const (
1717
apiKeyHeader = "X-Api-Key"
1818
agentIDHeader = "X-Agent-Id"
1919

20-
ctxUserID = "zerotrace_user_id"
21-
ctxOrgID = "zerotrace_org_id"
22-
ctxTeamID = "zerotrace_team_id"
23-
ctxAgentID = "zerotrace_agent_id"
20+
ctxUserID = "deepshield_user_id"
21+
ctxOrgID = "deepshield_org_id"
22+
ctxTeamID = "deepshield_team_id"
23+
ctxAgentID = "deepshield_agent_id"
2424
)
2525

2626
// APIKey is the persisted credential an agent presents in the X-Api-Key header.

controller/http/router/agent/zerotrace_baseline.go renamed to controller/http/router/agent/deepshield_baseline.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ type baselineAlert struct {
4848

4949
// handleBaselineRun triggers a single baseline analysis cycle.
5050
// POST /api/v1/probe/baseline/run
51-
func (a *ZeroTrace) handleBaselineRun(c *gin.Context) {
51+
func (a *DeepShield) handleBaselineRun(c *gin.Context) {
5252
if a.store == nil || a.store.Err() != nil {
5353
c.JSON(http.StatusServiceUnavailable, gin.H{"error": "clickhouse unavailable"})
5454
return
@@ -87,7 +87,7 @@ func (a *ZeroTrace) handleBaselineRun(c *gin.Context) {
8787

8888
// handleBaselineStatus returns the latest baseline alerts.
8989
// GET /api/v1/probe/baseline/status
90-
func (a *ZeroTrace) handleBaselineStatus(c *gin.Context) {
90+
func (a *DeepShield) handleBaselineStatus(c *gin.Context) {
9191
if a.store == nil || a.store.Err() != nil {
9292
c.JSON(http.StatusServiceUnavailable, gin.H{"error": "clickhouse unavailable"})
9393
return
@@ -121,7 +121,7 @@ func (a *ZeroTrace) handleBaselineStatus(c *gin.Context) {
121121

122122
// ── EWMA Anomaly Detection ─────────────────────────────────────────────────
123123

124-
func (a *ZeroTrace) runEWMADetection(now time.Time) (int, error) {
124+
func (a *DeepShield) runEWMADetection(now time.Time) (int, error) {
125125
// Ensure baseline tables exist
126126
if err := a.ensureBaselineTables(); err != nil {
127127
return 0, err
@@ -219,7 +219,7 @@ func (a *ZeroTrace) runEWMADetection(now time.Time) (int, error) {
219219
}
220220

221221
// checkEWMAAnomaly compares the current value against the EWMA baseline.
222-
func (a *ZeroTrace) checkEWMAAnomaly(agentID uint32, entity, metric string, value float64, now time.Time) *baselineAlert {
222+
func (a *DeepShield) checkEWMAAnomaly(agentID uint32, entity, metric string, value float64, now time.Time) *baselineAlert {
223223
// Read current baseline
224224
var ewma, ewmaVar float64
225225
var lastUpdate time.Time
@@ -268,7 +268,7 @@ func (a *ZeroTrace) checkEWMAAnomaly(agentID uint32, entity, metric string, valu
268268
return nil
269269
}
270270

271-
func (a *ZeroTrace) upsertBaseline(agentID uint32, entity, metric string, ewma, ewmaVar float64, now time.Time) {
271+
func (a *DeepShield) upsertBaseline(agentID uint32, entity, metric string, ewma, ewmaVar float64, now time.Time) {
272272
_, _ = a.store.DB().Exec(`
273273
INSERT INTO siteguard.ewma_baselines (agent_id, entity, metric, ewma, ewma_var, last_update)
274274
VALUES (?, ?, ?, ?, ?, ?)`,
@@ -277,7 +277,7 @@ func (a *ZeroTrace) upsertBaseline(agentID uint32, entity, metric string, ewma,
277277

278278
// ── First-Seen Detection ────────────────────────────────────────────────────
279279

280-
func (a *ZeroTrace) runFirstSeenDetection(now time.Time) (int, error) {
280+
func (a *DeepShield) runFirstSeenDetection(now time.Time) (int, error) {
281281
lookback := now.Add(-time.Duration(lookbackHours) * time.Hour)
282282
recentWindow := now.Add(-10 * time.Minute)
283283

@@ -334,7 +334,7 @@ func (a *ZeroTrace) runFirstSeenDetection(now time.Time) (int, error) {
334334

335335
// ── Beacon Detection ────────────────────────────────────────────────────────
336336

337-
func (a *ZeroTrace) runBeaconDetection(now time.Time) (int, error) {
337+
func (a *DeepShield) runBeaconDetection(now time.Time) (int, error) {
338338
lookback := now.Add(-1 * time.Hour)
339339

340340
// Find hosts with very regular connection intervals to the same destination
@@ -398,7 +398,7 @@ func (a *ZeroTrace) runBeaconDetection(now time.Time) (int, error) {
398398

399399
// ── Table Management ────────────────────────────────────────────────────────
400400

401-
func (a *ZeroTrace) ensureBaselineTables() error {
401+
func (a *DeepShield) ensureBaselineTables() error {
402402
ddls := []string{
403403
`CREATE TABLE IF NOT EXISTS siteguard.baseline_alerts (
404404
timestamp DateTime,
@@ -448,7 +448,7 @@ func (a *ZeroTrace) ensureBaselineTables() error {
448448
return nil
449449
}
450450

451-
func (a *ZeroTrace) writeBaselineAlert(ba baselineAlert) {
451+
func (a *DeepShield) writeBaselineAlert(ba baselineAlert) {
452452
_, err := a.store.DB().Exec(`
453453
INSERT INTO siteguard.baseline_alerts
454454
(timestamp, agent_id, alert_type, entity, entity_type, metric, value, baseline, stddev, details, severity)

controller/http/router/agent/zerotrace_chat_proxy.go renamed to controller/http/router/agent/deepshield_chat_proxy.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package agent
22

3-
// zerotrace_chat_proxy.go — Reverse-proxy for agent LLM chat requests.
3+
// deepshield_chat_proxy.go — Reverse-proxy for agent LLM chat requests.
44
//
55
// Agents call POST /api/v1/agent/chat with an OpenAI-compatible JSON body.
66
// The server validates the API key, applies per-agent rate limiting, audits the
@@ -22,7 +22,7 @@ import (
2222
// ── Chat proxy config ─────────────────────────────────────────────────────
2323

2424
// ChatProxyConfig holds the LLM backend URL and rate-limit parameters.
25-
// Populated from ZeroTrace.cfg at startup or hot-reloaded.
25+
// Populated from DeepShield.cfg at startup or hot-reloaded.
2626
type ChatProxyConfig struct {
2727
// LLM backend URL, e.g. "http://172.19.108.186:8000/v1/chat/completions"
2828
// or the gateway endpoint "http://172.19.108.188:8080/v1/chat/completions".
@@ -115,7 +115,7 @@ func (rl *rateLimiter) allow(userID int) bool {
115115
// authenticated agent to the upstream LLM backend, streaming the response.
116116
//
117117
// POST /api/v1/agent/chat
118-
func (a *ZeroTrace) handleAgentChat(c *gin.Context) {
118+
func (a *DeepShield) handleAgentChat(c *gin.Context) {
119119
proxyCfg := a.getChatProxyConfig()
120120
if proxyCfg.LLMURL == "" {
121121
c.JSON(http.StatusServiceUnavailable, gin.H{
@@ -207,7 +207,7 @@ func (a *ZeroTrace) handleAgentChat(c *gin.Context) {
207207

208208
// ── Audit logging ────────────────────────────────────────────────────────
209209

210-
func (a *ZeroTrace) logChatRequest(userID int, agentID string, bodyLen, statusCode int) {
210+
func (a *DeepShield) logChatRequest(userID int, agentID string, bodyLen, statusCode int) {
211211
if a.store == nil || a.store.Err() != nil {
212212
return
213213
}
@@ -224,7 +224,7 @@ func (a *ZeroTrace) logChatRequest(userID int, agentID string, bodyLen, statusCo
224224

225225
// ── Config accessor ──────────────────────────────────────────────────────
226226

227-
func (a *ZeroTrace) getChatProxyConfig() ChatProxyConfig {
227+
func (a *DeepShield) getChatProxyConfig() ChatProxyConfig {
228228
a.mu.Lock()
229229
defer a.mu.Unlock()
230230
if a.chatProxyCfg == nil {
@@ -234,7 +234,7 @@ func (a *ZeroTrace) getChatProxyConfig() ChatProxyConfig {
234234
return *a.chatProxyCfg
235235
}
236236

237-
func (a *ZeroTrace) SetChatProxyConfig(cfg ChatProxyConfig) {
237+
func (a *DeepShield) SetChatProxyConfig(cfg ChatProxyConfig) {
238238
a.mu.Lock()
239239
defer a.mu.Unlock()
240240
a.chatProxyCfg = &cfg

controller/http/router/agent/zerotrace_clickhouse.go renamed to controller/http/router/agent/deepshield_clickhouse.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import (
1010
)
1111

1212
// defaultDatabase is the fallback name for the dedicated ClickHouse database that
13-
// holds the raw signals uploaded by ZeroTrace agents over HTTP. It is overridable
14-
// via the controller config (zerotrace-database). Trace assembly / aggregation is
13+
// holds the raw signals uploaded by DeepShield agents over HTTP. It is overridable
14+
// via the controller config (deepshield-database). Trace assembly / aggregation is
1515
// left to a later milestone — here we only persist the raw rows.
16-
const defaultDatabase = "zerotrace"
16+
const defaultDatabase = "deepshield"
1717

1818
// signalDDL maps a signal kind to the columns of its backing ClickHouse table.
1919
// All tables share the (time, agent_id, org_id, team_id, received_at) prefix and

controller/http/router/agent/zerotrace_data.go renamed to controller/http/router/agent/deepshield_data.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ type metricBatch struct {
5454
} `json:"items"`
5555
}
5656

57-
func (a *ZeroTrace) handleMetric(c *gin.Context) {
57+
func (a *DeepShield) handleMetric(c *gin.Context) {
5858
var batch metricBatch
5959
if err := bindJSON(c, &batch); err != nil {
6060
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
@@ -90,7 +90,7 @@ type traceBatch struct {
9090
} `json:"items"`
9191
}
9292

93-
func (a *ZeroTrace) handleTrace(c *gin.Context) {
93+
func (a *DeepShield) handleTrace(c *gin.Context) {
9494
var batch traceBatch
9595
if err := bindJSON(c, &batch); err != nil {
9696
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
@@ -122,7 +122,7 @@ type logBatch struct {
122122
} `json:"items"`
123123
}
124124

125-
func (a *ZeroTrace) handleLog(c *gin.Context) {
125+
func (a *DeepShield) handleLog(c *gin.Context) {
126126
var batch logBatch
127127
if err := bindJSON(c, &batch); err != nil {
128128
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
@@ -154,7 +154,7 @@ type profileBatch struct {
154154
} `json:"items"`
155155
}
156156

157-
func (a *ZeroTrace) handleProfile(c *gin.Context) {
157+
func (a *DeepShield) handleProfile(c *gin.Context) {
158158
var batch profileBatch
159159
if err := bindJSON(c, &batch); err != nil {
160160
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
@@ -186,7 +186,7 @@ type eventBatch struct {
186186
} `json:"items"`
187187
}
188188

189-
func (a *ZeroTrace) handleEvent(c *gin.Context) {
189+
func (a *DeepShield) handleEvent(c *gin.Context) {
190190
var batch eventBatch
191191
if err := bindJSON(c, &batch); err != nil {
192192
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
@@ -217,7 +217,7 @@ type customBatch struct {
217217
} `json:"items"`
218218
}
219219

220-
func (a *ZeroTrace) handleCustom(c *gin.Context) {
220+
func (a *DeepShield) handleCustom(c *gin.Context) {
221221
var batch customBatch
222222
if err := bindJSON(c, &batch); err != nil {
223223
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
@@ -239,17 +239,17 @@ func (a *ZeroTrace) handleCustom(c *gin.Context) {
239239
}
240240

241241
// writeRows persists a parsed batch and writes the standard JSON response.
242-
func (a *ZeroTrace) writeRows(c *gin.Context, kind string, rows [][]any) {
242+
func (a *DeepShield) writeRows(c *gin.Context, kind string, rows [][]any) {
243243
if a.store == nil || a.store.Err() != nil {
244244
c.JSON(http.StatusServiceUnavailable, gin.H{"error": "clickhouse unavailable"})
245245
return
246246
}
247247
n, err := a.store.insert(kind, rows)
248248
if err != nil {
249-
log.Errorf("[zerotrace] submit %s failed: %v", kind, err)
249+
log.Errorf("[deepshield] submit %s failed: %v", kind, err)
250250
c.JSON(http.StatusInternalServerError, gin.H{"error": "storage error"})
251251
return
252252
}
253-
log.Infof("[zerotrace] submit %s: accepted=%d", kind, n)
253+
log.Infof("[deepshield] submit %s: accepted=%d", kind, n)
254254
c.JSON(http.StatusAccepted, gin.H{"accepted": n})
255255
}

0 commit comments

Comments
 (0)