Package com.streamreduce.core.transformer.message

Source Code of com.streamreduce.core.transformer.message.AgentMessageTransformer

/*
* Copyright 2012 Nodeable Inc
*
*    Licensed under the Apache License, Version 2.0 (the "License");
*    you may not use this file except in compliance with the License.
*    You may obtain a copy of the License at
*
*        http://www.apache.org/licenses/LICENSE-2.0
*
*    Unless required by applicable law or agreed to in writing, software
*    distributed under the License is distributed on an "AS IS" BASIS,
*    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*    See the License for the specific language governing permissions and
*    limitations under the License.
*/

package com.streamreduce.core.transformer.message;

import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TreeSet;

import com.mongodb.BasicDBObject;
import com.streamreduce.core.event.EventId;
import com.streamreduce.core.model.Event;
import com.streamreduce.core.model.messages.details.SobaMessageDetails;
import com.streamreduce.util.MessageUtils;

public class AgentMessageTransformer extends SobaMessageTransformer implements MessageTransformer {

    public AgentMessageTransformer(Properties messageProperties, SobaMessageDetails messageDetails) {
        super(messageProperties, messageDetails);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String doTransform(Event event) {
        EventId eventId = event.getEventId();
        Map<String, Object> eventMetadata = event.getMetadata();
        String msg = "";

        switch (eventId) {
            case ACTIVITY:
                BasicDBObject payload = (BasicDBObject) eventMetadata.get("payload");
                StringBuilder sb = new StringBuilder();

                sb.append("Current system overview at ")
                        .append(eventMetadata.get("activityGenerated")) // Should we format this?
                        .append("\n\n");

                sb.append("Uptime: ")
                  .append(payload.getString("uptime"))
                  .append("s\n")
                  .append("Disk usage:\n");

                BasicDBObject partitionsObj = (BasicDBObject) payload.get("partitions");
                Set<String> partitions = new TreeSet<>(partitionsObj.keySet());

                for (String key : partitions) {
                    BasicDBObject partition = (BasicDBObject) partitionsObj.get(key);
                    double totalAsKb = partition.getDouble("total");

                    // Certain devices show as 0.00GB and should be pruned
                    if (totalAsKb == 0) {
                        continue;
                    }

                    double totalAsGB = MessageUtils.kbToGB(totalAsKb);
                    double usedAsGB = MessageUtils.kbToGB(partition.getDouble("used"));
                    double freeAsGB = MessageUtils.kbToGB(partition.getDouble("free"));

                    sb.append("  ")
                      .append(key)
                      .append(": Total ")
                      .append(MessageUtils.roundAndTruncate(totalAsGB, 2))
                      .append("GB, Used ")
                      .append(MessageUtils.roundAndTruncate(usedAsGB, 2))
                      .append("GB, Free ")
                      .append(MessageUtils.roundAndTruncate(freeAsGB, 2))
                      .append("GB\n");
                }

                sb.append("Disk I/O:\n");

                BasicDBObject diskIO = (BasicDBObject) payload.get("disk_io");
                Set<String> disks = new TreeSet<>(diskIO.keySet());

                if (disks.size() == 0) {
                    sb.append("  Unavailable\n");
                } else {
                    for (String key : disks) {
                        BasicDBObject disk = (BasicDBObject) diskIO.get(key);
                        long reads = disk.getLong("read_count");
                        long writes = disk.getLong("write_count");
                        double gbRead = MessageUtils.kbToGB(disk.getLong("read_kbytes"));
                        double gbWrite = MessageUtils.kbToGB(disk.getLong("write_kbytes"));
                        long readSecs = disk.getLong("read_time");
                        long writeSecs = disk.getLong("write_time");

                        sb.append("  ")
                          .append(key)
                          .append(": Reads ")
                          .append(reads)
                          .append(", Writes ")
                          .append(writes)
                          .append(", GB Read ")
                          .append(MessageUtils.roundAndTruncate(gbRead, 2))
                          .append(", GB Written ")
                          .append(MessageUtils.roundAndTruncate(gbWrite, 2))
                          .append(", Read Time ")
                          .append(readSecs)
                          .append("s, Write Time ")
                          .append(writeSecs)
                          .append("s\n");
                    }
                }

                sb.append("Network I/O:\n");

                BasicDBObject netIO = (BasicDBObject) payload.get("network_io");
                Set<String> nics = new TreeSet<>(netIO.keySet());
                int nicsDisplayed = 0;

                for (String key : nics) {
                    BasicDBObject nic = (BasicDBObject) netIO.get(key);
                    long packetsIn = nic.getInt("packets_in");
                    long packetsOut = nic.getInt("packets_out");

                    // Certain devices show 0 packets in/out and should be pruned
                    if (packetsIn == 0 && packetsOut == 0) {
                        continue;
                    }

                    double gbIn = MessageUtils.kbToGB(nic.getLong("kbytes_in"));
                    double gbOut = MessageUtils.kbToGB(nic.getLong("kbytes_out"));

                    sb.append("  ")
                      .append(key)
                      .append(": Packets In ")
                      .append(packetsIn)
                      .append(", Packets Out ")
                      .append(packetsOut)
                      .append(", GB In ")
                      .append(MessageUtils.roundAndTruncate(gbIn, 2))
                      .append(", GB Out ")
                      .append(MessageUtils.roundAndTruncate(gbOut, 2))
                      .append("\n");

                    nicsDisplayed++;
                }

                if (nicsDisplayed == 0) {
                    sb.append("  Unavailable\n");
                }

                sb.append("Load: 1m ")
                  .append(MessageUtils.roundAndTruncate(payload.getDouble("load_avg_0"), 2))
                  .append(", ")
                  .append("5m ")
                  .append(MessageUtils.roundAndTruncate(payload.getDouble("load_avg_1"), 2))
                  .append(", ")
                  .append("15m ")
                  .append(MessageUtils.roundAndTruncate(payload.getDouble("load_avg_2"), 2))
                  .append("\n");


                float gbTotalRAM = (float) MessageUtils.kbToGB(payload.getLong("phy_ram_total"));
                float gbUsedRAM = (float) MessageUtils.kbToGB(payload.getLong("phy_ram_used"));
                float gbFreeRAM = (float) MessageUtils.kbToGB(payload.getLong("phy_ram_free"));

                sb.append("Real Mem: Total ")
                  .append(MessageUtils.roundAndTruncate(gbTotalRAM, 2))
                  .append("GB, Used ")
                  .append(MessageUtils.roundAndTruncate(gbUsedRAM, 2))
                  .append("GB, Free ")
                  .append(MessageUtils.roundAndTruncate(gbFreeRAM, 2))
                  .append("GB\n");

                double gbTotalVRAM = MessageUtils.kbToGB(payload.getLong("vir_ram_total"));
                double gbUsedVRAM = MessageUtils.kbToGB(payload.getLong("vir_ram_used"));
                double gbFreeVRAM = MessageUtils.kbToGB(payload.getLong("vir_ram_free"));

                sb.append("Virt Mem: Total ")
                  .append(MessageUtils.roundAndTruncate(gbTotalVRAM, 2))
                  .append("GB, Used ")
                  .append(MessageUtils.roundAndTruncate(gbUsedVRAM, 2))
                  .append("GB, Free ")
                  .append(MessageUtils.roundAndTruncate(gbFreeVRAM, 2))
                  .append("GB\n");

                sb.append("Processes: ")
                  .append(payload.getInt("processes"))
                  .append("\n");

                sb.append("Users: Total ")
                  .append(payload.getInt("users_total"))
                  .append(", Unique ")
                  .append(payload.getInt("users_unique"))
                  .append("\n");

                msg = sb.toString();
                break;
            default:
                super.doTransform(event);
                break;
        }
        return msg;
    }

}
TOP

Related Classes of com.streamreduce.core.transformer.message.AgentMessageTransformer

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.