forked from JointCloud/pcm-coordinator
133 lines
3.1 KiB
Go
133 lines
3.1 KiB
Go
/*
|
|
|
|
Copyright (c) [2023] [pcm]
|
|
[pcm-coordinator] is licensed under Mulan PSL v2.
|
|
You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
You may obtain a copy of Mulan PSL v2 at:
|
|
http://license.coscl.org.cn/MulanPSL2
|
|
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
EITHER EXPaRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
See the Mulan PSL v2 for more details.
|
|
|
|
*/
|
|
|
|
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/robfig/cron/v3"
|
|
"io"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"mime/multipart"
|
|
"sigs.k8s.io/yaml"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// Convert 通过JSON赋值
|
|
func Convert(source interface{}, target interface{}) {
|
|
jsonByte, _ := json.Marshal(source)
|
|
json.Unmarshal(jsonByte, &target)
|
|
}
|
|
|
|
// Int64ToString int64转string
|
|
func Int64ToString(value int64) string {
|
|
return strconv.FormatInt(value, 10)
|
|
}
|
|
|
|
// EntryIdToString EntryID转string
|
|
func EntryIdToString(id cron.EntryID) string {
|
|
return strconv.Itoa(int(id))
|
|
}
|
|
|
|
func StringToInt(value string) int {
|
|
intValue, _ := strconv.Atoi(value)
|
|
return intValue
|
|
}
|
|
func StringToInt64(value string) int64 {
|
|
intValue, _ := strconv.ParseInt(value, 10, 64)
|
|
return intValue
|
|
}
|
|
|
|
func StringToFloat64(value string) float64 {
|
|
floatValue, _ := strconv.ParseFloat(value, 64)
|
|
return floatValue
|
|
}
|
|
|
|
func RunTimeToSeconds(runTime string) int {
|
|
time := strings.Split(runTime, ":")
|
|
day, _ := strconv.Atoi(time[0])
|
|
hour, _ := strconv.Atoi(time[1])
|
|
seconds, _ := strconv.Atoi(time[2])
|
|
return day*3600 + hour*60 + seconds
|
|
}
|
|
|
|
func Yaml2struct(fileHeader *multipart.FileHeader, req interface{}) error {
|
|
file, err := fileHeader.Open()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fileByte, err := io.ReadAll(file)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = yaml.Unmarshal(fileByte, &req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func K8sUnstructured(dataString string, target interface{}) {
|
|
unstructuredList := unstructured.UnstructuredList{}
|
|
json.Unmarshal([]byte(dataString), &unstructuredList)
|
|
runtime.DefaultUnstructuredConverter.FromUnstructured(unstructuredList.UnstructuredContent(), target)
|
|
}
|
|
|
|
// removeDuplication_map 去重数组
|
|
func RemoveDuplication_map(arr []string) []string {
|
|
set := make(map[string]struct{}, len(arr))
|
|
j := 0
|
|
for _, v := range arr {
|
|
_, ok := set[v]
|
|
if ok {
|
|
continue
|
|
}
|
|
set[v] = struct{}{}
|
|
arr[j] = v
|
|
j++
|
|
}
|
|
return arr[:j]
|
|
}
|
|
|
|
func ConvertStructToMap(in interface{}) map[string]string {
|
|
out := make(map[string]string)
|
|
|
|
b, _ := json.Marshal(&in)
|
|
var m map[string]interface{}
|
|
_ = json.Unmarshal(b, &m)
|
|
|
|
for k, v := range m {
|
|
out[k] = fmt.Sprintf("%v", v)
|
|
}
|
|
return out
|
|
}
|
|
|
|
func StringToYaml(in string) *string {
|
|
// 将Go字符串转换为字节数组
|
|
byteArray := []byte(in)
|
|
// 解析YAML数据
|
|
var yamlData map[string]interface{}
|
|
err := yaml.Unmarshal(byteArray, &yamlData)
|
|
// 将解析后的数据转换为YAML格式
|
|
yamlString, err := yaml.Marshal(yamlData)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
resp := string(yamlString)
|
|
return &resp
|
|
}
|