mirror of
https://github.com/Portabase/agent.git
synced 2026-09-11 14:00:14 +00:00
fix: patch timezone error.
This commit is contained in:
+1
-1
@@ -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
@@ -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
|
||||
|
||||
# =========================
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
pub mod backup;
|
||||
pub mod database;
|
||||
mod restore;
|
||||
mod ping;
|
||||
mod ping;
|
||||
mod connection;
|
||||
+3
-2
@@ -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(())
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user