package models import ( "fmt" "strconv" "time" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/timeutil" ) // Cloudbrain statistic info of all CloudbrainTasks type CloudbrainStatistic struct { ID int64 `xorm:"pk autoincr" json:"-"` Date string `xorm:"NOT NULL DEFAULT 0" json:"date"` WhichHour int64 `xorm:"NOT NULL DEFAULT -1" json:"whichHour"` NumDubugOne int64 `xorm:"NOT NULL DEFAULT 0" json:"numDubugOne"` NumBenchmarkOne int64 `xorm:"NOT NULL DEFAULT 0" json:"numBenchmarkOne"` NumTrainOne int64 `xorm:"NOT NULL DEFAULT 0" json:"numTrainOne"` NumDubugTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"numDubugTwo"` NumTrainTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"numTrainTwo"` NumInferenceTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"numInferenceTwo"` NumCloudOneAll int64 `xorm:"NOT NULL DEFAULT 0" json:"numCloudOneAll"` NumCloudTwoAll int64 `xorm:"NOT NULL DEFAULT 0" json:"numCloudTwoAll"` DurationDubugOne int64 `xorm:"NOT NULL DEFAULT 0" json:"durationDubugOne"` DurationBenchmarkOne int64 `xorm:"NOT NULL DEFAULT 0" json:"durationBenchmarkOne"` DurationTrainOne int64 `xorm:"NOT NULL DEFAULT 0" json:"durationTrainOne"` DurationDebugTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"durationDebugTwo"` DurationTrainTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"durationTrainTwo"` DurationInferenceTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"durationInferenceTwo"` DurationCloudOneAll int64 `xorm:"NOT NULL DEFAULT 0" json:"durationCloudOneAll"` DurationCloudTwoAll int64 `xorm:"NOT NULL DEFAULT 0" json:"durationCloudTwoAll"` CreatedUnix timeutil.TimeStamp `xorm:"INDEX created" json:"-"` UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated" json:"-"` } func GetJobWaitingPeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and status ='" + string(JobWaiting) + "'" return x.SQL(countSql).Count() } func GetJobRunningPeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and status ='" + string(JobRunning) + "'" return x.SQL(countSql).Count() } func GetJobStoppedPeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and status ='" + string(JobStopped) + "'" return x.SQL(countSql).Count() } func GetJobSucceededPeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and status ='" + string(JobSucceeded) + "'" return x.SQL(countSql).Count() } func GetJobFailedPeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and status ='" + string(JobFailed) + "'" return x.SQL(countSql).Count() } func GetDebugOnePeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and job_type ='" + string(JobTypeDebug) + "'" + " and type='" + strconv.Itoa(TypeCloudBrainOne) + "'" return x.SQL(countSql).Count() } func GetDebugOnePeriodDuration(beginTime time.Time, endTime time.Time) (int64, error) { total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeDebug, TypeCloudBrainOne).SumInt(&Cloudbrain{}, "duration") if err != nil { return 0, err } return total, nil } func GetTrainOnePeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and job_type ='" + string(JobTypeTrain) + "'" + " and type='" + strconv.Itoa(TypeCloudBrainOne) + "'" return x.SQL(countSql).Count() } func GetTrainOnePeriodDuration(beginTime time.Time, endTime time.Time) (int64, error) { total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeTrain, TypeCloudBrainOne).SumInt(&Cloudbrain{}, "duration") if err != nil { return 0, err } return total, nil } func GetBenchmarkOnePeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and job_type ='" + string(JobTypeBenchmark) + "'" + " and type='" + strconv.Itoa(TypeCloudBrainOne) + "'" return x.SQL(countSql).Count() } func GetBenchmarkOnePeriodDuration(beginTime time.Time, endTime time.Time) (int64, error) { total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeBenchmark, TypeCloudBrainOne).SumInt(&Cloudbrain{}, "duration") if err != nil { return 0, err } return total, nil } func GetDebugTwoPeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and job_type ='" + string(JobTypeDebug) + "'" + " and type='" + strconv.Itoa(TypeCloudBrainTwo) + "'" return x.SQL(countSql).Count() } func GetDebugTwoPeriodDuration(beginTime time.Time, endTime time.Time) (int64, error) { total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeDebug, TypeCloudBrainTwo).SumInt(&Cloudbrain{}, "duration") if err != nil { return 0, err } return total, nil } func GetTrainTwoPeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and job_type ='" + string(JobTypeTrain) + "'" + " and type='" + strconv.Itoa(TypeCloudBrainTwo) + "'" return x.SQL(countSql).Count() } func GetTrainTwoPeriodDuration(beginTime time.Time, endTime time.Time) (int64, error) { total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeTrain, TypeCloudBrainTwo).SumInt(&Cloudbrain{}, "duration") if err != nil { return 0, err } return total, nil } func GetInferenceTwoPeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and job_type ='" + string(JobTypeInference) + "'" + " and type='" + strconv.Itoa(TypeCloudBrainTwo) + "'" return x.SQL(countSql).Count() } func GetInferenceTwoPeriodDuration(beginTime time.Time, endTime time.Time) (int64, error) { total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeInference, TypeCloudBrainTwo).SumInt(&Cloudbrain{}, "duration") if err != nil { return 0, err } return total, nil } func GetCloudBrainOnePeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and type='" + strconv.Itoa(TypeCloudBrainOne) + "'" return x.SQL(countSql).Count() } func GetCloudBrainOnePeriodDuration(beginTime time.Time, endTime time.Time) (int64, error) { total, err := x.Where("created_unix >= ? And created_unix < ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), TypeCloudBrainOne).SumInt(&Cloudbrain{}, "duration") if err != nil { return 0, err } return total, nil } func GetCloudBrainTwoPeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " and type='" + strconv.Itoa(TypeCloudBrainTwo) + "'" return x.SQL(countSql).Count() } func GetCloudBrainTwoPeriodDuration(beginTime time.Time, endTime time.Time) (int64, error) { total, err := x.Where("created_unix >= ? And created_unix < ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), TypeCloudBrainTwo).SumInt(&Cloudbrain{}, "duration") if err != nil { return 0, err } return total, nil } func GetCloudBrainOneCount() (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where type='" + strconv.Itoa(TypeCloudBrainOne) + "'" return x.SQL(countSql).Count() } func GetCloudBrainOneDuration() (int64, error) { total, err := x.Where("type = ? ", TypeCloudBrainOne).SumInt(&Cloudbrain{}, "duration") if err != nil { return 0, err } return total, nil } func GetCloudBrainTwoCount() (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where type='" + strconv.Itoa(TypeCloudBrainTwo) + "'" return x.SQL(countSql).Count() } func GetCloudBrainTwoDuration() (int64, error) { total, err := x.Where("type = ? ", TypeCloudBrainTwo).SumInt(&Cloudbrain{}, "duration") if err != nil { return 0, err } return total, nil } func GetCreatorPeriodCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(distinct user_id) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) return x.SQL(countSql).Count() } func GetCreatorCount() (int64, error) { countSql := "SELECT count(distinct user_id) FROM public.cloudbrain" return x.SQL(countSql).Count() } func DeleteCloudbrainStatisticDaily(date string) error { sess := xStatistic.NewSession() defer sess.Close() if err := sess.Begin(); err != nil { return fmt.Errorf("Begin: %v", err) } if _, err := sess.Where("date = ?", date).Delete(&CloudbrainStatistic{}); err != nil { return fmt.Errorf("Delete: %v", err) } if err := sess.Commit(); err != nil { sess.Close() return fmt.Errorf("Commit: %v", err) } sess.Close() return nil } func GetHourStatTime(timeStr string, whichHour int64) (time.Time, time.Time) { t, _ := time.Parse("2006-01-02", timeStr) timeNumber := t.Unix() beginTimeNumber := timeNumber - 8*60*60 + whichHour*60*60 endTimeNumber := beginTimeNumber + 1*60*60 beginTime := time.Unix(beginTimeNumber, 0) endTime := time.Unix(endTimeNumber, 0) log.Info("%s, %s", beginTime, endTime) return beginTime, endTime } func GetDayStatTime(timeStr string) (time.Time, time.Time) { t, _ := time.Parse("2006-01-02", timeStr) timeNumber := t.Unix() beginTimeNumber := timeNumber - 8*60*60 endTimeNumber := beginTimeNumber + 16*60*60 beginTime := time.Unix(beginTimeNumber, 0) endTime := time.Unix(endTimeNumber, 0) log.Info("%s, %s", beginTime, endTime) return beginTime, endTime } func CreateCloudbrainStatistic(cloudbrainStat *CloudbrainStatistic) (err error) { if _, err = xStatistic.Insert(cloudbrainStat); err != nil { return err } return nil } func GetJobWaitingCount() (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobWaiting) + "'" return x.SQL(countSql).Count() } func GetJobStoppedCount() (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobStopped) + "'" return x.SQL(countSql).Count() } func GetJobSucceededCount() (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobSucceeded) + "'" return x.SQL(countSql).Count() } func GetJobFailedCount() (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobFailed) + "'" return x.SQL(countSql).Count() } func GetJobRunningCount() (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobRunning) + "'" return x.SQL(countSql).Count() }