Refactor kafka to pure Go (franz-go), fix DBC stubs, update Dockerfile

This commit is contained in:
Chris Rai
2026-01-31 00:05:47 -05:00
parent fbb820d7b3
commit b5bec57dfa
776 changed files with 18945 additions and 2052 deletions

43
pkg/dbc/README.md Normal file
View File

@@ -0,0 +1,43 @@
# DBC Package
CAN database (DBC) signal definitions and parsing utilities.
## Structure
- `models/` - Core types (DBCCollection, CANMessage, CANSignal)
- `state/` - State tracking for CAN signals
- `diagnostics/` - Diagnostic signal handling
- `fm29_*/`, `n60/` - Generated packages from DBC files (stubs by default)
## Generated Packages
The `fm29_*` and `n60` packages contain CAN signal definitions generated from DBC files. By default, these are stubs that return empty collections.
To generate real definitions, you need:
1. DBC source files (from CEC-Common repo or equivalent)
2. The `cantool` from `pkg/can-go`
## Generating DBC Code
```bash
# From cloud-services root
go run ./pkg/can-go/cmd/cantool generate /path/to/dbc/files ./pkg/dbc
```
Or use the generate script:
```bash
./scripts/generate-dbc.sh /path/to/dbc/files
```
## When Do You Need Real DBC Packages?
- **Gateway**: Uses only `dbc/models` - stubs are fine
- **Optimus**: Needs real DBC for CAN signal parsing
- **Ditto**: Needs real DBC for digital twin state
- **Beacon**: Needs real DBC for diagnostic alerts
## Adding New DBC Versions
1. Add DBC files to source directory
2. Run cantool generate
3. Update `new_dbc_collection.go` to include new version

View File

@@ -5,13 +5,13 @@ import (
"math"
"strings"
"fiskerinc.com/modules/common"
"fiskerinc.com/modules/dbc/diagnostics"
"fiskerinc.com/modules/dbc/state"
"fiskerinc.com/modules/grpc/kafka_grpc"
"github.com/fiskerinc/cloud-services/pkg/common"
"github.com/fiskerinc/cloud-services/pkg/dbc/diagnostics"
"github.com/fiskerinc/cloud-services/pkg/dbc/state"
"github.com/fiskerinc/cloud-services/pkg/grpc/kafka_grpc"
can "github.com/Fisker-Inc/project-ai-can-go"
"github.com/Fisker-Inc/project-ai-can-go/pkg/descriptor"
can "github.com/fiskerinc/cloud-services/pkg/can-go"
"github.com/fiskerinc/cloud-services/pkg/can-go/pkg/descriptor"
"github.com/pkg/errors"
)

View File

@@ -1,10 +1,10 @@
package dbc
import (
"fiskerinc.com/modules/dbc/diagnostics"
fm29_frs90 "fiskerinc.com/modules/dbc/fm29_frs90"
"fiskerinc.com/modules/dbc/models"
"fiskerinc.com/modules/dbc/state"
"github.com/fiskerinc/cloud-services/pkg/dbc/diagnostics"
fm29_frs90 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frs90"
"github.com/fiskerinc/cloud-services/pkg/dbc/models"
"github.com/fiskerinc/cloud-services/pkg/dbc/state"
)
func NewFM29_FRS90_DBC() models.DBCVersionInterface {

View File

@@ -1,10 +1,10 @@
package dbc
import (
"fiskerinc.com/modules/dbc/diagnostics"
fm29_frsd0 "fiskerinc.com/modules/dbc/fm29_frsd0"
"fiskerinc.com/modules/dbc/models"
"fiskerinc.com/modules/dbc/state"
"github.com/fiskerinc/cloud-services/pkg/dbc/diagnostics"
fm29_frsd0 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd0"
"github.com/fiskerinc/cloud-services/pkg/dbc/models"
"github.com/fiskerinc/cloud-services/pkg/dbc/state"
)
func NewFM29_FRSD0_DBC() models.DBCVersionInterface {

View File

@@ -1,10 +1,10 @@
package dbc
import (
"fiskerinc.com/modules/dbc/diagnostics"
fm29_frsd21 "fiskerinc.com/modules/dbc/fm29_frsd21"
"fiskerinc.com/modules/dbc/models"
"fiskerinc.com/modules/dbc/state"
"github.com/fiskerinc/cloud-services/pkg/dbc/diagnostics"
fm29_frsd21 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd21"
"github.com/fiskerinc/cloud-services/pkg/dbc/models"
"github.com/fiskerinc/cloud-services/pkg/dbc/state"
)
func NewFM29_FRSD21_DBC() models.DBCVersionInterface {

View File

@@ -1,10 +1,10 @@
package dbc
import (
"fiskerinc.com/modules/dbc/diagnostics"
fm29_frsd390 "fiskerinc.com/modules/dbc/fm29_frsd390"
"fiskerinc.com/modules/dbc/models"
"fiskerinc.com/modules/dbc/state"
"github.com/fiskerinc/cloud-services/pkg/dbc/diagnostics"
fm29_frsd390 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd390"
"github.com/fiskerinc/cloud-services/pkg/dbc/models"
"github.com/fiskerinc/cloud-services/pkg/dbc/state"
)
func NewFM29_FRSD390_DBC() models.DBCVersionInterface {

View File

@@ -6,15 +6,15 @@ import (
"regexp"
"testing"
"fiskerinc.com/modules/dbc"
fm29_frs90 "fiskerinc.com/modules/dbc/fm29_frs90"
fm29_frsd0 "fiskerinc.com/modules/dbc/fm29_frsd0"
fm29_frsd21 "fiskerinc.com/modules/dbc/fm29_frsd21"
fm29_frsd390 "fiskerinc.com/modules/dbc/fm29_frsd390"
"github.com/fiskerinc/cloud-services/pkg/dbc"
fm29_frs90 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frs90"
fm29_frsd0 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd0"
fm29_frsd21 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd21"
fm29_frsd390 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd390"
"fiskerinc.com/modules/dbc/state"
"fiskerinc.com/modules/grpc/kafka_grpc"
"fiskerinc.com/modules/testhelper"
"github.com/fiskerinc/cloud-services/pkg/dbc/state"
"github.com/fiskerinc/cloud-services/pkg/grpc/kafka_grpc"
"github.com/fiskerinc/cloud-services/pkg/testhelper"
"github.com/golang/protobuf/proto"
"github.com/jinzhu/copier"
)

View File

@@ -5,15 +5,15 @@ import (
"fmt"
"testing"
fm29_frs90 "fiskerinc.com/modules/dbc/fm29_frs90"
fm29_frsd0 "fiskerinc.com/modules/dbc/fm29_frsd0"
fm29_frsd21 "fiskerinc.com/modules/dbc/fm29_frsd21"
fm29_frsd390 "fiskerinc.com/modules/dbc/fm29_frsd390"
n60 "fiskerinc.com/modules/dbc/n60"
"fiskerinc.com/modules/testhelper"
fm29_frs90 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frs90"
fm29_frsd0 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd0"
fm29_frsd21 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd21"
fm29_frsd390 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd390"
n60 "github.com/fiskerinc/cloud-services/pkg/dbc/n60"
"github.com/fiskerinc/cloud-services/pkg/testhelper"
can "github.com/Fisker-Inc/project-ai-can-go"
"github.com/Fisker-Inc/project-ai-can-go/pkg/descriptor"
can "github.com/fiskerinc/cloud-services/pkg/can-go"
"github.com/fiskerinc/cloud-services/pkg/can-go/pkg/descriptor"
)
// For generating test data

View File

@@ -0,0 +1,19 @@
// Package fm29_frs90 is a stub for generated DBC code.
// Run ./scripts/generate-dbc.sh to generate actual CAN signal definitions.
// See pkg/dbc/README.md for details.
package fm29_frs90
import (
"github.com/fiskerinc/cloud-services/pkg/can-go/pkg/descriptor"
)
// Hash is the DBC file hash - stub value
const Hash = "stub_fm29_frs90"
// MessagesDescriptor is a stub for the generated CAN message descriptor
type MessagesDescriptor struct{}
// Database returns an empty CAN database - regenerate with cantool for actual definitions
func (m *MessagesDescriptor) Database() *descriptor.Database {
return &descriptor.Database{}
}

View File

@@ -0,0 +1,19 @@
// Package fm29_frsd0 is a stub for generated DBC code.
// Run ./scripts/generate-dbc.sh to generate actual CAN signal definitions.
// See pkg/dbc/README.md for details.
package fm29_frsd0
import (
"github.com/fiskerinc/cloud-services/pkg/can-go/pkg/descriptor"
)
// Hash is the DBC file hash - stub value
const Hash = "stub_fm29_frsd0"
// MessagesDescriptor is a stub for the generated CAN message descriptor
type MessagesDescriptor struct{}
// Database returns an empty CAN database - regenerate with cantool for actual definitions
func (m *MessagesDescriptor) Database() *descriptor.Database {
return &descriptor.Database{}
}

View File

@@ -0,0 +1,19 @@
// Package fm29_frsd21 is a stub for generated DBC code.
// Run ./scripts/generate-dbc.sh to generate actual CAN signal definitions.
// See pkg/dbc/README.md for details.
package fm29_frsd21
import (
"github.com/fiskerinc/cloud-services/pkg/can-go/pkg/descriptor"
)
// Hash is the DBC file hash - stub value
const Hash = "stub_fm29_frsd21"
// MessagesDescriptor is a stub for the generated CAN message descriptor
type MessagesDescriptor struct{}
// Database returns an empty CAN database - regenerate with cantool for actual definitions
func (m *MessagesDescriptor) Database() *descriptor.Database {
return &descriptor.Database{}
}

View File

@@ -0,0 +1,19 @@
// Package fm29_frsd390 is a stub for generated DBC code.
// Run ./scripts/generate-dbc.sh to generate actual CAN signal definitions.
// See pkg/dbc/README.md for details.
package fm29_frsd390
import (
"github.com/fiskerinc/cloud-services/pkg/can-go/pkg/descriptor"
)
// Hash is the DBC file hash - stub value
const Hash = "stub_fm29_frsd390"
// MessagesDescriptor is a stub for the generated CAN message descriptor
type MessagesDescriptor struct{}
// Database returns an empty CAN database - regenerate with cantool for actual definitions
func (m *MessagesDescriptor) Database() *descriptor.Database {
return &descriptor.Database{}
}

View File

@@ -3,10 +3,10 @@ package models
import (
"fmt"
"fiskerinc.com/modules/dbc/state"
"github.com/fiskerinc/cloud-services/pkg/dbc/state"
"fiskerinc.com/modules/common"
"fiskerinc.com/modules/digitaltwin"
"github.com/fiskerinc/cloud-services/pkg/common"
"github.com/fiskerinc/cloud-services/pkg/digitaltwin"
)
type CANMessageInterface interface {

View File

@@ -1,7 +1,7 @@
package models
import (
"fiskerinc.com/modules/common"
"github.com/fiskerinc/cloud-services/pkg/common"
)
func NewCANSignal(position int, name string, convert func(value float64) interface{}) CANSignal {

View File

@@ -3,11 +3,11 @@ package models
import (
"fmt"
"fiskerinc.com/modules/common"
"fiskerinc.com/modules/dbc/state"
"fiskerinc.com/modules/digitaltwin"
"fiskerinc.com/modules/grpc/kafka_grpc"
"fiskerinc.com/modules/logger"
"github.com/fiskerinc/cloud-services/pkg/common"
"github.com/fiskerinc/cloud-services/pkg/dbc/state"
"github.com/fiskerinc/cloud-services/pkg/digitaltwin"
"github.com/fiskerinc/cloud-services/pkg/grpc/kafka_grpc"
"github.com/fiskerinc/cloud-services/pkg/logger"
"github.com/pkg/errors"
)

View File

@@ -6,12 +6,12 @@ import (
"math"
"strings"
"fiskerinc.com/modules/common"
"fiskerinc.com/modules/digitaltwin"
"fiskerinc.com/modules/grpc/kafka_grpc"
"github.com/fiskerinc/cloud-services/pkg/common"
"github.com/fiskerinc/cloud-services/pkg/digitaltwin"
"github.com/fiskerinc/cloud-services/pkg/grpc/kafka_grpc"
can "github.com/Fisker-Inc/project-ai-can-go"
"github.com/Fisker-Inc/project-ai-can-go/pkg/descriptor"
can "github.com/fiskerinc/cloud-services/pkg/can-go"
"github.com/fiskerinc/cloud-services/pkg/can-go/pkg/descriptor"
"github.com/pkg/errors"
)

View File

@@ -4,8 +4,8 @@ import (
"fmt"
"sync"
"fiskerinc.com/modules/cache"
"fiskerinc.com/modules/utils/envtool"
"github.com/fiskerinc/cloud-services/pkg/cache"
"github.com/fiskerinc/cloud-services/pkg/utils/envtool"
)
var (

19
pkg/dbc/n60/stub.go Normal file
View File

@@ -0,0 +1,19 @@
// Package n60 is a stub for generated DBC code.
// Run ./scripts/generate-dbc.sh to generate actual CAN signal definitions.
// See pkg/dbc/README.md for details.
package n60
import (
"github.com/fiskerinc/cloud-services/pkg/can-go/pkg/descriptor"
)
// Hash is the DBC file hash - stub value
const Hash = "stub_n60"
// MessagesDescriptor is a stub for the generated CAN message descriptor
type MessagesDescriptor struct{}
// Database returns an empty CAN database - regenerate with cantool for actual definitions
func (m *MessagesDescriptor) Database() *descriptor.Database {
return &descriptor.Database{}
}

View File

@@ -1,11 +1,11 @@
package dbc
import (
fm29_frs90 "fiskerinc.com/modules/dbc/fm29_frs90"
fm29_frsd0 "fiskerinc.com/modules/dbc/fm29_frsd0"
fm29_frsd21 "fiskerinc.com/modules/dbc/fm29_frsd21"
fm29_frsd390 "fiskerinc.com/modules/dbc/fm29_frsd390"
"fiskerinc.com/modules/dbc/models"
fm29_frs90 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frs90"
fm29_frsd0 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd0"
fm29_frsd21 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd21"
fm29_frsd390 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd390"
"github.com/fiskerinc/cloud-services/pkg/dbc/models"
)
// This is the DBC hash before frsd0 was fixed

View File

@@ -3,11 +3,11 @@ package dbc_test
import (
"testing"
"fiskerinc.com/modules/dbc"
fm29_frs90 "fiskerinc.com/modules/dbc/fm29_frs90"
fm29_frsd0 "fiskerinc.com/modules/dbc/fm29_frsd0"
"fiskerinc.com/modules/dbc/models"
"fiskerinc.com/modules/testhelper"
"github.com/fiskerinc/cloud-services/pkg/dbc"
fm29_frs90 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frs90"
fm29_frsd0 "github.com/fiskerinc/cloud-services/pkg/dbc/fm29_frsd0"
"github.com/fiskerinc/cloud-services/pkg/dbc/models"
"github.com/fiskerinc/cloud-services/pkg/testhelper"
)
func TestNewDBCCollection(t *testing.T) {

View File

@@ -1,8 +1,8 @@
package state
import (
"fiskerinc.com/modules/common"
"fiskerinc.com/modules/redis"
"github.com/fiskerinc/cloud-services/pkg/common"
"github.com/fiskerinc/cloud-services/pkg/redis"
)
type StateFunc func(*redis.RedisBatchCommands, string, int, []common.CANSignal) error