github.com/aacfactory/fns@v1.2.86-0.20240310083819-80d667fc0a17/services/tracings/span.go (about) 1 /* 2 * Copyright 2023 Wang Min Xiang 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 * 16 */ 17 18 package tracings 19 20 import ( 21 "time" 22 ) 23 24 type Span struct { 25 Id string `json:"id" avro:"id"` 26 Endpoint string `json:"endpoint" avro:"endpoint"` 27 Fn string `json:"fn" avro:"fn"` 28 Begin time.Time `json:"begin" avro:"begin"` 29 Waited time.Time `json:"waited" avro:"waited"` 30 End time.Time `json:"end" avro:"end"` 31 Tags map[string]string `json:"tags" avro:"tags"` 32 Children []*Span `json:"children" avro:"children"` 33 parent *Span 34 } 35 36 func (span *Span) setTags(tags []string) { 37 n := len(tags) 38 if n == 0 { 39 return 40 } 41 if n%2 != 0 { 42 return 43 } 44 for i := 0; i < n; i += 2 { 45 k := tags[i] 46 v := tags[i+1] 47 span.Tags[k] = v 48 } 49 } 50 51 func (span *Span) mountChildrenParent() { 52 for _, child := range span.Children { 53 if child.parent == nil { 54 child.parent = span 55 } 56 child.mountChildrenParent() 57 } 58 }