Skip to content

Commit 5c18d47

Browse files
authoredOct 30, 2024··
enable linting in ci pipeline (#229)
1 parent a0f50aa commit 5c18d47

30 files changed

+189
-173
lines changed
 

‎.github/workflows/build.yml

+8
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ jobs:
3939
4040
- name: Install ZMQ
4141
run: sudo apt update -y && sudo apt upgrade -y && sudo apt install libsodium-dev libzmq3-dev
42+
43+
- name: Setup golangci-lint
44+
uses: golangci/golangci-lint-action@v6
45+
with:
46+
version: v1.61.0
47+
48+
- name: Linter passes
49+
run: make linters
4250

4351
- name: Test
4452
run: make test

‎.golangci.yml

+38-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
---
22
run:
33
timeout: 4m
4-
skip-dirs:
5-
- internal
4+
5+
issues:
6+
exclude-dirs:
7+
- temp
68

79
linters:
810
enable:
@@ -11,5 +13,39 @@ linters:
1113
- gosimple
1214
- govet
1315
- misspell
16+
- revive
1417
- staticcheck
1518
- unused
19+
20+
linters-settings:
21+
revive:
22+
rules:
23+
- name: blank-imports
24+
- name: context-as-argument
25+
- name: context-keys-type
26+
- name: dot-imports
27+
arguments:
28+
- allowedPackages:
29+
- "github.com/onsi/ginkgo"
30+
- "github.com/onsi/ginkgo/v2"
31+
- "github.com/onsi/gomega"
32+
- name: empty-block
33+
- name: error-naming
34+
- name: error-return
35+
- name: error-strings
36+
- name: errorf
37+
- name: exported
38+
- name: increment-decrement
39+
- name: indent-error-flow
40+
- name: package-comments
41+
disabled: true
42+
- name: range
43+
- name: receiver-naming
44+
- name: redefines-builtin-id
45+
- name: superfluous-else
46+
- name: time-naming
47+
- name: unexported-return
48+
- name: unreachable-code
49+
- name: unused-parameter
50+
- name: var-declaration
51+
- name: var-naming

‎Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# enabling gofmt and golint since by default they're not enabled by golangci-lint
22
VERSION = $(shell go version)
3-
LINTER = golangci-lint run -v $(LINTER_FLAGS) --exclude-use-default=false --enable gofmt,golint --timeout $(LINTER_DEADLINE)
3+
LINTER = golangci-lint run -v $(LINTER_FLAGS) --exclude-use-default=false --timeout $(LINTER_DEADLINE)
44
LINTER_DEADLINE = 30s
55
LINTER_FLAGS ?=
66
ALPHA_IMAGE_NAME=fleet-telemetry-server-aplha:v0.0.1

‎cmd/main.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ func main() {
4141
}
4242
if airbrakeNotifier != nil {
4343
defer airbrakeNotifier.NotifyOnPanic()
44-
defer airbrakeNotifier.Close()
44+
defer func() {
45+
if err := airbrakeNotifier.Close(); err != nil {
46+
logger.ErrorLog("airbrake_close_error", err, nil)
47+
}
48+
}()
4549
}
4650
panic(startServer(config, airbrakeNotifier, logger))
4751
}

‎config/config.go

+10-7
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,12 @@ type Config struct {
101101
Airbrake *Airbrake
102102
}
103103

104+
// Airbrake config
104105
type Airbrake struct {
105106
Host string `json:"host"`
106107
ProjectKey string `json:"project_key"`
107108
Environment string `json:"environment"`
108-
ProjectId int64 `json:"project_id"`
109+
ProjectID int64 `json:"project_id"`
109110

110111
TLS *TLS `json:"tls" yaml:"tls"`
111112
}
@@ -153,8 +154,8 @@ type TLS struct {
153154
ServerKey string `json:"server_key"`
154155
}
155156

156-
// AirbrakeTlsConfig return the TLS config needed for connecting with airbrake server
157-
func (c *Config) AirbrakeTlsConfig() (*tls.Config, error) {
157+
// AirbrakeTLSConfig return the TLS config needed for connecting with airbrake server
158+
func (c *Config) AirbrakeTLSConfig() (*tls.Config, error) {
158159
if c.Airbrake.TLS == nil {
159160
return nil, nil
160161
}
@@ -168,6 +169,8 @@ func (c *Config) AirbrakeTlsConfig() (*tls.Config, error) {
168169
return nil, fmt.Errorf("can't properly load cert pair (%s, %s): %s", certPath, keyPath, err.Error())
169170
}
170171
tlsConfig.Certificates = []tls.Certificate{cert}
172+
// TODO remove the lint bypass
173+
// nolint:staticcheck
171174
tlsConfig.BuildNameToCertificate()
172175
}
173176

@@ -246,7 +249,7 @@ func (c *Config) prometheusEnabled() bool {
246249
}
247250

248251
// ConfigureProducers validates and establishes connections to the producers (kafka/pubsub/logger)
249-
func (c *Config) ConfigureProducers(airbrakeHandler *airbrake.AirbrakeHandler, logger *logrus.Logger) (map[string][]telemetry.Producer, error) {
252+
func (c *Config) ConfigureProducers(airbrakeHandler *airbrake.Handler, logger *logrus.Logger) (map[string][]telemetry.Producer, error) {
250253
reliableAckSources, err := c.configureReliableAckSources()
251254
if err != nil {
252255
return nil, err
@@ -278,7 +281,7 @@ func (c *Config) ConfigureProducers(airbrakeHandler *airbrake.AirbrakeHandler, l
278281
if c.Pubsub == nil {
279282
return nil, errors.New("expected Pubsub to be configured")
280283
}
281-
googleProducer, err := googlepubsub.NewProducer(context.Background(), c.prometheusEnabled(), c.Pubsub.ProjectID, c.Namespace, c.MetricCollector, airbrakeHandler, c.AckChan, reliableAckSources[telemetry.Pubsub], logger)
284+
googleProducer, err := googlepubsub.NewProducer(c.prometheusEnabled(), c.Pubsub.ProjectID, c.Namespace, c.MetricCollector, airbrakeHandler, c.AckChan, reliableAckSources[telemetry.Pubsub], logger)
282285
if err != nil {
283286
return nil, err
284287
}
@@ -401,7 +404,7 @@ func (c *Config) CreateAirbrakeNotifier(logger *logrus.Logger) (*githubairbrake.
401404
if c.Airbrake == nil {
402405
return nil, nil, nil
403406
}
404-
tlsConfig, err := c.AirbrakeTlsConfig()
407+
tlsConfig, err := c.AirbrakeTLSConfig()
405408
if err != nil {
406409
return nil, nil, err
407410
}
@@ -430,7 +433,7 @@ func (c *Config) CreateAirbrakeNotifier(logger *logrus.Logger) (*githubairbrake.
430433
DisableRemoteConfig: true,
431434
APMHost: errbitHost,
432435
DisableAPM: true,
433-
ProjectId: c.Airbrake.ProjectId,
436+
ProjectId: c.Airbrake.ProjectID,
434437
ProjectKey: projectKey,
435438
Environment: c.Airbrake.Environment,
436439
HTTPClient: httpClient,

‎datastore/googlepubsub/publisher.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type Producer struct {
2525
metricsCollector metrics.MetricCollector
2626
prometheusEnabled bool
2727
logger *logrus.Logger
28-
airbrakeHandler *airbrake.AirbrakeHandler
28+
airbrakeHandler *airbrake.Handler
2929
ackChan chan (*telemetry.Record)
3030
reliableAckTxTypes map[string]interface{}
3131
}
@@ -57,7 +57,7 @@ func configurePubsub(projectID string) (*pubsub.Client, error) {
5757
}
5858

5959
// NewProducer establishes the pubsub connection and define the dispatch method
60-
func NewProducer(ctx context.Context, prometheusEnabled bool, projectID string, namespace string, metricsCollector metrics.MetricCollector, airbrakeHandler *airbrake.AirbrakeHandler, ackChan chan (*telemetry.Record), reliableAckTxTypes map[string]interface{}, logger *logrus.Logger) (telemetry.Producer, error) {
60+
func NewProducer(prometheusEnabled bool, projectID string, namespace string, metricsCollector metrics.MetricCollector, airbrakeHandler *airbrake.Handler, ackChan chan (*telemetry.Record), reliableAckTxTypes map[string]interface{}, logger *logrus.Logger) (telemetry.Producer, error) {
6161
registerMetricsOnce(metricsCollector)
6262
pubsubClient, err := configurePubsub(projectID)
6363
if err != nil {
@@ -108,9 +108,8 @@ func (p *Producer) Produce(entry *telemetry.Record) {
108108
p.ReportError("pubsub_err", err, logInfo)
109109
metricsRegistry.errorCount.Inc(map[string]string{"record_type": entry.TxType})
110110
return
111-
} else {
112-
p.ProcessReliableAck(entry)
113111
}
112+
p.ProcessReliableAck(entry)
114113
metricsRegistry.publishBytesTotal.Add(int64(entry.Length()), map[string]string{"record_type": entry.TxType})
115114
metricsRegistry.publishCount.Inc(map[string]string{"record_type": entry.TxType})
116115

‎datastore/kafka/kafka.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type Producer struct {
2121
prometheusEnabled bool
2222
metricsCollector metrics.MetricCollector
2323
logger *logrus.Logger
24-
airbrakeHandler *airbrake.AirbrakeHandler
24+
airbrakeHandler *airbrake.Handler
2525
deliveryChan chan kafka.Event
2626
ackChan chan (*telemetry.Record)
2727
reliableAckTxTypes map[string]interface{}
@@ -44,7 +44,7 @@ var (
4444
)
4545

4646
// NewProducer establishes the kafka connection and define the dispatch method
47-
func NewProducer(config *kafka.ConfigMap, namespace string, prometheusEnabled bool, metricsCollector metrics.MetricCollector, airbrakeHandler *airbrake.AirbrakeHandler, ackChan chan (*telemetry.Record), reliableAckTxTypes map[string]interface{}, logger *logrus.Logger) (telemetry.Producer, error) {
47+
func NewProducer(config *kafka.ConfigMap, namespace string, prometheusEnabled bool, metricsCollector metrics.MetricCollector, airbrakeHandler *airbrake.Handler, ackChan chan (*telemetry.Record), reliableAckTxTypes map[string]interface{}, logger *logrus.Logger) (telemetry.Producer, error) {
4848
registerMetricsOnce(metricsCollector)
4949

5050
kafkaProducer, err := kafka.NewProducer(config)

‎datastore/kinesis/kinesis.go

+3-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type Producer struct {
2323
prometheusEnabled bool
2424
metricsCollector metrics.MetricCollector
2525
streams map[string]string
26-
airbrakeHandler *airbrake.AirbrakeHandler
26+
airbrakeHandler *airbrake.Handler
2727
ackChan chan (*telemetry.Record)
2828
reliableAckTxTypes map[string]interface{}
2929
}
@@ -42,7 +42,7 @@ var (
4242
)
4343

4444
// NewProducer configures and tests the kinesis connection
45-
func NewProducer(maxRetries int, streams map[string]string, overrideHost string, prometheusEnabled bool, metricsCollector metrics.MetricCollector, airbrakeHandler *airbrake.AirbrakeHandler, ackChan chan (*telemetry.Record), reliableAckTxTypes map[string]interface{}, logger *logrus.Logger) (telemetry.Producer, error) {
45+
func NewProducer(maxRetries int, streams map[string]string, overrideHost string, prometheusEnabled bool, metricsCollector metrics.MetricCollector, airbrakeHandler *airbrake.Handler, ackChan chan (*telemetry.Record), reliableAckTxTypes map[string]interface{}, logger *logrus.Logger) (telemetry.Producer, error) {
4646
registerMetricsOnce(metricsCollector)
4747

4848
config := &aws.Config{
@@ -96,10 +96,8 @@ func (p *Producer) Produce(entry *telemetry.Record) {
9696
p.ReportError("kinesis_err", err, nil)
9797
metricsRegistry.errorCount.Inc(map[string]string{"record_type": entry.TxType})
9898
return
99-
} else {
100-
p.ProcessReliableAck(entry)
10199
}
102-
100+
p.ProcessReliableAck(entry)
103101
p.logger.Log(logrus.DEBUG, "kinesis_message_dispatched", logrus.LogInfo{"vin": entry.Vin, "record_type": entry.TxType, "txid": entry.Txid, "shard_id": *kinesisRecordOutput.ShardId, "sequence_number": *kinesisRecordOutput.SequenceNumber})
104102
metricsRegistry.publishCount.Inc(map[string]string{"record_type": entry.TxType})
105103
metricsRegistry.byteTotal.Add(int64(entry.Length()), map[string]string{"record_type": entry.TxType})

‎datastore/simple/logger.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/teslamotors/fleet-telemetry/telemetry"
1010
)
1111

12+
// Config for the protobuf logger
1213
type Config struct {
1314
// Verbose controls whether types are explicitly shown in the logs. Only applicable for record type 'V'.
1415
Verbose bool `json:"verbose"`
@@ -25,8 +26,8 @@ func NewProtoLogger(config *Config, logger *logrus.Logger) telemetry.Producer {
2526
return &ProtoLogger{Config: config, logger: logger}
2627
}
2728

28-
// SetReliableAckTxType no-op for logger datastore
29-
func (p *ProtoLogger) ProcessReliableAck(entry *telemetry.Record) {
29+
// ProcessReliableAck noop method
30+
func (p *ProtoLogger) ProcessReliableAck(_ *telemetry.Record) {
3031
}
3132

3233
// Produce sends the data to the logger
@@ -40,7 +41,7 @@ func (p *ProtoLogger) Produce(entry *telemetry.Record) {
4041
}
4142

4243
// ReportError noop method
43-
func (p *ProtoLogger) ReportError(message string, err error, logInfo logrus.LogInfo) {
44+
func (p *ProtoLogger) ReportError(_ string, _ error, _ logrus.LogInfo) {
4445
}
4546

4647
// recordToLogMap converts the data of a record to a map or slice of maps

‎datastore/simple/transformers/payload.go

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/teslamotors/fleet-telemetry/protos"
99
)
1010

11+
// PayloadToMap transforms a Payload into a human readable map for logging purposes
1112
func PayloadToMap(payload *protos.Payload, includeTypes bool, logger *logrus.Logger) map[string]interface{} {
1213
convertedPayload := make(map[string]interface{}, len(payload.Data)+2)
1314
convertedPayload["Vin"] = payload.Vin

0 commit comments

Comments
 (0)
Please sign in to comment.