package controllers import ( "context" "fwh-toolbox-server/database" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo/options" ) type Progress string // 'pending' | 'running' | 'error' | 'complete' type SiteAnalysisInfo struct { Id primitive.ObjectID `bson:"_id" json:"id"` Sn string `bson:"sn" json:"sn"` Description string `bson:"description" json:"description"` Item []string `bson:"item" json:"item"` Progress Progress `bson:"progress" json:"progress"` } type SiteAnalysisConfig struct { Id primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"` Sn string `bson:"sn" json:"sn"` Description string `bson:"description" json:"description"` Item []string `bson:"item" json:"item"` Progress Progress `bson:"progress" json:"progress"` TimePeriod [2]string `bson:"timePeriod" json:"timePeriod"` EnableEventAndAlarm bool `bson:"enableEventAndAlarm" json:"enableEventAndAlarm"` EnableCloudLog bool `bson:"enableCloudLog" json:"enableCloudLog"` EnableSiteLog bool `bson:"enableSiteLog" json:"enableSiteLog"` } // 从数据库获取站点分析列表 func GetSiteAnalysisManageList() ([]SiteAnalysisInfo, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection("SiteAnalysisConfig") cursor, err := collection.Find(ctx, bson.M{}, options.Find().SetProjection(bson.M{ // 配置需要的字段 "_id": 1, // (默认会返回) "sn": 1, "description": 1, "item": 1, "progress": 1, })) // 空条件,查全部 if err != nil { return nil, err } defer cursor.Close(ctx) var configList []SiteAnalysisInfo for cursor.Next(ctx) { var cfg SiteAnalysisInfo if err := cursor.Decode(&cfg); err != nil { return nil, err } configList = append(configList, cfg) } return configList, nil } // 从数据库获取一条站点分析配置 func GetSiteAnalysisConfig(id primitive.ObjectID) (*SitesMonitorConfig, error) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection("SiteMonitorConfig") var cfg SitesMonitorConfig err := collection.FindOne(ctx, bson.M{"_id": id}).Decode(&cfg) if err != nil { return nil, err } return &cfg, nil } // 插入一条站点分析配置到数据库 func InsertSiteAnalysisConfig(config SiteAnalysisConfig) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection("SiteMonitorConfig") // _, err := collection.InsertOne(ctx, config) filter := bson.M{"_id": config.Id} // 按用户名匹配 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 UpdateSiteAnalysisConfig(id primitive.ObjectID, config SiteAnalysisConfig) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() collection := database.GetCollection("SiteMonitorConfig") // _, err := collection.InsertOne(ctx, config) filter := bson.M{"_id": id} // 按用户名匹配 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 DeleteSiteAnalysisConfig(id primitive.ObjectID) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() filter := bson.M{"_id": id} // 删除条件 collection := database.GetCollection("SiteMonitorConfig") _, err := collection.DeleteOne(ctx, filter) if err != nil { return err } return nil }