Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions docs/deploy/schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
-- Deploy模块数据库架构
-- 部署相关的主机、实例和版本历史表

-- 创建hosts表:主机信息
CREATE TABLE hosts (
id SERIAL PRIMARY KEY,
name VARCHAR(255) UNIQUE,
ip_address VARCHAR(45) UNIQUE,
is_stopped BOOLEAN
);

-- 创建instances表:服务实例信息
CREATE TABLE instances (
id VARCHAR(255) NOT NULL PRIMARY KEY, -- VARCHAR类型主键,非自增,不为空
service_name VARCHAR(255),
service_version VARCHAR(255),
host_id VARCHAR(255),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

数据库列类型不匹配。
instances 表中的 host_id 列定义为 VARCHAR(255),但它似乎是作为外键关联到 hosts 表的 id 列。而 hosts.id 列的类型是 SERIAL,即自增整数(integer)。

为了保证数据完整性和查询性能,建议将 host_id 的类型修改为 INTEGERBIGINT,并添加外键约束。

-- 建议的修改
CREATE TABLE instances (
    ...
    host_id INTEGER,
    ...
    FOREIGN KEY (host_id) REFERENCES hosts(id)
);

host_ip_address VARCHAR(45),
ip_address VARCHAR(45),
port INT,
status VARCHAR(50),
is_stopped BOOLEAN,
-- 保留ip_address和port的组合唯一约束
CONSTRAINT unique_ip_port UNIQUE (ip_address, port)
);

-- 1. 创建service_name和service_version的联合索引
CREATE INDEX idx_instances_service_name_version
ON instances (service_name, service_version);

-- 2. 创建service_name和ip_address的联合索引
CREATE INDEX idx_instances_service_name_ip
ON instances (service_name, ip_address);

-- 3. 创建version_histories表:版本历史记录
CREATE TABLE version_histories (
id SERIAL PRIMARY KEY,
instance_id VARCHAR(255),
service_name VARCHAR(255),
service_version VARCHAR(255),
status VARCHAR(50)
);

-- 初始化主机数据
-- 插入 jfcs1021 主机数据
INSERT INTO hosts (name, ip_address, is_stopped)
VALUES ('jfcs1021', '10.210.10.33', false);

-- 插入 jfcs1022 主机数据
INSERT INTO hosts (name, ip_address, is_stopped)
VALUES ('jfcs1022', '10.210.10.30', false);

-- 插入 jfcs1023 主机数据
INSERT INTO hosts (name, ip_address, is_stopped)
VALUES ('jfcs1023', '10.210.10.31', false);
8 changes: 6 additions & 2 deletions docs/service_manager/model/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,21 @@ CREATE TABLE IF NOT EXISTS service_states (

-- 部署任务表 (deploy_tasks)
CREATE TABLE IF NOT EXISTS deploy_tasks (
id VARCHAR(32) PRIMARY KEY,
service VARCHAR(255),
version VARCHAR(255),
start_time TIMESTAMP,
end_time TIMESTAMP,
target_ratio DOUBLE PRECISION,
instances JSONB DEFAULT '[]'::jsonb,
deploy_state VARCHAR(50)
deploy_state VARCHAR(50),
PRIMARY KEY (service, version),
FOREIGN KEY (service) REFERENCES services(name) ON DELETE CASCADE
);

-- 创建索引以提高查询性能
CREATE INDEX IF NOT EXISTS idx_service_states_service ON service_states(service);
CREATE INDEX IF NOT EXISTS idx_service_states_report_at ON service_states(service, report_at DESC);
CREATE INDEX IF NOT EXISTS idx_deploy_tasks_service ON deploy_tasks(service);
CREATE INDEX IF NOT EXISTS idx_deploy_tasks_state ON deploy_tasks(deploy_state);
CREATE INDEX IF NOT EXISTS idx_service_instances_service ON service_instances(service);

Expand Down
24 changes: 24 additions & 0 deletions internal/deploy/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
database:
host: "localhost"
port: 5432
user: "admin"
password: "password"
dbname: "zeroops"
sslmode: "disable"

privateKey: |
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDZsfv1qscqYdy4vY+P4e3cAtmvppXQcRvrF1cB4drkv0haU24Y
7m5qYtT52Kr539RdbKKdLAM6s20lWy7+5C0DgacdwYWd/7PeCELyEipZJL07Vro7
Ate8Bfjya+wltGK9+XNUIHiumUKULW4KDx21+1NLAUeJ6PeW+DAkmJWF6QIDAQAB
AoGBAJlNxenTQj6OfCl9FMR2jlMJjtMrtQT9InQEE7m3m7bLHeC+MCJOhmNVBjaM
ZpthDORdxIZ6oCuOf6Z2+Dl35lntGFh5J7S34UP2BWzF1IyyQfySCNexGNHKT1G1
XKQtHmtc2gWWthEg+S6ciIyw2IGrrP2Rke81vYHExPrexf0hAkEA9Izb0MiYsMCB
/jemLJB0Lb3Y/B8xjGjQFFBQT7bmwBVjvZWZVpnMnXi9sWGdgUpxsCuAIROXjZ40
IRZ2C9EouwJBAOPjPvV8Sgw4vaseOqlJvSq/C/pIFx6RVznDGlc8bRg7SgTPpjHG
4G+M3mVgpCX1a/EU1mB+fhiJ2LAZ/pTtY6sCQGaW9NwIWu3DRIVGCSMm0mYh/3X9
DAcwLSJoctiODQ1Fq9rreDE5QfpJnaJdJfsIJNtX1F+L3YceeBXtW0Ynz2MCQBI8
9KP274Is5FkWkUFNKnuKUK4WKOuEXEO+LpR+vIhs7k6WQ8nGDd4/mujoJBr5mkrw
DPwqA3N5TMNDQVGv8gMCQQCaKGJgWYgvo3/milFfImbp+m7/Y3vCptarldXrYQWO
AQjxwc71ZGBFDITYvdgJM1MTqc8xQek1FXn1vfpy2c6O
-----END RSA PRIVATE KEY-----
Comment on lines +9 to +24
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

严重安全漏洞:私钥被硬编码在配置文件中并提交到版本控制系统。这会造成极大的安全风险,任何能访问代码仓库的人都能获取到该私钥。

强烈建议立即从代码库中移除此私钥,并采取以下任一方式进行管理:

  1. 使用环境变量加载私钥。
  2. 通过安全的密钥管理服务(如 Vault)在运行时获取。
  3. 将私钥存放在服务器上受保护的文件中,并通过配置指定文件路径来读取。

44 changes: 44 additions & 0 deletions internal/deploy/config/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package config

import (
"fmt"
"os"

"gopkg.in/yaml.v3"
)

// Config Deploy服务配置
type Config struct {
Database DatabaseConfig `yaml:"database"`
}

// DatabaseConfig 数据库配置
type DatabaseConfig struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
User string `yaml:"user"`
Password string `yaml:"password"`
DBName string `yaml:"dbname"`
SSLMode string `yaml:"sslmode"`
}

// GetDSN 获取PostgreSQL数据库连接字符串
func (d *DatabaseConfig) GetDSN() string {
return fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
d.Host, d.Port, d.User, d.Password, d.DBName, d.SSLMode)
}

// LoadConfig 加载配置文件
func LoadConfig(configPath string) (*Config, error) {
data, err := os.ReadFile(configPath)
if err != nil {
return nil, fmt.Errorf("failed to read config file: %w", err)
}

var config Config
if err := yaml.Unmarshal(data, &config); err != nil {
return nil, fmt.Errorf("failed to parse config file: %w", err)
}

return &config, nil
}
Binary file added internal/deploy/packages/storage-v1.0.0.tar.gz
Binary file not shown.
4 changes: 2 additions & 2 deletions internal/prometheus_adapter/config/prometheus_adapter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ prometheus:
# 告警 Webhook 服务配置
alert_webhook:
# 监控告警模块地址
url: "http://alert-module:8080/v1/integrations/alertmanager/webhook"
url: "http://10.210.10.33:8080/v1/integrations/alertmanager/webhook"
# 轮询间隔
polling_interval: "10s"

Expand All @@ -24,4 +24,4 @@ alert_rules:
# 服务器配置
server:
# 服务监听地址
bind_addr: "0.0.0.0:9999"
bind_addr: "0.0.0.0:9999"
11 changes: 9 additions & 2 deletions internal/prometheus_adapter/service/alert_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -520,9 +520,16 @@ func (s *AlertService) buildExpression(rule *model.AlertRule, meta *model.AlertR
}
}

// 添加比较操作符和阈值
// 添加比较操作符和阈值(检查是否已经包含)
if meta.Threshold != 0 {
expr = fmt.Sprintf("%s %s %g", expr, rule.Op, meta.Threshold)
// 检查表达式是否已经包含比较操作符
hasComparison := strings.Contains(expr, " > ") || strings.Contains(expr, " < ") ||
strings.Contains(expr, " = ") || strings.Contains(expr, " != ") ||
strings.Contains(expr, " >= ") || strings.Contains(expr, " <= ")

if !hasComparison {
expr = fmt.Sprintf("%s %s %g", expr, rule.Op, meta.Threshold)
}
}

return expr
Expand Down
Loading