Skip to content

Commit

Permalink
Refactor log flags handling to common helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
sairon committed Apr 11, 2024
1 parent 582c628 commit c6c332b
Show file tree
Hide file tree
Showing 8 changed files with 81 additions and 277 deletions.
50 changes: 50 additions & 0 deletions client/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"bufio"
"encoding/json"
"fmt"
"github.com/spf13/cobra"
"io"
"net/url"
"os"
Expand Down Expand Up @@ -218,3 +219,52 @@ func AskForConfirmation(prompt string, tries int) bool {
}
return false
}

func AddLogsFlags(cmd *cobra.Command) {
cmd.Flags().BoolP("follow", "f", false, "Continuously print new log entries")
cmd.Flags().Int32P("lines", "n", 0, "Number of log entries to show")
cmd.Flags().StringP("boot", "b", "", "Logs of particular boot ID")
cmd.Flags().BoolP("verbose", "v", false, "Return logs in verbose format")
cmd.Flags().Lookup("follow").NoOptDefVal = "true"
cmd.Flags().Lookup("verbose").NoOptDefVal = "true"
}

func ProcessLogsFlags(section string, cmd *cobra.Command) (*resty.Request, error) {
command := "logs"

boot, _ := cmd.Flags().GetString("boot")
if len(boot) > 0 {
command += "/boots/{boot}"
}

follow, _ := cmd.Flags().GetBool("follow")
if follow {
command += "/follow"
}

URL, err := URLHelper(section, command)
if err != nil {
return nil, err
}

accept := "text/plain"
verbose, _ := cmd.Flags().GetBool("verbose")
if verbose {
accept = "text/x-log"
}

/* Disable timeouts to allow following forever */
request := GetRequestTimeout(0).SetHeader("Accept", accept).SetDoNotParseResponse(true)

lines, _ := cmd.Flags().GetInt32("lines")
if lines > 0 {
rangeHeader := fmt.Sprintf("entries=:%d:", -(lines - 1))
log.WithField("value", rangeHeader).Debug("Range header")
request.SetHeader("Range", rangeHeader)
}

request.SetPathParam("boot", boot)
request.URL = URL

return request, nil
}
56 changes: 6 additions & 50 deletions cmd/addons_logs.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package cmd

import (
"errors"
"fmt"

helper "github.com/home-assistant/cli/client"
Expand All @@ -24,58 +23,20 @@ Allowing you to look at the log output generated by a Home Assistant add-on.
Run: func(cmd *cobra.Command, args []string) {
log.WithField("args", args).Debug("addons logs")

section := "addons"
command := "{slug}/logs"
section := "addons/{slug}"

boot, _ := cmd.Flags().GetString("boot")
if len(boot) > 0 {
command += "/boots/{boot}"
}

follow, _ := cmd.Flags().GetBool("follow")
if follow {
command += "/follow"
}

url, err := helper.URLHelper(section, command)
request, err := helper.ProcessLogsFlags(section, cmd)

if err != nil {
fmt.Println(err)
fmt.Printf("Error: %v", err)
ExitWithError = true
return
}

accept := "text/plain"
verbose, _ := cmd.Flags().GetBool("verbose")
if verbose {
accept = "text/x-log"
}

/* Disable timeouts to allow following forever */
request := helper.GetRequestTimeout(0).SetHeader("Accept", accept).SetDoNotParseResponse(true)

lines, _ := cmd.Flags().GetInt32("lines")
if lines > 0 {
rangeHeader := fmt.Sprintf("entries=:%d:", -(lines - 1))
log.WithField("value", rangeHeader).Debug("Range header")
request.SetHeader("Range", rangeHeader)
}

request.SetPathParam("boot", boot)

slug := args[0]
request.SetPathParam("slug", slug)

request.SetPathParams(map[string]string{
"slug": slug,
})

resp, err := request.Get(url)

// returns 200 OK or 400, everything else is wrong
if err == nil && resp.StatusCode() != 200 && resp.StatusCode() != 400 {
err = errors.New("Unexpected server response")
log.Error(err)
}
resp, err := request.Send()

if err != nil {
fmt.Println(err)
Expand All @@ -88,12 +49,7 @@ Allowing you to look at the log output generated by a Home Assistant add-on.
}

func init() {
addonsLogsCmd.Flags().BoolP("follow", "f", false, "Continuously print new log entries")
addonsLogsCmd.Flags().Int32P("lines", "n", 0, "Number of log entries to show")
addonsLogsCmd.Flags().StringP("boot", "b", "", "Logs of particular boot ID")
addonsLogsCmd.Flags().BoolP("verbose", "v", false, "Return logs in verbose format")
addonsLogsCmd.Flags().Lookup("follow").NoOptDefVal = "true"
addonsLogsCmd.Flags().Lookup("verbose").NoOptDefVal = "true"
helper.AddLogsFlags(addonsLogsCmd)

addonsCmd.AddCommand(addonsLogsCmd)
}
39 changes: 3 additions & 36 deletions cmd/audio_logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,44 +23,16 @@ running on your Home Assistant system.`,
log.WithField("args", args).Debug("audio logs")

section := "audio"
command := "logs"

boot, _ := cmd.Flags().GetString("boot")
if len(boot) > 0 {
command += "/boots/{boot}"
}

follow, _ := cmd.Flags().GetBool("follow")
if follow {
command += "/follow"
}
request, err := helper.ProcessLogsFlags(section, cmd)

url, err := helper.URLHelper(section, command)
if err != nil {
fmt.Printf("Error: %v", err)
ExitWithError = true
return
}

accept := "text/plain"
verbose, _ := cmd.Flags().GetBool("verbose")
if verbose {
accept = "text/x-log"
}

/* Disable timeouts to allow following forever */
request := helper.GetRequestTimeout(0).SetHeader("Accept", accept).SetDoNotParseResponse(true)

lines, _ := cmd.Flags().GetInt32("lines")
if lines > 0 {
rangeHeader := fmt.Sprintf("entries=:%d:", -(lines - 1))
log.WithField("value", rangeHeader).Debug("Range header")
request.SetHeader("Range", rangeHeader)
}

request.SetPathParam("boot", boot)

resp, err := request.Get(url)
resp, err := request.Send()

if err != nil {
fmt.Println(err)
Expand All @@ -73,12 +45,7 @@ running on your Home Assistant system.`,
}

func init() {
audioLogsCmd.Flags().BoolP("follow", "f", false, "Continuously print new log entries")
audioLogsCmd.Flags().Int32P("lines", "n", 0, "Number of log entries to show")
audioLogsCmd.Flags().StringP("boot", "b", "", "Logs of particular boot ID")
audioLogsCmd.Flags().BoolP("verbose", "v", false, "Return logs in verbose format")
audioLogsCmd.Flags().Lookup("follow").NoOptDefVal = "true"
audioLogsCmd.Flags().Lookup("verbose").NoOptDefVal = "true"
helper.AddLogsFlags(audioLogsCmd)

audioCmd.AddCommand(audioLogsCmd)
}
39 changes: 3 additions & 36 deletions cmd/core_logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,44 +23,16 @@ running on your Home Assistant system.`,
log.WithField("args", args).Debug("core logs")

section := "core"
command := "logs"

boot, _ := cmd.Flags().GetString("boot")
if len(boot) > 0 {
command += "/boots/{boot}"
}

follow, _ := cmd.Flags().GetBool("follow")
if follow {
command += "/follow"
}
request, err := helper.ProcessLogsFlags(section, cmd)

url, err := helper.URLHelper(section, command)
if err != nil {
fmt.Printf("Error: %v", err)
ExitWithError = true
return
}

accept := "text/plain"
verbose, _ := cmd.Flags().GetBool("verbose")
if verbose {
accept = "text/x-log"
}

/* Disable timeouts to allow following forever */
request := helper.GetRequestTimeout(0).SetHeader("Accept", accept).SetDoNotParseResponse(true)

lines, _ := cmd.Flags().GetInt32("lines")
if lines > 0 {
rangeHeader := fmt.Sprintf("entries=:%d:", -(lines - 1))
log.WithField("value", rangeHeader).Debug("Range header")
request.SetHeader("Range", rangeHeader)
}

request.SetPathParam("boot", boot)

resp, err := request.Get(url)
resp, err := request.Send()

if err != nil {
fmt.Println(err)
Expand All @@ -73,12 +45,7 @@ running on your Home Assistant system.`,
}

func init() {
coreLogsCmd.Flags().BoolP("follow", "f", false, "Continuously print new log entries")
coreLogsCmd.Flags().Int32P("lines", "n", 0, "Number of log entries to show")
coreLogsCmd.Flags().StringP("boot", "b", "", "Logs of particular boot ID")
coreLogsCmd.Flags().BoolP("verbose", "v", false, "Return logs in verbose format")
coreLogsCmd.Flags().Lookup("follow").NoOptDefVal = "true"
coreLogsCmd.Flags().Lookup("verbose").NoOptDefVal = "true"
helper.AddLogsFlags(coreLogsCmd)

coreCmd.AddCommand(coreLogsCmd)
}
41 changes: 4 additions & 37 deletions cmd/dns_logs.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,61 +24,28 @@ Allowing you to look at the log output generated by the Home Assistant DNS serve
log.WithField("args", args).Debug("dns logs")

section := "dns"
command := "logs"

boot, _ := cmd.Flags().GetString("boot")
if len(boot) > 0 {
command += "/boots/{boot}"
}

follow, _ := cmd.Flags().GetBool("follow")
if follow {
command += "/follow"
}
request, err := helper.ProcessLogsFlags(section, cmd)

url, err := helper.URLHelper(section, command)
if err != nil {
fmt.Printf("Error: %v", err)
ExitWithError = true
return
}

accept := "text/plain"
verbose, _ := cmd.Flags().GetBool("verbose")
if verbose {
accept = "text/x-log"
}

/* Disable timeouts to allow following forever */
request := helper.GetRequestTimeout(0).SetHeader("Accept", accept).SetDoNotParseResponse(true)

lines, _ := cmd.Flags().GetInt32("lines")
if lines > 0 {
rangeHeader := fmt.Sprintf("entries=:%d:", -(lines - 1))
log.WithField("value", rangeHeader).Debug("Range header")
request.SetHeader("Range", rangeHeader)
}

request.SetPathParam("boot", boot)

resp, err := request.Get(url)
resp, err := request.Send()

if err != nil {
fmt.Println(err)
ExitWithError = true
return
}

ExitWithError = !helper.StreamTextResponse(resp)
},
}

func init() {
dnsLogsCmd.Flags().BoolP("follow", "f", false, "Continuously print new log entries")
dnsLogsCmd.Flags().Int32P("lines", "n", 0, "Number of log entries to show")
dnsLogsCmd.Flags().StringP("boot", "b", "", "Logs of particular boot ID")
dnsLogsCmd.Flags().BoolP("verbose", "v", false, "Return logs in verbose format")
dnsLogsCmd.Flags().Lookup("follow").NoOptDefVal = "true"
dnsLogsCmd.Flags().Lookup("verbose").NoOptDefVal = "true"
helper.AddLogsFlags(dnsLogsCmd)

dnsCmd.AddCommand(dnsLogsCmd)
}
Loading

0 comments on commit c6c332b

Please sign in to comment.