146 lines
3.5 KiB
Go
146 lines
3.5 KiB
Go
package sm
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
"os/exec"
|
|
"time"
|
|
|
|
"ems.agt/lib/log"
|
|
"ems.agt/lib/services"
|
|
"ems.agt/restagent/config"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
)
|
|
|
|
var (
|
|
// Get OMC local time
|
|
UriOMCLocalTime = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/OMC/objectType/time"
|
|
|
|
CustomUriOMCLocalTime = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/OMC/objectType/time"
|
|
)
|
|
|
|
type OMCLocalTime struct {
|
|
Timestamp int64 `json:"timestamp"` // 时间戳 (单位:毫秒)
|
|
TimeZone int `json:"timeZone"` // 本地时区偏移(单位:秒)
|
|
}
|
|
|
|
func GetOMCLocalTime(w http.ResponseWriter, r *http.Request) {
|
|
log.Debug("GetOMCLocalTime processing... ")
|
|
|
|
_, err := services.CheckFrontValidRequest(w, r)
|
|
if err != nil {
|
|
log.Error("Http request error:", err)
|
|
return
|
|
}
|
|
|
|
t := time.Now()
|
|
_, offset := t.Zone()
|
|
|
|
localTime := OMCLocalTime{
|
|
Timestamp: t.UnixMilli(),
|
|
TimeZone: offset,
|
|
}
|
|
response := services.DataResponse{
|
|
Data: localTime,
|
|
}
|
|
services.ResponseWithJson(w, http.StatusOK, response)
|
|
}
|
|
|
|
var dbConfig = config.GetYamlConfig().Database
|
|
|
|
func DatabaseWhoreBackup() {
|
|
// MySQL数据库连接信息
|
|
sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
|
dbConfig.User, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.Name)
|
|
db, err := sql.Open("mysql", sqlStr)
|
|
if err != nil {
|
|
log.Error("Failed to connect to database:", err)
|
|
return
|
|
}
|
|
defer db.Close()
|
|
|
|
// 备份SQL文件路径
|
|
backupFile := dbConfig.Backup + "/" + "whore_backup_" + dbConfig.Name + ".sql"
|
|
|
|
// 执行mysqldump命令进行备份
|
|
cmd := exec.Command("mysqldump", "-u", dbConfig.User, "-p"+dbConfig.Password, "-h", dbConfig.Host, dbConfig.Name)
|
|
output, err := cmd.Output()
|
|
if err != nil {
|
|
log.Error("Failed to execute mysqldump command:", err)
|
|
return
|
|
}
|
|
|
|
// 将备份结果写入SQL文件
|
|
file, err := os.Create(backupFile)
|
|
if err != nil {
|
|
log.Error("Failed to create backup file:", err)
|
|
return
|
|
}
|
|
defer file.Close()
|
|
|
|
_, err = file.Write(output)
|
|
if err != nil {
|
|
log.Error("Failed to write backup file:", err)
|
|
return
|
|
}
|
|
|
|
log.Info("Backup completed successfully.")
|
|
}
|
|
|
|
func DatabaseIncrementalBackup() {
|
|
// MySQL数据库连接信息
|
|
sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=true&loc=Local",
|
|
dbConfig.User, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.Name)
|
|
db, err := sql.Open("mysql", sqlStr)
|
|
if err != nil {
|
|
log.Error("Failed to connect to database:", err)
|
|
return
|
|
}
|
|
defer db.Close()
|
|
|
|
// 备份SQL文件路径
|
|
backupFile := dbConfig.Backup + "/" + "incremental_backup_" + dbConfig.Name + ".sql"
|
|
|
|
// 上次备份的时间点
|
|
lastBackupTime := time.Date(2022, time.January, 1, 0, 0, 0, 0, time.Local)
|
|
|
|
// 构建增量备份SQL语句
|
|
query := fmt.Sprintf("SELECT * FROM table WHERE modified_at > '%s'", lastBackupTime.Format("2006-01-02 15:04:05"))
|
|
|
|
// 执行查询
|
|
rows, err := db.Query(query)
|
|
if err != nil {
|
|
log.Error("Failed to execute query:", err)
|
|
return
|
|
}
|
|
defer rows.Close()
|
|
|
|
// 创建增量备份SQL文件
|
|
file, err := os.Create(backupFile)
|
|
if err != nil {
|
|
log.Error("Failed to create backup file:", err)
|
|
return
|
|
}
|
|
defer file.Close()
|
|
|
|
// 将查询结果写入SQL文件
|
|
for rows.Next() {
|
|
var data string
|
|
err := rows.Scan(&data)
|
|
if err != nil {
|
|
log.Error("Failed to scan row:", err)
|
|
return
|
|
}
|
|
|
|
_, err = file.WriteString(data + "\n")
|
|
if err != nil {
|
|
log.Error("Failed to write backup file:", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
log.Info("Incremental backup completed successfully.")
|
|
}
|