1
1
//
2
2
import { registerInstrumentations } from '@opentelemetry/instrumentation' ;
3
- import { SEMRESATTRS_SERVICE_NAME } from '@opentelemetry/semantic-conventions' ;
4
- import { diag , DiagConsoleLogger , DiagLogLevel } from '@opentelemetry/api' ;
5
- import { trace } from '@opentelemetry/api' ;
3
+ //import { diag, DiagConsoleLogger, DiagLogLevel } from '@opentelemetry/api';
4
+ //import { trace } from '@opentelemetry/api';
6
5
7
6
//import { NodeSDK } from '@opentelemetry/sdk-node';
8
7
import { SpanExporter , Span } from '@opentelemetry/sdk-trace-base' ;
9
8
// , ExportResult
10
9
import { ConsoleSpanExporter } from '@opentelemetry/sdk-trace-node' ;
11
10
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node' ;
12
- import { PeriodicExportingMetricReader , ConsoleMetricExporter , } from '@opentelemetry/sdk-metrics' ;
11
+ // import { PeriodicExportingMetricReader, ConsoleMetricExporter,} from '@opentelemetry/sdk-metrics';
13
12
import * as opentelemetry from '@opentelemetry/api' ;
14
- import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node' ;
13
+ // import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
15
14
import { ZipkinExporter } from '@opentelemetry/exporter-zipkin' ;
16
15
import { Resource } from '@opentelemetry/resources' ;
17
16
import {
18
17
ATTR_SERVICE_NAME ,
19
18
ATTR_SERVICE_VERSION ,
20
19
} from '@opentelemetry/semantic-conventions' ;
21
20
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http' ;
21
+ import { wrapTracer } from '@opentelemetry/api/experimental' ;
22
22
23
23
//Specify zipkin url. default url is http://localhost:9411/api/v2/spans
24
24
const zipkinUrl = 'http://localhost' ;
@@ -31,8 +31,8 @@ const options = {
31
31
'module' : 'mainai16z' ,
32
32
} ,
33
33
url : zipkinURL ,
34
- serviceName : 'ai16z' ,
35
-
34
+ serviceName : 'ai16z' ,
35
+
36
36
// optional interceptor
37
37
getExportRequestHeaders : ( ) => {
38
38
return {
@@ -44,72 +44,58 @@ const traceExporter_zipkin = new ZipkinExporter(options);
44
44
const traceExporter = new ConsoleSpanExporter ( ) ;
45
45
46
46
47
- export class CustomConsoleSpanExporter implements SpanExporter {
48
- export ( spans : Span [ ] , resultCallback : ( result : ExportResult ) => void ) : void {
49
- elizaLogger . log ( "hello1" )
50
- //traceExporter.export(spans,resultCallback);
51
- //traceExporter.export(traceExporter_zipkin,resultCallback);
52
- for ( const span of spans ) {
53
- const spanData = {
54
- name : span . name ,
55
- traceId : span . spanContext ( ) . traceId ,
56
- spanId : span . spanContext ( ) . spanId ,
57
- startTime : span . startTime ,
58
- endTime : span . endTime ,
59
- attributes : span . attributes ,
60
- events : span . events ,
61
- status : span . status ,
62
- kind : span . kind ,
63
- } ;
64
- elizaLogger . log ( JSON . stringify ( spanData , null , 2 ) ) ;
65
- }
66
- resultCallback ( ExportResult . SUCCESS ) ;
67
- }
68
- shutdown ( ) : Promise < void > {
69
- return Promise . resolve ( ) ;
70
- }
71
- }
72
- const myExporter = new CustomConsoleSpanExporter ( )
47
+ // export class CustomConsoleSpanExporter implements SpanExporter {
48
+ // export(spans: Span[], resultCallback: (result: any) => void): void {
49
+ // elizaLogger.log("test trace", JSON.stringify(spans, null, 2));
50
+ // //traceExporter.export(spans,resultCallback);
51
+ // //traceExporter.export(traceExporter_zipkin,resultCallback);
52
+ // //elizaLogger.log(JSON.stringify(spans, null, 2));
53
+ // }
54
+ // }
55
+ // const myExporter = new CustomConsoleSpanExporter()
73
56
74
57
// parts from https://stackoverflow.com/questions/71654897/opentelemetry-typescript-project-zipkin-exporter
75
58
//const { SimpleSpanProcessor } = import('@opentelemetry/sdk-trace-base');
76
59
import { NodeTracerProvider , SimpleSpanProcessor } from "@opentelemetry/sdk-trace-node" ;
77
60
const txz = new SimpleSpanProcessor ( traceExporter_zipkin ) ;
78
61
const tx = new SimpleSpanProcessor ( traceExporter ) ;
79
- const tx2 = new SimpleSpanProcessor ( myExporter ) ;
62
+ // const tx2=new SimpleSpanProcessor(myExporter);
80
63
81
64
try {
82
65
const serviceName = 'eliza-agent' ;
83
66
const provider = new NodeTracerProvider ( {
84
67
resource : new Resource ( {
85
- [ SEMRESATTRS_SERVICE_NAME ] : serviceName ,
86
68
[ ATTR_SERVICE_NAME ] : serviceName ,
87
69
[ ATTR_SERVICE_VERSION ] : '1.0' , } ) ,
88
70
spanProcessors : [
89
71
txz ,
90
- tx ,
91
- tx2
72
+ tx
73
+ // tx2
92
74
]
93
75
} ) ;
94
76
95
77
// Initialize the OpenTelemetry APIs to use the NodeTracerProvider bindings
96
78
provider . register ( ) ;
97
-
79
+
98
80
registerInstrumentations ( {
99
81
instrumentations : [
100
82
getNodeAutoInstrumentations ( ) ,
101
83
new HttpInstrumentation ( ) ,
102
84
] ,
103
85
} ) ;
104
-
86
+
105
87
106
88
elizaLogger . log ( "setup!" )
107
89
} catch ( error ) {
108
90
elizaLogger . log ( "ERROR" , error )
109
91
}
110
92
// const sdk = new NodeSDK({ resource: new Resource({
111
93
112
- const tracer = opentelemetry . trace . getTracer ( 'ai16z' ) ;
94
+ //const tracer=opentelemetry.trace.getTracer('ai16z');
95
+
96
+
97
+
98
+ const tracer = wrapTracer ( opentelemetry . trace . getTracer ( 'ai16z-agent' ) )
113
99
114
100
// //traceExporter: new ConsoleSpanExporter(),
115
101
// traceExporter: myExporter,
@@ -201,10 +187,12 @@ export const wait = (minTime: number = 1000, maxTime: number = 3000) => {
201
187
} ;
202
188
203
189
const logFetch = async ( url : string , options : any ) => {
190
+ return await tracer . withActiveSpan ( 'logFetch' , async ( ) => {
204
191
elizaLogger . debug ( `Fetching ${ url } ` ) ;
205
192
// Disabled to avoid disclosure of sensitive information such as API keys
206
193
elizaLogger . debug ( JSON . stringify ( options , null , 2 ) ) ;
207
- return fetch ( url , options ) ;
194
+ return fetch ( url , options ) ;
195
+ } ) ;
208
196
} ;
209
197
210
198
export function parseArguments ( ) : {
@@ -229,24 +217,18 @@ export function parseArguments(): {
229
217
}
230
218
}
231
219
220
+
232
221
function tryLoadFile ( filePath : string ) : string | null {
233
- elizaLogger . log ( `tryLoadFile filePath: ${ filePath } ` ) ;
234
- const span = tracer . startSpan ( 'tryLoadFile' , {
235
- // kind: 1, // server
236
- attributes : { filePath : filePath } ,
237
- } ) ;
238
- try {
239
- const ret = fs . readFileSync ( filePath , "utf8" ) ;
240
- span . addEvent ( `got ${ ret . length } ` ) ;
241
-
242
- span . end ( ) ;
243
- return ret ;
244
-
245
- } catch ( e ) {
246
-
247
- span . end ( ) ;
248
- return null ;
249
- }
222
+ elizaLogger . log ( `tryLoadFile filePath: ${ filePath } ` ) ;
223
+ return tracer . withActiveSpan ( 'tryLoadFile' , ( ) => {
224
+ try {
225
+ const ret = fs . readFileSync ( filePath , "utf8" ) ;
226
+ return ret ;
227
+
228
+ } catch ( e ) {
229
+ return null ;
230
+ }
231
+ } )
250
232
}
251
233
252
234
function isAllStrings ( arr : unknown [ ] ) : boolean {
@@ -256,9 +238,10 @@ function isAllStrings(arr: unknown[]): boolean {
256
238
export async function loadCharacters (
257
239
charactersArg : string
258
240
) : Promise < Character [ ] > {
241
+ return await tracer . withActiveSpan ( 'loadCharacters' , async ( ) => {
259
242
let characterPaths = charactersArg
260
- ?. split ( "," )
261
- . map ( ( filePath ) => filePath . trim ( ) ) ;
243
+ ?. split ( "," )
244
+ . map ( ( filePath ) => filePath . trim ( ) ) ;
262
245
const loadedCharacters = [ ] ;
263
246
264
247
if ( characterPaths ?. length > 0 ) {
@@ -368,6 +351,7 @@ export async function loadCharacters(
368
351
}
369
352
370
353
return loadedCharacters ;
354
+ } )
371
355
}
372
356
373
357
export function getTokenForProvider (
0 commit comments