fix: patch timezone error.

This commit is contained in:
charlesgauthereau
2026-01-12 11:52:57 +01:00
parent 1229dc2769
commit a11b81bfdd
8 changed files with 60 additions and 11 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ services:
# POOLING: 1
TZ: "Europe/Paris"
# DATABASES_CONFIG_FILE: "config.toml"
EDGE_KEY: "eyJzZXJ2ZXJVcmwiOiJodHRwOi8vbG9jYWxob3N0Ojg4ODciLCJhZ2VudElkIjoiOThlZmY1YjEtMDQyZC00MDkxLWJkYjctZTgzYmM0YjczNjAxIiwicHVibGljS2V5IjoiLS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tXG5NSUlCQ2dLQ0FRRUFuYUVKdnVBSExlNGF5d0RmNGplelVobm45VXRkdksyZ3pEMEg2cERJYXczYkJKRkpwVnVDXG5uVFV3MXA3Q2RnOXBzdjZhRnpyOXZPd0J2MjMzckxpdVpCT2lCb2p2Q0QrSlZid3hyTzBRRW5hN2dmaHV1ZGYwXG5VVlJOMkxmK1g1aTkvZzJTNm5xcExoTm1DaGFJNk8ybktYZUNlRmtubEErRUJrNnFoV1FCVGozb05TYTFTOFY1XG40UFRTT2I4NUo3a2k5YllEbXRiNWxrU3dCNXdXOTdtQjg0ZzI2WHAvU3FFcmhKc0NGK3YrN09vTWYzTzJqTTNoXG5XMUQ0MzBPRitWaklwUGdoV09rZy96NXZQUWFHRzhqQ0h4VDlJR0Q0bjhyS05LQ3FTOGNyN2diTGU0cWpNdmhvXG5BQVVvaHpHR2FRNkhlWlJ4S0UvM3J1a2JldnY5dnJ2TTNRSURBUUFCXG4tLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tXG4ifQ"
EDGE_KEY: "eyJzZXJ2ZXJVcmwiOiJodHRwOi8vbG9jYWxob3N0Ojg4ODciLCJhZ2VudElkIjoiOWU0NjE0YTEtMjJkMi00NWJlLTgyZWEtMTI4MzQ1OGU0YjUwIiwicHVibGljS2V5IjoiLS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tXG5NSUlCQ2dLQ0FRRUFuYUVKdnVBSExlNGF5d0RmNGplelVobm45VXRkdksyZ3pEMEg2cERJYXczYkJKRkpwVnVDXG5uVFV3MXA3Q2RnOXBzdjZhRnpyOXZPd0J2MjMzckxpdVpCT2lCb2p2Q0QrSlZid3hyTzBRRW5hN2dmaHV1ZGYwXG5VVlJOMkxmK1g1aTkvZzJTNm5xcExoTm1DaGFJNk8ybktYZUNlRmtubEErRUJrNnFoV1FCVGozb05TYTFTOFY1XG40UFRTT2I4NUo3a2k5YllEbXRiNWxrU3dCNXdXOTdtQjg0ZzI2WHAvU3FFcmhKc0NGK3YrN09vTWYzTzJqTTNoXG5XMUQ0MzBPRitWaklwUGdoV09rZy96NXZQUWFHRzhqQ0h4VDlJR0Q0bjhyS05LQ3FTOGNyN2diTGU0cWpNdmhvXG5BQVVvaHpHR2FRNkhlWlJ4S0UvM3J1a2JldnY5dnJ2TTNRSURBUUFCXG4tLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tXG4ifQ"
extra_hosts:
- "localhost:host-gateway"
networks:
+5 -1
View File
@@ -19,10 +19,11 @@ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
&& rm -rf /var/lib/apt/lists/*
ARG TARGETARCH
# =========================
# PostgreSQL client binaries (versions 12-18)
# =========================
ARG TARGETARCH
RUN for v in 12 13 14 15 16 17 18; do \
mkdir -p /usr/lib/postgresql/$v/bin; \
@@ -44,6 +45,9 @@ RUN if [ "$TARGETARCH" = "amd64" ]; then \
chmod +x /usr/lib/postgresql/*/bin/*
WORKDIR /app
# =========================
+16 -3
View File
@@ -1,10 +1,10 @@
use crate::domain::mysql::connection::server_version;
use crate::services::config::DatabaseConfig;
use anyhow::{Context, Result};
use tracing::debug;
use std::collections::HashMap;
use std::path::PathBuf;
use std::process::Command;
use crate::services::config::DatabaseConfig;
use tracing::{debug, error, info};
pub async fn run(
cfg: DatabaseConfig,
@@ -15,6 +15,19 @@ pub async fn run(
tokio::task::spawn_blocking(move || -> Result<PathBuf> {
debug!("Starting backup for database {}", cfg.name);
let version = match futures::executor::block_on(server_version(&cfg)) {
Ok(v) => {
debug!("Mysql version detected: {}", v);
v
}
Err(e) => {
error!("Failed to get server version for {}: {:?}", cfg.name, e);
return Err(e.into());
}
};
info!("Mysql version found: {}", version);
let file_path = backup_dir.join(format!("{}{}", cfg.generated_id, file_extension));
let output = Command::new("mysqldump")
+27
View File
@@ -0,0 +1,27 @@
use crate::services::config::DatabaseConfig;
use std::process::Command;
use anyhow::Result;
pub async fn server_version(cfg: &DatabaseConfig) -> Result<String> {
let output = Command::new("mysql")
.arg("--host").arg(&cfg.host)
.arg("--port").arg(cfg.port.to_string())
.arg("--user").arg(&cfg.username)
.arg("-e").arg("SELECT VERSION();")
.env("MYSQL_PWD", &cfg.password)
.output()?;
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
anyhow::bail!("Version query failed: {}", stderr);
}
let version = String::from_utf8_lossy(&output.stdout)
.lines()
.nth(1) // skip column header
.unwrap_or_default()
.trim()
.to_string();
Ok(version)
}
+2 -1
View File
@@ -1,4 +1,5 @@
pub mod backup;
pub mod database;
mod restore;
mod ping;
mod ping;
mod connection;
+3 -2
View File
@@ -1,5 +1,5 @@
use anyhow::{Context, Result};
use chrono::Utc;
use chrono::{Local};
use tracing::{info, warn, error};
use std::path::{Path, PathBuf};
use std::time::{Duration, SystemTime};
@@ -90,7 +90,8 @@ impl FileLock {
f.write_all(format!("Service: {}\n", service_name).as_bytes()).await?;
f.write_all(format!("PID: {}\n", std::process::id()).as_bytes()).await?;
f.write_all(format!("Timestamp: {}\n", Utc::now()).as_bytes()).await?;
// f.write_all(format!("Timestamp: {}\n", Utc::now()).as_bytes()).await?;
f.write_all(format!("Timestamp: {}\n", Local::now()).as_bytes()).await?;
info!("Successfully acquired lock for {}", id);
Ok(())
+3 -2
View File
@@ -1,7 +1,7 @@
use crate::utils::task_manager::models;
use crate::utils::task_manager::tasks::{remove_task, upsert_task};
use crate::utils::text::normalize_cron;
use chrono::Utc;
use chrono::{Local};
use cron::Schedule;
use tracing::debug;
use redis::AsyncCommands;
@@ -11,7 +11,8 @@ use tracing::info;
pub fn next_run_timestamp(expr: &str) -> i64 {
let schedule = Schedule::from_str(expr).unwrap();
schedule.upcoming(Utc).next().unwrap().timestamp()
// schedule.upcoming(Utc).next().unwrap().timestamp()
schedule.upcoming(Local).next().unwrap().timestamp()
}
pub async fn check_and_update_cron(
+3 -1
View File
@@ -13,7 +13,9 @@ use tracing::error;
pub async fn scheduler_loop(mut conn: MultiplexedConnection) {
loop {
let now = chrono::Utc::now().timestamp();
// let now = chrono::Utc::now().timestamp();
let now = chrono::Local::now().timestamp();
// info!("Scheduling task {}", chrono::Local::now());
let due: Vec<String> = conn
.zrangebyscore(SCHEDULE_KEY, 0, now)