Skip to content

Commit b9c3911

Browse files
committed
Base logging functionality complete
1 parent 7dbb3ac commit b9c3911

File tree

5 files changed

+144
-31
lines changed

5 files changed

+144
-31
lines changed

config/config.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package config
2+
3+
import (
4+
"fmt"
5+
"os"
6+
7+
"github.com/spf13/viper"
8+
)
9+
10+
var config *viper.Viper
11+
12+
func init() {
13+
// Get config path
14+
dir, err := os.UserConfigDir()
15+
if err != nil {
16+
panic("failed to get user config dir")
17+
}
18+
19+
// Setup configuration
20+
config = viper.New()
21+
config.SetConfigName("config")
22+
config.SetConfigType("yaml")
23+
24+
sep := string(os.PathSeparator)
25+
config.AddConfigPath(dir + sep + "modem-cli")
26+
27+
// -- Defaults -- //
28+
config.SetDefault("modem.model", "dummy")
29+
config.SetDefault("modem.host", "127.0.0.1")
30+
31+
config.SetDefault("logging.general", "error")
32+
config.SetDefault("logging.driver", "error")
33+
34+
config.SetDefault("driver.cmd_ttl", 10)
35+
// -- Defaults -- //
36+
37+
err = config.ReadInConfig()
38+
if err != nil { // Handle errors reading the config file
39+
panic(fmt.Errorf("fatal error config file: %w", err))
40+
}
41+
}
42+
43+
func Sub(name string) *viper.Viper {
44+
return config.Sub(name)
45+
}

drivers/8810ft.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ import (
44
"encoding/json"
55
"fmt"
66
"io"
7+
"log/slog"
78
"net/http"
89
"net/url"
910
"strconv"
1011
"strings"
1112
"time"
1213

14+
"github.com/brokenCursor/usb-modem-cli/logging"
1315
"github.com/warthog618/sms/encoding/gsm7"
1416
)
1517

@@ -29,11 +31,16 @@ type (
2931
}
3032
)
3133

32-
var httpClient *http.Client
34+
var (
35+
httpClient *http.Client
36+
l *slog.Logger
37+
)
3338

3439
func init() {
40+
l = logging.GetDriverLogger("ZTE 8810FT")
3541
httpClient = &http.Client{Timeout: time.Second * 30}
3642
registerDriver("ZTE 8810FT", newZTE8810FT)
43+
l.Debug("driver registered")
3744
}
3845

3946
func newZTE8810FT(host string) BaseModem {

drivers/common.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package drivers
22

3-
import "fmt"
3+
import (
4+
"fmt"
5+
"log/slog"
6+
7+
"github.com/brokenCursor/usb-modem-cli/logging"
8+
)
49

510
// Modem interfaces
611

@@ -42,7 +47,14 @@ type (
4247
}
4348
)
4449

45-
var drivers map[string]func(host string) BaseModem = map[string]func(host string) BaseModem{}
50+
var (
51+
drivers map[string]func(host string) BaseModem = map[string]func(host string) BaseModem{}
52+
logger *slog.Logger
53+
)
54+
55+
func init() {
56+
logger = logging.GetGeneralLogger()
57+
}
4658

4759
func isRegistered(name string) bool {
4860
// Check if driver has already been registered
@@ -65,6 +77,7 @@ func GetModemDriver(model string, host string) (BaseModem, error) {
6577
return nil, ErrUnknownModel
6678
}
6779

80+
logger.Debug("driver instance created", "driver", model, "host", host)
6881
return drivers[model](host), nil
6982
}
7083

logging/logging.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package logging
2+
3+
import (
4+
"fmt"
5+
"log/slog"
6+
"os"
7+
8+
"github.com/brokenCursor/usb-modem-cli/config"
9+
)
10+
11+
var (
12+
general *slog.Logger
13+
driver *slog.Logger
14+
)
15+
16+
func init() {
17+
logConfig := config.Sub("logging")
18+
// Setup levels
19+
generalLevel, err := strToLevel(logConfig.GetString("general"))
20+
if err != nil {
21+
slog.Error("logging.general: ", err.Error(), nil)
22+
}
23+
24+
// Setup levels
25+
driverLevel, err := strToLevel(logConfig.GetString("driver"))
26+
if err != nil {
27+
slog.Error("logging.driver: ", err.Error(), nil)
28+
}
29+
30+
// Setup loggers
31+
general = slog.New(slog.NewTextHandler(os.Stdout,
32+
&slog.HandlerOptions{
33+
Level: generalLevel,
34+
AddSource: false,
35+
}))
36+
37+
driver = slog.New(slog.NewTextHandler(os.Stdout,
38+
&slog.HandlerOptions{
39+
Level: driverLevel,
40+
AddSource: true,
41+
}))
42+
43+
general.Debug("logging setup done")
44+
}
45+
46+
func strToLevel(level string) (res slog.Level, err error) {
47+
switch level {
48+
case "debug":
49+
res = slog.LevelDebug
50+
case "info":
51+
res = slog.LevelInfo
52+
case "warn":
53+
res = slog.LevelWarn
54+
case "error":
55+
res = slog.LevelError
56+
default:
57+
return slog.LevelInfo, fmt.Errorf("no %s logging level", level)
58+
}
59+
60+
return res, nil
61+
}
62+
63+
func GetGeneralLogger() *slog.Logger {
64+
return general
65+
}
66+
67+
func GetDriverLogger(name string) *slog.Logger {
68+
return driver.With("driver", name)
69+
}

mcli.go

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,27 @@
11
package main
22

33
import (
4-
"fmt"
4+
"log/slog"
55
"os"
66

77
"github.com/alexflint/go-arg"
8+
"github.com/brokenCursor/usb-modem-cli/config"
89
"github.com/brokenCursor/usb-modem-cli/drivers"
10+
"github.com/brokenCursor/usb-modem-cli/logging"
911
"github.com/go-playground/validator/v10"
1012
"github.com/i582/cfmt/cmd/cfmt"
11-
"github.com/spf13/viper"
1213
)
1314

1415
var (
1516
validate *validator.Validate
1617
args BaseArgs
17-
config *viper.Viper
18+
logger *slog.Logger
1819
)
1920

2021
func init() {
2122
// Create a single instance of validator
2223
validate = validator.New(validator.WithRequiredStructEnabled())
23-
24-
// Get config path
25-
dir, err := os.UserConfigDir()
26-
if err != nil {
27-
panic("failed to get user config dir")
28-
}
29-
30-
// Setup configuration
31-
config = viper.New()
32-
config.SetConfigName("config")
33-
config.SetConfigType("yaml")
34-
35-
sep := string(os.PathSeparator)
36-
config.AddConfigPath(dir + sep + "modem-cli")
37-
38-
config.SetDefault("modem.model", "dummy")
39-
config.SetDefault("modem.host", "127.0.0.1")
40-
41-
err = config.ReadInConfig()
42-
if err != nil { // Handle errors reading the config file
43-
panic(fmt.Errorf("fatal error config file: %w", err))
44-
}
24+
logger = logging.GetGeneralLogger()
4525
}
4626

4727
func main() {
@@ -65,11 +45,13 @@ func run() error {
6545
}
6646

6747
if args.DisableColor {
48+
logger.Debug("Colored output disabled")
6849
cfmt.DisableColors()
6950
}
7051

7152
// If IP has been overridden
7253
if len(args.Host) > 0 {
54+
logger.Debug("IP has been overridden")
7355
ip = args.Host
7456
}
7557

@@ -93,19 +75,16 @@ func run() error {
9375
switch args.Connection.Action {
9476
case "up":
9577
err := cell.ConnectCell()
96-
9778
if err != nil {
9879
return err
9980
}
10081
case "down":
10182
err := cell.DisconnectCell()
102-
10383
if err != nil {
10484
return err
10585
}
10686
case "status":
10787
status, err := cell.GetCellConnStatus()
108-
10988
if err != nil {
11089
return err
11190
}

0 commit comments

Comments
 (0)