From 2b6f2beeded066249c775df278d6ad07791a31d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=B6=85?= <7546302+red_q@user.noreply.gitee.com> Date: Thu, 6 Mar 2025 22:00:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=91=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E8=BF=90=E8=90=A5=E4=B8=AD=E5=BF=83ECS=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=92=8C=E7=A7=9F=E6=88=B7=E5=88=97=E8=A1=A8=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=88=B0xlsx=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- attackevent/fw_data.go | 2 +- {openapi => dtcloud}/cpu.json | 0 openapi/data.json.go => dtcloud/ecs.json | 199 -------------------- dtcloud/hlw.go | 222 +++++++++++++++++++++++ {openapi => dtcloud}/memory.json | 0 {openapi => dtcloud}/pid.json | 0 dtcloud/user.json | 193 ++++++++++++++++++++ dtcloud/zww.go | 1 + main.go | 9 +- 互联网区-运营平台ECS列表20250306.xlsx | Bin 0 -> 7263 bytes 互联网区-运营平台租户列表20250306.xlsx | Bin 0 -> 5579 bytes 11 files changed, 424 insertions(+), 202 deletions(-) rename {openapi => dtcloud}/cpu.json (100%) rename openapi/data.json.go => dtcloud/ecs.json (94%) create mode 100644 dtcloud/hlw.go rename {openapi => dtcloud}/memory.json (100%) rename {openapi => dtcloud}/pid.json (100%) create mode 100644 dtcloud/user.json create mode 100644 dtcloud/zww.go create mode 100644 互联网区-运营平台ECS列表20250306.xlsx create mode 100644 互联网区-运营平台租户列表20250306.xlsx diff --git a/attackevent/fw_data.go b/attackevent/fw_data.go index 541fc52..eb3dbe5 100644 --- a/attackevent/fw_data.go +++ b/attackevent/fw_data.go @@ -52,7 +52,7 @@ func Fw_event(cookieStr string) { sheet.Cell("N1").SetString("请求路径") sheet.Cell("O1").SetString("参数") sheet.Cell("P1").SetString("源ip地区") - log.Println("生成表格表头标题") + log.Println("生成表格列名完成") //当前时间 EndTime := time.Unix(tool.Timestamp("second"), 0).Format("2006-01-02T15:04:05") //今天0点 diff --git a/openapi/cpu.json b/dtcloud/cpu.json similarity index 100% rename from openapi/cpu.json rename to dtcloud/cpu.json diff --git a/openapi/data.json.go b/dtcloud/ecs.json similarity index 94% rename from openapi/data.json.go rename to dtcloud/ecs.json index 4730a4d..5ccdd3a 100644 --- a/openapi/data.json.go +++ b/dtcloud/ecs.json @@ -1,6 +1,3 @@ -package openapi - -var Zecs = ` { "requestId": "15f04d3c-365f-4204-96e4-fa9dd28e2744", "code": "Success", @@ -2722,200 +2719,4 @@ var Zecs = ` } ] } -}` - -var Zuser = ` -{ - "requestId": "d9111bf5-e6bb-4016-b08a-70985b165dae", - "code": "Success", - "message": "", - "data": { - "size": 10, - "current": 1, - "total": 22, - "totalPage": 3, - "list": [ - { - "id": "1937897449892872282", - "tenantName": "司法局督办系统", - "remark": "", - "createTime": "1740036884000", - "creator": "useradmin", - "useStatus": 0, - "isParentTenant": 0, - "isIdentity": 0, - "enterpriseName": "", - "creditCode": "", - "isEnterpriseOn": 0, - "userAdminCode": "zwwsfdb", - "userAdminId": "1937897449892872284", - "isEnterpriseHaveMain": "0", - "dedicatePlatformCode": "", - "dedicatePlatformName": "" - }, - { - "id": "1935344323763634263", - "tenantName": "煤矿安全风险监测预警系统", - "remark": "", - "createTime": "1739442439000", - "creator": "useradmin", - "useStatus": 0, - "isParentTenant": 0, - "isIdentity": 0, - "enterpriseName": "", - "creditCode": "", - "isEnterpriseOn": 0, - "userAdminCode": "zwwmkaj", - "userAdminId": "1935344323763634265", - "isEnterpriseHaveMain": "0", - "dedicatePlatformCode": "", - "dedicatePlatformName": "" - }, - { - "id": "1933362020262871124", - "tenantName": "李超", - "remark": "管理员", - "createTime": "1738980898000", - "creator": "useradmin", - "useStatus": 0, - "isParentTenant": 0, - "isIdentity": 0, - "enterpriseName": "", - "creditCode": "", - "isEnterpriseOn": 0, - "userAdminCode": "licc", - "userAdminId": "1933362020262871126", - "isEnterpriseHaveMain": "0", - "dedicatePlatformCode": "", - "dedicatePlatformName": "" - }, - { - "id": "1909704420602413068", - "tenantName": "行政审批服务管理局_审批辅助管理系统", - "remark": "", - "createTime": "1733472684000", - "creator": "useradmin", - "useStatus": 0, - "isParentTenant": 0, - "isIdentity": 0, - "enterpriseName": "", - "creditCode": "", - "isEnterpriseOn": 0, - "userAdminCode": "zwwfzgl", - "userAdminId": "1909704420602413070", - "isEnterpriseHaveMain": "0", - "dedicatePlatformCode": "", - "dedicatePlatformName": "" - }, - { - "id": "1909695169108639748", - "tenantName": "行政审批服务管理局_便民系统", - "remark": "", - "createTime": "1733470529000", - "creator": "useradmin", - "useStatus": 0, - "isParentTenant": 0, - "isIdentity": 0, - "enterpriseName": "", - "creditCode": "", - "isEnterpriseOn": 0, - "userAdminCode": "zwwbmxt", - "userAdminId": "1909695169108639750", - "isEnterpriseHaveMain": "0", - "dedicatePlatformCode": "", - "dedicatePlatformName": "" - }, - { - "id": "1898489170070863881", - "tenantName": "云州区委员会宣传部", - "remark": "", - "createTime": "1730861430000", - "creator": "useradmin", - "useStatus": 0, - "isParentTenant": 0, - "isIdentity": 0, - "enterpriseName": "", - "creditCode": "", - "isEnterpriseOn": 0, - "userAdminCode": "zwwyzxc", - "userAdminId": "1898489170070863883", - "isEnterpriseHaveMain": "0", - "dedicatePlatformCode": "", - "dedicatePlatformName": "" - }, - { - "id": "1898184326177095686", - "tenantName": "大同市数据局", - "remark": "", - "createTime": "1730790453000", - "creator": "useradmin", - "useStatus": 0, - "isParentTenant": 0, - "isIdentity": 0, - "enterpriseName": "", - "creditCode": "", - "isEnterpriseOn": 0, - "userAdminCode": "zwwsjj", - "userAdminId": "1898184326177095688", - "isEnterpriseHaveMain": "0", - "dedicatePlatformCode": "", - "dedicatePlatformName": "" - }, - { - "id": "1896688599521296387", - "tenantName": "大同市电子健康卡系统", - "remark": "", - "createTime": "1730442201000", - "creator": "useradmin", - "useStatus": 0, - "isParentTenant": 0, - "isIdentity": 0, - "enterpriseName": "", - "creditCode": "", - "isEnterpriseOn": 0, - "userAdminCode": "zwwwjwk", - "userAdminId": "1896688599521296389", - "isEnterpriseHaveMain": "0", - "dedicatePlatformCode": "", - "dedicatePlatformName": "" - }, - { - "id": "1893644300797870081", - "tenantName": "大同市市场监督管理局", - "remark": "", - "createTime": "1729733396000", - "creator": "useradmin", - "useStatus": 0, - "isParentTenant": 0, - "isIdentity": 0, - "enterpriseName": "", - "creditCode": "", - "isEnterpriseOn": 0, - "userAdminCode": "zwwscjd", - "userAdminId": "1893644300797870083", - "isEnterpriseHaveMain": "0", - "dedicatePlatformCode": "", - "dedicatePlatformName": "" - }, - { - "id": "1893374890518511616", - "tenantName": "审批局取叫号系统", - "remark": "", - "createTime": "1729670668000", - "creator": "useradmin", - "useStatus": 0, - "isParentTenant": 0, - "isIdentity": 0, - "enterpriseName": "", - "creditCode": "", - "isEnterpriseOn": 0, - "userAdminCode": "zwwqjhxt", - "userAdminId": "1893374890518511618", - "isEnterpriseHaveMain": "0", - "dedicatePlatformCode": "", - "dedicatePlatformName": "" - } - ] - } } -` diff --git a/dtcloud/hlw.go b/dtcloud/hlw.go new file mode 100644 index 0000000..15e901d --- /dev/null +++ b/dtcloud/hlw.go @@ -0,0 +1,222 @@ +package dtcloud + +import ( + "dt_automate/tool" + "encoding/json" + "fmt" + "io/ioutil" + "log" + "strconv" + "time" + + "github.com/Esword618/unioffice/schema/soo/sml" + "github.com/Esword618/unioffice/spreadsheet" +) + +// 运营平台-获取单个ecs的cpu使用情况 +func Cpu() { + fileData, err := ioutil.ReadFile("dtcloud/cpu.json") + if err != nil { + log.Fatal(err) + } + var data map[string]interface{} + err = json.Unmarshal(fileData, &data) + if err != nil { + log.Fatal(err) + } + log.Println(data) +} + +// 运营平台-获取单个ecs的memory使用情况 +func Memory() { + fileData, err := ioutil.ReadFile("dtcloud/memory.json") + if err != nil { + log.Fatal(err) + } + var data map[string]interface{} + err = json.Unmarshal(fileData, &data) + if err != nil { + log.Fatal(err) + } + log.Println(data) +} + +// 运营平台-获取租户列表 +func TenantList() { + ss := spreadsheet.New() + sheet := ss.AddSheet() + // sheet.SetFrozen(true, false) + v := sheet.InitialView() + v.SetState(sml.ST_PaneStateFrozen) + v.SetXSplit(0) //冻结列 + v.SetYSplit(1) //冻结行 + sheet.Cell("A1").SetString("序号") + sheet.Cell("B1").SetString("租户ID") + sheet.Cell("C1").SetString("用户ID") + sheet.Cell("D1").SetString("创建者") + sheet.Cell("E1").SetString("昵称") + sheet.Cell("F1").SetString("租户用户名") + sheet.Cell("G1").SetString("使用状态") + sheet.Cell("H1").SetString("创建时间") + log.Println("生成表格列名完成") + fileData, err := ioutil.ReadFile("dtcloud/user.json") + if err != nil { + log.Fatal(err) + } + var data map[string]interface{} + err = json.Unmarshal(fileData, &data) + if err != nil { + log.Fatal(err) + } + // log.Println(data) + + for _, usr := range data["data"].(map[string]interface{})["list"].([]interface{}) { + log.Println(len(sheet.Rows())) + con := len(sheet.Rows()) + 1 + a, _ := strconv.ParseInt(usr.(map[string]interface{})["createTime"].(string), 10, 64) + sheet.Cell("A" + strconv.Itoa(con)).SetString(strconv.Itoa(len(sheet.Rows()) - 1)) + sheet.Cell("B" + strconv.Itoa(con)).SetString(usr.(map[string]interface{})["id"].(string)) + sheet.Cell("C" + strconv.Itoa(con)).SetString(usr.(map[string]interface{})["userAdminId"].(string)) + sheet.Cell("D" + strconv.Itoa(con)).SetString(usr.(map[string]interface{})["creator"].(string)) + sheet.Cell("E" + strconv.Itoa(con)).SetString(usr.(map[string]interface{})["tenantName"].(string)) + sheet.Cell("F" + strconv.Itoa(con)).SetString(usr.(map[string]interface{})["userAdminCode"].(string)) + if condition := usr.(map[string]interface{})["useStatus"].(float64); condition == 0 { + sheet.Cell("G" + strconv.Itoa(con)).SetString("正常") + } else { + sheet.Cell("G" + strconv.Itoa(con)).SetString("禁用") + } + + sheet.Cell("H" + strconv.Itoa(con)).SetString(time.Unix(a/1000, 0).Format("2006-01-02 15:04:05")) + } + // 保存修改后的 Excel 文件 + + if err := ss.Validate(); err != nil { + log.Fatalf("验证文件时出错: %s", err) + } + + if err := ss.SaveToFile("互联网区-运营平台租户列表" + time.Unix(tool.Timestamp("second"), 0).Format("20060102") + ".xlsx"); err != nil { + log.Fatalf("保存文件时出错: %s", err) + } +} + +// 运营平台-获取单ecs进程使用情况 +func Process() { + fileData, err := ioutil.ReadFile("dtcloud/pid.json") + if err != nil { + log.Fatal(err) + } + var data map[string]interface{} + err = json.Unmarshal(fileData, &data) + if err != nil { + log.Fatal(err) + } + log.Println(data) +} + +// 运营平台-获取ecs列表及其详情 +func EcsList() { + ss := spreadsheet.New() + sheet := ss.AddSheet() + // sheet.SetFrozen(true, false) + v := sheet.InitialView() + v.SetState(sml.ST_PaneStateFrozen) + v.SetXSplit(0) //冻结列 + v.SetYSplit(1) //冻结行 + sheet.Cell("A1").SetString("序号") + sheet.Cell("B1").SetString("创建时间") + sheet.Cell("C1").SetString("更新时间") + sheet.Cell("D1").SetString("过期时间") + sheet.Cell("E1").SetString("ECS_ID") + sheet.Cell("F1").SetString("租住ID") + sheet.Cell("G1").SetString("显示名称") + sheet.Cell("H1").SetString("租户名称") + sheet.Cell("I1").SetString("所属区域") + sheet.Cell("J1").SetString("CPU架构") + sheet.Cell("K1").SetString("系统类型") + sheet.Cell("L1").SetString("运行状态") + sheet.Cell("M1").SetString("CPU核心数") + sheet.Cell("N1").SetString("内存/GB") + sheet.Cell("O1").SetString("系统磁盘/GB") + sheet.Cell("P1").SetString("存储磁盘/GB") + sheet.Cell("Q1").SetString("宿主机IP") + sheet.Cell("R1").SetString("MAC地址") + sheet.Cell("S1").SetString("安全组") + sheet.Cell("T1").SetString("网络类型") + sheet.Cell("U1").SetString("EIP") + sheet.Cell("V1").SetString("带宽大小(入/出)") + sheet.Cell("W1").SetString("部门名称") + sheet.Cell("X1").SetString("部门ID") + sheet.Cell("Y1").SetString("主机型号") + sheet.Cell("Z1").SetString("CPU型号") + sheet.Cell("AA1").SetString("CPU模式") + sheet.Cell("AB1").SetString("nodeName") + sheet.Cell("AC1").SetString("cpu超出比率") + log.Println("生成表格列名完成") + //加载json文件 + fileData, err := ioutil.ReadFile("dtcloud/ecs.json") + if err != nil { + log.Fatal(err) + } + var data map[string]interface{} + err = json.Unmarshal(fileData, &data) + if err != nil { + log.Fatal(err) + } + for _, ecs := range data["data"].(map[string]interface{})["virtualMachines"].([]interface{}) { + log.Println(len(sheet.Rows())) + con := len(sheet.Rows()) + 1 + sheet.Cell("A" + strconv.Itoa(con)).SetString(strconv.Itoa(len(sheet.Rows()) - 1)) //序号 + sheet.Cell("B" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["createdAt"].(string)) //创建时间 + sheet.Cell("C" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["updatedAt"].(string)) //更新时间 + sheet.Cell("D" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["expiredAt"].(string)) //过期时间 + sheet.Cell("E" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["ecsId"].(string)) //ECS_ID + sheet.Cell("F" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["tenantId"].(string)) //租住ID + sheet.Cell("G" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["displayName"].(string)) //显示名称 + sheet.Cell("H" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["tenantName"].(string)) //租户名称 + sheet.Cell("I" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["region"].(string) + "/" + ecs.(map[string]interface{})["az"].(string) + "/" + ecs.(map[string]interface{})["cell"].(string)) //所属区域(X/X/X) + sheet.Cell("J" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["cpuArch"].(string)) //CPU架构 + sheet.Cell("K" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["osType"].(string)) //系统类型 + sheet.Cell("L" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["status"].(string)) //运行状态 + sheet.Cell("M" + strconv.Itoa(con)).SetString(strconv.Itoa(int(ecs.(map[string]interface{})["vCpus"].(float64))) + "核") //CPU核心数 + sheet.Cell("N" + strconv.Itoa(con)).SetString(strconv.Itoa(int(ecs.(map[string]interface{})["ram"].(float64))/1024/1024/1024) + "GB") //内存/GB + var diskStrsys string + var diskStrdata string + for _, disk := range ecs.(map[string]interface{})["blockDeviceMappings"].([]interface{}) { + if disk.(map[string]interface{})["isOSDisk"] != nil { + if condition := disk.(map[string]interface{})["isOSDisk"].(bool); condition == true { + diskStrsys += fmt.Sprintf("%sGB/", strconv.Itoa(int(disk.(map[string]interface{})["volumeSize"].(float64)))) //多块系统盘拼接 + } else { + diskStrdata += fmt.Sprintf("%sGB/", strconv.Itoa(int(disk.(map[string]interface{})["volumeSize"].(float64)))) //多块存储盘拼接 + } + } else { + diskStrdata += fmt.Sprintf("%sGB/", strconv.Itoa(int(disk.(map[string]interface{})["volumeSize"].(float64)))) //多块存储盘拼接 + } + } + sheet.Cell("O" + strconv.Itoa(con)).SetString(diskStrsys) //系统磁盘/GB + sheet.Cell("P" + strconv.Itoa(con)).SetString(diskStrdata) //存储磁盘/GB + sheet.Cell("Q" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["networkMappings"].([]interface{})[0].(map[string]interface{})["ipv4Address"].(string)) //宿主机IP + sheet.Cell("R" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["networkMappings"].([]interface{})[0].(map[string]interface{})["macAddress"].(string)) //MAC地址 + sheet.Cell("S" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["networkMappings"].([]interface{})[0].(map[string]interface{})["portType"].(string)) //安全组 + sheet.Cell("T" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["networkMappings"].([]interface{})[0].(map[string]interface{})["networkType"].(string)) //网络类型 + sheet.Cell("U" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["eipMappings"].([]interface{})[0].(map[string]interface{})["ipAddress"].(string)) //EIP + sheet.Cell("V" + strconv.Itoa(con)).SetString(strconv.Itoa(int(ecs.(map[string]interface{})["eipMappings"].([]interface{})[0].(map[string]interface{})["bandwidthInSize"].(float64))) + "/" + strconv.Itoa(int(ecs.(map[string]interface{})["eipMappings"].([]interface{})[0].(map[string]interface{})["bandwidthOutSize"].(float64)))) //带宽大小(入/出) + sheet.Cell("W" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["departmentName"].(string)) //部门名称 + sheet.Cell("X" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["departmentId"].(string)) //部门ID + sheet.Cell("Y" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["flavor"].(map[string]interface{})["flavorType"].(map[string]interface{})["name"].(string)) //主机型号 + sheet.Cell("Z" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["flavor"].(map[string]interface{})["flavorType"].(map[string]interface{})["cpuModel"].(string)) //CPU型号 + sheet.Cell("AA" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["vcpuType"].(string)) //CPU模式 + sheet.Cell("AB" + strconv.Itoa(con)).SetString(ecs.(map[string]interface{})["nodeName"].(string)) + sheet.Cell("AC" + strconv.Itoa(con)).SetString(strconv.Itoa(int(ecs.(map[string]interface{})["cpuExceedRatio"].(float64)))) //cpu超出比率 + + } + + // 保存修改后的 Excel 文件 + + if err := ss.Validate(); err != nil { + log.Fatalf("验证文件时出错: %s", err) + } + + if err := ss.SaveToFile("互联网区-运营平台ECS列表" + time.Unix(tool.Timestamp("second"), 0).Format("20060102") + ".xlsx"); err != nil { + log.Fatalf("保存文件时出错: %s", err) + } +} diff --git a/openapi/memory.json b/dtcloud/memory.json similarity index 100% rename from openapi/memory.json rename to dtcloud/memory.json diff --git a/openapi/pid.json b/dtcloud/pid.json similarity index 100% rename from openapi/pid.json rename to dtcloud/pid.json diff --git a/dtcloud/user.json b/dtcloud/user.json new file mode 100644 index 0000000..6cf402c --- /dev/null +++ b/dtcloud/user.json @@ -0,0 +1,193 @@ +{ + "requestId": "d9111bf5-e6bb-4016-b08a-70985b165dae", + "code": "Success", + "message": "", + "data": { + "size": 10, + "current": 1, + "total": 22, + "totalPage": 3, + "list": [ + { + "id": "1937897449892872282", + "tenantName": "司法局督办系统", + "remark": "", + "createTime": "1740036884000", + "creator": "useradmin", + "useStatus": 0, + "isParentTenant": 0, + "isIdentity": 0, + "enterpriseName": "", + "creditCode": "", + "isEnterpriseOn": 0, + "userAdminCode": "zwwsfdb", + "userAdminId": "1937897449892872284", + "isEnterpriseHaveMain": "0", + "dedicatePlatformCode": "", + "dedicatePlatformName": "" + }, + { + "id": "1935344323763634263", + "tenantName": "煤矿安全风险监测预警系统", + "remark": "", + "createTime": "1739442439000", + "creator": "useradmin", + "useStatus": 0, + "isParentTenant": 0, + "isIdentity": 0, + "enterpriseName": "", + "creditCode": "", + "isEnterpriseOn": 0, + "userAdminCode": "zwwmkaj", + "userAdminId": "1935344323763634265", + "isEnterpriseHaveMain": "0", + "dedicatePlatformCode": "", + "dedicatePlatformName": "" + }, + { + "id": "1933362020262871124", + "tenantName": "李超", + "remark": "管理员", + "createTime": "1738980898000", + "creator": "useradmin", + "useStatus": 0, + "isParentTenant": 0, + "isIdentity": 0, + "enterpriseName": "", + "creditCode": "", + "isEnterpriseOn": 0, + "userAdminCode": "licc", + "userAdminId": "1933362020262871126", + "isEnterpriseHaveMain": "0", + "dedicatePlatformCode": "", + "dedicatePlatformName": "" + }, + { + "id": "1909704420602413068", + "tenantName": "行政审批服务管理局_审批辅助管理系统", + "remark": "", + "createTime": "1733472684000", + "creator": "useradmin", + "useStatus": 0, + "isParentTenant": 0, + "isIdentity": 0, + "enterpriseName": "", + "creditCode": "", + "isEnterpriseOn": 0, + "userAdminCode": "zwwfzgl", + "userAdminId": "1909704420602413070", + "isEnterpriseHaveMain": "0", + "dedicatePlatformCode": "", + "dedicatePlatformName": "" + }, + { + "id": "1909695169108639748", + "tenantName": "行政审批服务管理局_便民系统", + "remark": "", + "createTime": "1733470529000", + "creator": "useradmin", + "useStatus": 0, + "isParentTenant": 0, + "isIdentity": 0, + "enterpriseName": "", + "creditCode": "", + "isEnterpriseOn": 0, + "userAdminCode": "zwwbmxt", + "userAdminId": "1909695169108639750", + "isEnterpriseHaveMain": "0", + "dedicatePlatformCode": "", + "dedicatePlatformName": "" + }, + { + "id": "1898489170070863881", + "tenantName": "云州区委员会宣传部", + "remark": "", + "createTime": "1730861430000", + "creator": "useradmin", + "useStatus": 0, + "isParentTenant": 0, + "isIdentity": 0, + "enterpriseName": "", + "creditCode": "", + "isEnterpriseOn": 0, + "userAdminCode": "zwwyzxc", + "userAdminId": "1898489170070863883", + "isEnterpriseHaveMain": "0", + "dedicatePlatformCode": "", + "dedicatePlatformName": "" + }, + { + "id": "1898184326177095686", + "tenantName": "大同市数据局", + "remark": "", + "createTime": "1730790453000", + "creator": "useradmin", + "useStatus": 0, + "isParentTenant": 0, + "isIdentity": 0, + "enterpriseName": "", + "creditCode": "", + "isEnterpriseOn": 0, + "userAdminCode": "zwwsjj", + "userAdminId": "1898184326177095688", + "isEnterpriseHaveMain": "0", + "dedicatePlatformCode": "", + "dedicatePlatformName": "" + }, + { + "id": "1896688599521296387", + "tenantName": "大同市电子健康卡系统", + "remark": "", + "createTime": "1730442201000", + "creator": "useradmin", + "useStatus": 0, + "isParentTenant": 0, + "isIdentity": 0, + "enterpriseName": "", + "creditCode": "", + "isEnterpriseOn": 0, + "userAdminCode": "zwwwjwk", + "userAdminId": "1896688599521296389", + "isEnterpriseHaveMain": "0", + "dedicatePlatformCode": "", + "dedicatePlatformName": "" + }, + { + "id": "1893644300797870081", + "tenantName": "大同市市场监督管理局", + "remark": "", + "createTime": "1729733396000", + "creator": "useradmin", + "useStatus": 0, + "isParentTenant": 0, + "isIdentity": 0, + "enterpriseName": "", + "creditCode": "", + "isEnterpriseOn": 0, + "userAdminCode": "zwwscjd", + "userAdminId": "1893644300797870083", + "isEnterpriseHaveMain": "0", + "dedicatePlatformCode": "", + "dedicatePlatformName": "" + }, + { + "id": "1893374890518511616", + "tenantName": "审批局取叫号系统", + "remark": "", + "createTime": "1729670668000", + "creator": "useradmin", + "useStatus": 0, + "isParentTenant": 0, + "isIdentity": 0, + "enterpriseName": "", + "creditCode": "", + "isEnterpriseOn": 0, + "userAdminCode": "zwwqjhxt", + "userAdminId": "1893374890518511618", + "isEnterpriseHaveMain": "0", + "dedicatePlatformCode": "", + "dedicatePlatformName": "" + } + ] + } +} \ No newline at end of file diff --git a/dtcloud/zww.go b/dtcloud/zww.go new file mode 100644 index 0000000..e45e193 --- /dev/null +++ b/dtcloud/zww.go @@ -0,0 +1 @@ +package dtcloud diff --git a/main.go b/main.go index cdd83ab..5e3df47 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,7 @@ package main import ( - "dt_automate/openapi" + "dt_automate/dtcloud" "dt_automate/tool" "flag" "fmt" @@ -93,7 +93,12 @@ func main() { // log.Println(wps.Translate("hello")) // wps.Weekly_word() //调用云平台接口 - openapi.Git_sign() + dtcloud.EcsList() //获取ecs列表及其详情(完成) + // dtcloud.Process() //获取单ecs进程使用情况 + // dtcloud.Memory() //获取单个ecs的memory使用情况 + // dtcloud.Cpu() ///获取单个ecs的cpu使用情况 + // dtcloud.TenantList() //获取租户列表(完成) + } } else { log.Println("没有授权") diff --git a/互联网区-运营平台ECS列表20250306.xlsx b/互联网区-运营平台ECS列表20250306.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f957c782da1ac681431b7b0c95d85fdcee3c5ac9 GIT binary patch literal 7263 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 literal 0 HcmV?d00001 diff --git a/互联网区-运营平台租户列表20250306.xlsx b/互联网区-运营平台租户列表20250306.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f6e1f5015d710c1399594b1d534ae912a4ade690 GIT binary patch literal 5579 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 literal 0 HcmV?d00001