Package com.netflix.priam.agent.tasks

Source Code of com.netflix.priam.agent.tasks.AgentTask

package com.netflix.priam.agent.tasks;

import com.google.common.base.Joiner;
import com.netflix.priam.agent.AgentConfiguration;
import com.netflix.priam.agent.NodeStatus;
import com.netflix.priam.agent.process.AgentProcessManager;
import com.netflix.priam.agent.process.ProcessRecord;
import com.netflix.priam.agent.storage.Storage;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.json.simple.JSONArray;
import javax.inject.Provider;

/**
* Recurring task that writes out state info
*/
public class AgentTask
{
    private final AgentConfiguration configuration;
    private final AgentProcessManager processManager;
    private final Provider<NodeStatus> nodeToolProvider;
    private final Storage storage;

    private static final String ROW_KEY = "priam_agent_instances";
    private static final int VERSION = 0x00010001;

    public AgentTask(AgentConfiguration configuration, AgentProcessManager processManager, Provider<NodeStatus> nodeToolProvider, Storage storage)
    {
        this.configuration = configuration;
        this.processManager = processManager;
        this.nodeToolProvider = nodeToolProvider;
        this.storage = storage;
    }

    public void execute() throws Exception
    {
        JSONObject json = new JSONObject();

        NodeStatus nodeTool = nodeToolProvider.get();
        json.put("version", VERSION);
        json.put("current_time_ms", System.currentTimeMillis());
        json.put("info", nodeTool.info());
        json.put("is_joined", nodeTool.isJoined());
        json.put("endpoint", nodeTool.getEndpoint());
        json.put("exception_count", nodeTool.getExceptionCount());
        json.put("live_nodes", nodeTool.getLiveNodes());
        json.put("moving_nodes", nodeTool.getMovingNodes());
        json.put("joining_nodes", nodeTool.getJoiningNodes());
        json.put("unreachable_nodes", nodeTool.getUnreachableNodes());
        json.put("operation_mode", nodeTool.getOperationMode());
        json.put("gossip_info", nodeTool.getGossipInfo());
        json.put("compaction_throughput", nodeTool.getCompactionThroughput());
        json.put("active_processes", getActiveProcesses());
        json.put("completed_processes", getCompletedProcesses());

        storage.setValue(configuration, ROW_KEY, configuration.getThisHostName(), json.toString());
    }

    private JSONArray getCompletedProcesses() throws JSONException
    {
        JSONArray tab = new JSONArray();
        for ( ProcessRecord processRecord : processManager.getCompletedProcesses() )
        {
            JSONObject json = new JSONObject();
            addProcessCommon(processRecord, json);
            json.put("end_time_ms", processRecord.getEndTimeMs());
        }

        return tab;
    }

    private JSONArray getActiveProcesses() throws JSONException
    {
        JSONArray tab = new JSONArray();
        for ( ProcessRecord processRecord : processManager.getActiveProcesses() )
        {
            JSONObject json = new JSONObject();
            addProcessCommon(processRecord, json);
            json.put("stop_attempt_ms", processRecord.getStopAttemptMs());
        }

        return tab;
    }

    private void addProcessCommon(ProcessRecord processRecord, JSONObject json) throws JSONException
    {
        json.put("name", processRecord.getName());
        json.put("id", processRecord.getId());
        json.put("start_time_ms", processRecord.getStartTimeMs());
        json.put("elapsed_time_ms", System.currentTimeMillis() - processRecord.getStartTimeMs());
        json.put("arguments", Joiner.on(", ").join(processRecord.getArguments()));
    }
}
TOP

Related Classes of com.netflix.priam.agent.tasks.AgentTask

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.