public FilterInfo getFilterInfo(String filter_id, int revision) { List<FilterInfo> filters = getZuulFiltersForFilterId(filter_id); if (filters == null) return null; for (FilterInfo filter : filters) { if (filter.getRevision() == revision) return filter; } return null; }
@Override public FilterInfo getFilterInfo(String filter_id, int revision) { List<FilterInfo> filters = getZuulFiltersForFilterId(filter_id); if (filters == null) return null; for (FilterInfo filter : filters) { if (filter.getRevision() == revision) return filter; } return null; }
@Override public FilterInfo getLatestFilterInfoForFilter(String filter_id) { int largestRevision = 0; FilterInfo latestfilterInfo = null; List<FilterInfo> filterInfos = getFiltersForIndex(getScriptsForFilterIndexKey(filter_id)); if (filterInfos == null) return null; if (filterInfos.size() == 0) return null; for (Iterator<FilterInfo> iterator = filterInfos.iterator(); iterator.hasNext(); ) { FilterInfo filterInfo = iterator.next(); if (filterInfo.getRevision() > largestRevision) { largestRevision = filterInfo.getRevision(); latestfilterInfo = filterInfo; } } return latestfilterInfo; }
private FilterInfo mockEndpointScript() { Calendar now = Calendar.getInstance(); FilterInfo script = mock(FilterInfo.class); when(script.getCreationDate()).thenReturn(now.getTime()); when(script.getRevision()).thenReturn(1); when(script.isActive()).thenReturn(false); when(script.isCanary()).thenReturn(false); return script; } }
@Override public FilterInfo getLatestFilterInfoForFilter(String filter_id) { int largestRevision = 0; FilterInfo latestfilterInfo = null; List<FilterInfo> filterInfos = getFiltersForIndex(getScriptsForFilterIndexKey(filter_id)); if (filterInfos == null) return null; if (filterInfos.size() == 0) return null; for (Iterator<FilterInfo> iterator = filterInfos.iterator(); iterator.hasNext(); ) { FilterInfo filterInfo = iterator.next(); if (filterInfo.getRevision() > largestRevision) { largestRevision = filterInfo.getRevision(); latestfilterInfo = filterInfo; } } return latestfilterInfo; }
private Map<String, Object> createExpectedJsonMap(FilterInfo script) { Map<String, Object> expectedJson = new LinkedHashMap<String, Object>(); expectedJson.put("filter_id", script.getFilterID()); expectedJson.put("filter_name", script.getFilterName()); expectedJson.put("filter_type", script.getFilterType()); expectedJson.put("revision", script.getRevision()); expectedJson.put("active", script.isActive()); expectedJson.put("creationDate", script.getCreationDate()); expectedJson.put("canary", script.isCanary()); return expectedJson; }
private Map<String, Object> createEndpointScriptJSON(FilterInfo script) { Map<String, Object> scriptJson = new LinkedHashMap<String, Object>(); scriptJson.put("filter_id", script.getFilterID()); scriptJson.put("filter_name", script.getFilterName()); scriptJson.put("filter_type", script.getFilterType()); scriptJson.put("revision", script.getRevision()); scriptJson.put("active", script.isActive()); scriptJson.put("creationDate", script.getCreationDate()); scriptJson.put("canary", script.isCanary()); return scriptJson; }
@Override public FilterInfo setCanaryFilter(String filter_id, int revision) { ArrayList<Integer> revisionsToDeactivate = new ArrayList<Integer>(); FilterInfo filterInfo = getCanaryScriptForFilter(filter_id); if (filterInfo != null) { revisionsToDeactivate.add(filterInfo.getRevision()); removeFilterIdFromIndex(ACTIVE_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filterInfo.getRevision()); removeFilterIdFromIndex(CANARY_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filterInfo.getRevision()); } /* activate the revision */ Map<String, Object> attributesForActivation = new HashMap<String, Object>(); attributesForActivation.put("canary", true); attributesForActivation.put("active", false); cassandraGateway.upsert(filter_id + "_" + revision, attributesForActivation); addFilterIdToIndex(CANARY_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + revision); /* de-activate previously active revisions */ // do this AFTER activating so we don't allow a period where no active scripts will respond for (int revisionToDeactivate : revisionsToDeactivate) { // do NOT deactivate if we just activated this (can occur if someone calls this twice in a row, cleaning up bad data, etc) if (revisionToDeactivate != revision) { Map<String, Object> attributesForDeactivation = new HashMap<String, Object>(); attributesForDeactivation.put("canary", false); cassandraGateway.upsert(filter_id + "_" + revisionToDeactivate, attributesForDeactivation); } } setChanged(); notifyObservers(new ZuulEvent("ZUUL_SCRIPT_CHANGE", "CANARY FILTER SET id = " + filter_id + "revision = " + revision)); return getFilterInfoForFilter(filter_id, revision); }
@Override public FilterInfo deActivateFilter(String filter_id, int revision) throws Exception { FilterInfo filter = getFilterInfo(filter_id, revision); if (filter == null) throw new Exception("Filter not Found " + filter_id + "revision:" + revision); if (!filter.isCanary() && !filter.isActive()) { throw new Exception("Filter must be canary or active to deactivate" + filter_id + "revision:" + revision); } removeFilterIdFromIndex(ACTIVE_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filter.getRevision()); removeFilterIdFromIndex(CANARY_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filter.getRevision()); /* activate the revision */ Map<String, Object> attributesForActivation = new HashMap<String, Object>(); attributesForActivation.put("active", false); attributesForActivation.put("canary", false); cassandraGateway.upsert(filter_id + "_" + revision, attributesForActivation); setChanged(); notifyObservers(new ZuulEvent("ZUUL_SCRIPT_CHANGE", "DEACTIVATED ZUUL FILTER id = " + filter_id + " revision = " + revision)); return getFilterInfoForFilter(filter_id, revision); }
int revision = 1; if (latest != null) { revision = latest.getRevision() + 1;
@Override public FilterInfo setCanaryFilter(String filter_id, int revision) { ArrayList<Integer> revisionsToDeactivate = new ArrayList<Integer>(); FilterInfo filterInfo = getCanaryScriptForFilter(filter_id); if (filterInfo != null) { revisionsToDeactivate.add(filterInfo.getRevision()); removeFilterIdFromIndex(ACTIVE_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filterInfo.getRevision()); removeFilterIdFromIndex(CANARY_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filterInfo.getRevision()); } /* activate the revision */ Map<String, Object> attributesForActivation = new HashMap<String, Object>(); attributesForActivation.put("canary", true); attributesForActivation.put("active", false); cassandraGateway.upsert(filter_id + "_" + revision, attributesForActivation); addFilterIdToIndex(CANARY_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + revision); /* de-activate previously active revisions */ // do this AFTER activating so we don't allow a period where no active scripts will respond for (int revisionToDeactivate : revisionsToDeactivate) { // do NOT deactivate if we just activated this (can occur if someone calls this twice in a row, cleaning up bad data, etc) if (revisionToDeactivate != revision) { Map<String, Object> attributesForDeactivation = new HashMap<String, Object>(); attributesForDeactivation.put("canary", false); cassandraGateway.upsert(filter_id + "_" + revisionToDeactivate, attributesForDeactivation); } } setChanged(); notifyObservers(new ZuulEvent("ZUUL_SCRIPT_CHANGE", "CANARY FILTER SET id = " + filter_id + "revision = " + revision)); return getFilterInfoForFilter(filter_id, revision); }
int revision = 1; if (latest != null) { revision = latest.getRevision() + 1;
@Override public FilterInfo deActivateFilter(String filter_id, int revision) throws Exception { FilterInfo filter = getFilterInfo(filter_id, revision); if (filter == null) throw new Exception("Filter not Found " + filter_id + "revision:" + revision); if (!filter.isCanary() && !filter.isActive()) { throw new Exception("Filter must be canary or active to deactivate" + filter_id + "revision:" + revision); } removeFilterIdFromIndex(ACTIVE_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filter.getRevision()); removeFilterIdFromIndex(CANARY_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filter.getRevision()); /* activate the revision */ Map<String, Object> attributesForActivation = new HashMap<String, Object>(); attributesForActivation.put("active", false); attributesForActivation.put("canary", false); cassandraGateway.upsert(filter_id + "_" + revision, attributesForActivation); setChanged(); notifyObservers(new ZuulEvent("ZUUL_SCRIPT_CHANGE", "DEACTIVATED ZUUL FILTER id = " + filter_id + " revision = " + revision)); return getFilterInfoForFilter(filter_id, revision); }
revisionsToDeactivate.add(filterInfo.getRevision()); removeFilterIdFromIndex(ACTIVE_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filterInfo.getRevision());
revisionsToDeactivate.add(filterInfo.getRevision()); removeFilterIdFromIndex(ACTIVE_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filterInfo.getRevision());
assertEquals(3, filterInfo.getRevision()); assertEquals(true, filterInfo.isActive()); assertEquals(now.getTime(), filterInfo.getCreationDate());
assertEquals(3, filterInfo.getRevision()); assertEquals(true, filterInfo.isActive()); assertEquals(now.getTime(), filterInfo.getCreationDate());
assertEquals(3, filterInfo.getRevision()); assertEquals(true, filterInfo.isActive()); assertEquals(now.getTime(), filterInfo.getCreationDate());
assertEquals(3, filterInfo.getRevision()); assertEquals(true, filterInfo.isActive()); assertEquals(now.getTime(), filterInfo.getCreationDate());
assertEquals(4, filterInfo.getRevision()); assertEquals(false, filterInfo.isActive()); assertEquals(now.getTime(), filterInfo.getCreationDate());