@@ -21,8 +21,14 @@ import (
2121 "github.com/jellydator/ttlcache/v3"
2222 "github.com/lainio/err2"
2323 . "github.com/lainio/err2/try"
24+ "github.com/vscode-lcode/lcode/v2/util/err0"
25+ "go.opentelemetry.io/otel"
26+ "go.opentelemetry.io/otel/attribute"
27+ "go.opentelemetry.io/otel/trace"
2428)
2529
30+ const name = "bash/webdav"
31+
2632type Client struct {
2733 conn net.Conn
2834 ID string
@@ -32,7 +38,7 @@ type Client struct {
3238 targets []string
3339 targetsInit * sync.Once
3440
35- Logger func ( file * File , err error )
41+ Ctx context. Context
3642 closed * multicast.Channel [any ]
3743
3844 statsLocker * ttlcache.Cache [string , * StatWithLocker ]
@@ -62,22 +68,24 @@ func NewClient(conn net.Conn) *Client {
6268 return c
6369}
6470
65- func (c * Client ) log (err error ) {
66- if c .Logger == nil {
67- return
68- }
69- c .Logger (nil , err )
70- }
7171func (c * Client ) Open (r * bufio.Reader , version string , id string ) (err error ) {
72- defer err2 .Handle (& err , func () {
73- c .log (fmt .Errorf ("bash client start failed: %w" , err ))
74- })
72+ ctx , span := otel .Tracer (name ).Start (context .Background (), "client open" )
73+ c .Ctx = ctx
74+ defer err0 .Record (& err , span )
75+
7576 To (c .parseArgs (r , version ))
7677 To (c .initServerAddr (r , id ))
7778 To (c .initID (r ))
7879 To (c .initPWD (r ))
7980 go c .tasks .Start ()
8081 go c .statsLocker .Start ()
82+
83+ span .SetAttributes (
84+ attribute .String ("host" , c .ID ),
85+ attribute .String ("pwd" , c .PWD ),
86+ attribute .StringSlice ("targets" , c .targets ),
87+ )
88+
8189 return
8290}
8391
@@ -94,9 +102,10 @@ func (c *Client) intFlag(version string) *flag.FlagSet {
94102 return f
95103}
96104func (c * Client ) parseArgs (r * bufio.Reader , version string ) (err error ) {
97- defer err2 .Handle (& err , func () {
98- c .log (fmt .Errorf ("parse lcode args failed: %w" , err ))
99- })
105+ _ , span := otel .Tracer (name ).Start (c .Ctx , "client parse lcode args" )
106+ defer span .End ()
107+ defer err0 .Record (& err , span )
108+
100109 To1 (io .WriteString (c .conn , "echo $@\n " ))
101110 line , _ := To2 (r .ReadLine ())
102111
@@ -117,12 +126,15 @@ func (c *Client) parseArgs(r *bufio.Reader, version string) (err error) {
117126}
118127
119128func (c * Client ) initServerAddr (r * bufio.Reader , id string ) (err error ) {
129+ _ , span := otel .Tracer (name ).Start (c .Ctx , "client init server addr" )
130+ defer span .End ()
131+ defer err0 .Record (& err , span )
120132 defer err2 .Handle (& err , func () {
121- if errors .Is (err , ErrNeedPrint ) {
122- return
133+ if ! errors .Is (err , ErrNeedPrint ) {
134+ err = ErrServerAddrIncorrect
123135 }
124- err = ErrServerAddrIncorrect
125136 })
137+
126138 addr , err := net .ResolveTCPAddr ("tcp" , c .ServerAddr )
127139 if err != nil {
128140 return ErrServerAddrParseFailed
@@ -141,9 +153,10 @@ func (c *Client) initServerAddr(r *bufio.Reader, id string) (err error) {
141153}
142154
143155func (c * Client ) initID (r * bufio.Reader ) (err error ) {
144- defer err2 .Handle (& err , func () {
145- c .log (fmt .Errorf ("got default init id failed: %w" , err ))
146- })
156+ _ , span := otel .Tracer (name ).Start (c .Ctx , "client init id" )
157+ defer span .End ()
158+ defer err0 .Record (& err , span )
159+
147160 cmd := "echo $(2>/dev/null dd if=~/.lcode-id || echo 0)-$(2>/dev/null dd if=/proc/sys/kernel/hostname)\n "
148161 To1 (io .WriteString (c .conn , cmd ))
149162 line , _ := To2 (r .ReadLine ())
@@ -158,9 +171,10 @@ func (c *Client) StoreID(id string) (err error) {
158171}
159172
160173func (c * Client ) initPWD (r * bufio.Reader ) (err error ) {
161- defer err2 .Handle (& err , func () {
162- c .log (fmt .Errorf ("init pwd failed: %w" , err ))
163- })
174+ _ , span := otel .Tracer (name ).Start (c .Ctx , "client init pwd" )
175+ defer span .End ()
176+ defer err0 .Record (& err , span )
177+
164178 To1 (io .WriteString (c .conn , "pwd\n " ))
165179 pwd , _ := To2 (r .ReadLine ())
166180 c .PWD = string (pwd )
@@ -198,6 +212,8 @@ func (c *Client) Targets() []string {
198212}
199213
200214func (c * Client ) Close () {
215+ defer trace .SpanFromContext (c .Ctx ).End ()
216+
201217 c .tasks .DeleteAll ()
202218 c .tasks .Stop ()
203219
0 commit comments