dataPoints = metric.getDataPoints();
+
+ if (dimensions!= null && dimensions.size() > 0) {
+ for (int i = 0; i < dimensions.size(); i++) {
+ if (clusterUuid.contains(dimensions.get(i).getValue())){
+ String cceUuid = dimensions.get(i).getValue();
+ String val = dataPoints.get(i).getStatistics().get(0).getValue();
+ GaugeMetricFamily cpuMaxData = new GaugeMetricFamily(PREFIX + metric.getMetric().getMetricName(), "help",
+ Arrays.asList("vendorId", "instanceId"));
+ cpuMaxData.addMetric(Arrays.asList(vendor.getId() + "", cceUuid), Double.parseDouble(val));
+ mfs.add(cpuMaxData);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }catch (Exception e) {
+ log.error("collect managerOne metrics error", e);
+ }
+ }
+
+ collectTimeUse.addMetric(Collections.singletonList("manager_cce"), (System.currentTimeMillis() - now.getTime()));
+ mfs.add(collectTimeUse);
+ super.getCache().put(TIME, new Date());
+ super.getCache().put(DATA, mfs);
+ log.info("collect manager bms metrics end! use " + (System.currentTimeMillis() - now.getTime()) / 1000 + "s");
+ }
+}
diff --git a/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ContainerCluster.java b/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ContainerCluster.java
new file mode 100644
index 0000000..8007ba6
--- /dev/null
+++ b/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ContainerCluster.java
@@ -0,0 +1,160 @@
+package com.bocloud.mcs.collector.manageone.cce.common;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.megatron.common.encrypt.AESEncryptor;
+import com.megatron.common.encrypt.Encryptor;
+import com.megatron.common.model.RequestContext;
+import com.megatron.common.utils.DateDeserializer;
+import com.megatron.common.utils.DateSerializer;
+import com.megatron.common.utils.DaySerializer;
+import lombok.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @ClassName: ContainerCluster
+ * @Description: 容器Kubernetes 集群
+ * @Author lxy
+ * @Date 2022/7/14 17:54
+ */
+@Slf4j
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ContainerCluster {
+
+ private Long id;// ID
+ private String regionId;// 所属域
+
+ private Long vendorId;// 所属云平台
+ private String clusterUuid;// 集群ID
+ private String clusterType;// 集群类型
+ // 集群创建时间
+ private Date created;
+ // 集群版本
+ private String version;
+ // 集群Docker版本。
+ private String dockerVersion;
+ // 集群API Server访问地址,包含内网访问地址以及公网访问地址。
+ private String masterUrl;
+ // 集群安全组ID。
+ private String securityGroupUuid;
+ /**
+ * 集群运行状态,取值: initial:集群创建中。 failed:集群创建失败。 running:集群运行中。 updating:集群升级中。 updating_failed:集群升级失败。 scaling:集群伸缩中。
+ * stopped:集群已经停止运行。 deleting:集群删除中。 deleted:集群已经被删除。 delete_failed:集群删除失败。
+ */
+ // @Column("status")
+ // private String status;
+
+ /**
+ * Pod网络地址段,必须是有效的私有网段,即以下网段及其子网:
+ *
+ * 10.0.0.0/8 172.16-31.0.0/12-16 192.168.0.0/16 不能与VPC及VPC内已有Kubernetes集群使用的网段重复,创建成功后不能修改。
+ */
+ private String subnetCidr;
+ // 集群专有网络ID,创建集群时必传。
+ private String vpcUuid;
+ private String vpcName;
+ // 虚拟交换机ID,创建集群时可选择1~3个虚拟交换机。为保证集群高可用,建议选择不同可用区的虚拟交换机。
+ private String vswitchUuid;
+ // 集群所属可用区ID。
+ private String zoneId;
+ // 托管版集群类型,面向托管集群: ack.pro.small:专业托管集群。 ack.standard:标准托管集群。
+ private String clusterSpec;
+ // 集群删除保护
+ private Boolean deletionProtection;
+ private String eipUuid;
+ private String loadBalancerUuid;
+ private String resourceGroupUuid;// 资源组id
+ // SSH登录密码。密码规则为8~30 个字符,且至少同时包含三项(大小写字母、数字和特殊符号),和key_pair二选一。
+ public String loginPassword;
+ // 密钥对名称,和login_password二选一。
+ public String keyPair;
+
+ // 网络插件
+ private String capabilitiesNetwork;
+ // kube-proxy代理模式
+ private String capabilitiesProxyModel;
+
+ // HSC START
+ // 子网uuid
+ private String subnetUuid;
+ private String subnetName;
+ // 容器网段
+ private String containerCidr;
+ // 服务网段
+ private String serviceCidr;
+ // HCS END
+
+ // 自服务 start
+ private Long tenantId;// 租户ID
+ private String tenantName; // 租户名称
+
+ private Long projectId;// 项目ID
+ private String projectName; // 项目名称
+
+ private String uuid;// uuid,对应子订单号
+
+ @JsonSerialize(using = DaySerializer.class)
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date expiredTime;// 过期时间
+ // 所属申请类别
+ private RequestContext.Catalog catalog;
+ // 所属业务id
+ private Long businessId;
+ // 所属业务名称
+ private String businessName;
+
+ private Boolean isRecycle = false;
+ @JsonSerialize(using = DaySerializer.class)
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date recycleTime;// 回收时间
+ // 自服务 end
+
+ private String regionName;
+ private String vpcSafetyType;//安全类型
+ private String vpcFunctionType;
+ private String applicationName; //应用系统
+ private String resourceSetName; //资源集
+ private String imageId;//自定义镜像
+
+
+ @Getter(AccessLevel.NONE)
+ @Setter(AccessLevel.NONE)
+ private Encryptor encryptor = new AESEncryptor();
+
+
+ @JsonSerialize(
+ using = DateSerializer.class
+ )
+ @JsonDeserialize(
+ using = DateDeserializer.class
+ )
+ @DateTimeFormat(
+ pattern = "yyyy-MM-dd HH:mm:ss"
+ )
+ private Date gmtCreate;
+
+ @JsonSerialize(
+ using = DateSerializer.class
+ )
+ @JsonDeserialize(
+ using = DateDeserializer.class
+ )
+ @DateTimeFormat(
+ pattern = "yyyy-MM-dd HH:mm:ss"
+ )
+ private Date gmtModify;
+ private Long creatorId;
+ private Long ownerId;
+ private Long menderId;
+ private String name;
+ private String status;
+ private Boolean deleted;
+ private String props;
+ private String remark;
+
+}
diff --git a/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ManageOneAuth.java b/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ManageOneAuth.java
new file mode 100644
index 0000000..4220939
--- /dev/null
+++ b/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ManageOneAuth.java
@@ -0,0 +1,63 @@
+package com.bocloud.mcs.collector.manageone.cce.common;
+
+/**
+ * 华为manage one认证实体类
+ *
+ * @author wangyu
+ * @version 1.0
+ * @since 2018年9月16日
+ *
+ */
+public class ManageOneAuth {
+
+ private ManageOneIdentity identity;
+ private ManageOneScope scope;
+
+ /**
+ *
+ */
+ public ManageOneAuth() {
+ super();
+ }
+
+ /**
+ * @param identity
+ * @param scope
+ */
+ public ManageOneAuth(ManageOneIdentity identity, ManageOneScope scope) {
+ super();
+ this.identity = identity;
+ this.scope = scope;
+ }
+
+ /**
+ * @return the identity
+ */
+ public ManageOneIdentity getIdentity() {
+ return identity;
+ }
+
+ /**
+ * @param identity
+ * the identity to set
+ */
+ public void setIdentity(ManageOneIdentity identity) {
+ this.identity = identity;
+ }
+
+ /**
+ * @return the scope
+ */
+ public ManageOneScope getScope() {
+ return scope;
+ }
+
+ /**
+ * @param scope
+ * the scope to set
+ */
+ public void setScope(ManageOneScope scope) {
+ this.scope = scope;
+ }
+
+}
diff --git a/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ManageOneCatalog.java b/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ManageOneCatalog.java
new file mode 100644
index 0000000..ff78580
--- /dev/null
+++ b/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ManageOneCatalog.java
@@ -0,0 +1,91 @@
+package com.bocloud.mcs.collector.manageone.cce.common;
+
+import java.util.List;
+
+public class ManageOneCatalog {
+
+ private String id;
+ private String name;
+ private String type;
+ private List endpoints;
+
+ /**
+ *
+ */
+ public ManageOneCatalog() {
+ super();
+ }
+
+ /**
+ * @param name
+ * @param type
+ * @param endpoints
+ */
+ public ManageOneCatalog(String name, String type, List endpoints) {
+ super();
+ this.name = name;
+ this.type = type;
+ this.endpoints = endpoints;
+ }
+
+ /**
+ * @return the id
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * @param id
+ * the id to set
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name
+ * the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the type
+ */
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * @param type
+ * the type to set
+ */
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ /**
+ * @return the endpoints
+ */
+ public List getEndpoints() {
+ return endpoints;
+ }
+
+ /**
+ * @param endpoints
+ * the endpoints to set
+ */
+ public void setEndpoints(List endpoints) {
+ this.endpoints = endpoints;
+ }
+
+}
diff --git a/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ManageOneCceClient.java b/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ManageOneCceClient.java
new file mode 100644
index 0000000..8d922a8
--- /dev/null
+++ b/src/main/java/com/bocloud/mcs/collector/manageone/cce/common/ManageOneCceClient.java
@@ -0,0 +1,187 @@
+package com.bocloud.mcs.collector.manageone.cce.common;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.megatron.common.enums.PostDataFormat;
+import com.megatron.common.http.CommonResultBuilder;
+import com.megatron.common.http.HttpClient;
+import com.megatron.common.model.Result;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.Header;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+
+import java.util.*;
+
+/**
+ * @ Description: @ Author :丁明威 @ Date :Created in 17:07 2018/11/14 @ Modified
+ * By:
+ */
+@Data
+@Slf4j
+@NoArgsConstructor
+public class ManageOneCceClient {
+
+ private static final String GET_METRIC_DATA_URL = "/v1/{project_id}/ams/metricdata";
+
+ private String username;// 管理员账号
+ private String password;// 管理员密码
+ private String domain;// 所属域
+ private String project;// 项目ID
+ private boolean accessable;
+ private ManageOneToken token;// token信息
+ private String error; // 错误信息
+ private HttpClient client = new HttpClient(60 * 1000, PostDataFormat.RAW);
+ private String monitorUrl;
+ private String monitorUserName;
+ private String monitorPwd;
+ private String monitorToken;
+ private String monitorRoaRand;
+ private String tokenUrl;
+
+
+ public ManageOneCceClient(String tokenUrl,String monitorUrl, String userName, String pwd, String domainName, String projectId) {
+ this.tokenUrl = tokenUrl;
+ this.monitorUrl = monitorUrl;
+ this.username = userName;
+ this.password = pwd;
+ this.domain = domainName;
+ this.project = projectId;
+ initToken();
+ }
+
+ private void initToken() {
+ init();
+ }
+
+
+ /**
+ * 初始化连接
+ */
+ private void init() {
+ String url = this.tokenUrl + "/v3/auth/tokens";
+ ManageOneDomain domain = new ManageOneDomain(this.domain);
+ ManageOneUser user = new ManageOneUser(this.username, this.password, domain);
+ ManageOnePassword password = new ManageOnePassword(user);
+ List methods = new ArrayList();
+ methods.add("password");
+ ManageOneIdentity identity = new ManageOneIdentity(password, methods);
+
+ ManageOneProject project = new ManageOneProject(this.project);
+ ManageOneScope scope = new ManageOneScope(project);
+ ManageOneAuth auth = new ManageOneAuth(identity, scope);
+ Map params = new HashMap();
+ params.put("auth", auth);
+ HttpPost httpPost = new HttpPost(url);
+ httpPost.addHeader("accept", "application/json");
+ httpPost.addHeader("content-type", "application/json");
+ log.info("CCE => 参数{}", JSONObject.toJSONString(params));
+ StringEntity httpEntity = new StringEntity(JSONObject.toJSON(params).toString(), "UTF-8");
+ httpPost.setEntity(httpEntity);
+ try {
+ CloseableHttpResponse httpResponse = client.getHttpClient().execute(httpPost);
+ log.info("CCE => 获取token地址{},参数{}, 返回{}", url, httpEntity, JSONObject.toJSONString(httpResponse));
+ Result result = new CommonResultBuilder().build(httpResponse.getStatusLine().getStatusCode());
+ if (result.isFailed()) {
+ this.accessable = false;
+ log.error("CCE => Driver init error : {}", result.getMessage());
+ this.error = result.getMessage();
+ return;
+ }
+ JSONObject content = JSONObject
+ .parseObject(IOUtils.toString(httpResponse.getEntity().getContent(), "utf-8"));
+ this.token = JSONObject.parseObject(content.getString("token"), ManageOneToken.class);
+ if (null == this.token) {
+ this.accessable = false;
+ log.error("CCE => Driver init error : {}", "Token is empty !");
+ this.error = "Token is empty !";
+ return;
+ }
+ String authToken = findToken(httpResponse);
+ if (StringUtils.isEmpty(authToken)) {
+ this.accessable = false;
+ log.error("CCE => Driver init error : {}", "Token is empty !");
+ this.error = "CCE => Token is empty !";
+ return;
+ }
+ token.setToken(authToken);
+ this.accessable = true;
+ log.info("CCE => Driver init token : {}", JSON.toJSONString(token));
+ } catch (Exception e) {
+ log.error("CCE => Get error message:", e);
+ this.accessable = false;
+ }
+ }
+
+ /**
+ * 从响应头部获取会话X-Subject-Token
+ *
+ * @param httpResponse
+ * @return
+ */
+ private String findToken(CloseableHttpResponse httpResponse) {
+ String token = "";
+ Header[] headers = httpResponse.getHeaders("X-Subject-Token");
+ if (null == headers || headers.length == 0) {
+ return token;
+ }
+ for (Header header : headers) {
+ if ("X-Subject-Token".equalsIgnoreCase(header.getName())) {
+ token = header.getValue();
+ break;
+ }
+ }
+ return token;
+ }
+
+
+
+
+ private Map buildHeader() {
+ Map header = new HashMap();
+ header.put("accept", "application/json");
+ header.put("content-type", "application/json");
+ header.put("X-Auth-Token", this.token.getToken());
+ return header;
+ }
+
+ public JSONObject getMonitor(List instanceIds, String metricName) {
+ ManageOneCommon manageOneCommon = new ManageOneCommon();
+ String dimensionName = "clusterId";// 维度名称。长度最短为1,最大为32。
+ String timerange = "-1.-1.5"; // 表示查询近5分钟数据
+ long period = 60; //周期
+ JSONObject metricObj = new JSONObject();
+ metricObj.put("namespace", "PAAS.AGGR");
+ metricObj.put("metricName", metricName);
+ ArrayList