this repo has no description smallweb.run
smallweb
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

update logs api

pomdtr 21222de2 9366a3de

+34 -25
+34 -25
cmd/logs.go
··· 50 50 51 51 func NewCmdLogs() *cobra.Command { 52 52 var flags struct { 53 - app string 54 53 template string 55 54 remote string 56 - console bool 55 + logType string 57 56 } 58 57 59 58 cmd := &cobra.Command{ 60 - Use: "logs", 59 + Use: "logs [app]", 61 60 Aliases: []string{"log"}, 62 - ValidArgsFunction: cobra.FixedCompletions([]string{"http", "console"}, cobra.ShellCompDirectiveNoFileComp), 61 + ValidArgsFunction: completeApp, 63 62 Short: "View app logs", 64 - Args: cobra.NoArgs, 63 + Args: cobra.MaximumNArgs(1), 65 64 PreRunE: func(cmd *cobra.Command, args []string) error { 66 65 flagProvider := posflag.Provider(cmd.Flags(), ".", k) 67 66 _ = k.Load(flagProvider, nil) 68 67 return nil 69 68 }, 70 69 RunE: func(cmd *cobra.Command, args []string) error { 70 + var appName string 71 + if len(args) == 0 { 72 + cwd, err := os.Getwd() 73 + if err != nil { 74 + return fmt.Errorf("failed to get current directory: %w", err) 75 + } 76 + 77 + if filepath.Dir(cwd) != k.String("dir") { 78 + return fmt.Errorf("no app specified and not in an app directory") 79 + } 80 + 81 + appName = filepath.Base(cwd) 82 + } else { 83 + appName = args[0] 84 + } 85 + 71 86 if remote := k.String("remote"); remote != "" { 72 87 cmd := exec.Command("ssh", remote, "smallweb", "logs") 73 - if flags.app != "" { 74 - cmd.Args = append(cmd.Args, "--app", flags.app) 75 - } 88 + cmd.Args = append(cmd.Args, args...) 76 89 77 - if flags.console { 78 - cmd.Args = append(cmd.Args, "--console") 90 + if flags.logType != "" { 91 + cmd.Args = append(cmd.Args, "--type", flags.logType) 79 92 } 80 93 81 94 if flags.template != "" { ··· 94 107 } 95 108 96 109 var logFilename string 97 - if flags.console { 110 + if flags.logType == "console" { 98 111 logFilename = GetLogFilename(k.String("domain"), "console") 99 112 } else { 100 113 logFilename = GetLogFilename(k.String("domain"), "http") ··· 122 135 defer f.Close() 123 136 _, _ = f.Seek(0, io.SeekEnd) 124 137 125 - if flags.console { 138 + if flags.logType == "console" { 126 139 127 140 reader := bufio.NewReader(f) 128 141 for { ··· 139 152 return fmt.Errorf("failed to unmarshal log line: %w", err) 140 153 } 141 154 142 - if flags.app != "" && log.App != flags.app { 155 + if log.App != appName { 143 156 continue 144 157 } 145 158 ··· 167 180 } 168 181 169 182 hosts := make(map[string]struct{}) 170 - if flags.app != "" { 171 - appName := flags.app 172 - hosts[fmt.Sprintf("%s.%s", appName, k.String("domain"))] = struct{}{} 183 + hosts[fmt.Sprintf("%s.%s", appName, k.String("domain"))] = struct{}{} 173 184 174 - for domain, app := range k.StringMap("customDomains") { 175 - if app != appName { 176 - continue 177 - } 178 - 179 - hosts[domain] = struct{}{} 185 + for domain, app := range k.StringMap("customDomains") { 186 + if app != appName { 187 + continue 180 188 } 189 + 190 + hosts[domain] = struct{}{} 181 191 } 182 192 183 193 // Stream new lines as they are added ··· 197 207 return fmt.Errorf("failed to unmarshal log line: %w", err) 198 208 } 199 209 200 - if _, ok := hosts[log.Request.Host]; flags.app != "" && !ok { 210 + if _, ok := hosts[log.Request.Host]; !ok { 201 211 continue 202 212 } 203 213 ··· 227 237 228 238 cmd.Flags().StringVar(&flags.template, "template", "", "output logs using a Go template") 229 239 cmd.Flags().StringVar(&flags.remote, "remote", "", "ssh remote") 230 - cmd.Flags().StringVar(&flags.app, "app", "", "filter by app") 231 240 _ = cmd.RegisterFlagCompletionFunc("app", completeApp) 232 - cmd.Flags().BoolVar(&flags.console, "console", false, "output console logs") 241 + cmd.Flags().StringVar(&flags.logType, "type", "http", "log type") 233 242 234 243 return cmd 235 244 }