Skip to content

Commit 2bc9920

Browse files
authored
chore: restructuring and simplification (#158)
* Updated ignores * Added mocks * Added/updated actions * Changed proto path * Updated utils * Updated data transfer * Updatted logging * Added encryption Added encryptor * Updated docs a bit * Improved docker build - now using ldflags * Removed * Rework WIP * fix: use ocpp manager v1.3, fix compile time issues, resolve mock generation * fix: compilation issues * fix: remove logrus entirely * chore: naming convention enforcement + log fix * chore: fmt * chore: remove duplicate workflows * fix: build issue * chore: minor code style improvements
1 parent 773ed9b commit 2bc9920

File tree

299 files changed

+22446
-9763
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

299 files changed

+22446
-9763
lines changed

.dockerignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88

99
*.md
1010
.idea
11+
.run
1112
.github/
1213
build/
1314
docs/
1415
deployments/
16+
17+
ui/node_modules
18+
ui/build
19+
ui/.next

.github/workflows/buf.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: buf.yaml
1+
name: "Buf"
22
on:
33
pull_request:
44
branches:

.github/workflows/test.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: "Test and lint"
1+
name: "Test"
22

33
on:
44
push:

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ configs
1313
rpi_ws281x
1414
ui/.next
1515
ui/build
16+
*.env
1617
libnfc-*

.golangci.yaml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,16 @@ linters:
2323
exclusions:
2424
generated: lax
2525
paths:
26-
- ./gen
27-
- ./pkg/reader
26+
- ./gen/*
27+
- ./pkg/hardware/reader
2828
formatters:
2929
settings:
3030
goimports:
3131
local-prefixes:
3232
- github.com/ChargePi/ChargePi-go
3333
enable:
3434
- gofmt
35-
- goimports
35+
- goimports
36+
exclusions:
37+
paths:
38+
- gen/*

build/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ COPY --from=base /ChargePi/src/ChargePi /usr/bin/ChargePi
9090
COPY --from=build-ui /ui/build/* /usr/bin/ui/build/*
9191

9292
EXPOSE 8080
93-
HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost:8081/healthz || exit 1
93+
HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost:8080/healthz || exit 1
9494

9595
ENTRYPOINT ["ChargePi"]
9696
CMD ["-c", "/etc/ChargePi/configs/config.yaml", "run"]

cmd/charge_point.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package cmd
2+
3+
import (
4+
"context"
5+
6+
"go.uber.org/zap"
7+
8+
"github.com/lorenzodonini/ocpp-go/ocpp1.6/core"
9+
"github.com/lorenzodonini/ocpp-go/ocpp1.6/localauth"
10+
"github.com/lorenzodonini/ocpp-go/ocpp1.6/remotetrigger"
11+
"github.com/lorenzodonini/ocpp-go/ocpp1.6/reservation"
12+
"github.com/pkg/errors"
13+
14+
"github.com/ChargePi/ChargePi-go/internal/auth"
15+
"github.com/ChargePi/ChargePi-go/internal/chargepoint"
16+
v16 "github.com/ChargePi/ChargePi-go/internal/chargepoint/v16"
17+
"github.com/ChargePi/ChargePi-go/internal/diagnostics"
18+
"github.com/ChargePi/ChargePi-go/internal/evse/manager"
19+
settings "github.com/ChargePi/ChargePi-go/internal/pkg/configuration/manager"
20+
"github.com/ChargePi/ChargePi-go/internal/sessions"
21+
"github.com/ChargePi/ChargePi-go/pkg/hardware/indicator"
22+
"github.com/ChargePi/ChargePi-go/pkg/ocpp"
23+
)
24+
25+
var supportedOcppV16Profiles = []string{
26+
core.ProfileName,
27+
reservation.ProfileName,
28+
remotetrigger.ProfileName,
29+
localauth.ProfileName,
30+
}
31+
32+
// NewChargePoint Creates a OCPP-enabled charge point based on the protocol version
33+
func NewChargePoint(
34+
ctx context.Context,
35+
protocolVersion ocpp.ProtocolVersion,
36+
logger *zap.Logger,
37+
manager manager.Manager,
38+
tagManager auth.Service,
39+
settingsManager settings.Manager,
40+
sessionManager sessions.Service,
41+
diagnosticsManager diagnostics.Service,
42+
hardware chargepoint.Hardware,
43+
) (chargepoint.ChargePoint, error) {
44+
45+
// Create a status indicator (if enabled)
46+
statusIndicator := indicator.NewIndicator(len(manager.GetEVSEs()), hardware.Indicator)
47+
48+
// Attach additional components based on the configuration
49+
opts := []chargepoint.Options{
50+
chargepoint.WithDisplayFromSettings(hardware.Display),
51+
chargepoint.WithReaderFromSettings(ctx, hardware.TagReader),
52+
chargepoint.WithLogger(logger),
53+
chargepoint.WithIndicator(statusIndicator),
54+
}
55+
56+
switch protocolVersion {
57+
case ocpp.OCPP16:
58+
// Setup OCPP configuration from the database
59+
return v16.NewChargePoint(logger, manager, settingsManager, tagManager, sessionManager, diagnosticsManager, opts...)
60+
case ocpp.OCPP201:
61+
return nil, errors.New("Version 2.0.1 is not supported yet.")
62+
default:
63+
return nil, errors.New("Invalid protocol version")
64+
}
65+
}

cmd/export.go

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,59 @@ package cmd
33
import (
44
"fmt"
55

6-
"github.com/ChargePi/ChargePi-go/internal/pkg/models/settings"
7-
cfg "github.com/ChargePi/ChargePi-go/internal/pkg/settings"
6+
"go.uber.org/zap"
7+
8+
"github.com/ChargePi/ocpp-manager/ocpp_v16"
89
"github.com/spf13/cobra"
10+
11+
"github.com/ChargePi/ChargePi-go/internal/auth"
12+
"github.com/ChargePi/ChargePi-go/internal/chargepoint"
13+
"github.com/ChargePi/ChargePi-go/internal/pkg/badger"
14+
cfg "github.com/ChargePi/ChargePi-go/internal/pkg/configuration"
15+
exporter2 "github.com/ChargePi/ChargePi-go/internal/pkg/configuration/exporter"
16+
"github.com/ChargePi/ChargePi-go/internal/pkg/configuration/manager"
917
)
1018

1119
var (
1220
exportEvseFolderPath *string
1321
exportOcppConfigurationFilePath *string
1422
exportAuthFilePath *string
1523
exportSettingsFilePath *string
24+
databasePath *string
1625
)
1726

1827
// exportCommand represents the export command
1928
func exportCommand() *cobra.Command {
2029
exportCmd := &cobra.Command{
21-
Use: "export",
22-
Short: "Export settings from ChargePi.",
23-
Long: ``,
30+
Use: "export",
31+
Short: "Export settings from ChargePi.",
32+
Long: ``,
33+
Version: chargepoint.FirmwareVersion,
2434
RunE: func(cmd *cobra.Command, args []string) error {
25-
exporter := cfg.GetExporter()
35+
db, err := badger.NewBadgerDb(*databasePath)
36+
if err != nil {
37+
return fmt.Errorf("could not create database: %v", err)
38+
}
39+
40+
logger := zap.L()
41+
tagManager := auth.NewManager(logger, db, db)
42+
43+
configurationManager, err := ocpp_v16.NewV16ConfigurationManager(ocpp_v16.NewEmptyConfiguration())
44+
if err != nil {
45+
return fmt.Errorf("could not create OCPP configuration manager: %v", err)
46+
}
47+
48+
settingsManager, err := manager.NewManager(logger, db, db, configurationManager)
49+
if err != nil {
50+
return fmt.Errorf("could not create settings manager: %v", err)
51+
}
52+
53+
exporter := exporter2.NewExporter(logger, tagManager, settingsManager, db)
2654

27-
evseFlag := cmd.Flags().Lookup(settings.EvseFlag).Changed
28-
ocppFlag := cmd.Flags().Lookup(settings.OcppConfigPathFlag).Changed
29-
authFlag := cmd.Flags().Lookup(settings.AuthFileFlag).Changed
30-
settingsFlag := cmd.Flags().Lookup(settings.SettingsFlag).Changed
55+
evseFlag := cmd.Flags().Lookup(cfg.EvseFlag).Changed
56+
ocppFlag := cmd.Flags().Lookup(cfg.OcppConfigPathFlag).Changed
57+
authFlag := cmd.Flags().Lookup(cfg.AuthFileFlag).Changed
58+
settingsFlag := cmd.Flags().Lookup(cfg.SettingsFlag).Changed
3159

3260
// If the flag was set, export the EVSE configurations
3361
if evseFlag {
@@ -65,10 +93,11 @@ func exportCommand() *cobra.Command {
6593
},
6694
}
6795

68-
exportEvseFolderPath = exportCmd.Flags().String(settings.EvseFlag, "./configs/evses", "evse folder path")
69-
exportOcppConfigurationFilePath = exportCmd.Flags().String(settings.OcppConfigPathFlag, "./configs/ocpp.yaml", "OCPP config file path")
70-
exportAuthFilePath = exportCmd.Flags().String(settings.AuthFileFlag, "./configs/authorization.yaml", "authorization file path")
71-
exportSettingsFilePath = exportCmd.Flags().String(settings.SettingsFlag, "./configs/settings.yaml", "settings file path")
96+
exportEvseFolderPath = exportCmd.Flags().String(cfg.EvseFlag, "./configs/evses", "evse folder path")
97+
exportOcppConfigurationFilePath = exportCmd.Flags().String(cfg.OcppConfigPathFlag, "./configs/ocpp.yaml", "OCPP config file path")
98+
exportAuthFilePath = exportCmd.Flags().String(cfg.AuthFileFlag, "./configs/authorization.yaml", "authorization file path")
99+
exportSettingsFilePath = exportCmd.Flags().String(cfg.SettingsFlag, "./configs/settings.yaml", "settings file path")
100+
databasePath = exportCmd.Flags().String("database", cfg.DatabasePath, "database path")
72101

73102
return exportCmd
74103
}

cmd/import.go

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,16 @@ package cmd
33
import (
44
"fmt"
55

6-
"github.com/ChargePi/ChargePi-go/internal/pkg/models/settings"
7-
cfg "github.com/ChargePi/ChargePi-go/internal/pkg/settings"
8-
"github.com/ChargePi/ChargePi-go/pkg/models/ocpp"
6+
"github.com/ChargePi/ocpp-manager/ocpp_v16"
97
"github.com/spf13/cobra"
8+
"go.uber.org/zap"
9+
10+
"github.com/ChargePi/ChargePi-go/internal/chargepoint"
11+
"github.com/ChargePi/ChargePi-go/internal/pkg/badger"
12+
cfg "github.com/ChargePi/ChargePi-go/internal/pkg/configuration"
13+
importer2 "github.com/ChargePi/ChargePi-go/internal/pkg/configuration/importer"
14+
"github.com/ChargePi/ChargePi-go/internal/pkg/configuration/manager"
15+
"github.com/ChargePi/ChargePi-go/pkg/ocpp"
1016
)
1117

1218
var (
@@ -20,16 +26,34 @@ var (
2026
// importCmd represents the import command
2127
func importCommand() *cobra.Command {
2228
importCmd := &cobra.Command{
23-
Use: "import",
24-
Short: "Import configurations to ChargePi.",
25-
Long: ``,
29+
Use: "import",
30+
Short: "Import configurations to ChargePi.",
31+
Long: ``,
32+
Version: chargepoint.FirmwareVersion,
2633
RunE: func(cmd *cobra.Command, args []string) error {
27-
importer := cfg.GetImporter()
34+
db, err := badger.NewBadgerDb(*databasePath)
35+
if err != nil {
36+
return fmt.Errorf("could not create database: %v", err)
37+
}
38+
39+
logger := zap.L()
40+
41+
configurationManager, err := ocpp_v16.NewV16ConfigurationManager(ocpp_v16.NewEmptyConfiguration())
42+
if err != nil {
43+
return fmt.Errorf("could not create OCPP configuration manager: %v", err)
44+
}
45+
46+
settingsManager, err := manager.NewManager(logger, db, db, configurationManager)
47+
if err != nil {
48+
return fmt.Errorf("could not create settings manager: %v", err)
49+
}
50+
51+
importer := importer2.NewImporter(logger, settingsManager, db, db)
2852

29-
evseFlag := cmd.Flags().Lookup(settings.EvseFlag).Changed
30-
ocppFlag := cmd.Flags().Lookup(settings.OcppConfigPathFlag).Changed
31-
authFlag := cmd.Flags().Lookup(settings.AuthFileFlag).Changed
32-
settingsFlag := cmd.Flags().Lookup(settings.SettingsFlag).Changed
53+
evseFlag := cmd.Flags().Lookup(cfg.EvseFlag).Changed
54+
ocppFlag := cmd.Flags().Lookup(cfg.OcppConfigPathFlag).Changed
55+
authFlag := cmd.Flags().Lookup(cfg.AuthFileFlag).Changed
56+
settingsFlag := cmd.Flags().Lookup(cfg.SettingsFlag).Changed
3357

3458
if evseFlag {
3559
// If a directory is specified, (try to) import all the files in that directory.
@@ -66,11 +90,11 @@ func importCommand() *cobra.Command {
6690
},
6791
}
6892

69-
evseFolderPath = importCmd.Flags().String(settings.EvseFlag, "", "evse folder path")
70-
ocppConfigurationFilePath = importCmd.Flags().String(settings.OcppConfigPathFlag, "", "OCPP config file path")
71-
ocppVersionFlag = importCmd.Flags().StringP(settings.OcppVersion, "v", "1.6", "OCPP config file path")
72-
authFilePath = importCmd.Flags().String(settings.AuthFileFlag, "", "authorization file path")
73-
importSettingsFilePath = importCmd.Flags().String(settings.SettingsFlag, "", "settings file path")
93+
evseFolderPath = importCmd.Flags().String(cfg.EvseFlag, "", "evse folder path")
94+
ocppConfigurationFilePath = importCmd.Flags().String(cfg.OcppConfigPathFlag, "", "OCPP config file path")
95+
ocppVersionFlag = importCmd.Flags().StringP(cfg.OcppVersion, "v", "1.6", "OCPP config file path")
96+
authFilePath = importCmd.Flags().String(cfg.AuthFileFlag, "", "authorization file path")
97+
importSettingsFilePath = importCmd.Flags().String(cfg.SettingsFlag, "", "settings file path")
7498

7599
return importCmd
76100
}

cmd/root.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package cmd
22

33
import (
4-
"github.com/ChargePi/ChargePi-go/internal/pkg/models/settings"
5-
"github.com/ChargePi/ChargePi-go/pkg/observability/logging"
4+
"context"
5+
"os"
6+
"os/signal"
7+
"syscall"
8+
69
"github.com/spf13/cobra"
710
"github.com/spf13/viper"
811
"go.uber.org/zap"
12+
13+
"github.com/ChargePi/ChargePi-go/internal/pkg/configuration"
14+
"github.com/ChargePi/ChargePi-go/pkg/observability"
915
)
1016

1117
var rootCmd = &cobra.Command{
@@ -17,21 +23,23 @@ var rootCmd = &cobra.Command{
1723

1824
func init() {
1925
cobra.OnInitialize(func() {
20-
logger := logging.SetupZap(settings.Logging{}, viper.GetBool(settings.Debug))
21-
zap.ReplaceGlobals(logger)
26+
observability.SetupLogger(viper.GetBool(configuration.Debug))
2227
})
2328

2429
rootCmd.AddCommand(runCommand())
2530
rootCmd.AddCommand(versionCommand())
2631
rootCmd.AddCommand(exportCommand())
2732
rootCmd.AddCommand(importCommand())
2833

29-
rootCmd.PersistentFlags().BoolP(settings.DebugFlag, "d", false, "debug mode")
30-
_ = viper.BindPFlag(settings.Debug, rootCmd.PersistentFlags().Lookup(settings.DebugFlag))
34+
rootCmd.PersistentFlags().BoolP(configuration.DebugFlag, "d", false, "debug mode")
35+
_ = viper.BindPFlag(configuration.Debug, rootCmd.PersistentFlags().Lookup(configuration.DebugFlag))
3136
}
3237

3338
func Execute() {
34-
err := rootCmd.Execute()
39+
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGKILL, syscall.SIGTERM)
40+
defer cancel()
41+
42+
err := rootCmd.ExecuteContext(ctx)
3543
if err != nil {
3644
zap.L().Fatal("Unable to run", zap.Error(err))
3745
}

0 commit comments

Comments
 (0)