@@ -2,10 +2,10 @@ package main
22
33import (
44 "context"
5+ "fmt"
56 "log/slog"
67 "os"
78 "os/signal"
8- "path/filepath"
99 "syscall"
1010
1111 "github.com/ThreeDotsLabs/watermill"
@@ -25,36 +25,22 @@ var (
2525 ppToken = ""
2626)
2727
28- func getConfigPath () string {
29- homeDir , err := os .UserHomeDir ()
30- if err != nil {
31- slog .Error ("Failed to get user home directory" , slog .Any ("err" , err ))
32- return ""
33- }
34- return filepath .Join (homeDir , ".shelltime" , "config.toml" )
35- }
36-
3728func main () {
3829 l := slog .New (slog .NewTextHandler (os .Stdout , & slog.HandlerOptions {
3930 AddSource : true ,
4031 Level : slog .LevelDebug ,
4132 }))
4233 slog .SetDefault (l )
4334
44- daemonConfigService := daemon .NewConfigService (daemon .DefaultConfigPath )
45- daemonConfig , err := daemonConfigService .GetConfig ()
35+ ctx := context .Background ()
36+ configFile := os .ExpandEnv (fmt .Sprintf ("%s/%s/%s" , "$HOME" , model .COMMAND_BASE_STORAGE_FOLDER , "config.toml" ))
37+ daemonConfigService := model .NewConfigService (configFile )
38+ cfg , err := daemonConfigService .ReadConfigFile (ctx )
4639 if err != nil {
4740 slog .Error ("Failed to get daemon config" , slog .Any ("err" , err ))
4841 return
4942 }
5043
51- cs , err := daemonConfigService .GetUserConfig ()
52- if err != nil {
53- slog .Error ("Failed to get user config" , slog .Any ("err" , err ))
54- return
55- }
56-
57- ctx := context .Background ()
5844 uptraceOptions := []uptrace.Option {
5945 uptrace .WithDSN (uptraceDsn ),
6046 uptrace .WithServiceName ("cli-daemon" ),
@@ -66,7 +52,6 @@ func main() {
6652 uptraceOptions = append (uptraceOptions , uptrace .WithResourceAttributes (attribute .String ("hostname" , hs )))
6753 }
6854
69- cfg , err := cs .ReadConfigFile (ctx )
7055 if err != nil ||
7156 cfg .EnableMetrics == nil ||
7257 * cfg .EnableMetrics == false ||
@@ -82,7 +67,7 @@ func main() {
8267 defer uptrace .Shutdown (ctx )
8368 defer uptrace .ForceFlush (ctx )
8469
85- daemon .Init (cs , version )
70+ daemon .Init (daemonConfigService , version )
8671 model .InjectVar (version )
8772 cmdService := model .NewCommandService ()
8873
@@ -96,7 +81,7 @@ func main() {
9681
9782 go daemon .SocketTopicProccessor (msg )
9883
99- // Start CCUsage service if enabled
84+ // Start CCUsage service if enabled (v1 - ccusage CLI based)
10085 if cfg .CCUsage != nil && cfg .CCUsage .Enabled != nil && * cfg .CCUsage .Enabled {
10186 ccUsageService := model .NewCCUsageService (cfg , cmdService )
10287 if err := ccUsageService .Start (ctx ); err != nil {
@@ -107,8 +92,21 @@ func main() {
10792 }
10893 }
10994
95+ // Start CCOtel service if enabled (v2 - OTEL gRPC passthrough)
96+ var ccOtelServer * daemon.CCOtelServer
97+ if cfg .CCOtel != nil && cfg .CCOtel .Enabled != nil && * cfg .CCOtel .Enabled {
98+ ccOtelProcessor := daemon .NewCCOtelProcessor (cfg )
99+ ccOtelServer = daemon .NewCCOtelServer (cfg .CCOtel .GRPCPort , ccOtelProcessor )
100+ if err := ccOtelServer .Start (); err != nil {
101+ slog .Error ("Failed to start CCOtel gRPC server" , slog .Any ("err" , err ))
102+ } else {
103+ slog .Info ("CCOtel gRPC server started" , slog .Int ("port" , cfg .CCOtel .GRPCPort ))
104+ defer ccOtelServer .Stop ()
105+ }
106+ }
107+
110108 // Create processor instance
111- processor := daemon .NewSocketHandler (daemonConfig , pubsub )
109+ processor := daemon .NewSocketHandler (& cfg , pubsub )
112110
113111 // Start processor
114112 if err := processor .Start (); err != nil {
0 commit comments