package mongo import ( "context" "fwh-toolbox-server/database" "fwh-toolbox-server/domain" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) const ( CollectionName_SiteMonitorConfig = "SiteMonitorConfig" ) // 从数据库获取站点监控配置列表 func GetSiteMonitorConfig() ([]domain.SitesMonitorConfig, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection(CollectionName_SiteMonitorConfig) cursor, err := collection.Find(ctx, bson.M{}) // 空条件,查全部 if err != nil { return nil, err } defer cursor.Close(ctx) var configList []domain.SitesMonitorConfig for cursor.Next(ctx) { var cfg domain.SitesMonitorConfig if err := cursor.Decode(&cfg); err != nil { return nil, err } configList = append(configList, cfg) } return configList, nil } // 从数据库获取监控名列表 func GetSiteMonitorNameList() ([]string, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection(CollectionName_SiteMonitorConfig) cursor, err := collection.Find( ctx, bson.M{}, // 空条件,查全部 options.Find().SetProjection(bson.M{ "name": 1, // 只要 name 字段 "_id": 0, // 不要 _id 字段(默认会返回) }), ) if err != nil { return nil, err } defer cursor.Close(ctx) var nameList []string for cursor.Next(ctx) { var result struct { Name string `bson:"name"` } if err := cursor.Decode(&result); err != nil { return nil, err } nameList = append(nameList, result.Name) } return nameList, nil } // 从数据库获取一条站点监控配置 func GetOneSiteMonitorConfig(name string) ([]domain.SitesMonitorConfig, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection(CollectionName_SiteMonitorConfig) var cfg domain.SitesMonitorConfig err := collection.FindOne(ctx, bson.M{"name": name}).Decode(&cfg) if err == mongo.ErrNoDocuments { return []domain.SitesMonitorConfig{}, nil } else if err != nil { return nil, err } var configList []domain.SitesMonitorConfig configList = append(configList, cfg) return configList, nil } // 插入一条站点监控配置到数据库 func InsertSiteMonitorConfig(config domain.SitesMonitorConfig) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection(CollectionName_SiteMonitorConfig) // _, err := collection.InsertOne(ctx, config) filter := bson.M{"name": config.Name} // 按用户名匹配 update := bson.M{ "$set": config, // 如果存在就更新所有字段 } opts := options.Update().SetUpsert(true) _, err := collection.UpdateOne(ctx, filter, update, opts) if err != nil { return err } return nil } // 更新一条站点监控配置到数据库 func UpdateSiteMonitorConfig(name string, config domain.SitesMonitorConfig) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection(CollectionName_SiteMonitorConfig) // _, err := collection.InsertOne(ctx, config) filter := bson.M{"name": name} // 按用户名匹配 update := bson.M{ "$set": config, // 如果存在就更新所有字段 } opts := options.Update().SetUpsert(true) _, err := collection.UpdateOne(ctx, filter, update, opts) if err != nil { return err } return nil } // 删除一条站点监控配置 func DeleteSiteMonitorConfig(name string) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() filter := bson.M{"name": name} // 删除条件 collection := database.GetCollection(CollectionName_SiteMonitorConfig) _, err := collection.DeleteOne(ctx, filter) if err != nil { return err } return nil } // 更新一条站点监控页面配置到数据库 func UpdateSiteMonitorPageConfig(name string, config domain.MonitorPageConfig) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection(CollectionName_SiteMonitorConfig) // _, err := collection.InsertOne(ctx, config) filter := bson.M{"name": name} // 按用户名匹配 update := bson.M{ "$set": bson.M{ "pageConfig": config, // 更新页面配置字段 }, } opts := options.Update().SetUpsert(true) _, err := collection.UpdateOne(ctx, filter, update, opts) if err != nil { return err } return nil }