mirror of
https://github.com/logos-messaging/logos-messaging-go-bindings.git
synced 2026-06-11 19:29:57 +00:00
* chore: rename module path to logos-delivery-go-bindings
The module path still read `logos-messaging-go-bindings`, mismatching the
repository name. Rename it to `github.com/logos-messaging/logos-delivery-go-bindings`
and update all in-repo imports. gofmt re-sorts a few import blocks as a result
(plus two files that were already unformatted on master).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* ci: add PR-gate workflow and golangci-lint config
The repo had no `on: pull_request` CI (only workflow_dispatch + nightly
schedule), so nothing validated PRs. Add `.github/workflows/pr.yml` that
builds libwaku and runs `go build`, `go vet`, golangci-lint, and a test-compile
pass on every PR. Add a baseline `.golangci.yml` (standard linters + gofmt).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* ci: scope golangci-lint to new code via new-from-merge-base
Run the full `standard` linter set but only report findings introduced since
the merge-base with master, so the legacy kernel wrapper's pre-existing issues
(unchecked defer-Close, dead helpers) don't drown the gate while new code still
gets full coverage. Fetch origin/master so the base ref is available in CI.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* ci: clone logos-delivery outside vendor/ and build in module mode
`go build` failed in CI because cloning logos-delivery into `vendor/` put Go
into vendor mode against an inconsistent `vendor/modules.txt`. Clone the
checkout into `.logos-delivery` instead and set `GOFLAGS=-mod=mod` so the gate
always builds in module mode.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* ci: use golangci-lint-action@v7 for golangci-lint v2
v6 of the action rejects golangci-lint v2 versions ("v2 is not supported by
golangci-lint-action v6"). Bump to v7.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* ci: cache libwaku, gate go mod tidy, rename LMN_DIR
- Rename LMN_DIR -> LOGOS_DELIVERY_DIR across the PR-gate and nightly
workflows, the waku Makefile, and the build docs.
- Cache the built logos-delivery kernel keyed on its upstream HEAD SHA,
skipping the clone + libwaku build while that commit is unchanged.
- Add a "go mod tidy is clean" step that fails if go.mod/go.sum drift.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
78 lines
1.4 KiB
Go
78 lines
1.4 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
testName string
|
|
iteration int
|
|
phase string
|
|
mu sync.Mutex
|
|
)
|
|
|
|
func RecordMemoryMetricsCSV(testName string, iter int, phase string, heapKB, rssKB uint64) error {
|
|
mu.Lock()
|
|
defer mu.Unlock()
|
|
|
|
f, err := os.OpenFile("memory_metrics.csv", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer f.Close()
|
|
|
|
w := csv.NewWriter(f)
|
|
defer w.Flush()
|
|
|
|
stat, err := f.Stat()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if stat.Size() == 0 {
|
|
header := []string{"TestName", "Iteration", "Phase", "HeapAlloc(KB)", "RSS(KB)", "Timestamp"}
|
|
if err := w.Write(header); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
row := []string{
|
|
testName,
|
|
strconv.Itoa(iter),
|
|
phase,
|
|
strconv.FormatUint(heapKB, 10),
|
|
strconv.FormatUint(rssKB, 10),
|
|
time.Now().Format(time.RFC3339),
|
|
}
|
|
|
|
return w.Write(row)
|
|
}
|
|
|
|
func GetRSSKB() (uint64, error) {
|
|
f, err := os.Open("/proc/self/statm")
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
defer f.Close()
|
|
data, err := io.ReadAll(f)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
fields := strings.Fields(string(data))
|
|
if len(fields) < 2 {
|
|
return 0, fmt.Errorf("unexpected /proc/self/statm format")
|
|
}
|
|
rssPages, err := strconv.ParseUint(fields[1], 10, 64)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
pageSize := os.Getpagesize()
|
|
return (rssPages * uint64(pageSize)) / 1024, nil
|
|
}
|