5353 prepareNextTraceAPIV4FastIPFn = ipgeo .PrepareNextTraceAPIV4FastIP
5454 newLeoWebsocketFn = wshandle .NewWithContext
5555 newLeoWebsocketAsyncFn = wshandle .NewWithContextAsync
56+ runFastTraceFn = fastTrace .FastTest
5657)
5758
5859func normalizeListenAddr (addr string ) string {
@@ -801,14 +802,23 @@ func maybeRunFastTraceMode(from string, fastTraceFlag bool, file string, params
801802 if from != "" || (! fastTraceFlag && file == "" ) {
802803 return false
803804 }
804- fastTrace . FastTest (method , params )
805+ runFastTraceFn (method , params )
805806 if params .OutputPath != "" {
806807 fmt .Printf ("您的追踪日志已经存放在 %s 中\n " , params .OutputPath )
807808 }
808- os .Exit (0 )
809809 return true
810810}
811811
812+ func runFastTraceModeWithRuntime (ctx context.Context , dn42 bool , dataOrigin * string , disableMaptrace * bool , powProvider * string , from string , fastTraceFlag bool , file string , params fastTrace.ParamsFastTrace , method trace.Method ) bool {
813+ if from != "" || (! fastTraceFlag && file == "" ) {
814+ return false
815+ }
816+ leoWs , runtimePrepared := prepareFastTraceRuntimeEnvironment (ctx , dn42 , dataOrigin , disableMaptrace , powProvider )
817+ defer closeLeoWebsocket (leoWs )
818+ params .RuntimePrepared = runtimePrepared
819+ return maybeRunFastTraceMode (from , fastTraceFlag , file , params , method )
820+ }
821+
812822func configureGeoDNS (dot string ) {
813823 if dot != "" {
814824 util .SetGeoDNSResolver (dot )
@@ -874,9 +884,20 @@ func prepareRuntimeEnvironment(ctx context.Context, dn42 bool, dataOrigin *strin
874884 return initLeoWebsocket (ctx , dataOrigin , powProvider , asyncLeo )
875885}
876886
887+ func prepareFastTraceRuntimeEnvironment (ctx context.Context , dn42 bool , dataOrigin * string , disableMaptrace * bool , powProvider * string ) (* wshandle.WsConn , bool ) {
888+ capabilitiesCheck ()
889+ applyDN42Mode (dn42 , dataOrigin , disableMaptrace )
890+ return initLeoRuntime (ctx , dataOrigin , powProvider , false )
891+ }
892+
877893func initLeoWebsocket (ctx context.Context , dataOrigin , powProvider * string , async bool ) * wshandle.WsConn {
894+ leoWs , _ := initLeoRuntime (ctx , dataOrigin , powProvider , async )
895+ return leoWs
896+ }
897+
898+ func initLeoRuntime (ctx context.Context , dataOrigin , powProvider * string , async bool ) (* wshandle.WsConn , bool ) {
878899 if ! strings .EqualFold (* dataOrigin , "LEOMOEAPI" ) {
879- return nil
900+ return nil , false
880901 }
881902 if ! strings .EqualFold (* powProvider , "api.nxtrace.org" ) {
882903 util .PowProviderParam = * powProvider
@@ -885,11 +906,11 @@ func initLeoWebsocket(ctx context.Context, dataOrigin, powProvider *string, asyn
885906 * dataOrigin = util .EnvDataProvider
886907 }
887908 if ! strings .EqualFold (* dataOrigin , "LEOMOEAPI" ) {
888- return nil
909+ return nil , false
889910 }
890911 if ipgeo .NextTraceAPIV4TokenConfigured () {
891912 if err := prepareNextTraceAPIV4FastIPFn (ctx , true ); err == nil {
892- return nil
913+ return nil , true
893914 }
894915 }
895916
@@ -899,7 +920,7 @@ func initLeoWebsocket(ctx context.Context, dataOrigin, powProvider *string, asyn
899920 } else {
900921 leoWs = newLeoWebsocketFn (ctx )
901922 }
902- return leoWs
923+ return leoWs , leoWs != nil
903924}
904925
905926func closeLeoWebsocket (leoWs * wshandle.WsConn ) {
@@ -1515,7 +1536,7 @@ func Execute() {
15151536 Dot : * dot ,
15161537 OutputPath : resolvedOutputPath ,
15171538 }
1518- if maybeRunFastTraceMode ( * from , * fastTraceFlag , * file , paramsFastTrace , method ) {
1539+ if runFastTraceModeWithRuntime ( rootCtx , * dn42 , dataOrigin , disableMaptrace , powProvider , * from , * fastTraceFlag , * file , paramsFastTrace , method ) {
15191540 return
15201541 }
15211542
0 commit comments