Skip to content

Commit 5a79f07

Browse files
[200_64] Telemetry优化 (#3301)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
1 parent f0f3a89 commit 5a79f07

8 files changed

Lines changed: 749 additions & 332 deletions

File tree

TeXmacs/progs/generic/generic-edit.scm

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -752,21 +752,17 @@ TODO: 在文本模式中,可以自动识别剪贴板中的内容,并智能
752752
(if (string-starts? (qt-clipboard-format) "image")
753753
(begin
754754
(ocr-paste)
755-
(when (not (community-stem?))
756-
(track-event "OCR_RECOGNIZE" '())))
755+
(track-event "OCR_RECOGNIZE" '()))
757756
(with mode (get-env "mode")
758757
(cond ((== mode "prog")
759758
(clipboard-paste-import "code" "primary")
760-
(when (not (community-stem?))
761-
(track-event "MAGIC_PASTE" '(("mode" . "prog")))))
759+
(track-event "MAGIC_PASTE" '(("mode" . "prog"))))
762760
((== mode "math")
763761
(clipboard-paste-import "latex" "primary")
764-
(when (not (community-stem?))
765-
(track-event "MAGIC_PASTE" '(("mode" . "math")))))
762+
(track-event "MAGIC_PASTE" '(("mode" . "math"))))
766763
(else
767764
(smart-format-paste)
768-
(when (not (community-stem?))
769-
(track-event "MAGIC_PASTE" '(("mode" . "text"))))))))
765+
(track-event "MAGIC_PASTE" '(("mode" . "text")))))))
770766
(when (defined? 'tutorial-notify-action)
771767
(tutorial-notify-action "ocr-paste")))
772768

TeXmacs/progs/init-research.scm

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,8 +477,10 @@
477477
(use-modules (telemetry init-telemetry))
478478
(init-telemetry))
479479
(lambda args
480-
(display (string-append "[telemetry] error: init failed: "
481-
(object->string args) "\n"))))
480+
(let ((msg (string-append "[telemetry] error: init failed: "
481+
(object->string args) "\n")))
482+
(display msg (current-error-port))
483+
(force-output (current-error-port)))))
482484
(texmacs-banner)
483485
(display "Initialization done\n")
484486

TeXmacs/progs/telemetry/init-telemetry.scm

Lines changed: 54 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,39 +12,74 @@
1212
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1313

1414
(texmacs-module (telemetry init-telemetry)
15-
(:use (telemetry telemetry-track)
16-
(telemetry telemetry-utils)))
15+
(:use (telemetry telemetry-track) (telemetry telemetry-utils))
16+
) ;texmacs-module
1717

1818
(import (scheme base))
1919

2020
(define telemetry-scheduled? #f)
2121

2222
(define (telemetry-scheduler-step)
2323
(when (telemetry-enabled?)
24-
(telemetry-flush-if-needed))
25-
(telemetry-delayed))
24+
(telemetry-flush-if-needed)
25+
) ;when
26+
(telemetry-delayed)
27+
) ;define
2628

2729
(define (telemetry-delayed)
28-
(delayed
29-
(:pause (telemetry-get-flush-interval))
30-
(telemetry-scheduler-step)))
30+
(delayed (:pause (telemetry-get-flush-interval)) (telemetry-scheduler-step))
31+
) ;define
32+
33+
(define (telemetry-clean-orphans)
34+
;; 启动时清理:删除不在 meta 列表中的孤儿 jsonl
35+
(let* ((meta (telemetry-read-meta))
36+
(valid-files (map (lambda (e) (assoc-ref e "filename")) meta))
37+
(dir-url (system->url (telemetry-main-dir)))
38+
(pattern (url-append dir-url (url-wildcard "*.jsonl")))
39+
(files (url->list (url-expand (url-complete pattern "fr"))))
40+
) ;
41+
(for-each (lambda (f)
42+
(let ((fname (url->string (url-tail f))))
43+
(when (and (string-starts? fname "detail-telemetry-")
44+
(not (member fname valid-files))
45+
) ;and
46+
(catch #t (lambda () (path-unlink (url->system f))) (lambda args #f))
47+
) ;when
48+
) ;let
49+
) ;lambda
50+
files
51+
) ;for-each
52+
) ;let*
53+
) ;define
3154

3255
(define-public (init-telemetry)
3356
(if telemetry-scheduled?
3457
(display "[telemetry] init: already initialized\n")
3558
(if (telemetry-enabled?)
3659
(begin
60+
(telemetry-clean-orphans)
3761
(set! telemetry-scheduled? #t)
3862
(display (string-append "[telemetry] init: enabled, buffer="
39-
(number->string (telemetry-get-buffer-size))
40-
", interval="
41-
(number->string (telemetry-get-flush-interval))
42-
"ms\n"))
43-
(on-exit
44-
(catch #t
45-
(lambda () (telemetry-flush-if-needed))
46-
(lambda args
47-
(display (string-append "[telemetry] error: exit flush failed: "
48-
(object->string args) "\n")))))
49-
(telemetry-delayed))
50-
(display "[telemetry] init: disabled\n"))))
63+
(number->string (telemetry-get-buffer-size))
64+
", interval="
65+
(number->string (telemetry-get-flush-interval))
66+
"ms\n"
67+
) ;string-append
68+
) ;display
69+
(on-exit (catch #t
70+
(lambda () (telemetry-flush-if-needed))
71+
(lambda args
72+
(display (string-append "[telemetry] error: exit flush failed: "
73+
(object->string args)
74+
"\n"
75+
) ;string-append
76+
) ;display
77+
) ;lambda
78+
) ;catch
79+
) ;on-exit
80+
(telemetry-delayed)
81+
) ;begin
82+
(display "[telemetry] init: disabled\n")
83+
) ;if
84+
) ;if
85+
) ;define-public

TeXmacs/progs/telemetry/telemetry-track.scm

Lines changed: 92 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,15 @@
1111
;;
1212
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1313

14-
(texmacs-module (telemetry telemetry-track)
15-
(:use (telemetry telemetry-utils)))
14+
(texmacs-module (telemetry telemetry-track) (:use (telemetry telemetry-utils)))
1615

1716
(import (scheme base)
1817
(liii base)
19-
(liii json)
2018
(liii os)
2119
(liii path)
2220
(liii string)
2321
(liii list)
24-
)
22+
) ;import
2523

2624
(define-public *telemetry-event-queue* '())
2725

@@ -31,133 +29,113 @@
3129
(if (and (string? event-type) (not (string-null? event-type)))
3230
(begin
3331
(set! *telemetry-event-queue*
34-
(cons (telemetry-make-event event-type properties)
35-
*telemetry-event-queue*))
32+
(cons (telemetry-make-event event-type properties) *telemetry-event-queue*)
33+
) ;set!
3634
(let ((len (length *telemetry-event-queue*)))
37-
(display (string-append "[telemetry] track: " event-type
38-
" (queue: " (number->string len)
39-
"/" (number->string (telemetry-get-buffer-size)) ")\n"))
35+
(display (string-append "[telemetry] track: "
36+
event-type
37+
" (queue: "
38+
(number->string len)
39+
"/"
40+
(number->string (telemetry-get-buffer-size))
41+
")\n"
42+
) ;string-append
43+
) ;display
4044
(if (> len telemetry-max-queue-size)
41-
(set! *telemetry-event-queue*
42-
(list-head *telemetry-event-queue* telemetry-max-queue-size)))
43-
(if (>= len (telemetry-get-buffer-size))
44-
(telemetry-flush)))
45-
#t)
46-
#f)))
47-
48-
(define-public (telemetry-queue-length)
49-
(length *telemetry-event-queue*))
45+
(begin
46+
(set! *telemetry-event-queue*
47+
(list-head *telemetry-event-queue* telemetry-max-queue-size)
48+
) ;set!
49+
(display (string-append "[telemetry] warn: queue truncated to "
50+
(number->string telemetry-max-queue-size)
51+
"\n"
52+
) ;string-append
53+
) ;display
54+
) ;begin
55+
) ;if
56+
(if (>= len (telemetry-get-buffer-size)) (telemetry-flush))
57+
) ;let
58+
#t
59+
) ;begin
60+
#f
61+
) ;if
62+
) ;if
63+
) ;define-public
64+
65+
(define-public (telemetry-queue-length) (length *telemetry-event-queue*))
5066

5167
(define-public (telemetry-flush-if-needed)
5268
(if (not (telemetry-enabled?))
5369
#t
54-
(if (not (null? *telemetry-event-queue*))
55-
(telemetry-flush)
56-
#t)))
70+
(if (not (null? *telemetry-event-queue*)) (telemetry-flush) #t)
71+
) ;if
72+
) ;define-public
5773

5874
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
59-
;; Flush implementation: lightweight append-only file writes
60-
;; Complex logic (size limits, stale filtering) handled by liii subprocess
75+
;; Flush implementation: independent jsonl files + atomic meta update
6176
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6277

63-
(define telemetry-lock-timeout-seconds 30)
64-
65-
(define (telemetry-lock-info owner now)
66-
`(("owner" . ,owner) ("created_at" . ,now)))
67-
68-
(define (telemetry-read-lock-info)
69-
(catch #t
70-
(lambda ()
71-
(let ((text (string-load (system->url (telemetry-lock-info-path)))))
72-
(if (and (string? text) (> (string-length text) 0))
73-
(string->json text)
74-
#f)))
75-
(lambda args #f)))
76-
77-
(define (telemetry-lock-expired? now)
78-
(let ((info (telemetry-read-lock-info)))
79-
(if info
80-
(let ((created (json-ref-number info "created_at" 0)))
81-
(> (- now created) telemetry-lock-timeout-seconds))
82-
#t)))
83-
84-
(define (telemetry-remove-lock)
85-
(catch #t
86-
(lambda ()
87-
(path-unlink (telemetry-lock-info-path) #t)
88-
(rmdir (telemetry-lock-path)))
89-
(lambda args #f)))
90-
91-
(define (telemetry-acquire-lock)
92-
(telemetry-ensure-dir)
93-
(let ((owner (telemetry-lock-owner))
94-
(now (inexact->exact (truncate (current-time)))))
95-
(catch #t
96-
(lambda ()
97-
(mkdir (telemetry-lock-path))
98-
(string-save
99-
(json->string (telemetry-lock-info owner now))
100-
(system->url (telemetry-lock-info-path)))
101-
owner)
102-
(lambda args
103-
(if (telemetry-lock-expired? now)
104-
(begin
105-
(telemetry-remove-lock)
106-
(catch #t
107-
(lambda ()
108-
(mkdir (telemetry-lock-path))
109-
(string-save
110-
(json->string (telemetry-lock-info owner now))
111-
(system->url (telemetry-lock-info-path)))
112-
owner)
113-
(lambda args2 #f)))
114-
#f)))))
115-
116-
(define (telemetry-release-lock owner)
117-
(let ((info (telemetry-read-lock-info)))
118-
(if (and info
119-
(string=? (json-ref-string info "owner" "") owner))
120-
(telemetry-remove-lock)
121-
(begin
122-
(display (string-append "[telemetry] warn: lock owner mismatch, skipping release "
123-
"(expected " owner ", got "
124-
(if info (json-ref-string info "owner" "") "none") ")\n"))
125-
#f))))
126-
12778
(define-public (telemetry-write-pending events)
12879
(if (null? events)
12980
#t
130-
(let ((path (telemetry-pending-path))
131-
(lines (map json->string events)))
81+
(let* ((filename (telemetry-generate-filename))
82+
(filepath (telemetry-full-path filename))
83+
(lines (map telemetry->json events))
84+
) ;
13285
(catch #t
13386
(lambda ()
134-
(let ((text (string-append (string-join lines "\n") "\n")))
135-
(string-append-to-file text (system->url path))
136-
(display (string-append "[telemetry] flush: "
137-
(number->string (length events))
138-
" events -> "
139-
path "\n"))
140-
#t))
87+
(let ((text (string-append (string-join lines "\n") "\n")))
88+
(string-save text (system->url filepath))
89+
(if (telemetry-meta-add-entry filename)
90+
(begin
91+
(display (string-append "[telemetry] flush: "
92+
(number->string (length events))
93+
" events -> "
94+
filename
95+
"\n"
96+
) ;string-append
97+
) ;display
98+
#t
99+
) ;begin
100+
(begin
101+
(display (string-append "[telemetry] error: meta update failed for "
102+
filename
103+
"\n"
104+
) ;string-append
105+
) ;display
106+
#f
107+
) ;begin
108+
) ;if
109+
) ;let
110+
) ;lambda
141111
(lambda args
142-
(display (string-append "[telemetry] error: write failed: "
143-
(object->string args) "\n"))
144-
#f)))))
112+
(display (string-append "[telemetry] error: write failed: " (object->string args) "\n")
113+
) ;display
114+
#f
115+
) ;lambda
116+
) ;catch
117+
) ;let*
118+
) ;if
119+
) ;define-public
145120

146121
(define-public (telemetry-flush)
147122
(if (null? *telemetry-event-queue*)
148123
#t
149-
(let ((owner (telemetry-acquire-lock)))
150-
(if owner
151-
(let ((ok? (telemetry-write-pending (reverse *telemetry-event-queue*))))
152-
(if ok?
153-
(begin
154-
(set! *telemetry-event-queue* '())
155-
(telemetry-release-lock owner)
156-
#t)
157-
(begin
158-
(display (string-append "[telemetry] error: flush failed, keeping "
159-
(number->string (length *telemetry-event-queue*))
160-
" events in memory queue\n"))
161-
(telemetry-release-lock owner)
162-
#f)))
163-
#f))))
124+
(let ((ok? (telemetry-write-pending (reverse *telemetry-event-queue*))))
125+
(if ok?
126+
(begin
127+
(set! *telemetry-event-queue* '())
128+
#t
129+
) ;begin
130+
(begin
131+
(display (string-append "[telemetry] error: flush failed, keeping "
132+
(number->string (length *telemetry-event-queue*))
133+
" events in memory queue\n"
134+
) ;string-append
135+
) ;display
136+
#f
137+
) ;begin
138+
) ;if
139+
) ;let
140+
) ;if
141+
) ;define-public

0 commit comments

Comments
 (0)