#!/usr/bin/env python

import os
import dtnstats
from munin import MuninPlugin

class DtnTrafficPlugin(MuninPlugin):
    title = "Traffic"
    args = "--base 1000 -l 0"
    vlabel = "bit in (-) / out (+) per ${graph_period}"
    scale = True
    category = "dtn"
    host = "localhost"
    port = 4550

    @property
    def fields(self):
        stats = dtnstats.DtnStats(self.host, self.port)
        stats.connect()
        data = stats.convergencelayers()

        ret = []
        
        for t in data:
            tag_label = t.split("|")
            tag_label[0] = tag_label[0].replace(":", "_")
            label = tag_label[0].lower() + "_" + tag_label[1].lower()

            if tag_label[1].lower() not in self.allowedTags:
                continue

            desc = dict(
                    label = tag_label[0],
                    info = 'Throughput of ' + tag_label[0] + ' convergence layer',
                    type = "COUNTER",
                    min = "0",
                    cdef = label+",8,*"
                   )

            if tag_label[1].lower() == "in":
                desc["graph"]="no"
            else:
                desc["negative"]=tag_label[0].lower() + "_in"
            
            ret.append((label, desc))
        
        return ret

    def execute(self):
        stats = dtnstats.DtnStats(self.host, self.port)
        stats.connect()
        data = stats.convergencelayers()

        ret = {}

        for t, v in data.items():
            tag_label = t.split("|")
            tag_label[0] = tag_label[0].replace(":", "_")
            label = tag_label[0].lower() + "_" + tag_label[1].lower()

            if tag_label[1].lower() not in self.allowedTags:
                continue

            ret[label] = v

        return ret

if __name__ == "__main__":
    DtnTrafficPlugin().run()

