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;
}
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;
}
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;
}
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;
}
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;
}
Aggregations