Search in sources :

Example 16 with Usage

use of org.wso2.carbon.apimgt.api.model.Usage in project carbon-apimgt by wso2.

the class SubscriptionsApiServiceImpl method subscriptionsSubscriptionIdUsageGet.

@Override
public Response subscriptionsSubscriptionIdUsageGet(String subscriptionId, MessageContext messageContext) {
    if (StringUtils.isBlank(subscriptionId)) {
        String errorMessage = "Subscription ID cannot be empty or null when getting monetization usage.";
        RestApiUtil.handleBadRequest(errorMessage, log);
    }
    try {
        APIConsumer apiConsumer = RestApiCommonUtil.getLoggedInUserConsumer();
        Monetization monetizationImplementation = apiConsumer.getMonetizationImplClass();
        Map<String, String> billingEngineUsageData = monetizationImplementation.getCurrentUsageForSubscription(subscriptionId, RestApiCommonUtil.getLoggedInUserProvider());
        if (MapUtils.isEmpty(billingEngineUsageData)) {
            String errorMessage = "Billing engine usage data was not found for subscription ID : " + subscriptionId;
            RestApiUtil.handleBadRequest(errorMessage, log);
        }
        APIMonetizationUsageDTO apiMonetizationUsageDTO = new APIMonetizationUsageDTO();
        apiMonetizationUsageDTO.setProperties(billingEngineUsageData);
        return Response.ok().entity(apiMonetizationUsageDTO).build();
    } catch (APIManagementException e) {
        String errorMessage = "Failed to retrieve billing engine usage data for subscription ID : " + subscriptionId;
        RestApiUtil.handleInternalServerError(errorMessage, e, log);
    } catch (MonetizationException e) {
        String errorMessage = "Failed to get current usage for subscription ID : " + subscriptionId;
        RestApiUtil.handleInternalServerError(errorMessage, e, log);
    }
    return null;
}
Also used : Monetization(org.wso2.carbon.apimgt.api.model.Monetization) APIManagementException(org.wso2.carbon.apimgt.api.APIManagementException) MonetizationException(org.wso2.carbon.apimgt.api.MonetizationException) APIConsumer(org.wso2.carbon.apimgt.api.APIConsumer) APIMonetizationUsageDTO(org.wso2.carbon.apimgt.rest.api.store.v1.dto.APIMonetizationUsageDTO)

Example 17 with Usage

use of org.wso2.carbon.apimgt.api.model.Usage in project carbon-apimgt by wso2.

the class ServicesApiServiceImpl method getServiceUsage.

@Override
public Response getServiceUsage(String serviceId, MessageContext messageContext) {
    String userName = RestApiCommonUtil.getLoggedInUsername();
    int tenantId = APIUtil.getTenantId(userName);
    try {
        List<API> apiList = serviceCatalog.getServiceUsage(serviceId, tenantId);
        if (apiList != null) {
            APIListDTO apiListDTO = new APIListDTO();
            List<APIInfoDTO> apiInfoDTOList = new ArrayList<>();
            for (API api : apiList) {
                apiInfoDTOList.add(ServiceEntryMappingUtil.fromAPIToAPIInfoDTO(api));
            }
            apiListDTO.setList(apiInfoDTOList);
            apiListDTO.setCount(apiList.size());
            return Response.ok().entity(apiListDTO).build();
        } else {
            RestApiUtil.handleResourceNotFoundError("Service", serviceId, log);
        }
    } catch (APIManagementException e) {
        String errorMessage = "Error while retrieving API usage of service";
        RestApiUtil.handleInternalServerError(errorMessage, e, log);
    }
    return null;
}
Also used : APIManagementException(org.wso2.carbon.apimgt.api.APIManagementException) ArrayList(java.util.ArrayList) APIListDTO(org.wso2.carbon.apimgt.rest.api.service.catalog.dto.APIListDTO) API(org.wso2.carbon.apimgt.api.model.API) APIInfoDTO(org.wso2.carbon.apimgt.rest.api.service.catalog.dto.APIInfoDTO)

Example 18 with Usage

use of org.wso2.carbon.apimgt.api.model.Usage in project carbon-apimgt by wso2.

the class APIUtil method getUsageCountForMonetization.

/**
 * Implemented to get the API usage count for monetization.
 *
 * @param from : the start timestamp of the query.
 * @param to   : the end timestamp of the query.
 * @return JSON Object.
 */
public static JSONObject getUsageCountForMonetization(long from, long to) throws APIManagementException {
    JSONObject jsonObject = null;
    String granularity = null;
    APIManagerConfiguration configuration = ServiceReferenceHolder.getInstance().getAPIManagerConfigurationService().getAPIManagerConfiguration();
    granularity = configuration.getFirstProperty(APIConstants.Monetization.USAGE_PUBLISHER_GRANULARITY);
    if (StringUtils.isEmpty(granularity)) {
        // set the default granularity to days, if it is not set in configuration
        granularity = APIConstants.Monetization.USAGE_PUBLISH_DEFAULT_GRANULARITY;
    }
    StringBuilder query = new StringBuilder("from " + APIConstants.Monetization.MONETIZATION_USAGE_RECORD_AGG + " within " + from + "L, " + to + "L per '" + granularity + "' select " + APIConstants.Analytics.API_NAME + ", " + APIConstants.Analytics.API_VERSION + ", " + APIConstants.Analytics.API_CREATOR + ", " + APIConstants.Analytics.API_CREATOR_TENANT_DOMAIN + ", " + APIConstants.Analytics.APPLICATION_ID + ", " + "sum (requestCount) as requestCount " + "group by " + APIConstants.Analytics.API_NAME + ", " + APIConstants.Analytics.API_VERSION + ", " + APIConstants.Analytics.API_CREATOR + ", " + APIConstants.Analytics.API_CREATOR_TENANT_DOMAIN + ", " + APIConstants.Analytics.APPLICATION_ID);
    try {
        jsonObject = APIUtil.executeQueryOnStreamProcessor(APIConstants.Monetization.MONETIZATION_USAGE_RECORD_APP, query.toString());
        if (jsonObject == null) {
            jsonObject = new JSONObject();
        }
    } catch (APIManagementException ex) {
        String msg = "Unable to Retrieve monetization usage records";
        handleException(msg, ex);
    }
    return jsonObject;
}
Also used : APIManagerConfiguration(org.wso2.carbon.apimgt.impl.APIManagerConfiguration) JSONObject(org.json.simple.JSONObject) APIManagementException(org.wso2.carbon.apimgt.api.APIManagementException)

Example 19 with Usage

use of org.wso2.carbon.apimgt.api.model.Usage in project carbon-apimgt by wso2.

the class MonetizationAPIMappinUtil method fromUsageStateToDTO.

/**
 * Set the info of monetization usage publisher to DTO of the monetization usage status
 *
 * @param info info about the monetization usage publisher job
 * @return the DTO for monetization usage publish status
 */
public static MonetizationUsagePublishInfoDTO fromUsageStateToDTO(MonetizationUsagePublishInfo info) {
    MonetizationUsagePublishInfoDTO monetizationUsagePublishInfo = new MonetizationUsagePublishInfoDTO();
    monetizationUsagePublishInfo.setState(info.getState());
    monetizationUsagePublishInfo.setStatus(info.getStatus());
    monetizationUsagePublishInfo.setStartedTime(Long.toString(info.getStartedTime()));
    monetizationUsagePublishInfo.setLastPublsihedTime(Long.toString(info.getLastPublishTime()));
    return monetizationUsagePublishInfo;
}
Also used : MonetizationUsagePublishInfoDTO(org.wso2.carbon.apimgt.rest.api.admin.v1.dto.MonetizationUsagePublishInfoDTO)

Example 20 with Usage

use of org.wso2.carbon.apimgt.api.model.Usage in project carbon-apimgt by wso2.

the class MonetizationApiServiceImpl method monetizationPublishUsagePost.

/**
 * Run the monetization usage publish job
 *
 * @return Response of the server
 */
@Override
public Response monetizationPublishUsagePost(MessageContext messageContext) {
    MonetizationUsagePublishInfo monetizationUsagePublishInfo;
    try {
        APIAdmin apiAdmin = new APIAdminImpl();
        monetizationUsagePublishInfo = apiAdmin.getMonetizationUsagePublishInfo();
        if (monetizationUsagePublishInfo == null) {
            monetizationUsagePublishInfo = new MonetizationUsagePublishInfo();
            monetizationUsagePublishInfo.setId(APIConstants.Monetization.USAGE_PUBLISHER_JOB_NAME);
            monetizationUsagePublishInfo.setState(APIConstants.Monetization.INITIATED);
            monetizationUsagePublishInfo.setStatus(APIConstants.Monetization.INPROGRESS);
            // read the number of days to reduce from the current time to derive the from / last publish time
            // when there is no record of the last publish time
            APIManagerConfiguration configuration = ServiceReferenceHolder.getInstance().getAPIManagerConfigurationService().getAPIManagerConfiguration();
            String gap = configuration.getFirstProperty(APIConstants.Monetization.FROM_TIME_CONFIGURATION_PROPERTY);
            // if the from time / last publish time is not set , set it to default
            if (gap == null) {
                gap = APIConstants.Monetization.USAGE_PUBLISH_DEFAULT_TIME_GAP_IN_DAYS;
            }
            DateFormat df = new SimpleDateFormat(APIConstants.Monetization.USAGE_PUBLISH_TIME_FORMAT);
            df.setTimeZone(TimeZone.getTimeZone(APIConstants.Monetization.USAGE_PUBLISH_TIME_ZONE));
            Calendar cal = Calendar.getInstance();
            Date currentDate = cal.getTime();
            String formattedCurrentDate = df.format(currentDate);
            long currentTimestamp = apiAdmin.getTimestamp(formattedCurrentDate);
            monetizationUsagePublishInfo.setStartedTime(currentTimestamp);
            // reducing the number of days set to get the last published time when there is no record of
            // the last published time
            cal.add(Calendar.DATE, -Integer.parseInt(gap));
            Date fromDate = cal.getTime();
            String formattedFromDate = df.format(fromDate);
            long lastPublishedTimeStamp = apiAdmin.getTimestamp(formattedFromDate);
            monetizationUsagePublishInfo.setLastPublishTime(lastPublishedTimeStamp);
            apiAdmin.addMonetizationUsagePublishInfo(monetizationUsagePublishInfo);
        }
        if (!monetizationUsagePublishInfo.getState().equals(APIConstants.Monetization.RUNNING)) {
            executor = Executors.newSingleThreadExecutor();
            MonetizationUsagePublishAgent agent = new MonetizationUsagePublishAgent(monetizationUsagePublishInfo);
            executor.execute(agent);
            return Response.accepted().entity(MonetizationAPIMappinUtil.fromStatusToDTO("Request Accepted", "Server is running the usage publisher")).build();
        } else {
            return Response.serverError().entity(MonetizationAPIMappinUtil.fromStatusToDTO("Server could not " + "accept the request", "A job is already running")).build();
        }
    } catch (APIManagementException ex) {
        RestApiUtil.handleInternalServerError("Could not add or derive monetization usage publish info", ex, log);
    }
    return null;
}
Also used : APIManagerConfiguration(org.wso2.carbon.apimgt.impl.APIManagerConfiguration) MonetizationUsagePublishAgent(org.wso2.carbon.apimgt.impl.monetization.MonetizationUsagePublishAgent) APIManagementException(org.wso2.carbon.apimgt.api.APIManagementException) MonetizationUsagePublishInfo(org.wso2.carbon.apimgt.api.model.MonetizationUsagePublishInfo) APIAdmin(org.wso2.carbon.apimgt.api.APIAdmin) SimpleDateFormat(java.text.SimpleDateFormat) DateFormat(java.text.DateFormat) Calendar(java.util.Calendar) APIAdminImpl(org.wso2.carbon.apimgt.impl.APIAdminImpl) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date)

Aggregations

APIManagementException (org.wso2.carbon.apimgt.api.APIManagementException)9 Connection (java.sql.Connection)7 PreparedStatement (java.sql.PreparedStatement)7 ResultSet (java.sql.ResultSet)7 SQLException (java.sql.SQLException)7 SubscribedAPI (org.wso2.carbon.apimgt.api.model.SubscribedAPI)7 ArrayList (java.util.ArrayList)5 UserApplicationAPIUsage (org.wso2.carbon.apimgt.api.dto.UserApplicationAPIUsage)5 APIAdmin (org.wso2.carbon.apimgt.api.APIAdmin)4 APIIdentifier (org.wso2.carbon.apimgt.api.model.APIIdentifier)4 Application (org.wso2.carbon.apimgt.api.model.Application)4 APIAdminImpl (org.wso2.carbon.apimgt.impl.APIAdminImpl)4 DateFormat (java.text.DateFormat)3 SimpleDateFormat (java.text.SimpleDateFormat)3 Date (java.util.Date)3 TreeMap (java.util.TreeMap)3 MonetizationException (org.wso2.carbon.apimgt.api.MonetizationException)3 API (org.wso2.carbon.apimgt.api.model.API)3 Monetization (org.wso2.carbon.apimgt.api.model.Monetization)3 MonetizationUsagePublishInfo (org.wso2.carbon.apimgt.api.model.MonetizationUsagePublishInfo)3