368 lines
9.3 KiB
Go
368 lines
9.3 KiB
Go
|
|
/*
|
||
|
|
* Copyright (c) 2019 Huawei Technologies Co., Ltd.
|
||
|
|
* A-Tune is licensed under the Mulan PSL v1.
|
||
|
|
* You can use this software according to the terms and conditions of the Mulan PSL v1.
|
||
|
|
* You may obtain a copy of Mulan PSL v1 at:
|
||
|
|
* http://license.coscl.org.cn/MulanPSL
|
||
|
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||
|
|
* PURPOSE.
|
||
|
|
* See the Mulan PSL v1 for more details.
|
||
|
|
* Create: 2019-10-29
|
||
|
|
*/
|
||
|
|
|
||
|
|
package sqlstore
|
||
|
|
|
||
|
|
import (
|
||
|
|
"atune/common/log"
|
||
|
|
"errors"
|
||
|
|
"strings"
|
||
|
|
)
|
||
|
|
|
||
|
|
// GetClasses method return item of table class_profile
|
||
|
|
func GetClasses(query *GetClass) error {
|
||
|
|
query.Result = make([]*ClassProfile, 0)
|
||
|
|
session := globalEngine.Table("class_profile")
|
||
|
|
|
||
|
|
if query.Class != "" {
|
||
|
|
session.Where("class=?", query.Class)
|
||
|
|
}
|
||
|
|
|
||
|
|
if query.Active {
|
||
|
|
session.Where("active=?", query.Active)
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := session.Find(&query.Result); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// InsertClassProfile method insert item to class_profile table
|
||
|
|
func InsertClassProfile(value *ClassProfile) error {
|
||
|
|
session := globalEngine.Table("class_profile")
|
||
|
|
if _, err := session.Insert(value); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// UpdateClassProfile method update the class_profile table
|
||
|
|
func UpdateClassProfile(value *ClassProfile) error {
|
||
|
|
session := globalEngine.Table("class_profile")
|
||
|
|
if _, err := session.Where("class = ?", value.Class).Update(value); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// DeleteClassProfile method delete item from class_profile table by workloadType
|
||
|
|
func DeleteClassProfile(workloadType string) error {
|
||
|
|
session := globalEngine.Table("class_profile")
|
||
|
|
if _, err := session.Exec("delete from class_profile where class = ?", workloadType); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetClassApps method return the item of table class_apps
|
||
|
|
func GetClassApps(query *GetClassApp) error {
|
||
|
|
query.Result = make([]*ClassApps, 0)
|
||
|
|
session := globalEngine.Table("class_apps")
|
||
|
|
|
||
|
|
if query.Class != "" {
|
||
|
|
session.Where("class=?", query.Class)
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := session.Find(&query.Result); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// InsertClassApps method insert item to class_apps table
|
||
|
|
func InsertClassApps(value *ClassApps) error {
|
||
|
|
session := globalEngine.Table("class_apps")
|
||
|
|
if _, err := session.Insert(value); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// DeleteClassApps method delete item from class_apps table by workload type
|
||
|
|
func DeleteClassApps(workloadType string) error {
|
||
|
|
session := globalEngine.Table("class_apps")
|
||
|
|
if _, err := session.Exec("delete from class_apps where class = ?", workloadType); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// ExistWorkloadType method return true if workloadType exist otherwise return false
|
||
|
|
func ExistWorkloadType(workloadType string) (bool, error) {
|
||
|
|
session := globalEngine.Table("class_apps")
|
||
|
|
exist, err := session.Where("class=?", workloadType).Exist()
|
||
|
|
|
||
|
|
if err != nil {
|
||
|
|
return false, err
|
||
|
|
}
|
||
|
|
return exist, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetContext method return the optimization item of workload type name
|
||
|
|
func GetContext(name string) (string, error) {
|
||
|
|
query := make([]*Profile, 0)
|
||
|
|
|
||
|
|
session := globalEngine.Table("profile")
|
||
|
|
if err := session.Where("profile_type=?", name).Find(&query); err != nil {
|
||
|
|
return "", err
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(query) != 1 {
|
||
|
|
return "", errors.New("name not exist")
|
||
|
|
}
|
||
|
|
|
||
|
|
context := query[0].ProfileInformation
|
||
|
|
return context, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// InsertProfile method insert self define profile to table profile
|
||
|
|
func InsertProfile(value *Profile) error {
|
||
|
|
session := globalEngine.Table("profile")
|
||
|
|
session.Insert(value)
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// UpdateProfile method update the profile table
|
||
|
|
func UpdateProfile(value *Profile) error {
|
||
|
|
session := globalEngine.Table("profile")
|
||
|
|
if _, err := session.Where("profile_type = ?", value.ProfileType).Update(value); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// DeleteProfile method delete the item from profile table
|
||
|
|
func DeleteProfile(profileType string) error {
|
||
|
|
session := globalEngine.Table("profile")
|
||
|
|
if _, err := session.Exec("delete from profile where profile_type = ?", profileType); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
// ExistProfile method return true if profileType exist otherwise return false
|
||
|
|
func ExistProfile(profileType string) (bool, error) {
|
||
|
|
session := globalEngine.Table("profile")
|
||
|
|
exist, err := session.Where("profile_type=?", profileType).Exist()
|
||
|
|
|
||
|
|
if err != nil {
|
||
|
|
return false, err
|
||
|
|
}
|
||
|
|
return exist, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// ActiveProfile method set the workload type state to active
|
||
|
|
func ActiveProfile(name string) error {
|
||
|
|
session := globalEngine.Table("class_profile")
|
||
|
|
|
||
|
|
name = strings.Trim(name, " ")
|
||
|
|
|
||
|
|
profile := new(ClassProfile)
|
||
|
|
session.Where("active=?", true).Get(profile)
|
||
|
|
|
||
|
|
if profile.Class == name {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
session.Exec("update class_profile set active=? where class = ?", !profile.Active, profile.Class)
|
||
|
|
|
||
|
|
newProfile := new(ClassProfile)
|
||
|
|
has, err := session.Where("class=?", name).Get(newProfile)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
} else if !has {
|
||
|
|
return errors.New("Profile does not exist")
|
||
|
|
}
|
||
|
|
|
||
|
|
session.Exec("update class_profile set active=? where class = ?", !newProfile.Active, newProfile.Class)
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetPropertyItem method return the classification of the specified property
|
||
|
|
func GetPropertyItem(property string) (string, error) {
|
||
|
|
tunedItem := new(TunedItem)
|
||
|
|
session := globalEngine.Table("tuned_item")
|
||
|
|
has, err := session.Where("property=?", property).Get(tunedItem)
|
||
|
|
if err != nil {
|
||
|
|
return "", err
|
||
|
|
}
|
||
|
|
|
||
|
|
if !has {
|
||
|
|
return "", errors.New("property is not exist")
|
||
|
|
}
|
||
|
|
|
||
|
|
item := tunedItem.Item
|
||
|
|
|
||
|
|
return item, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetProfileIDByName method return the profile history ID.
|
||
|
|
// the parameter name is workload type
|
||
|
|
func GetProfileIDByName(name string) (int64, error) {
|
||
|
|
query := make([]*Profile, 0)
|
||
|
|
|
||
|
|
session := globalEngine.Table("profile")
|
||
|
|
if err := session.Where("name=?", name).Find(&query); err != nil {
|
||
|
|
return -1, err
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(query) != 1 {
|
||
|
|
return -1, errors.New("profile name not exist")
|
||
|
|
}
|
||
|
|
|
||
|
|
//id := query[0].Id
|
||
|
|
id := int64(0)
|
||
|
|
return id, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetTuneds method return the dynamic tuned items which used for bayes search
|
||
|
|
func GetTuneds(query *GetTuned) error {
|
||
|
|
query.Result = make([]*Tuned, 0)
|
||
|
|
session := globalEngine.Table("tuned")
|
||
|
|
|
||
|
|
if query.Class != "" {
|
||
|
|
session.Where("class=?", query.Class)
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := session.Find(&query.Result); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetRuleTuneds method return the rules inquery from rule_tuned table
|
||
|
|
func GetRuleTuneds(query *GetRuleTuned) error {
|
||
|
|
query.Result = make([]*RuleTuned, 0)
|
||
|
|
session := globalEngine.Table("rule_tuned")
|
||
|
|
|
||
|
|
if query.Class != "" {
|
||
|
|
session.Where("class=?", query.Class)
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := session.Find(&query.Result); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetCollections method return the collection metrics
|
||
|
|
func GetCollections() ([]*Collection, error) {
|
||
|
|
collections := make([]*Collection, 0)
|
||
|
|
|
||
|
|
session := globalEngine.Table("collection")
|
||
|
|
if err := session.Find(&collections); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return collections, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// InsertProfileLog method insert profile history to database
|
||
|
|
func InsertProfileLog(value *ProfileLog) error {
|
||
|
|
session := globalEngine.Table("profile_log")
|
||
|
|
session.Insert(value)
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetProfileLogs method return profile histories
|
||
|
|
func GetProfileLogs() ([]*ProfileLog, error) {
|
||
|
|
profileLogs := make([]*ProfileLog, 0)
|
||
|
|
|
||
|
|
session := globalEngine.Table("profile_log")
|
||
|
|
if err := session.Find(&profileLogs); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return profileLogs, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// DelProfileLogByID method delete the profile history by ID
|
||
|
|
func DelProfileLogByID(id int64) error {
|
||
|
|
session := globalEngine.Table("profile_log")
|
||
|
|
if _, err := session.Exec("delete from profile_log where id = ?", id); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetProfileLogByID method get the profile history by id
|
||
|
|
func GetProfileLogByID(query *GetProfileLog) error {
|
||
|
|
query.Result = make([]*ProfileLog, 0)
|
||
|
|
session := globalEngine.Table("profile_log")
|
||
|
|
if err := session.Where("id = ?", query.ID).Find(&query.Result); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetProfileMaxID method get the id profile history
|
||
|
|
func GetProfileMaxID() (*ProfileLog, error) {
|
||
|
|
profileLog := new(ProfileLog)
|
||
|
|
session := globalEngine.Table("profile_log")
|
||
|
|
has, err := session.Desc("id").Limit(1).Get(profileLog)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
if !has {
|
||
|
|
return nil, nil
|
||
|
|
}
|
||
|
|
return profileLog, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// InActiveProfile method set the active field to false
|
||
|
|
func InActiveProfile() error {
|
||
|
|
session := globalEngine.Table("profile_log")
|
||
|
|
|
||
|
|
if _, err := session.Exec("update class_profile set active=? where active = ?", false, true); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func UpdateSchedule(typename string, strategy string) error {
|
||
|
|
session := globalEngine.Table("schedule")
|
||
|
|
|
||
|
|
item := new(Schedule)
|
||
|
|
has, err := session.Where("type=?", typename).Get(item)
|
||
|
|
if err != nil {
|
||
|
|
log.Info("Schedule have not the type = ?", typename)
|
||
|
|
return err
|
||
|
|
} else if !has {
|
||
|
|
_, err = session.Exec("insert into schedule (type, strategy) values (?, ?)", typename, strategy)
|
||
|
|
if err != nil {
|
||
|
|
log.Info("Insert Schedule values (?, ?)", typename, strategy)
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
_, err = session.Exec("update schedule set type=?,strategy=? where type=?", typename, strategy, typename)
|
||
|
|
log.Info(err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetSchedule() []*Schedule {
|
||
|
|
session := globalEngine.Table("schedule")
|
||
|
|
|
||
|
|
items := make([]*Schedule, 0)
|
||
|
|
if err := session.Find(&items); err != nil {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
return items
|
||
|
|
}
|