| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- package controllers
- import (
- "context"
- "fwh-toolbox-server/database"
- taskqueue "fwh-toolbox-server/taskQueue"
- "fwh-toolbox-server/types"
- "time"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/bson/primitive"
- "go.mongodb.org/mongo-driver/mongo/options"
- )
- type SiteAnalysisInfo = types.SiteAnalysisInfo
- type SiteAnalysisOptions = types.SiteAnalysisOptions
- type SiteAnalysisConfig = types.SiteAnalysisConfig
- type SiteAnalysisConfigWrite = types.SiteAnalysisConfigWrite
- // 从数据库获取站点分析列表
- func GetSiteAnalysisManageList(page, size uint, sn, progress *string) (*ResPage[SiteAnalysisInfo], error) {
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
- collection := database.GetCollection("SiteAnalysisConfig")
- filter := bson.M{}
- // 条件
- if sn != nil {
- filter["sn"] = *sn
- }
- if progress != nil {
- filter["progress"] = *progress
- }
- findOptions := options.Find().
- SetProjection(bson.M{
- "_id": 1,
- "sn": 1,
- "description": 1,
- "item": 1,
- "progress": 1,
- }).
- SetSkip(int64((page - 1) * size)).
- SetLimit(int64(size))
- cursor, err := collection.Find(ctx, filter, findOptions)
- 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)
- }
- // 查询总数
- total, err := collection.CountDocuments(ctx, filter)
- if err != nil {
- return nil, err
- }
- res := ResPage[SiteAnalysisInfo]{
- Data: configList,
- PageSize: size,
- PageNum: page,
- Total: uint(total),
- }
- return &res, 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(writeConfig SiteAnalysisConfigWrite) error {
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
- config := SiteAnalysisConfig{
- SiteAnalysisConfigWrite: writeConfig,
- Item: []string{},
- Progress: "pending",
- }
- // 生成Item标签
- if writeConfig.EnableTimeline {
- config.Item = append(config.Item, "时间线")
- }
- collection := database.GetCollection("SiteMonitorConfig")
- res, err := collection.InsertOne(ctx, config)
- if err != nil {
- return err
- }
- taskqueue.EnqueueSiteAnalysisTask(taskqueue.TaskSiteAnalysis{
- Id: res.InsertedID.(primitive.ObjectID),
- Sn: writeConfig.Sn,
- TimePeriod: writeConfig.TimePeriod,
- SiteAnalysisOptions: SiteAnalysisOptions{
- EnableTimeline: writeConfig.EnableTimeline,
- },
- })
- return nil
- }
- // 更新一条站点分析配置到数据库
- func UpdateSiteAnalysisConfig(id primitive.ObjectID, writeConfig SiteAnalysisConfigWrite) error {
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
- config := SiteAnalysisConfig{
- SiteAnalysisConfigWrite: writeConfig,
- Item: []string{},
- Progress: "pending",
- }
- // 生成Item标签
- if writeConfig.EnableTimeline {
- config.Item = append(config.Item, "时间线")
- }
- collection := database.GetCollection("SiteMonitorConfig")
- // _, err := collection.InsertOne(ctx, config)
- filter := bson.M{"_id": id} // 按ID匹配
- update := bson.M{
- "$set": config, // 如果存在就更新所有字段
- }
- opts := options.Update().SetUpsert(true)
- _, err := collection.UpdateOne(ctx, filter, update, opts)
- if err != nil {
- return err
- }
- taskqueue.EnqueueSiteAnalysisTask(taskqueue.TaskSiteAnalysis{
- Id: writeConfig.Id,
- Sn: writeConfig.Sn,
- TimePeriod: writeConfig.TimePeriod,
- SiteAnalysisOptions: SiteAnalysisOptions{
- EnableTimeline: writeConfig.EnableTimeline,
- },
- })
- 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
- }
- // TODO 需删除相关数据
- return nil
- }
|