/** * Copyright (c) 2002-2010 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Neo4j is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.neo4j.ext.udc.impl; import java.io.IOException; import java.util.*; public class UdcTimerTask extends TimerTask { // ABKTODO: make this thread safe public static final Map<String, Integer> successCounts = new HashMap<String, Integer>(); public static final Map<String, Integer> failureCounts = new HashMap<String, Integer>(); private String storeId; private Pinger pinger; public UdcTimerTask(String host, String version, String storeId) { successCounts.put(storeId, 0); failureCounts.put(storeId, 0); this.storeId = storeId; Map<String,String> udcFields = new HashMap<String, String>(); udcFields.put("id", storeId); udcFields.put("v", version); pinger = new Pinger(host, mergeSystemPropertiesWith(udcFields)); } private Map<String, String> mergeSystemPropertiesWith(Map<String, String> udcFields) { Map<String, String> mergedMap = new HashMap<String, String>(); mergedMap.putAll(udcFields); Properties sysProps = System.getProperties(); Enumeration sysPropsNames = sysProps.propertyNames(); while (sysPropsNames.hasMoreElements()) { String sysPropName = (String) sysPropsNames.nextElement(); if (sysPropName.startsWith("neo4j.ext.udc")) { mergedMap.put(sysPropName.substring("neo4j.ext.udc".length()+1), sysProps.get(sysPropName).toString()); } } return mergedMap; } @Override public void run() { try { pinger.ping(); incrementSuccessCount(storeId); } catch (IOException e) { // ABK: commenting out to not annoy people // System.err.println("UDC update to " + host + " failed, because: " + e); incrementFailureCount(storeId); } } private void incrementSuccessCount(String storeId) { Integer currentCount = successCounts.get(storeId); currentCount++; successCounts.put(storeId, currentCount); } private void incrementFailureCount(String storeId) { Integer currentCount = failureCounts.get(storeId); currentCount++; failureCounts.put(storeId, currentCount); } }