private List<UpdateWorkerTask> getScheduledTasks(final ApiKey apiKey) { final int[] objectTypeValues = apiKey.getConnector().objectTypeValues(); List<UpdateWorkerTask> scheduledTasks = new ArrayList<UpdateWorkerTask>(); if (apiKey.getConnector().isAutonomous()) { final List<UpdateWorkerTask> updateWorkerTasks = connectorUpdateService.getUpdateWorkerTasks(apiKey, 0, 10); scheduledTasks.addAll(updateWorkerTasks); } else { for (int objectTypeValue : objectTypeValues) { final List<UpdateWorkerTask> updateWorkerTasks = connectorUpdateService.getUpdateWorkerTasks(apiKey, objectTypeValue, 10); scheduledTasks.addAll(updateWorkerTasks); } } Collections.sort( scheduledTasks, new Comparator<UpdateWorkerTask>() { @Override public int compare(final UpdateWorkerTask o1, final UpdateWorkerTask o2) { return (int) (o2.timeScheduled - o1.timeScheduled); } }); return scheduledTasks; }
private ValueHolder getSynchingUpdateWorkerTasks() { ValueHolder synching = new ValueHolder(); final List<UpdateWorkerTask> tasks = connectorUpdateService.getAllSynchingUpdateWorkerTasks(); for (UpdateWorkerTask task : tasks) { if (synching.get(task.apiKeyId) != null) synching.put(task.apiKeyId, synching.get(task.apiKeyId) + 1); else synching.put(task.apiKeyId, 1); } return synching; }
@Secured({"ROLE_ADMIN"}) @RequestMapping("/admin/{guestId}/{apiKeyId}/{objectTypes}/refresh") public ModelAndView refreshConnectorInstance( @PathVariable("guestId") long guestId, @PathVariable("apiKeyId") long apiKeyId, @PathVariable("objectTypes") int objectTypes) { final ApiKey apiKey = guestService.getApiKey(apiKeyId); connectorUpdateService.updateConnectorObjectType(apiKey, objectTypes, true, false); return new ModelAndView(String.format("redirect:/admin/%s/%s", guestId, apiKeyId)); }
@Secured({"ROLE_ADMIN"}) @RequestMapping("/admin/{guestId}/{apiKeyId}") public ModelAndView showConnectorInstanceDetails( @PathVariable("guestId") long guestId, @PathVariable("apiKeyId") long apiKeyId) { ModelAndView mav = getAdminModel(); mav.addObject("subview", "connectorDetails"); final ApiKey apiKey = guestService.getApiKey(apiKeyId); final Map<String, Object> connectorInstanceModel = connectorInstanceModelFactory.createConnectorInstanceModel(apiKey); final Guest guest = guestService.getGuestById(guestId); final List<ApiUpdate> lastUpdates = connectorUpdateService.getUpdates(apiKey, 100, 0); mav.addObject("guest", guest); mav.addObject("guestId", guest.getId()); mav.addObject("apiKeyId", apiKeyId); mav.addObject("apiKey", apiKey); mav.addObject("attributes", guestService.getApiKeyAttributes(apiKeyId)); mav.addObject("connectorInstanceModel", connectorInstanceModel); mav.addObject("lastUpdates", lastUpdates); mav.addObject("liveServerUUIDs", connectorUpdateService.getLiveServerUUIDs()); List<UpdateWorkerTask> scheduledTasks = getScheduledTasks(apiKey); mav.addObject("scheduledTasks", scheduledTasks); return mav; }
@Secured({"ROLE_ADMIN"}) @RequestMapping(value = {"/admin"}) public ModelAndView admin( HttpServletResponse response, @RequestParam(value = "page", required = false, defaultValue = "1") int page, @RequestParam(value = "pageSize", required = false, defaultValue = "20") int pageSize) throws Exception { response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. response.setHeader("Pragma", "no-cache"); // HTTP 1.0. response.setDateHeader("Expires", 0); ModelAndView mav = new ModelAndView("admin/index"); long totalGuests = jpaDaoService.executeNativeQuery("SELECT count(*) from Guest"); // If pageSize is too small, set to default of 20 if (pageSize <= 0) pageSize = 20; // Limit range of page to be >=1 and <= lastPage) int lastPage = ((int) totalGuests) % pageSize == 0 ? ((int) totalGuests) / pageSize : ((int) totalGuests) / pageSize + 1; if (page < 1) page = 1; else if (page > lastPage) page = lastPage; final int offset = (page - 1) * pageSize; final List<Guest> allGuests = jpaDaoService.executeQueryWithLimitAndOffset( "SELECT guest FROM Guest guest", pageSize, offset, Guest.class); // get scheduled updateWorkerTasks for the current subset of users final List<UpdateWorkerTask> tasks = connectorUpdateService.getAllScheduledUpdateWorkerTasks(); mav.addObject("allGuests", allGuests); mav.addObject("release", env.get("release")); final List<ConnectorInfo> connectors = systemService.getConnectors(); mav.addObject("subview", "connectorHealthDashboard"); mav.addObject("connectors", connectors); List<Map.Entry<Guest, List<List<ApiKey>>>> rows = new ArrayList<Map.Entry<Guest, List<List<ApiKey>>>>(); ValueHolder synching = getSynchingUpdateWorkerTasks(); long consumerTriggerRepeatInterval = Long.valueOf(env.get("consumer.trigger.repeatInterval")); ValueHolder due = getDueUpdateWorkerWorkerTasks(tasks, consumerTriggerRepeatInterval); ValueHolder overdue = getOverdueUpdateWorkerWorkerTasks(tasks, consumerTriggerRepeatInterval); for (Guest guest : allGuests) { List<List<ApiKey>> guestApiKeys = new ArrayList<List<ApiKey>>(); for (ConnectorInfo connector : connectors) { final List<ApiKey> apiKeys = guestService.getApiKeys(guest.getId(), Connector.fromValue(connector.api)); guestApiKeys.add(apiKeys); } final Map.Entry<Guest, List<List<ApiKey>>> guestListEntry = new AbstractMap.SimpleEntry<Guest, List<List<ApiKey>>>(guest, guestApiKeys); rows.add(guestListEntry); } mav.addObject("totalGuests", totalGuests); mav.addObject("fromGuest", offset); mav.addObject("toGuest", offset + allGuests.size()); mav.addObject("page", page); mav.addObject("pageSize", pageSize); mav.addObject("synching", synching); mav.addObject("tasksDue", due); mav.addObject("tasksOverdue", overdue); mav.addObject("rows", rows); mav.addObject("serverUUID", connectorUpdateService.getLiveServerUUIDs().toString()); return mav; }