Update DeviceAgentServiceImpl file with response time

pull/1/head
Akeela Azhar 2 years ago
parent d0dbceebd3
commit c083fc7b11

@ -470,5 +470,10 @@
<artifactId>google-http-client-jackson2</artifactId>
<version>1.43.1</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-terracotta</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
</project>

@ -18,6 +18,18 @@
*/
package org.wso2.carbon.device.mgt.jaxrs.service.impl;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.sheets.v4.Sheets;
import com.google.api.services.sheets.v4.SheetsScopes;
import com.google.api.services.sheets.v4.model.*;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.*;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
@ -63,9 +75,7 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Path("/device/agent")
public class DeviceAgentServiceImpl implements DeviceAgentService {
@ -433,22 +443,61 @@ public class DeviceAgentServiceImpl implements DeviceAgentService {
log.error(msg);
return Response.status(Response.Status.NO_CONTENT).entity(msg).build();
}
long startTime = System.currentTimeMillis(); // Record the start time
List<? extends Operation> operations = DeviceMgtAPIUtils.getDeviceManagementService().getPendingOperations(
deviceIdentifier);
OperationList operationsList = new OperationList();
operationsList.setList(operations);
operationsList.setCount(operations.size());
long endTime = System.currentTimeMillis(); // Record the end time
long responseTime = endTime - startTime; // Calculate the response time
// Save the response time to Google Spreadsheet
Sheets sheetsService = createSheetsService(); // Create Sheets service using loaded credentials
String spreadsheetId = "1OZCS5NRwwSum9ai3ra4lABtU0UGW-9yLYgZk-aQfxpw"; // Replace with the actual spreadsheet ID
// Create the values to be written
List<List<Object>> values = Arrays.asList(
Arrays.asList(deviceId, String.valueOf(responseTime))
);
// Create the value range
ValueRange body = new ValueRange().setValues(values);
// Write the values to the spreadsheet
sheetsService.spreadsheets().values()
.append(spreadsheetId, "Sheet1", body)
.setValueInputOption("USER_ENTERED")
.execute();
return Response.status(Response.Status.OK).entity(operationsList).build();
} catch (OperationManagementException e) {
String errorMessage = "Issue in retrieving operation management service instance";
log.error(errorMessage, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMessage).build();
} catch (DeviceManagementException e) {
String errorMessage = "Issue in retrieving deivce management service instance";
String errorMessage = "Issue in retrieving device management service instance";
log.error(errorMessage, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMessage).build();
}catch (IOException e) {
// Handle any errors occurred while writing to the spreadsheet
String errorMessage = "Error writing response time to Google Spreadsheet";
log.error(errorMessage, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMessage).build();
}
}
private Sheets createSheetsService() throws IOException {
GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("components/device-mgt/org.wso2.carbon.device.mgt.api/target/apicall-382608-48aa6a62800d.json"))
.createScoped(Collections.singleton(SheetsScopes.SPREADSHEETS));
try {
return new Sheets.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), credential)
.setApplicationName("ApiCall")
.build();
} catch (GeneralSecurityException e) {
throw new RuntimeException(e);
}
}
@GET
@Path("/next-pending/operation/{type}/{id}")

@ -1,102 +1,102 @@
package org.wso2.carbon.device.mgt.jaxrs.service.impl;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.sheets.v4.Sheets;
import com.google.api.services.sheets.v4.SheetsScopes;
import com.google.api.services.sheets.v4.model.AppendValuesResponse;
import com.google.api.services.sheets.v4.model.ValueRange;
import javax.annotation.PreDestroy;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;
import static org.wso2.carbon.device.mgt.jaxrs.service.impl.DeviceAgentServiceImpl.log;
@Path("/pending/operations/{type}/{id}")
public class PendingOperationsResourceResponseTime {
private final Client client;
private final Sheets sheetsService;
private final String spreadsheetId;
private final String sheetName;
public PendingOperationsResourceResponseTime() throws IOException, GeneralSecurityException {
this.client = ClientBuilder.newClient();
// Build the credentials object using Google OAuth 2.0 authentication
Credential credential = GoogleCredential.getApplicationDefault().createScoped(Collections.singleton(SheetsScopes.SPREADSHEETS));
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
// Create a Sheets service object to interact with the Google Sheets API
this.sheetsService = new Sheets.Builder(httpTransport, jsonFactory, credential)
.setApplicationName("ApiCall")
.build();
// Set the spreadsheet ID and sheet name to write the results to
this.spreadsheetId = "1OZCS5NRwwSum9ai3ra4lABtU0UGW-9yLYgZk-aQfxpw";
this.sheetName = "Sheet1";
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getPendingOperations(@PathParam("type") String type, @PathParam("id") String deviceId) {
long startTime = System.currentTimeMillis();
Response apiResponse = client.target("http://example.com/api/pending-operations")
.queryParam("type", type)
.queryParam("deviceId", deviceId)
.request(MediaType.APPLICATION_JSON)
.get();
long endTime = System.currentTimeMillis();
long responseTime = endTime - startTime;
// log the response time
log.info("API response time: {} ms");
// write the results to Google Sheets
try {
writeResultsToSheet(startTime, endTime, responseTime);
} catch (IOException e) {
log.error("Error writing results to Google Sheets", e);
}
return apiResponse;
}
@PreDestroy
public void cleanup() {
client.close();
}
private void writeResultsToSheet(long startTime, long endTime, long responseTime) throws IOException {
// create a ValueRange object with the data to write
ValueRange valueRange = new ValueRange().setValues(Collections.singletonList(
Collections.singletonList(startTime + "," + endTime + "," + responseTime)));
// append the data to the Google Sheet
try {
AppendValuesResponse response = sheetsService.spreadsheets().values()
.append(spreadsheetId, sheetName, valueRange)
.setValueInputOption("RAW")
.execute();
log.info("Data written to Google Sheets: {}");
} catch (GoogleJsonResponseException e) {
log.error("Error writing data to Google Sheets: {}");
}
}
}
//package org.wso2.carbon.device.mgt.jaxrs.service.impl;
//
//import com.google.api.client.auth.oauth2.Credential;
//import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
//import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
//import com.google.api.client.googleapis.json.GoogleJsonResponseException;
//import com.google.api.client.http.HttpTransport;
//import com.google.api.client.json.JsonFactory;
//import com.google.api.client.json.jackson2.JacksonFactory;
//import com.google.api.services.sheets.v4.Sheets;
//import com.google.api.services.sheets.v4.SheetsScopes;
//import com.google.api.services.sheets.v4.model.AppendValuesResponse;
//import com.google.api.services.sheets.v4.model.ValueRange;
//
//import javax.annotation.PreDestroy;
//import javax.ws.rs.GET;
//import javax.ws.rs.Path;
//import javax.ws.rs.PathParam;
//import javax.ws.rs.Produces;
//import javax.ws.rs.client.Client;
//import javax.ws.rs.client.ClientBuilder;
//import javax.ws.rs.core.MediaType;
//import javax.ws.rs.core.Response;
//import java.io.IOException;
//import java.security.GeneralSecurityException;
//import java.util.Collections;
//
//import static org.wso2.carbon.device.mgt.jaxrs.service.impl.DeviceAgentServiceImpl.log;
//
//@Path("/pending/operations/{type}/{id}")
//public class PendingOperationsResourceResponseTime {
//
// private final Client client;
// private final Sheets sheetsService;
// private final String spreadsheetId;
// private final String sheetName;
//
// public PendingOperationsResourceResponseTime() throws IOException, GeneralSecurityException {
// this.client = ClientBuilder.newClient();
//
// // Build the credentials object using Google OAuth 2.0 authentication
// Credential credential = GoogleCredential.getApplicationDefault().createScoped(Collections.singleton(SheetsScopes.SPREADSHEETS));
// HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
// JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
//
// // Create a Sheets service object to interact with the Google Sheets API
// this.sheetsService = new Sheets.Builder(httpTransport, jsonFactory, credential)
// .setApplicationName("ApiCall")
// .build();
//
// // Set the spreadsheet ID and sheet name to write the results to
// this.spreadsheetId = "1OZCS5NRwwSum9ai3ra4lABtU0UGW-9yLYgZk-aQfxpw";
// this.sheetName = "Sheet1";
// }
//
// @GET
// @Produces(MediaType.APPLICATION_JSON)
// public Response getPendingOperations(@PathParam("type") String type, @PathParam("id") String deviceId) {
// long startTime = System.currentTimeMillis();
// Response apiResponse = client.target("http://example.com/api/pending-operations")
// .queryParam("type", type)
// .queryParam("deviceId", deviceId)
// .request(MediaType.APPLICATION_JSON)
// .get();
// long endTime = System.currentTimeMillis();
// long responseTime = endTime - startTime;
//
// // log the response time
// log.info("API response time: {} ms");
//
// // write the results to Google Sheets
// try {
// writeResultsToSheet(startTime, endTime, responseTime);
// } catch (IOException e) {
// log.error("Error writing results to Google Sheets", e);
// }
//
// return apiResponse;
// }
//
// @PreDestroy
// public void cleanup() {
// client.close();
// }
//
// private void writeResultsToSheet(long startTime, long endTime, long responseTime) throws IOException {
// // create a ValueRange object with the data to write
// ValueRange valueRange = new ValueRange().setValues(Collections.singletonList(
// Collections.singletonList(startTime + "," + endTime + "," + responseTime)));
//
// // append the data to the Google Sheet
// try {
// AppendValuesResponse response = sheetsService.spreadsheets().values()
// .append(spreadsheetId, sheetName, valueRange)
// .setValueInputOption("RAW")
// .execute();
// log.info("Data written to Google Sheets: {}");
// } catch (GoogleJsonResponseException e) {
// log.error("Error writing data to Google Sheets: {}");
// }
// }
//}
Loading…
Cancel
Save