Search in sources :

Example 16 with ArtifactSynchronizerException

use of org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.exception.ArtifactSynchronizerException in project carbon-apimgt by wso2.

the class GatewayJMSMessageListener method handleNotificationMessage.

private void handleNotificationMessage(String eventType, long timestamp, String encodedEvent) {
    byte[] eventDecoded = Base64.decodeBase64(encodedEvent);
    String eventJson = new String(eventDecoded);
    if (APIConstants.EventType.DEPLOY_API_IN_GATEWAY.name().equals(eventType) || APIConstants.EventType.REMOVE_API_FROM_GATEWAY.name().equals(eventType)) {
        DeployAPIInGatewayEvent gatewayEvent = new Gson().fromJson(new String(eventDecoded), DeployAPIInGatewayEvent.class);
        String tenantDomain = gatewayEvent.getTenantDomain();
        boolean tenantLoaded = ServiceReferenceHolder.getInstance().isTenantLoaded(tenantDomain);
        if (!tenantLoaded) {
            String syncKey = tenantDomain.concat("__").concat(this.getClass().getName());
            synchronized (syncKey.intern()) {
                tenantLoaded = ServiceReferenceHolder.getInstance().isTenantLoaded(tenantDomain);
                if (!tenantLoaded) {
                    APIUtil.loadTenantConfigBlockingMode(tenantDomain);
                }
            }
        }
        if (tenantLoaded) {
            Set<String> systemConfiguredGatewayLabels = new HashSet(gatewayEvent.getGatewayLabels());
            systemConfiguredGatewayLabels.retainAll(gatewayArtifactSynchronizerProperties.getGatewayLabels());
            if (!systemConfiguredGatewayLabels.isEmpty()) {
                ServiceReferenceHolder.getInstance().getKeyManagerDataService().updateDeployedAPIRevision(gatewayEvent);
                if (EventType.DEPLOY_API_IN_GATEWAY.name().equals(eventType)) {
                    boolean tenantFlowStarted = false;
                    try {
                        startTenantFlow(tenantDomain);
                        tenantFlowStarted = true;
                        inMemoryApiDeployer.deployAPI(gatewayEvent);
                    } catch (ArtifactSynchronizerException e) {
                        log.error("Error in deploying artifacts for " + gatewayEvent.getUuid() + "in the Gateway");
                    } finally {
                        if (tenantFlowStarted) {
                            endTenantFlow();
                        }
                    }
                }
                if (APIConstants.EventType.REMOVE_API_FROM_GATEWAY.name().equals(eventType)) {
                    boolean tenantFlowStarted = false;
                    try {
                        startTenantFlow(tenantDomain);
                        tenantFlowStarted = true;
                        inMemoryApiDeployer.unDeployAPI(gatewayEvent);
                    } catch (ArtifactSynchronizerException e) {
                        log.error("Error in undeploying artifacts");
                    } finally {
                        if (tenantFlowStarted) {
                            endTenantFlow();
                        }
                    }
                }
            }
            if (debugEnabled) {
                log.debug("Event with ID " + gatewayEvent.getEventId() + " is received and " + gatewayEvent.getUuid() + " is successfully deployed/undeployed");
            }
        }
    }
    if (EventType.APPLICATION_CREATE.toString().equals(eventType) || EventType.APPLICATION_UPDATE.toString().equals(eventType)) {
        ApplicationEvent event = new Gson().fromJson(eventJson, ApplicationEvent.class);
        ServiceReferenceHolder.getInstance().getKeyManagerDataService().addOrUpdateApplication(event);
        ;
    } else if (EventType.SUBSCRIPTIONS_CREATE.toString().equals(eventType) || EventType.SUBSCRIPTIONS_UPDATE.toString().equals(eventType)) {
        SubscriptionEvent event = new Gson().fromJson(eventJson, SubscriptionEvent.class);
        ServiceReferenceHolder.getInstance().getKeyManagerDataService().addOrUpdateSubscription(event);
    } else if (EventType.API_UPDATE.toString().equals(eventType)) {
        APIEvent event = new Gson().fromJson(eventJson, APIEvent.class);
        ServiceReferenceHolder.getInstance().getKeyManagerDataService().addOrUpdateAPI(event);
    } else if (EventType.API_LIFECYCLE_CHANGE.toString().equals(eventType)) {
        APIEvent event = new Gson().fromJson(eventJson, APIEvent.class);
        if (APIStatus.CREATED.toString().equals(event.getApiStatus()) || APIStatus.RETIRED.toString().equals(event.getApiStatus())) {
            ServiceReferenceHolder.getInstance().getKeyManagerDataService().removeAPI(event);
        } else {
            ServiceReferenceHolder.getInstance().getKeyManagerDataService().addOrUpdateAPI(event);
        }
    } else if (EventType.APPLICATION_REGISTRATION_CREATE.toString().equals(eventType)) {
        ApplicationRegistrationEvent event = new Gson().fromJson(eventJson, ApplicationRegistrationEvent.class);
        ServiceReferenceHolder.getInstance().getKeyManagerDataService().addOrUpdateApplicationKeyMapping(event);
    } else if (EventType.SUBSCRIPTIONS_DELETE.toString().equals(eventType)) {
        SubscriptionEvent event = new Gson().fromJson(eventJson, SubscriptionEvent.class);
        ServiceReferenceHolder.getInstance().getKeyManagerDataService().removeSubscription(event);
    } else if (EventType.APPLICATION_DELETE.toString().equals(eventType)) {
        ApplicationEvent event = new Gson().fromJson(eventJson, ApplicationEvent.class);
        ServiceReferenceHolder.getInstance().getKeyManagerDataService().removeApplication(event);
    } else if (EventType.REMOVE_APPLICATION_KEYMAPPING.toString().equals(eventType)) {
        ApplicationRegistrationEvent event = new Gson().fromJson(eventJson, ApplicationRegistrationEvent.class);
        ServiceReferenceHolder.getInstance().getKeyManagerDataService().removeApplicationKeyMapping(event);
    } else if (EventType.SCOPE_CREATE.toString().equals(eventType)) {
        ScopeEvent event = new Gson().fromJson(eventJson, ScopeEvent.class);
        ServiceReferenceHolder.getInstance().getKeyManagerDataService().addScope(event);
    } else if (EventType.SCOPE_UPDATE.toString().equals(eventType)) {
        ScopeEvent event = new Gson().fromJson(eventJson, ScopeEvent.class);
        ServiceReferenceHolder.getInstance().getKeyManagerDataService().addScope(event);
    } else if (EventType.SCOPE_DELETE.toString().equals(eventType)) {
        ScopeEvent event = new Gson().fromJson(eventJson, ScopeEvent.class);
        ServiceReferenceHolder.getInstance().getKeyManagerDataService().deleteScope(event);
    } else if (EventType.POLICY_CREATE.toString().equals(eventType) || EventType.POLICY_DELETE.toString().equals(eventType)) {
        PolicyEvent event = new Gson().fromJson(eventJson, PolicyEvent.class);
        boolean updatePolicy = false;
        boolean deletePolicy = false;
        if (EventType.POLICY_CREATE.toString().equals(eventType) || EventType.POLICY_UPDATE.toString().equals(eventType)) {
            updatePolicy = true;
        } else if (EventType.POLICY_DELETE.toString().equals(eventType)) {
            deletePolicy = true;
        }
        if (event.getPolicyType() == PolicyType.API) {
            APIPolicyEvent policyEvent = new Gson().fromJson(eventJson, APIPolicyEvent.class);
            if (updatePolicy) {
                ServiceReferenceHolder.getInstance().getKeyManagerDataService().addOrUpdateAPIPolicy(policyEvent);
            } else if (deletePolicy) {
                ServiceReferenceHolder.getInstance().getKeyManagerDataService().removeAPIPolicy(policyEvent);
            }
        } else if (event.getPolicyType() == PolicyType.SUBSCRIPTION) {
            SubscriptionPolicyEvent policyEvent = new Gson().fromJson(eventJson, SubscriptionPolicyEvent.class);
            if (updatePolicy) {
                ServiceReferenceHolder.getInstance().getKeyManagerDataService().addOrUpdateSubscriptionPolicy(policyEvent);
            } else if (deletePolicy) {
                ServiceReferenceHolder.getInstance().getKeyManagerDataService().removeSubscriptionPolicy(policyEvent);
            }
        } else if (event.getPolicyType() == PolicyType.APPLICATION) {
            ApplicationPolicyEvent policyEvent = new Gson().fromJson(eventJson, ApplicationPolicyEvent.class);
            if (updatePolicy) {
                ServiceReferenceHolder.getInstance().getKeyManagerDataService().addOrUpdateApplicationPolicy(policyEvent);
            } else if (deletePolicy) {
                ServiceReferenceHolder.getInstance().getKeyManagerDataService().removeApplicationPolicy(policyEvent);
            }
        }
    } else if (EventType.ENDPOINT_CERTIFICATE_ADD.toString().equals(eventType) || EventType.ENDPOINT_CERTIFICATE_REMOVE.toString().equals(eventType)) {
        CertificateEvent certificateEvent = new Gson().fromJson(eventJson, CertificateEvent.class);
        if (EventType.ENDPOINT_CERTIFICATE_ADD.toString().equals(eventType)) {
            try {
                new EndpointCertificateDeployer(certificateEvent.getTenantDomain()).deployCertificate(certificateEvent.getAlias());
            } catch (APIManagementException e) {
                log.error(e);
            }
        } else if (EventType.ENDPOINT_CERTIFICATE_REMOVE.toString().equals(eventType)) {
            boolean tenantFlowStarted = false;
            try {
                PrivilegedCarbonContext.startTenantFlow();
                PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(certificateEvent.getTenantDomain(), true);
                tenantFlowStarted = true;
                CertificateManagerImpl.getInstance().deleteCertificateFromGateway(certificateEvent.getAlias());
            } finally {
                if (tenantFlowStarted) {
                    PrivilegedCarbonContext.endTenantFlow();
                }
            }
        }
    } else if (EventType.GA_CONFIG_UPDATE.toString().equals(eventType)) {
        GoogleAnalyticsConfigEvent googleAnalyticsConfigEvent = new Gson().fromJson(eventJson, GoogleAnalyticsConfigEvent.class);
        try {
            new GoogleAnalyticsConfigDeployer(googleAnalyticsConfigEvent.getTenantDomain()).deploy();
        } catch (APIManagementException e) {
            log.error(e);
        }
    } else if (EventType.UDATE_API_LOG_LEVEL.toString().equals(eventType)) {
        APIEvent apiEvent = new Gson().fromJson(eventJson, APIEvent.class);
        APILoggerManager.getInstance().updateLoggerMap(apiEvent.getApiContext(), apiEvent.getLogLevel());
    }
}
Also used : SubscriptionEvent(org.wso2.carbon.apimgt.impl.notifier.events.SubscriptionEvent) ApplicationEvent(org.wso2.carbon.apimgt.impl.notifier.events.ApplicationEvent) Gson(com.google.gson.Gson) DeployAPIInGatewayEvent(org.wso2.carbon.apimgt.impl.notifier.events.DeployAPIInGatewayEvent) ApplicationPolicyEvent(org.wso2.carbon.apimgt.impl.notifier.events.ApplicationPolicyEvent) EndpointCertificateDeployer(org.wso2.carbon.apimgt.gateway.EndpointCertificateDeployer) SubscriptionPolicyEvent(org.wso2.carbon.apimgt.impl.notifier.events.SubscriptionPolicyEvent) ApplicationRegistrationEvent(org.wso2.carbon.apimgt.impl.notifier.events.ApplicationRegistrationEvent) GoogleAnalyticsConfigDeployer(org.wso2.carbon.apimgt.gateway.GoogleAnalyticsConfigDeployer) APIEvent(org.wso2.carbon.apimgt.impl.notifier.events.APIEvent) APIManagementException(org.wso2.carbon.apimgt.api.APIManagementException) ArtifactSynchronizerException(org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.exception.ArtifactSynchronizerException) APIPolicyEvent(org.wso2.carbon.apimgt.impl.notifier.events.APIPolicyEvent) CertificateEvent(org.wso2.carbon.apimgt.impl.notifier.events.CertificateEvent) APIPolicyEvent(org.wso2.carbon.apimgt.impl.notifier.events.APIPolicyEvent) PolicyEvent(org.wso2.carbon.apimgt.impl.notifier.events.PolicyEvent) SubscriptionPolicyEvent(org.wso2.carbon.apimgt.impl.notifier.events.SubscriptionPolicyEvent) ApplicationPolicyEvent(org.wso2.carbon.apimgt.impl.notifier.events.ApplicationPolicyEvent) ScopeEvent(org.wso2.carbon.apimgt.impl.notifier.events.ScopeEvent) GoogleAnalyticsConfigEvent(org.wso2.carbon.apimgt.impl.notifier.events.GoogleAnalyticsConfigEvent) HashSet(java.util.HashSet)

Example 17 with ArtifactSynchronizerException

use of org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.exception.ArtifactSynchronizerException in project carbon-apimgt by wso2.

the class RedeployApiApiServiceImpl method redployAPI.

public Response redployAPI(String apiName, String version, String tenantDomain, MessageContext messageContext) {
    tenantDomain = RestApiCommonUtil.getValidateTenantDomain(tenantDomain);
    InMemoryAPIDeployer inMemoryApiDeployer = new InMemoryAPIDeployer();
    try {
        inMemoryApiDeployer.reDeployAPI(apiName, version, tenantDomain);
        if (debugEnabled) {
            log.debug("Successfully deployed " + apiName + " in gateway");
        }
        DeployResponseDTO responseDTO = new DeployResponseDTO();
        responseDTO.setDeployStatus(DeployResponseDTO.DeployStatusEnum.DEPLOYED);
        responseDTO.setJsonPayload(apiName + " redeployed from the gateway");
        return Response.ok().entity(responseDTO).build();
    } catch (ArtifactSynchronizerException e) {
        String errorMessage = "Error in fetching artifacts from storage";
        log.error(errorMessage, e);
        RestApiUtil.handleInternalServerError(errorMessage, e, log);
    }
    return null;
}
Also used : ArtifactSynchronizerException(org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.exception.ArtifactSynchronizerException) InMemoryAPIDeployer(org.wso2.carbon.apimgt.gateway.InMemoryAPIDeployer) DeployResponseDTO(org.wso2.carbon.apimgt.rest.api.gateway.dto.DeployResponseDTO)

Example 18 with ArtifactSynchronizerException

use of org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.exception.ArtifactSynchronizerException in project carbon-apimgt by wso2.

the class UndeployApiApiServiceImpl method undeployAPI.

public Response undeployAPI(String apiName, String version, String tenantDomain, MessageContext messageContext) {
    InMemoryAPIDeployer inMemoryApiDeployer = new InMemoryAPIDeployer();
    tenantDomain = RestApiCommonUtil.getValidateTenantDomain(tenantDomain);
    try {
        inMemoryApiDeployer.unDeployAPI(apiName, version, tenantDomain);
        if (debugEnabled) {
            log.debug("Successfully undeployed " + apiName + " in gateway");
        }
        DeployResponseDTO deployResponseDTO = new DeployResponseDTO();
        deployResponseDTO.setDeployStatus(DeployResponseDTO.DeployStatusEnum.UNDEPLOYED);
        deployResponseDTO.setJsonPayload(apiName + " Undeployed from the gateway");
        return Response.ok().entity(deployResponseDTO).build();
    } catch (ArtifactSynchronizerException e) {
        String errorMessage = "Error in fetching artifacts from storage";
        log.error(errorMessage, e);
        RestApiUtil.handleInternalServerError(errorMessage, e, log);
    }
    return null;
}
Also used : ArtifactSynchronizerException(org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.exception.ArtifactSynchronizerException) InMemoryAPIDeployer(org.wso2.carbon.apimgt.gateway.InMemoryAPIDeployer) DeployResponseDTO(org.wso2.carbon.apimgt.rest.api.gateway.dto.DeployResponseDTO)

Example 19 with ArtifactSynchronizerException

use of org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.exception.ArtifactSynchronizerException in project carbon-apimgt by wso2.

the class GatewayStartupListener method deployArtifactsAtStartup.

private boolean deployArtifactsAtStartup(String tenantDomain) throws ArtifactSynchronizerException {
    GatewayArtifactSynchronizerProperties gatewayArtifactSynchronizerProperties = ServiceReferenceHolder.getInstance().getAPIManagerConfiguration().getGatewayArtifactSynchronizerProperties();
    boolean flag = false;
    long waitTime = System.currentTimeMillis() + 60 * 1000;
    long retryDuration = 5000;
    if (gatewayArtifactSynchronizerProperties.isRetrieveFromStorageEnabled()) {
        InMemoryAPIDeployer inMemoryAPIDeployer = new InMemoryAPIDeployer();
        while (waitTime > System.currentTimeMillis() && !flag) {
            flag = inMemoryAPIDeployer.deployAllAPIsAtGatewayStartup(gatewayArtifactSynchronizerProperties.getGatewayLabels(), tenantDomain);
            if (!flag) {
                log.error("Unable to deploy synapse artifacts at gateway. Next retry in " + (retryDuration / 1000) + " seconds");
                try {
                    Thread.sleep(retryDuration);
                } catch (InterruptedException ignore) {
                }
            }
        }
    }
    return flag;
}
Also used : GatewayArtifactSynchronizerProperties(org.wso2.carbon.apimgt.impl.dto.GatewayArtifactSynchronizerProperties) InMemoryAPIDeployer(org.wso2.carbon.apimgt.gateway.InMemoryAPIDeployer)

Example 20 with ArtifactSynchronizerException

use of org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.exception.ArtifactSynchronizerException in project carbon-apimgt by wso2.

the class APIProviderImplTest method testAddAPIRevision.

/**
 * This method tests adding a new API Revision
 *
 * @throws APIManagementException
 */
@Test
public void testAddAPIRevision() throws APIManagementException, APIPersistenceException, APIImportExportException, ArtifactSynchronizerException {
    ImportExportAPI importExportAPI = Mockito.mock(ImportExportAPI.class);
    ArtifactSaver artifactSaver = Mockito.mock(ArtifactSaver.class);
    Mockito.doNothing().when(artifactSaver).saveArtifact(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(File.class));
    Mockito.when(GatewayArtifactsMgtDAO.getInstance()).thenReturn(gatewayArtifactsMgtDAO);
    APIProviderImplWrapper apiProvider = new APIProviderImplWrapper(apiPersistenceInstance, apimgtDAO, importExportAPI, gatewayArtifactsMgtDAO, artifactSaver);
    APIIdentifier apiId = new APIIdentifier("admin", "PizzaShackAPI", "1.0.0", "63e1e37e-a5b8-4be6-86a5-d6ae0749f131");
    API api = new API(apiId);
    api.setContext("/test");
    api.setStatus(APIConstants.CREATED);
    String apiPath = "/apimgt/applicationdata/provider/admin/PizzaShackAPI/1.0.0/api";
    APIRevision apiRevision = new APIRevision();
    apiRevision.setApiUUID("63e1e37e-a5b8-4be6-86a5-d6ae0749f131");
    apiRevision.setDescription("test description revision 1");
    Mockito.when(apimgtDAO.getRevisionCountByAPI(Mockito.anyString())).thenReturn(0);
    Mockito.when(apimgtDAO.getMostRecentRevisionId(Mockito.anyString())).thenReturn(0);
    Mockito.when(APIUtil.getAPIIdentifierFromUUID(Mockito.anyString())).thenReturn(apiId);
    Mockito.when(APIUtil.getAPIPath(apiId)).thenReturn(apiPath);
    PowerMockito.when(apiPersistenceInstance.addAPIRevision(any(Organization.class), Mockito.anyString(), Mockito.anyInt())).thenReturn("b55e0fc3-9829-4432-b99e-02056dc91838");
    Mockito.when(APIUtil.getTenantConfig(Mockito.anyString())).thenReturn(new JSONObject());
    try {
        apiProvider.addAPIRevision(apiRevision, superTenantDomain);
    } catch (Exception e) {
        Assert.fail(e.getMessage());
    }
}
Also used : ArtifactSaver(org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.ArtifactSaver) APIRevision(org.wso2.carbon.apimgt.api.model.APIRevision) Organization(org.wso2.carbon.apimgt.persistence.dto.Organization) JSONObject(org.json.simple.JSONObject) ImportExportAPI(org.wso2.carbon.apimgt.impl.importexport.ImportExportAPI) APIIdentifier(org.wso2.carbon.apimgt.api.model.APIIdentifier) ImportExportAPI(org.wso2.carbon.apimgt.impl.importexport.ImportExportAPI) SubscribedAPI(org.wso2.carbon.apimgt.api.model.SubscribedAPI) PublisherAPI(org.wso2.carbon.apimgt.persistence.dto.PublisherAPI) API(org.wso2.carbon.apimgt.api.model.API) File(java.io.File) ResourceFile(org.wso2.carbon.apimgt.api.model.ResourceFile) APIPersistenceException(org.wso2.carbon.apimgt.persistence.exceptions.APIPersistenceException) XMLStreamException(javax.xml.stream.XMLStreamException) RegistryException(org.wso2.carbon.registry.core.exceptions.RegistryException) APIImportExportException(org.wso2.carbon.apimgt.impl.importexport.APIImportExportException) BlockConditionNotFoundException(org.wso2.carbon.apimgt.api.BlockConditionNotFoundException) FaultGatewaysException(org.wso2.carbon.apimgt.api.FaultGatewaysException) DuplicateAPIException(org.wso2.carbon.apimgt.api.model.DuplicateAPIException) IOException(java.io.IOException) APIMgtResourceAlreadyExistsException(org.wso2.carbon.apimgt.api.APIMgtResourceAlreadyExistsException) APIManagementException(org.wso2.carbon.apimgt.api.APIManagementException) ArtifactSynchronizerException(org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.exception.ArtifactSynchronizerException) WorkflowException(org.wso2.carbon.apimgt.impl.workflow.WorkflowException) UserStoreException(org.wso2.carbon.user.api.UserStoreException) GovernanceException(org.wso2.carbon.governance.api.exception.GovernanceException) OMException(org.apache.axiom.om.OMException) Test(org.junit.Test) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest)

Aggregations

ArtifactSynchronizerException (org.wso2.carbon.apimgt.impl.gatewayartifactsynchronizer.exception.ArtifactSynchronizerException)22 APIManagementException (org.wso2.carbon.apimgt.api.APIManagementException)12 IOException (java.io.IOException)7 Organization (org.wso2.carbon.apimgt.persistence.dto.Organization)6 APIPersistenceException (org.wso2.carbon.apimgt.persistence.exceptions.APIPersistenceException)6 Gson (com.google.gson.Gson)4 CloseableHttpResponse (org.apache.http.client.methods.CloseableHttpResponse)4 APIMgtResourceNotFoundException (org.wso2.carbon.apimgt.api.APIMgtResourceNotFoundException)4 APIIdentifier (org.wso2.carbon.apimgt.api.model.APIIdentifier)4 APIRevision (org.wso2.carbon.apimgt.api.model.APIRevision)4 APIImportExportException (org.wso2.carbon.apimgt.impl.importexport.APIImportExportException)4 File (java.io.File)3 URL (java.net.URL)3 HttpClient (org.apache.http.client.HttpClient)3 HttpGet (org.apache.http.client.methods.HttpGet)3 GatewayAPIDTO (org.wso2.carbon.apimgt.api.gateway.GatewayAPIDTO)3 APIProductIdentifier (org.wso2.carbon.apimgt.api.model.APIProductIdentifier)3 InMemoryAPIDeployer (org.wso2.carbon.apimgt.gateway.InMemoryAPIDeployer)3 APIGatewayAdmin (org.wso2.carbon.apimgt.gateway.service.APIGatewayAdmin)3 DeployAPIInGatewayEvent (org.wso2.carbon.apimgt.impl.notifier.events.DeployAPIInGatewayEvent)3