Commit Graph

53 Commits

Author SHA1 Message Date
60cd8d87e4 docs: update ClickHouse schema with TTL, MV and users
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- README.md: add complete DDL with mabase_prod database
- Add TTL (1 day) on http_logs_raw table
- Add materialized view mv_http_logs for automatic data transfer
- Document users (data_writer, analyst) and grants
- Add migration script for existing data
- architecture.yml: add database, TTL settings, MV, users sections

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-03 13:39:47 +01:00
51e1eb8d57 chore: bump version to 1.1.6
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Update Makefile PKG_VERSION
- Update RPM spec version and changelog

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-03 11:55:28 +01:00
58b23ccc1e docs: update ClickHouse schema (http_logs_raw + http_logs)
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- README.md: documenter les deux tables (raw + enrichie)
- architecture.yml: décrire le schema complet avec colonnes matérialisées
- Table http_logs_raw: ingestion JSON brut (colonne raw_json unique)
- Table http_logs: extraction des champs via DEFAULT JSONExtract*

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-03 11:53:13 +01:00
560ee59d85 fix: insert into http_logs_raw with single raw_json column
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Table schema has only one column: raw_json (String)
- Serialize entire CorrelatedLog as JSON string
- Use INSERT INTO table (raw_json) with single Append() argument
- Fix "No such column timestamp" errors

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-03 11:49:41 +01:00
d78cc52a88 fix: ClickHouse insertion using native clickhouse-go/v2 API
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Replace database/sql wrapper with clickhouse.Open() and clickhouse.Conn
- Use PrepareBatch + Append + Send pattern for proper batch inserts
- Fix ATTEMPT_TO_READ_AFTER_EOF errors caused by empty VALUES
- Add batch size logging for debugging
- Update version to 1.1.5

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-03 11:44:40 +01:00
4b4ab84ee0 fix: set /var/run/logcorrelator permissions to 755 in RPM
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- RPM %post now sets chmod 755 on /var/run/logcorrelator
- Allows service to create sockets after reboot
- Version bumped to 1.1.5

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-03 00:17:56 +01:00
c352e06b88 fix: create socket parent directory on startup
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Create /var/run/logcorrelator/ if missing before binding sockets
- Fixes issue with tmpfs /var/run being cleared on reboot
- Add filepath import for directory handling

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-03 00:17:01 +01:00
6b690a3eb3 fix: log raw JSON on parse errors for debugging
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Add raw JSON payload to parse error warnings
- Helps diagnose malformed JSON from senders
- Version bumped to 1.1.4

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 23:20:51 +01:00
ac357c19ea build: remove rpm-test stage from Dockerfile
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Remove unused rpm-test stage (rockylinux:8 + systemd)
- Reduces build time by ~1 minute
- Reduces build image size
- RPM testing still available via make test-package-rpm

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 22:56:39 +01:00
7f2becf702 chore: bump version to 1.1.3
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- RPM spec: 1.1.3-1
- Makefile PKG_VERSION: 1.1.3

Changes in 1.1.3:
- Refactor: Unix sockets switched from STREAM to DGRAM (SOCK_DGRAM)
- Test: Coverage improved to 74.4% with comprehensive tests
- Fix: Example config in /etc/logcorrelator/
- Change: Socket permissions 0666 (world read/write)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 22:54:12 +01:00
24aa84bd9c test: add comprehensive tests to improve coverage
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- observability: added tests for LogLevel.String(), Warn(), Warnf(), Infof(),
  Debugf(), Error(), WithFields(), and concurrent access patterns
- file: added tests for Reopen(), Close(), empty/whitespace paths,
  validateFilePath allowed/rejected paths, concurrent writes, Flush(),
  and marshal errors
- config: added tests for TimeWindowConfig.GetDuration(),
  CorrelationConfig getters, validation scenarios (no inputs, no outputs,
  duplicate sockets, ClickHouse validation), and LogConfig.GetLevel()

Coverage improvements:
- observability: 57.7% → 79.5%
- file: 68.6% → 78.6%
- config: 69.8% → 97.7%
- total: 68.6% → 74.4%

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 22:52:09 +01:00
15ca33ee3a refactor: switch Unix sockets from STREAM to DGRAM mode
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Change net.Listen("unix") to net.ListenUnixgram("unixgram")
- Replace connection-based Accept() with ReadFromUnix() datagram reading
- Remove connection limiting semaphore (not needed for DGRAM)
- Update tests with datagram-specific tests
- Socket permissions default to 0666 (world read/write)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 22:43:10 +01:00
eb3cc78170 docs: rename apache.socket to http.socket in examples
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- README.md: use http.socket instead of apache.sock
- architecture.yml: use http.socket instead of apache.sock

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 22:35:42 +01:00
fb8bd35acd fix: remove CHANGELOG.md reference from Dockerfile.package
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 22:15:18 +01:00
324b0042f8 fix(rpm): example config in /etc/logcorrelator + socket permissions 0666
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Install logcorrelator.yml.example to /etc/logcorrelator/ instead of /usr/share/logcorrelator/
- Change default socket permissions from 0660 to 0666 (world read/write)
- Bump version to 1.1.2
- Remove CHANGELOG.md

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 22:07:50 +01:00
ef819e8868 chore: bump PKG_VERSION to 1.1.1
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 21:54:05 +01:00
35cb53f0a5 docs: add version consistency requirement in architecture.yml
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
Document that version numbers must be consistent across:
- RPM spec file
- Makefile (PKG_VERSION)
- CHANGELOG.md
- git tags

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 21:53:21 +01:00
7eb143e904 fix(rpm): install logcorrelator.yml.example in /etc/logcorrelator/
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
Move example config from /usr/share/logcorrelator/ to /etc/logcorrelator/
for easier access and consistency with main config file.

Bump version to 1.1.1

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 21:40:33 +01:00
33e19b4f52 feat: Keep-Alive correlation, TTL management, SIGHUP handling, logrotate support
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
Major features:
- One-to-many correlation mode (Keep-Alive) for HTTP connections
- Dynamic TTL for network events with reset on each correlation
- Separate configurable buffer sizes for HTTP and network events
- SIGHUP signal handling for log rotation without service restart
- FileSink.Reopen() method for log file rotation
- logrotate configuration included in RPM
- ExecReload added to systemd service

Configuration changes:
- New YAML structure with nested sections (time_window, orphan_policy, matching, buffers, ttl)
- Backward compatibility maintained for deprecated fields

Packaging:
- RPM version 1.1.0 with logrotate config
- Updated spec file and changelog
- All distributions: el8, el9, el10

Tests:
- New tests for Keep-Alive mode and TTL reset
- Updated mocks with Reopen() interface method

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 20:32:59 +01:00
a415a3201a 1.0.9
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
2026-03-01 12:25:34 +01:00
27c7659397 fix: renforcer corrélation A/B et sorties stdout/fichier
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
Co-authored-by: aider (openrouter/openai/gpt-5.3-codex) <aider@aider.chat>
2026-03-01 12:10:17 +01:00
d3436f6245 1.0.8
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
2026-03-01 11:30:55 +01:00
a3ae5421cf chore: version 1.0.7 - add log levels
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Add configurable log levels: DEBUG, INFO, WARN, ERROR
- Replace debug.enabled with log.level in configuration
- Add Warn/Warnf methods for warning messages
- Log orphan events and buffer overflow as WARN
- Log parse errors as WARN
- Log raw events and correlations as DEBUG

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 02:33:04 +01:00
56c2923121 chore: version 1.0.6 - simplify YAML configuration
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Remove service.name and service.language (unused)
- Remove enabled flags on outputs (presence = enabled)
- Simplify correlation config: time_window_s (integer) instead of nested object
- Simplify orphan_policy to emit_orphans boolean
- Rename apache socket to http.socket
- Add socket_permissions option for unix sockets (default: 0660)
- Update tests for new configuration format

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 01:59:59 +01:00
efeb7e455f fix: use %{spec_version} macro in RPM spec file
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Define %global spec_version before Version: field
- Use %{spec_version} in Version: field for proper macro expansion
- Makes version management easier for RPM builds

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 01:17:03 +01:00
ea5ac94983 chore: bump version to 1.0.4
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Update packaging/rpm/logcorrelator.spec: Version 1.0.4
- Update CHANGELOG.md with 1.0.4 release notes
- Update Makefile: PKG_VERSION 1.0.4

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 00:46:09 +01:00
445acc325b fix: systemd service hardening and correct config path
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Fix config path: .conf → .yml
- Add /etc/logcorrelator to ReadWritePaths (config reload)
- Add TimeoutStartSec=10 (matches systemd expectations)
- Add TimeoutStopSec=30 (aligned with code shutdown timeout)

These changes ensure proper systemd integration and security.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 00:44:19 +01:00
7e9d203341 feat: auto-start systemd service after RPM installation
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Add 'systemctl start logcorrelator.service' in post script
- Update both packaging/rpm/post and logcorrelator.spec
- Service is now enabled AND started automatically on install

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 00:42:15 +01:00
880b29bb78 chore: fix CI branch name and tidy go modules
Some checks failed
Build and Test / test (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / docker (push) Has been cancelled
- Update .github/workflows/ci.yml: main → master
- Run go mod tidy to clean up dependencies
- clickhouse-go/v2 moved to direct dependencies (used in code)
- Add test dependencies (stretchr/testify, kr/pretty)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 00:35:04 +01:00
644d81d33e refactor: rename RPM directories to generic el8/el9/el10 naming
- Replace rocky8/rocky9/almalinux10 with el8/el9/el10
- Rename Docker build stages: rpm-rocky* → rpm-el*
- Update Makefile to use new directory structure
- Update comments: 'Rocky Linux' → 'Enterprise Linux'
- Simplify Docker volume mount path for RPM output

This makes the naming more generic and aligned with RPM conventions
(el8, el9, el10) rather than specific distribution names.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 00:29:50 +01:00
b25dc24ed9 docs: update architecture.yml after code cleanup
- Remove TimeProvider from internal/ports responsibilities (now only in domain)
- Fix configuration format references: TOML → YAML

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 00:28:23 +01:00
41e763ad02 refactor: remove unused code and fix documentation
- Remove CorrelationKeyFull() alias, use CorrelationKey() everywhere
- Remove duplicate TimeProvider interface from ports/source.go
- Remove unused time import from ports/source.go
- Update README.md: replace ./build.sh and ./test.sh with make commands
- Update RPM package names in README to match current version (1.0.3)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 00:26:07 +01:00
9bb6ae3106 fix: use version from .spec file for RPM builds
- Extract version dynamically from packaging/rpm/logcorrelator.spec
- Apply to both Dockerfile and Dockerfile.package
- Ensures RPM packages always use the correct version from spec file

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 00:19:14 +01:00
87b94f3c18 feat: add main entry point and stdout sink for Docker build
- Create cmd/logcorrelator/main.go as the application entry point
  - Loads configuration from YAML file
  - Initializes Unix socket sources, file/ClickHouse/stdout sinks
  - Sets up correlation service and orchestrator
  - Handles graceful shutdown on SIGINT/SIGTERM
  - Supports -version flag to print version

- Add internal/adapters/outbound/stdout/sink.go
  - Implements CorrelatedLogSink interface for stdout output
  - Writes JSON lines to standard output

- Fix .gitignore to use /logcorrelator instead of logcorrelator
  - Prevents cmd/logcorrelator directory from being ignored

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 23:32:25 +01:00
f33d7ac7cd fix: add .dockerignore to ensure proper Docker build context
The Docker build was failing because Docker was using .gitignore patterns
to filter the build context, which excluded the cmd/ directory.

This new .dockerignore file explicitly controls what gets copied into
the Docker build context, ensuring all source files are included while
excluding build artifacts and cache files.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 23:18:06 +01:00
0ca7f53d01 Add --no-cache to docker build commands
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 23:10:00 +01:00
58292e10d7 Add Makefile and remove obsolete build.sh/test.sh scripts
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 22:55:25 +01:00
52eebafb0b docs: update README and architecture for v1.0.3 flat JSON structure
- docs: update README.md with flat JSON output example
- docs: update architecture.yml correlated_log schema
- docs: update ClickHouse schema to use fields JSON column
- breaking: document migration from apache/network to fields

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 22:28:45 +01:00
514cb553ef feat: release v1.0.3 with flattened JSON output structure
- breaking: remove apache and network subdivisions from JSON output
- feat: all log fields now merged into single-level JSON structure
- feat: custom MarshalJSON() implementation for flat output
- chore: update ClickHouse schema to use single fields JSON column
- docs: update CHANGELOG.md and README.md with v1.0.3 changes
- build: bump version to 1.0.3 in build.sh and RPM spec

Migration notes:
- Existing ClickHouse tables need schema migration to use fields JSON column
- Replace apache JSON and network JSON columns with fields JSON column

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 22:26:20 +01:00
180c57c35b chore: release v1.0.2 with critical fixes and test improvements
- fix: add missing ClickHouse driver dependency
- fix: resolve race condition in orchestrator (single goroutine per source)
- feat: add explicit source_type config for Unix socket sources
- test: improve coverage from 50.6% to 62.0%
- docs: add CHANGELOG.md with release notes
- build: update version to 1.0.2 in build scripts and Dockerfiles

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 21:45:00 +01:00
5f97af3627 docs: update architecture.yml for AlmaLinux 10 support
- Remove CentOS 7 (EOL, inaccessible repositories)
- Remove Rocky Linux 10 (not available, use AlmaLinux 10 instead)
- Add AlmaLinux 10 to supported distributions
- Update packaging stages and verification commands

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 20:59:27 +01:00
439e18c70d feat: add AlmaLinux 10 RPM support
- Add AlmaLinux 10 build stage using almalinux:10 Docker image
- Build RPM for AlmaLinux 10 (el10) alongside Rocky Linux 8/9
- Update build.sh to extract and document AlmaLinux 10 artifacts

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 20:56:57 +01:00
846f1aa6cd refactor: drop CentOS 7 support, keep Rocky Linux 8/9 only
- CentOS 7 is EOL with inaccessible repositories (vault.centos.org)
- SCL and IUS repositories no longer working for CentOS 7
- Rocky Linux 8/9 remain fully supported and maintained

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 20:50:36 +01:00
39f138ea73 fix: add CentOS 7 RPM support with SCL Ruby 2.5
- Configure vault.centos.org repositories for EOL CentOS 7
- Use Ruby 2.5 from Software Collections (SCL) for fpm compatibility
- Remove Rocky Linux 10 support (image not available)
- Update build.sh to extract CentOS 7, Rocky 8/9 RPMs

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 20:43:50 +01:00
c7b8523879 chore: bump version to 1.0.1 and update changelog
- Update RPM spec version to 1.0.1
- Add changelog entries for changes since 1.0.0
- Add .aider* to .gitignore

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 20:16:38 +01:00
7e9535122e fix: durcir la validation et fiabiliser flush/arrêt idempotents
Co-authored-by: aider (openrouter/openai/gpt-5.3-codex) <aider@aider.chat>
2026-02-28 20:10:28 +01:00
81849b16d8 refactor: remove Debian/DEB packaging, RPM-only support
- Remove all DEB packaging files (packaging/deb/*)
- Update Dockerfile.package to build RPM packages only
- Update build.sh to remove DEB build steps
- Update architecture.yml to reflect RPM-only distribution
- Update README.md installation instructions for RPM only
- Change runtime image from distroless/base-debian12 to scratch
- Clean up obsolete build artifacts in dist/

Supported distributions now:
- CentOS 7 (el7)
- Rocky Linux 8 (el8)
- Rocky Linux 9 (el9)
- Rocky Linux 10 (el10)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 19:55:24 +01:00
7a9d92a469 feat: add multi-distro RPM packaging for CentOS 7 and Rocky Linux 8/9/10
- Create RPM maintainer scripts (post, preun, postun)
- Add Docker build stages for each target distribution (el7, el8, el9, el10)
- Update architecture.yml with supported RPM distributions
- Update build.sh to extract distro-specific RPM packages

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 17:17:56 +01:00
85f7af357c refactor: remove obsolete config and update documentation
- Remove config.example.conf (replaced by config.example.yml)
- Update Dockerfile to use YAML config
- Update README.md with YAML configuration examples
- Remove old directive-based config documentation
- Update package paths (DEB and RPM) in README

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 16:14:53 +01:00
f4d95eed41 test: update config tests for YAML format
- Replace custom directive tests with YAML-based tests
- Test valid YAML config loading
- Test invalid YAML handling
- Test default values with partial YAML config

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 15:54:13 +01:00