generated from TrueCloudLab/basic
.forgejo: Add pre-commit #7
13 changed files with 165 additions and 17 deletions
21
.forgejo/workflows/dco.yml
Normal file
21
.forgejo/workflows/dco.yml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
name: DCO action
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
dco:
|
||||||
|
name: DCO
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup Go
|
||||||
|
uses: actions/setup-go@v3
|
||||||
|
with:
|
||||||
|
go-version: '1.21'
|
||||||
|
|
||||||
|
- name: Run commit format checker
|
||||||
|
uses: https://git.frostfs.info/TrueCloudLab/dco-go@v3
|
||||||
|
with:
|
||||||
|
from: 'origin/${{ github.event.pull_request.base.ref }}'
|
73
.forgejo/workflows/tests.yml
Normal file
73
.forgejo/workflows/tests.yml
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
name: Tests and linters
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
name: Lint
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v3
|
||||||
|
with:
|
||||||
|
go-version: '1.21'
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Install linters
|
||||||
|
run: make lint-install
|
||||||
|
|
||||||
|
- name: Run linters
|
||||||
|
run: make lint
|
||||||
|
|
||||||
|
tests:
|
||||||
|
name: Tests
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
go_versions: [ '1.20', '1.21' ]
|
||||||
|
fail-fast: false
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v3
|
||||||
|
with:
|
||||||
|
go-version: '${{ matrix.go_versions }}'
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: make test
|
||||||
|
|
||||||
|
tests-race:
|
||||||
|
name: Tests with -race
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v3
|
||||||
|
with:
|
||||||
|
go-version: '1.21'
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: go test ./... -count=1 -race
|
||||||
|
|
||||||
|
staticcheck:
|
||||||
|
name: Staticcheck
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v3
|
||||||
|
with:
|
||||||
|
go-version: '1.21'
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Install staticcheck
|
||||||
|
run: make staticcheck-install
|
||||||
|
|
||||||
|
- name: Run staticcheck
|
||||||
|
run: make staticcheck-run
|
|
@ -52,7 +52,7 @@ linters:
|
||||||
- durationcheck
|
- durationcheck
|
||||||
- exhaustive
|
- exhaustive
|
||||||
- exportloopref
|
- exportloopref
|
||||||
- gofmt
|
- gofumpt
|
||||||
- goimports
|
- goimports
|
||||||
- misspell
|
- misspell
|
||||||
- predeclared
|
- predeclared
|
||||||
|
|
55
Makefile
Normal file → Executable file
55
Makefile
Normal file → Executable file
|
@ -1,14 +1,63 @@
|
||||||
#!/usr/bin/make -f
|
#!/usr/bin/make -f
|
||||||
SHELL = bash
|
SHELL = bash
|
||||||
|
|
||||||
|
TRUECLOUDLAB_LINT_VERSION ?= 0.0.3
|
||||||
|
TMP_DIR := .cache
|
||||||
|
OUTPUT_LINT_DIR ?= $(shell pwd)/bin
|
||||||
|
LINT_VERSION ?= 1.55.2
|
||||||
|
LINT_DIR = $(OUTPUT_LINT_DIR)/golangci-lint-$(LINT_VERSION)-v$(TRUECLOUDLAB_LINT_VERSION)
|
||||||
|
|
||||||
|
# Run all code formatters
|
||||||
|
fmts: fmt imports
|
||||||
|
|
||||||
|
# Reformat code
|
||||||
|
fmt:
|
||||||
|
@echo "⇒ Processing gofmt check"
|
||||||
|
@gofumpt -s -w .
|
||||||
|
|
||||||
|
# Reformat imports
|
||||||
|
imports:
|
||||||
|
@echo "⇒ Processing goimports check"
|
||||||
|
@goimports -w .
|
||||||
|
|
||||||
# Run Unit Test with go test
|
# Run Unit Test with go test
|
||||||
test:
|
test:
|
||||||
|
@echo "⇒ Running go test"
|
||||||
@go test ./... -count=1
|
@go test ./... -count=1
|
||||||
|
|
||||||
|
# Activate pre-commit hooks
|
||||||
|
pre-commit:
|
||||||
|
pre-commit install -t pre-commit -t commit-msg
|
||||||
|
|
||||||
|
# Deactivate pre-commit hooks
|
||||||
|
unpre-commit:
|
||||||
|
pre-commit uninstall -t pre-commit -t commit-msg
|
||||||
|
|
||||||
|
pre-commit-run:
|
||||||
|
@pre-commit run -a --hook-stage manual
|
||||||
|
|
||||||
|
# Install linters
|
||||||
|
lint-install:
|
||||||
|
@mkdir -p $(TMP_DIR)
|
||||||
|
@rm -rf $(TMP_DIR)/linters
|
||||||
|
@git -c advice.detachedHead=false clone --branch v$(TRUECLOUDLAB_LINT_VERSION) https://git.frostfs.info/TrueCloudLab/linters.git $(TMP_DIR)/linters
|
||||||
|
@make -C $(TMP_DIR)/linters lib CGO_ENABLED=1 OUT_DIR=$(OUTPUT_LINT_DIR)
|
||||||
|
@rm -rf $(TMP_DIR)/linters
|
||||||
|
@rmdir $(TMP_DIR) 2>/dev/null || true
|
||||||
|
@CGO_ENABLED=1 GOBIN=$(LINT_DIR) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v$(LINT_VERSION)
|
||||||
|
|
||||||
# Run linters
|
# Run linters
|
||||||
lint:
|
lint:
|
||||||
@golangci-lint --timeout=5m run
|
@if [ ! -d "$(LINT_DIR)" ]; then \
|
||||||
|
echo "Run make lint-install"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
@$(LINT_DIR)/golangci-lint run
|
||||||
|
|
||||||
|
# Install staticcheck
|
||||||
|
staticcheck-install:
|
||||||
|
@go install honnef.co/go/tools/cmd/staticcheck@latest
|
||||||
|
|
||||||
# Run staticcheck
|
# Run staticcheck
|
||||||
staticcheck:
|
staticcheck-run:
|
||||||
@staticcheck ./...
|
@staticcheck ./...
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
A simple asynchronous client in Go for sending logs to Loki.
|
A simple asynchronous client in Go for sending logs to Loki.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
@ -29,4 +29,4 @@ func main() {
|
||||||
loki.Send("log message", time.Now())
|
loki.Send("log message", time.Now())
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
@ -10,8 +12,10 @@ import (
|
||||||
|
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
|
|
||||||
const countMsgGroup = 100
|
const (
|
||||||
const countMsg = 500000
|
countMsgGroup = 100
|
||||||
|
countMsg = 500000
|
||||||
|
)
|
||||||
|
|
||||||
func send(loki *loki.Client) {
|
func send(loki *loki.Client) {
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
|
@ -19,7 +23,10 @@ func send(loki *loki.Client) {
|
||||||
|
|
||||||
for j := 0; j < countMsg/countMsgGroup; j++ {
|
for j := 0; j < countMsg/countMsgGroup; j++ {
|
||||||
for i := 0; i < countMsgGroup; i++ {
|
for i := 0; i < countMsgGroup; i++ {
|
||||||
loki.Send(strconv.Itoa(j)+" "+strconv.Itoa(i)+" test log message", time.Now())
|
err := loki.Send(strconv.Itoa(j)+" "+strconv.Itoa(i)+" test log message", time.Now())
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "send: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
time.Sleep(20 * time.Millisecond)
|
time.Sleep(20 * time.Millisecond)
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,9 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Send sends the message to the loki server.
|
||||||
// If the client is disabled, it returns error.
|
// If the client is disabled, it returns error.
|
||||||
// If the entries channel is full, the message is discarded and returns error
|
// If the entries channel is full, the message is discarded and returns error.
|
||||||
func (client *Client) Send(msg string, timestamp time.Time) error {
|
func (client *Client) Send(msg string, timestamp time.Time) error {
|
||||||
if !client.IsEnabled() {
|
if !client.IsEnabled() {
|
||||||
client.missedMessages++
|
client.missedMessages++
|
||||||
|
|
|
@ -35,7 +35,6 @@ func (client *Client) sendLogs(entries []logEntry) {
|
||||||
|
|
||||||
func (client *Client) sendRequest(method, url string, ctype string, reqBody []byte) {
|
func (client *Client) sendRequest(method, url string, ctype string, reqBody []byte) {
|
||||||
req, err := http.NewRequest(method, url, bytes.NewBuffer(reqBody))
|
req, err := http.NewRequest(method, url, bytes.NewBuffer(reqBody))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,9 +43,9 @@ type Config struct {
|
||||||
// E.g. localhost:3100/api/prom/push.
|
// E.g. localhost:3100/api/prom/push.
|
||||||
Endpoint string
|
Endpoint string
|
||||||
Labels map[string]string
|
Labels map[string]string
|
||||||
//Maximum message buffering time.
|
// Maximum message buffering time.
|
||||||
BatchWait time.Duration
|
BatchWait time.Duration
|
||||||
//Maximum number of messages in the queue.
|
// Maximum number of messages in the queue.
|
||||||
BatchEntriesNumber int
|
BatchEntriesNumber int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,6 @@ func main() {
|
||||||
resp, err := client.Echo(ctx, &srv.Request{
|
resp, err := client.Echo(ctx, &srv.Request{
|
||||||
Value: "Hello!",
|
Value: "Hello!",
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to get response: %v", err)
|
log.Fatalf("failed to get response: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,4 +14,4 @@ message Request {
|
||||||
|
|
||||||
message Response {
|
message Response {
|
||||||
string value = 1;
|
string value = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ func (p *propagator) Extract(ctx context.Context, carrier propagation.TextMapCar
|
||||||
}
|
}
|
||||||
|
|
||||||
if traceIDDefined != spanIDDefined {
|
if traceIDDefined != spanIDDefined {
|
||||||
return ctx //traceID + spanID must be defined OR no traceID and no spanID
|
return ctx // traceID + spanID must be defined OR no traceID and no spanID
|
||||||
}
|
}
|
||||||
|
|
||||||
flagsStr := carrier.Get(flagsHeader)
|
flagsStr := carrier.Get(flagsHeader)
|
||||||
|
|
|
@ -124,7 +124,6 @@ func TestPropagator_Inject(t *testing.T) {
|
||||||
require.Equal(t, spanIDHex, c.Values[spanIDHeader], "unexpected span id")
|
require.Equal(t, spanIDHex, c.Values[spanIDHeader], "unexpected span id")
|
||||||
require.Equal(t, "0", c.Values[flagsHeader], "unexpected flags")
|
require.Equal(t, "0", c.Values[flagsHeader], "unexpected flags")
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPropagator_Extract(t *testing.T) {
|
func TestPropagator_Extract(t *testing.T) {
|
||||||
|
|
Loading…
Reference in a new issue