diff --git a/src/main/java/org/alfresco/heartbeat/HBBaseDataCollector.java b/src/main/java/org/alfresco/heartbeat/HBBaseDataCollector.java new file mode 100644 index 0000000000..75a462ff27 --- /dev/null +++ b/src/main/java/org/alfresco/heartbeat/HBBaseDataCollector.java @@ -0,0 +1,48 @@ +/* + * #%L + * Alfresco Repository + * %% + * Copyright (C) 2005 - 2017 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.heartbeat; + +import java.util.List; + +import org.alfresco.service.cmr.repository.HBDataCollectorService; + +public abstract class HBBaseDataCollector +{ + private HBDataCollectorService hbDataCollectorService; + + + public void register() + { + hbDataCollectorService.registerCollector(this); + } + + public void setHBDataCollectorService(HBDataCollectorService hbDataCollectorService) + { + this.hbDataCollectorService = hbDataCollectorService; + } + + public abstract List collectData(); +} diff --git a/src/main/java/org/alfresco/heartbeat/HBData.java b/src/main/java/org/alfresco/heartbeat/HBData.java new file mode 100644 index 0000000000..997653ed9f --- /dev/null +++ b/src/main/java/org/alfresco/heartbeat/HBData.java @@ -0,0 +1,163 @@ +/* + * #%L + * Alfresco Repository + * %% + * Copyright (C) 2005 - 2017 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.heartbeat; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.TreeMap; + +/** + * Created by mmuller on 07/07/2017. + */ +public class HBData +{ + public static String SCHEMA_VERSION = "1.0"; + + public static String SCHEMA_VERSION_KEY = "sv"; + public static String SYSTEM_ID_KEY = "sId"; + public static String COLLECTOR_ID_KEY = "cId"; + public static String COLLECTOR_VERSION_KEY = "cv"; + public static String TIMESTAMP_KEY = "t"; + public static String DATA_KEY = "d"; + + private String systemId; + private String collectorId; + private String collectorVersion; + private String timestamp; + private Map data; + + public HBData(String systemId, String collectorId, String collectorVersion, String timestamp) + { + this.systemId = systemId; + this.collectorId = collectorId; + this.collectorVersion = collectorVersion; + this.timestamp = timestamp; + } + + public HBData(String systemId, String collectorId, String collectorVersion, String timestamp, Map data) + { + this.systemId = systemId; + this.collectorId = collectorId; + this.collectorVersion = collectorVersion; + this.timestamp = timestamp; + this.data = data; + } + + public JSONObject getJSONObject() throws JSONException + { + // save data collector properties + // The LinkedHashMap was choose only because for demoing + Map keyValues = new LinkedHashMap(); + keyValues.put(SCHEMA_VERSION_KEY, SCHEMA_VERSION); + keyValues.put(SYSTEM_ID_KEY, this.systemId); + keyValues.put(COLLECTOR_ID_KEY, this.collectorId); + keyValues.put(COLLECTOR_VERSION_KEY, this.collectorVersion); + keyValues.put(TIMESTAMP_KEY, this.timestamp); + + // save collected data + JSONObject jsonObject = new JSONObject(keyValues); + jsonObject.put(DATA_KEY, new JSONObject(this.data)); + return jsonObject; + } + + public String getSystemId() + { + return systemId; + } + + public void setSystemId(String systemId) + { + this.systemId = systemId; + } + + public String getCollectorId() + { + return collectorId; + } + + public void setCollectorId(String collectorId) + { + this.collectorId = collectorId; + } + + public String getCollectorVersion() + { + return collectorVersion; + } + + public void setCollectorVersion(String collectorVersion) + { + this.collectorVersion = collectorVersion; + } + + public String getTimestamp() + { + return timestamp; + } + + public void setTimestamp(String timestamp) + { + this.timestamp = timestamp; + } + + public Map getData() + { + return data; + } + + public void setData(Map data) + { + this.data = data; + } + + public static void main(String[] args) throws JSONException + { + Map data = new TreeMap(); + data.put("k1","v1"); + data.put("k2",new Integer(2)); + data.put("k3","v3"); + + // ISO-8601 same as JavaScript toISOString() + String timeStamp = new SimpleDateFormat("YYYY-MM-dd'T'HH:mm:ss.sss'Z'").format(new Date()); + + HBData collectorData = new HBData("99db325c-13c4-4b74-8d1d-f4800b345c89", + "acs.repository.test", + "1.0", + timeStamp); + + collectorData.setData(data); + + String jsonString = collectorData.getJSONObject().toString(); + System.out.println(":O "); + System.out.println(jsonString); + } + +} diff --git a/src/main/java/org/alfresco/heartbeat/HBDataCollectorServiceImpl.java b/src/main/java/org/alfresco/heartbeat/HBDataCollectorServiceImpl.java new file mode 100644 index 0000000000..faf89651d2 --- /dev/null +++ b/src/main/java/org/alfresco/heartbeat/HBDataCollectorServiceImpl.java @@ -0,0 +1,68 @@ +/* + * #%L + * Alfresco Repository + * %% + * Copyright (C) 2005 - 2017 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.heartbeat; + +import java.util.LinkedList; +import java.util.List; + +import org.alfresco.service.cmr.repository.HBDataCollectorService; + +public class HBDataCollectorServiceImpl implements HBDataCollectorService +{ + private List collectors = new LinkedList<>(); +// private HBDataSenderService dataSender; + private boolean enabled; + + @Override + public void registerCollector(HBBaseDataCollector collector) + { + this.collectors.add(collector); + } + + @Override + public void collectAndSendData() + { + for (HBBaseDataCollector collector : collectors) + { + List data = collector.collectData(); +// try +// { +// dataSender.sendData(data); +// } +// catch (Exception e) +// { +// // log exception; +// } + } + } + + @Override + public boolean isHBEnabled() + { + return enabled; + } + +} diff --git a/src/main/java/org/alfresco/service/cmr/repository/HBDataCollectorService.java b/src/main/java/org/alfresco/service/cmr/repository/HBDataCollectorService.java new file mode 100644 index 0000000000..a61eb257b1 --- /dev/null +++ b/src/main/java/org/alfresco/service/cmr/repository/HBDataCollectorService.java @@ -0,0 +1,39 @@ +/* + * #%L + * Alfresco Repository + * %% + * Copyright (C) 2005 - 2017 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.service.cmr.repository; + +import org.alfresco.heartbeat.HBBaseDataCollector; + +public interface HBDataCollectorService +{ + void registerCollector(HBBaseDataCollector collector); + + void collectAndSendData(); + + boolean isHBEnabled(); + + +}