All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alibaba.cloud.context.edas.AliCloudEdasSdk Maven / Gradle / Ivy

/*
 * Copyright (C) 2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.cloud.context.edas;

import com.alibaba.cloud.context.AliCloudSdk;

import com.aliyuncs.edas.model.v20170801.GetSecureTokenRequest;
import com.aliyuncs.edas.model.v20170801.GetSecureTokenResponse;
import com.aliyuncs.edas.model.v20170801.InsertApplicationRequest;
import com.aliyuncs.edas.model.v20170801.InsertApplicationResponse;
import com.aliyuncs.exceptions.ClientException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.ConcurrentHashMap;

/**
 * EDAS-SDK实现,可以方便的调用EDAS的POP-API。
 *
 * @author xiaolongzuo
 */
public class AliCloudEdasSdk {

    private static final Logger log = LoggerFactory.getLogger(AliCloudEdasSdk.class);

    private static final int SUCCESS_CODE = 200;

    private static final int DEFAULT_BUILD_PACK = -2;

    private AliCloudSdk aliCloudSdk;

    private ConcurrentHashMap secureTokenMap = new ConcurrentHashMap<>();

    private ConcurrentHashMap applicationInfoMap
        = new ConcurrentHashMap<>();

    public AliCloudEdasSdk(AliCloudSdk aliCloudSdk) {
        this.aliCloudSdk = aliCloudSdk;
    }

    public AliCloudSdk getAliCloudSdk() {
        return aliCloudSdk;
    }

    public GetSecureTokenResponse.SecureToken getSecureToken(String namespace) {
        GetSecureTokenResponse.SecureToken secureToken = secureTokenMap.get(namespace);
        if (secureToken == null) {
            GetSecureTokenRequest getSecureTokenRequest = new GetSecureTokenRequest();
            getSecureTokenRequest.setNamespaceId(namespace);

            GetSecureTokenResponse getSecureTokenResponse;
            try {
                getSecureTokenResponse = aliCloudSdk.getAcsResponse(getSecureTokenRequest);
            } catch (ClientException e) {
                log.error("Get info from edas failed.", e);
                throw new RuntimeException(e);
            }
            if (!isSuccess(getSecureTokenResponse.getCode())) {
                throw new RuntimeException(null == getSecureTokenResponse.getMessage()
                    ? "Get info from edas failed, response is null." : getSecureTokenResponse.getMessage());
            }
            secureTokenMap.putIfAbsent(namespace, getSecureTokenResponse.getSecureToken());
            secureToken = secureTokenMap.get(namespace);
        }
        return secureToken;
    }

    public InsertApplicationResponse.ApplicationInfo getApplicationInfo(
        String applicationName, String namespace) {
        String key = applicationName + "---" + namespace;
        InsertApplicationResponse.ApplicationInfo applicationInfo = applicationInfoMap.get(key);
        if (applicationInfo == null) {
            InsertApplicationRequest request = new InsertApplicationRequest();
            request.setApplicationName(applicationName);
            request.setLogicalRegionId(namespace);
            request.setBuildPackId(DEFAULT_BUILD_PACK);

            InsertApplicationResponse insertApplicationResponse;
            try {
                insertApplicationResponse = aliCloudSdk.getAcsResponse(request);
            } catch (ClientException e) {
                log.error("Register app from edas failed.", e);
                throw new RuntimeException(e);
            }
            if (!isSuccess(insertApplicationResponse.getCode())) {
                throw new RuntimeException(
                    null == insertApplicationResponse.getMessage() ? "" : insertApplicationResponse.getMessage());
            }
            applicationInfoMap.putIfAbsent(key, insertApplicationResponse.getApplicationInfo());
            applicationInfo = applicationInfoMap.get(key);
        }
        return applicationInfo;
    }

    public boolean isSuccess(int code) {
        return code == SUCCESS_CODE;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy