/* * Copyright (c) 2012-2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.processmonitor; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.model.ProcessMonitorMetrics; public class ScheduledProcessMonitor { private static final Logger _logger = LoggerFactory .getLogger(ScheduledProcessMonitor.class); private String _interval; private String _serviceName; private ProcessMonitorMetrics processMonitorMetrics; private ScheduledExecutorService _scheduledProcessMonitor = Executors .newScheduledThreadPool(1); public void setInterval(String interval) { _interval = interval; } public void schedule() { try { _logger.info("Process Monitor Scheduled"); processMonitorMetrics = new ProcessMonitorMetrics(); processMonitorMetrics.setServiceName(_serviceName); _scheduledProcessMonitor.scheduleAtFixedRate( new ProcessMonitor(processMonitorMetrics), 0, Long.parseLong(_interval), TimeUnit.SECONDS); } catch (Exception e) { _logger.error("Process Monitor Scheduling failed", e); } } public void shutdown() { try { _scheduledProcessMonitor.shutdown(); _scheduledProcessMonitor.awaitTermination(120, TimeUnit.SECONDS); } catch (Exception e) { // To-DO: filter it for timeout sException // No need to throw any exception _logger.error("TimeOut occured after waiting Client Threads to finish in Process Monitor"); } } public void setServiceName(String serviceName) { _serviceName = serviceName; } public String getServiceName() { return _serviceName; } }