Files
pika/internal/repo/monitor_repo.go
T
2026-08-12 18:59:29 +08:00

82 lines
2.2 KiB
Go

package repo
import (
"context"
"github.com/go-orz/orz"
"github.com/pika-monitor/pika/internal/models"
"gorm.io/gorm"
)
type MonitorRepo struct {
orz.Repository[models.MonitorTask, string]
}
func NewMonitorRepo(db *gorm.DB) *MonitorRepo {
return &MonitorRepo{
Repository: orz.NewRepository[models.MonitorTask, string](db),
}
}
func (r *MonitorRepo) FindByEnabledAndAgentId(ctx context.Context, agentId string) ([]models.MonitorTask, error) {
var tasks []models.MonitorTask
if err := r.GetDB(ctx).
Model(&models.MonitorTask{}).
Where(`enabled = ? and (agent_id = ? or agent_id = "")`, true, agentId).
Find(&tasks).Error; err != nil {
return nil, err
}
return tasks, nil
}
func (r *MonitorRepo) FindByAuth(ctx context.Context, isAuthenticated bool) ([]models.MonitorTask, error) {
var monitors []models.MonitorTask
query := r.GetDB(ctx).Where("enabled = ?", true)
// 如果未登录,只查询公开可见的监控任务
if !isAuthenticated {
query = query.Where("visibility = ?", "public")
}
if err := query.Order("name ASC").Find(&monitors).Error; err != nil {
return nil, err
}
return monitors, nil
}
// FindPublicMonitorByID 查找指定ID的公开可见监控任务
func (r *MonitorRepo) FindPublicMonitorByID(ctx context.Context, id string) (*models.MonitorTask, error) {
var task models.MonitorTask
err := r.GetDB(ctx).
Where("id = ? AND visibility = ?", id, "public").
First(&task).Error
if err != nil {
return nil, err
}
return &task, nil
}
// FindByEnabled 查找所有启用的监控任务
func (r *MonitorRepo) FindByEnabled(ctx context.Context, enabled bool) ([]models.MonitorTask, error) {
var monitors []models.MonitorTask
if err := r.GetDB(ctx).
Where("enabled = ?", enabled).
Find(&monitors).Error; err != nil {
return nil, err
}
return monitors, nil
}
// FindByEnabledAndType 查找所有启用的监控任务
func (r *MonitorRepo) FindByEnabledAndType(ctx context.Context, enabled bool, typ string) ([]models.MonitorTask, error) {
var monitors []models.MonitorTask
if err := r.GetDB(ctx).
Where("enabled = ? and type = ?", enabled, typ).
Find(&monitors).Error; err != nil {
return nil, err
}
return monitors, nil
}