com.impetus.ankush.agent.service.provider.PIDServiceStatusProvider.java Source code

Java tutorial

Introduction

Here is the source code for com.impetus.ankush.agent.service.provider.PIDServiceStatusProvider.java

Source

/*******************************************************************************
 * ===========================================================
 * Ankush : Big Data Cluster Management Solution
 * ===========================================================
 * 
 * (C) Copyright 2014, by Impetus Technologies
 * 
 * This is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License (LGPL v3) as
 * published by the Free Software Foundation;
 * 
 * This software 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 this software; if not, write to the Free Software Foundation, 
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 ******************************************************************************/
package com.impetus.ankush.agent.service.provider;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.FileUtils;

import com.impetus.ankush.agent.service.ComponentService;
import com.impetus.ankush.agent.utils.AgentLogger;
import com.impetus.ankush.agent.utils.CommandExecutor;
import com.impetus.ankush.agent.utils.Result;

/**
 * @author hokam
 * 
 */
public class PIDServiceStatusProvider extends ServiceProvider {

    // command for getting pid status.
    private static final String COMMAND_PS_P = "ps -p ";
    // key for getting pid file path.
    private static final String KEY_PID_FILE = "pidFile";
    /** The log. */
    private static final AgentLogger LOGGER = new AgentLogger(PIDServiceStatusProvider.class);

    /**
     * Method to get service status using the process id.
     */
    @Override
    public Map<String, Boolean> getServiceStatus(List<ComponentService> services) {
        // Service status map
        Map<String, Boolean> status = new HashMap<String, Boolean>();

        // iterate over the services for getting service status.
        for (ComponentService service : services) {
            try {
                // Get pid file path
                String pidFile = service.getParameters().get(KEY_PID_FILE);
                // create file object
                File file = new File(pidFile);
                // check file exists or not
                if (file.exists()) {
                    // Get file string

                    List<String> lines = FileUtils.readLines(file);
                    // if content is empty
                    if (lines == null || lines.isEmpty()) {
                        status.put(service.getRole(), false);
                    } else {
                        // if pid exists
                        Result result = CommandExecutor.executeCommand(COMMAND_PS_P + lines.get(0));
                        // setting service status.
                        status.put(service.getRole(), result.getExitVal() == 0);
                    }
                } else {
                    status.put(service.getRole(), false);
                }
            } catch (Exception e) {
                // logging error in agent log
                LOGGER.error(e.getMessage(), e);
                // setting service status as false.
                status.put(service.getRole(), false);
            }
        }
        // return service status.
        return status;
    }

}