Skip to content

Commit 1a37c8a

Browse files
authored
Merge pull request #92 from JaD1ng/feat/issue78
feat(service_manager):将发布系统接入服务管理模块
2 parents 89dd332 + e7daa5c commit 1a37c8a

File tree

24 files changed

+1958
-173
lines changed

24 files changed

+1958
-173
lines changed

docs/deploy/schema.sql

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
-- Deploy模块数据库架构
2+
-- 部署相关的主机、实例和版本历史表
3+
4+
-- 创建hosts表:主机信息
5+
CREATE TABLE hosts (
6+
id SERIAL PRIMARY KEY,
7+
name VARCHAR(255) UNIQUE,
8+
ip_address VARCHAR(45) UNIQUE,
9+
is_stopped BOOLEAN
10+
);
11+
12+
-- 创建instances表:服务实例信息
13+
CREATE TABLE instances (
14+
id VARCHAR(255) NOT NULL PRIMARY KEY, -- VARCHAR类型主键,非自增,不为空
15+
service_name VARCHAR(255),
16+
service_version VARCHAR(255),
17+
host_id VARCHAR(255),
18+
host_ip_address VARCHAR(45),
19+
ip_address VARCHAR(45),
20+
port INT,
21+
status VARCHAR(50),
22+
is_stopped BOOLEAN,
23+
-- 保留ip_address和port的组合唯一约束
24+
CONSTRAINT unique_ip_port UNIQUE (ip_address, port)
25+
);
26+
27+
-- 1. 创建service_name和service_version的联合索引
28+
CREATE INDEX idx_instances_service_name_version
29+
ON instances (service_name, service_version);
30+
31+
-- 2. 创建service_name和ip_address的联合索引
32+
CREATE INDEX idx_instances_service_name_ip
33+
ON instances (service_name, ip_address);
34+
35+
-- 3. 创建version_histories表:版本历史记录
36+
CREATE TABLE version_histories (
37+
id SERIAL PRIMARY KEY,
38+
instance_id VARCHAR(255),
39+
service_name VARCHAR(255),
40+
service_version VARCHAR(255),
41+
status VARCHAR(50)
42+
);
43+
44+
-- 初始化主机数据
45+
-- 插入 jfcs1021 主机数据
46+
INSERT INTO hosts (name, ip_address, is_stopped)
47+
VALUES ('jfcs1021', '10.210.10.33', false);
48+
49+
-- 插入 jfcs1022 主机数据
50+
INSERT INTO hosts (name, ip_address, is_stopped)
51+
VALUES ('jfcs1022', '10.210.10.30', false);
52+
53+
-- 插入 jfcs1023 主机数据
54+
INSERT INTO hosts (name, ip_address, is_stopped)
55+
VALUES ('jfcs1023', '10.210.10.31', false);

docs/service_manager/model/schema.sql

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,21 @@ CREATE TABLE IF NOT EXISTS service_states (
4444

4545
-- 部署任务表 (deploy_tasks)
4646
CREATE TABLE IF NOT EXISTS deploy_tasks (
47-
id VARCHAR(32) PRIMARY KEY,
47+
service VARCHAR(255),
48+
version VARCHAR(255),
4849
start_time TIMESTAMP,
4950
end_time TIMESTAMP,
5051
target_ratio DOUBLE PRECISION,
5152
instances JSONB DEFAULT '[]'::jsonb,
52-
deploy_state VARCHAR(50)
53+
deploy_state VARCHAR(50),
54+
PRIMARY KEY (service, version),
55+
FOREIGN KEY (service) REFERENCES services(name) ON DELETE CASCADE
5356
);
5457

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

internal/deploy/config.yaml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
database:
2+
host: "localhost"
3+
port: 5432
4+
user: "admin"
5+
password: "password"
6+
dbname: "zeroops"
7+
sslmode: "disable"
8+
9+
privateKey: |
10+
-----BEGIN RSA PRIVATE KEY-----
11+
MIICXQIBAAKBgQDZsfv1qscqYdy4vY+P4e3cAtmvppXQcRvrF1cB4drkv0haU24Y
12+
7m5qYtT52Kr539RdbKKdLAM6s20lWy7+5C0DgacdwYWd/7PeCELyEipZJL07Vro7
13+
Ate8Bfjya+wltGK9+XNUIHiumUKULW4KDx21+1NLAUeJ6PeW+DAkmJWF6QIDAQAB
14+
AoGBAJlNxenTQj6OfCl9FMR2jlMJjtMrtQT9InQEE7m3m7bLHeC+MCJOhmNVBjaM
15+
ZpthDORdxIZ6oCuOf6Z2+Dl35lntGFh5J7S34UP2BWzF1IyyQfySCNexGNHKT1G1
16+
XKQtHmtc2gWWthEg+S6ciIyw2IGrrP2Rke81vYHExPrexf0hAkEA9Izb0MiYsMCB
17+
/jemLJB0Lb3Y/B8xjGjQFFBQT7bmwBVjvZWZVpnMnXi9sWGdgUpxsCuAIROXjZ40
18+
IRZ2C9EouwJBAOPjPvV8Sgw4vaseOqlJvSq/C/pIFx6RVznDGlc8bRg7SgTPpjHG
19+
4G+M3mVgpCX1a/EU1mB+fhiJ2LAZ/pTtY6sCQGaW9NwIWu3DRIVGCSMm0mYh/3X9
20+
DAcwLSJoctiODQ1Fq9rreDE5QfpJnaJdJfsIJNtX1F+L3YceeBXtW0Ynz2MCQBI8
21+
9KP274Is5FkWkUFNKnuKUK4WKOuEXEO+LpR+vIhs7k6WQ8nGDd4/mujoJBr5mkrw
22+
DPwqA3N5TMNDQVGv8gMCQQCaKGJgWYgvo3/milFfImbp+m7/Y3vCptarldXrYQWO
23+
AQjxwc71ZGBFDITYvdgJM1MTqc8xQek1FXn1vfpy2c6O
24+
-----END RSA PRIVATE KEY-----

internal/deploy/config/config.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package config
2+
3+
import (
4+
"fmt"
5+
"os"
6+
7+
"gopkg.in/yaml.v3"
8+
)
9+
10+
// Config Deploy服务配置
11+
type Config struct {
12+
Database DatabaseConfig `yaml:"database"`
13+
}
14+
15+
// DatabaseConfig 数据库配置
16+
type DatabaseConfig struct {
17+
Host string `yaml:"host"`
18+
Port int `yaml:"port"`
19+
User string `yaml:"user"`
20+
Password string `yaml:"password"`
21+
DBName string `yaml:"dbname"`
22+
SSLMode string `yaml:"sslmode"`
23+
}
24+
25+
// GetDSN 获取PostgreSQL数据库连接字符串
26+
func (d *DatabaseConfig) GetDSN() string {
27+
return fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
28+
d.Host, d.Port, d.User, d.Password, d.DBName, d.SSLMode)
29+
}
30+
31+
// LoadConfig 加载配置文件
32+
func LoadConfig(configPath string) (*Config, error) {
33+
data, err := os.ReadFile(configPath)
34+
if err != nil {
35+
return nil, fmt.Errorf("failed to read config file: %w", err)
36+
}
37+
38+
var config Config
39+
if err := yaml.Unmarshal(data, &config); err != nil {
40+
return nil, fmt.Errorf("failed to parse config file: %w", err)
41+
}
42+
43+
return &config, nil
44+
}
4.3 MB
Binary file not shown.

internal/prometheus_adapter/config/prometheus_adapter.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ prometheus:
1010
# 告警 Webhook 服务配置
1111
alert_webhook:
1212
# 监控告警模块地址
13-
url: "http://alert-module:8080/v1/integrations/alertmanager/webhook"
13+
url: "http://10.210.10.33:8080/v1/integrations/alertmanager/webhook"
1414
# 轮询间隔
1515
polling_interval: "10s"
1616

@@ -24,4 +24,4 @@ alert_rules:
2424
# 服务器配置
2525
server:
2626
# 服务监听地址
27-
bind_addr: "0.0.0.0:9999"
27+
bind_addr: "0.0.0.0:9999"

internal/prometheus_adapter/service/alert_service.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -520,9 +520,16 @@ func (s *AlertService) buildExpression(rule *model.AlertRule, meta *model.AlertR
520520
}
521521
}
522522

523-
// 添加比较操作符和阈值
523+
// 添加比较操作符和阈值(检查是否已经包含)
524524
if meta.Threshold != 0 {
525-
expr = fmt.Sprintf("%s %s %g", expr, rule.Op, meta.Threshold)
525+
// 检查表达式是否已经包含比较操作符
526+
hasComparison := strings.Contains(expr, " > ") || strings.Contains(expr, " < ") ||
527+
strings.Contains(expr, " = ") || strings.Contains(expr, " != ") ||
528+
strings.Contains(expr, " >= ") || strings.Contains(expr, " <= ")
529+
530+
if !hasComparison {
531+
expr = fmt.Sprintf("%s %s %g", expr, rule.Op, meta.Threshold)
532+
}
526533
}
527534

528535
return expr

0 commit comments

Comments
 (0)