@@ -12,18 +12,21 @@ import (
12
12
"github.com/spf13/cobra"
13
13
14
14
"github.com/museslabs/kyma/internal/config"
15
+ "github.com/museslabs/kyma/internal/logger"
15
16
"github.com/museslabs/kyma/internal/tui"
16
17
"github.com/museslabs/kyma/internal/tui/transitions"
17
18
)
18
19
19
20
var (
20
21
static bool
21
22
configPath string
23
+ logPath string
22
24
)
23
25
24
26
func init () {
25
27
rootCmd .Flags ().BoolVarP (& static , "static" , "s" , false , "Disable live reload (watch mode is enabled by default)" )
26
28
rootCmd .Flags ().StringVarP (& configPath , "config" , "c" , "" , "Path to config file" )
29
+ rootCmd .Flags ().StringVarP (& logPath , "log" , "l" , "" , "Path to log file (default: ~/.config/kyma/logs/<timestamp>.kyma.log)" )
27
30
rootCmd .AddCommand (versionCmd )
28
31
}
29
32
@@ -43,27 +46,41 @@ var rootCmd = &cobra.Command{
43
46
DisableDefaultCmd : true ,
44
47
},
45
48
RunE : func (cmd * cobra.Command , args []string ) error {
49
+ if err := logger .Load (logPath ); err != nil {
50
+ return fmt .Errorf ("failed to initialize logger: %w" , err )
51
+ }
52
+
53
+ logger .Info ("Starting Kyma" )
54
+
46
55
if err := config .Load (configPath ); err != nil {
56
+ logger .Error ("Failed to load config" , "error" , err , "config_path" , configPath )
47
57
return err
48
58
}
49
59
50
60
filename := args [0 ]
61
+ logger .Info ("Loading presentation" , "filename" , filename )
51
62
52
63
data , err := os .ReadFile (filename )
53
64
if err != nil {
65
+ logger .Error ("Failed to read presentation file" , "error" , err , "filename" , filename )
54
66
return err
55
67
}
56
68
57
69
root , err := parseSlides (string (data ))
58
70
if err != nil {
71
+ logger .Error ("Failed to parse slides" , "error" , err , "filename" , filename )
59
72
return err
60
73
}
61
74
75
+ logger .Info ("Successfully parsed presentation" )
76
+
62
77
p := tea .NewProgram (tui .New (root ), tea .WithAltScreen (), tea .WithMouseAllMotion ())
63
78
64
79
if ! static {
80
+ logger .Info ("Starting file watcher for live reload" )
65
81
watcher , err := fsnotify .NewWatcher ()
66
82
if err != nil {
83
+ logger .Error ("Failed to create file watcher" , "error" , err )
67
84
p .Send (tui.UpdateSlidesMsg {NewRoot : createErrorSlide (err , "none" )})
68
85
return nil
69
86
}
@@ -97,10 +114,13 @@ var rootCmd = &cobra.Command{
97
114
go watchFileChanges (watcher , p , filename , absPath , configPath )
98
115
}
99
116
117
+ logger .Info ("Starting TUI program" )
100
118
if _ , err := p .Run (); err != nil {
119
+ logger .Error ("TUI program failed" , "error" , err )
101
120
return err
102
121
}
103
122
123
+ logger .Info ("Kyma session ended" )
104
124
return nil
105
125
},
106
126
}
@@ -130,23 +150,29 @@ func watchFileChanges(
130
150
debounceTimer .Stop ()
131
151
}
132
152
debounceTimer = time .AfterFunc (100 * time .Millisecond , func () {
153
+ logger .Info ("File changed, reloading presentation" , "file" , event .Name )
154
+
133
155
data , err := os .ReadFile (filename )
134
156
if err != nil {
157
+ logger .Error ("Failed to read file during reload" , "error" , err , "filename" , filename )
135
158
p .Send (tui.UpdateSlidesMsg {NewRoot : createErrorSlide (err , "none" )})
136
159
return
137
160
}
138
161
139
162
if err := config .Load (configPath ); err != nil {
163
+ logger .Error ("Failed to reload config" , "error" , err , "config_path" , configPath )
140
164
p .Send (tui.UpdateSlidesMsg {NewRoot : createErrorSlide (err , "none" )})
141
165
return
142
166
}
143
167
144
168
newRoot , err := parseSlides (string (data ))
145
169
if err != nil {
170
+ logger .Error ("Failed to parse slides during reload" , "error" , err , "filename" , filename )
146
171
p .Send (tui.UpdateSlidesMsg {NewRoot : createErrorSlide (err , "none" )})
147
172
return
148
173
}
149
174
175
+ logger .Info ("Successfully reloaded presentation" )
150
176
p .Send (tui.UpdateSlidesMsg {NewRoot : newRoot })
151
177
})
152
178
}
@@ -162,6 +188,7 @@ func watchFileChanges(
162
188
163
189
func Execute () {
164
190
if err := rootCmd .Execute (); err != nil {
191
+ logger .Error ("Application failed" , "error" , err )
165
192
fmt .Fprintln (os .Stderr , err )
166
193
os .Exit (1 )
167
194
}
0 commit comments