返回 DeepSeek-Reasonix
tabs_telemetry_store.go
根目录 / desktop / tabs_telemetry_store.go
1 package main
2
3 import (
4 "os"
5 "path/filepath"
6 "strings"
7
8 "reasonix/internal/config"
9 "reasonix/internal/session"
10 )
11
12 const canonicalTelemetryDir = "session-telemetry"
13
14 // canonicalTelemetryPath keeps desktop telemetry out of the session service's
15 // own by-id directory, which that service owns exclusively.
16 func canonicalTelemetryPath(sessionID string) string {
17 id := strings.TrimSpace(sessionID)
18 if session.ValidateSessionID(id) != nil {
19 return ""
20 }
21 dir := config.MemoryUserDir()
22 if dir == "" {
23 return ""
24 }
25 return filepath.Join(dir, canonicalTelemetryDir, id+".telemetry.json")
26 }
27
28 // telemetryFilePath resolves a session identity (legacy path or canonical
29 // route) to its telemetry sidecar, or "" when none can be named.
30 func telemetryFilePath(identity string) string {
31 if identity == "" {
32 return ""
33 }
34 if id, ok := parseSessionRoute(identity); ok {
35 return canonicalTelemetryPath(id)
36 }
37 return identity + ".telemetry.json"
38 }
39
40 func saveTelemetryFor(identity string, snapshot tabTelemetrySnapshot) error {
41 path := telemetryFilePath(identity)
42 if path == "" {
43 return nil
44 }
45 if err := os.MkdirAll(filepath.Dir(path), 0o700); err != nil {
46 return err
47 }
48 return saveTelemetry(path, snapshot)
49 }
50
51 func loadTelemetryFor(identity string) tabTelemetrySnapshot {
52 return loadTelemetry(telemetryFilePath(identity))
53 }
54
54 lines GO