Пример #1
0
    def test_callback_args(self):
        """
        Test whether all required arguments are passed in kwargs.
        """
        if self.check_skip():
            return

        def my_callback(*args, **kwargs):
            required_args = ('filename', 'cf', 'start', 'end', 'step')
            for k in required_args:
                self.assertIn(k, kwargs)

            items = int((kwargs['end'] - kwargs['start']) / kwargs['step'])
            return {
                'start': kwargs['start'],
                'step': 300,
                'data': {
                    'a': [math.sin(x / 200) for x in range(0, items)],
                    'b': [math.cos(x / 200) for x in range(10, items)],
                    'c': [math.sin(x / 100) for x in range(100, items)],
                }
            }

        rrdtool.register_fetch_cb(my_callback)
        rrdtool.graphv(*self.graphv_args)
Пример #2
0
class CreateRRD:
    ret = rrdtool.create("trend.rrd", "--start", 'N', "--step", '10',
                         "DS:CPUload:GAUGE:600:U:U", "RRA:AVERAGE:0.5:1:24")

    if ret:
        print(rrdtool.error())

    ultima_lectura = int(rrdtool.last("trend.rrd"))
    tiempo_final = ultima_lectura
    tiempo_inicial = tiempo_final - 360

    ret = rrdtool.graphv(
        "trend.png", "--start", str(tiempo_inicial), "--end",
        str(tiempo_final), "--vertical-label=Carga CPU", "--title=Uso de CPU",
        "--color", "ARROW#009900", '--vertical-label', "Uso de CPU (%)",
        '--lower-limit', '0', '--upper-limit', '100',
        "DEF:carga=trend.rrd:CPUload:AVERAGE", "AREA:carga#00FF00:Carga CPU",
        "LINE1:30", "AREA:5#ff000022:stack", "VDEF:CPUlast=carga,LAST",
        "VDEF:CPUmin=carga,MINIMUM", "VDEF:CPUavg=carga,AVERAGE",
        "VDEF:CPUmax=carga,MAXIMUM",
        "COMMENT:Now          Min             Avg             Max",
        "GPRINT:CPUlast:%12.0lf%s", "GPRINT:CPUmin:%10.0lf%s",
        "GPRINT:CPUavg:%13.0lf%s", "GPRINT:CPUmax:%13.0lf%s",
        "VDEF:m=carga,LSLSLOPE", "VDEF:b=carga,LSLINT",
        'CDEF:tendencia=carga,POP,m,COUNT,*,b,+', "LINE2:tendencia#FFBB00")

    print(ret)
    print(ret.keys())
    print(ret.items())
Пример #3
0
def rrd_graph(path, rrd_opts, graph_opts):
    ''' create a graph for rrd
    if path is "-", image is returned as part of dictionary.
    Keys in dictionary:
    graph_end
    graph_height
    graph_left
    graph_start
    graph_top
    graph_width
    image
    image_height
    image_width
    value_max
    value_min
    '''
    data = dict()
    if path != "-" and not os.path.exists(os.path.dirname(path)):
        os.makedirs(os.path.dirname(path))
    try:
        logging.info("creating graph %s", path)
        data = rrdtool.graphv(path, rrd_opts, graph_opts)
    except (rrdtool.OperationalError, rrdtool.ProgrammingError) as e:
        logging.error("failed to create graph %s: %s", path, str(e))
    return data
Пример #4
0
    def generate_graph(self, interval=None, **kwargs):
        assert self.objects, "Cannot render graph without any objects"

        # Make sure that all collected data is in the database
        # to get a recent graph image
        for object in self.objects:
            object.commit()

        args = self._make_command_line(interval, **kwargs)

        self.log.info(_("Generating graph %s") % self)

        rrd_graph = self.rrd_graph

        # Add DEFs for all objects
        if not any((e.startswith("DEF:") for e in rrd_graph)):
            args += self._add_defs()

        args += rrd_graph
        args = self._add_vdefs(args)

        # Convert arguments to string
        args = [str(e) for e in args]

        for arg in args:
            self.log.debug("  %s" % arg)

        graph = rrdtool.graphv("-", *args)

        return {
            "image": graph.get("image"),
            "image_height": graph.get("image_height"),
            "image_width": graph.get("image_width"),
        }
Пример #5
0
	def generate_graph(self, interval=None, **kwargs):
		assert self.objects, "Cannot render graph without any objects"

		# Make sure that all collected data is in the database
		# to get a recent graph image
		for object in self.objects:
			object.commit()

		args = self._make_command_line(interval, **kwargs)

		self.log.info(_("Generating graph %s") % self)

		rrd_graph = self.rrd_graph

		# Add DEFs for all objects
		if not any((e.startswith("DEF:") for e in rrd_graph)):
			args += self._add_defs()

		args += rrd_graph
		args = self._add_vdefs(args)

		# Convert arguments to string
		args = [str(e) for e in args]

		for arg in args:
			self.log.debug("  %s" % arg)

		with Environment(self.timezone, self.locale.lang):
			graph = rrdtool.graphv("-", *args)

		return {
			"image"        : graph.get("image"),
			"image_height" : graph.get("image_height"),
			"image_width"  : graph.get("image_width"),
		}
Пример #6
0
    def camera_image(self):
        """
        Return a still image response from the camera.

        This will run rrdtool graph to generate a temporary file which will be served by this method.
        """
        _LOGGER.debug("Get RRD camera image")

        try:
            ret = rrdtool.graphv(
                "-",
                "--width",
                str(self._config[CONF_WIDTH]),
                "--height",
                str(self._config[CONF_HEIGHT]),
                "--start",
                "-" + self._config[CONF_TIMERANGE],
                *self._config[CONF_RRDGRAPH_OPTIONS],
                *self._defs,
                *self._lines,
                *self._config[CONF_ARGS],
            )
            return ret["image"]
        except rrdtool.OperationalError as exc:
            _LOGGER.error(exc)
            return False
Пример #7
0
def GraficarUmbrales(idAgente, ip, entidad, UMBRAL_READY, UMBRAL_SET,
                     UMBRAL_GO, labelCarga):
    ultima_lectura = int(
        rrdtool.last("RRDsAgentes/monitoreo" + idAgente + ".rrd"))
    tiempo_final = ultima_lectura
    tiempo_inicial = tiempo_final - 120

    nombreGrafica = ip.replace(".", "") + entidad
    ret = rrdtool.graphv(
        "Monitoreo/" + nombreGrafica + ".png", "--start", str(tiempo_inicial),
        "--vertical-label=Carga del CPU: " + nombreGrafica, '--lower-limit',
        '0', '--upper-limit', '100', "DEF:cargaEntidad=RRDsAgentes/monitoreo" +
        idAgente + ".rrd:" + entidad + ":AVERAGE",
        "CDEF:carga=cargaEntidad," + UMBRAL_READY + ",LT,cargaEntidad,0,IF",
        "CDEF:umbralReady=cargaEntidad," + UMBRAL_READY +
        ",GT,cargaEntidad,0,IF", "CDEF:umbralSet=cargaEntidad," + UMBRAL_SET +
        ",GT,cargaEntidad,0,IF", "CDEF:umbralGo=cargaEntidad," + UMBRAL_GO +
        ",GT,cargaEntidad,0,IF", "VDEF:cargaMAX=cargaEntidad,MAXIMUM",
        "VDEF:cargaMIN=cargaEntidad,MINIMUM",
        "VDEF:cargaLAST=cargaEntidad,LAST",
        "AREA:carga#988D8D:" + labelCarga + " menor que " + UMBRAL_READY,
        "AREA:umbralReady#50DA23:" + labelCarga + " mayor que " + UMBRAL_READY,
        "AREA:umbralSet#FF8B00:" + labelCarga + " mayor que " + UMBRAL_SET,
        "AREA:umbralGo#FF0000:" + labelCarga + " que " + UMBRAL_GO, "HRULE:" +
        UMBRAL_READY + "#50DA23:Umbral ready 1 - " + UMBRAL_READY + "%",
        "HRULE:" + UMBRAL_SET + "#FF8B00:Umbral set " + UMBRAL_SET + " - " +
        UMBRAL_GO + "%",
        "HRULE:" + UMBRAL_GO + "#FF0000:Umbral go " + UMBRAL_GO + " - 100%",
        "PRINT:cargaLAST:%6.2lf %S", "GPRINT:cargaMAX:%6.2lf %SMAX",
        "GPRINT:cargaMIN:%6.2lf %SMIN", "GPRINT:cargaLAST:%6.2lf %SLAST")
    VerificarUmbrales(UMBRAL_READY, UMBRAL_SET, UMBRAL_GO, ret['print[0]'],
                      entidad, nombreGrafica)
Пример #8
0
class Notification1:
    #def run(self):
        ret = rrdtool.graphv("deteccion.png",
                             "--start", str(tiempo_inicial),
                             "--end", str(tiempo_final),
                             "--title", "Carga de CPU",
                             "--vertical-label=Uso de CPU (%)",
                             '--lower-limit', '0',
                             '--upper-limit', '100',
                             "DEF:carga=trend.rrd:CPUload:AVERAGE",
                             "CDEF:umbral80=carga,80,LT,0,carga,IF",
                             "VDEF:cargaMAX=carga,MAXIMUM",
                             "VDEF:cargaMIN=carga,MINIMUM",
                             "VDEF:cargaSTDEV=carga,STDEV",
                             "VDEF:cargaLAST=carga,LAST",
                             "AREA:carga#00FF00:Carga del CPU",
                             "AREA:umbral80#FF9F00:Tráfico de carga mayor que 80",
                             "AREA:umbral80#FF9F00:Tráfico de carga mayor que 25",
                             "HRULE:80#FF0000:Umbral 1 - 80%",
                             "PRINT:cargaMAX:%6.2lf %S",
                             "GPRINT:cargaMIN:%6.2lf %SMIN",
                             "GPRINT:cargaSTDEV:%6.2lf %SSTDEV",
                             "GPRINT:cargaLAST:%6.2lf %SLAST")

        print (ret)
        print(ret.keys())
        print(ret.items())

        ultimo_valor = float(ret['print[0]'])

        if ultimo_valor > 23:
            print("Sobrepasa Umbral línea base")
Пример #9
0
def graficarRAM(agente: Agente):
    """Gráfica una BD de RRDTOOL
    Usa la calse de Email para enviar un correo
    en caso de pasar un umbral"""
    global ENVIO
    UMBRAL_RAM = 90
    UMBRAL_RAMMED = 80
    UMBRAL_RAMBAJ = 70
    ultima_lectura = int(rrdtool.last(RUTARRD+agente.ip+"RAM.rrd"))
    tiempo_final = ultima_lectura
    tiempo_inicial = tiempo_final - 600
    try:
        ret = rrdtool.graphv( RUTAGRA+"RAM.png",
                        "--start",str(tiempo_inicial),
                        "--end",str(tiempo_final),
                        "--vertical-label=RAM load",
                        '--lower-limit', '0',
                        '--upper-limit', '100',
                        "DEF:carga="+RUTARRD+agente.ip+"RAM.rrd:RAMload:AVERAGE",

                        "CDEF:umbral1=carga,"+str(UMBRAL_RAM)+",LT,0,carga,IF",
                        "CDEF:umbral=carga,"+str(UMBRAL_RAMMED)+",LT,0,carga,IF",
                        "CDEF:umbral0=carga,"+str(UMBRAL_RAMBAJ)+",LT,0,carga,IF",


                        "VDEF:cargaMAX=carga,MAXIMUM",
                        "VDEF:cargaMIN=carga,MINIMUM",
                        "VDEF:cargaSTDEV=carga,STDEV",
                        "VDEF:cargaLAST=carga,LAST",
                        "AREA:carga#00FF00:Carga de la RAM",
                        "AREA:umbral#FF9F00:Carga RAM mayor que "+str(UMBRAL_RAM),

                        "AREA:umbral0#0000FF:Carga RAM mayor que "+str(UMBRAL_RAMBAJ),
                        "AREA:umbral#FF9F00:Carga RAM mayor que "+str(UMBRAL_RAMMED),
                        "AREA:umbral1#FF0000:Carga RAM mayor que "+str(UMBRAL_RAM),
                        

                        "HRULE:"+str(UMBRAL_RAMMED)+"#0000FF:Umbral - medio "+str(UMBRAL_RAMMED),
                        "HRULE:"+str(UMBRAL_RAM)+"#FF0000:Umbral - Oh, no "+str(UMBRAL_RAM),
                        "PRINT:cargaLAST:%6.2lf",
                        "GPRINT:cargaMIN:%6.2lf %SMIN",
                        #"GPRINT:cargaSTDEV:%6.2lf %SSTDEV",
                        "GPRINT:cargaLAST:%6.2lf %SLAST" )
        #Obtener el último valor de la gráfica.                
        ultimo_valor=float(ret['print[0]'])
        #print('Último valor '+ str(ultimo_valor))
        if (ultimo_valor>UMBRAL_RAMBAJ and ENVIO1[0]):
            print('La RAM del agente '+agente.ip+' se está quemando, corre!!! D=')
            ENVIO1[0] = False
            #send_alert_attached("Sobrepasa Umbral Bajo RAM", "RAM.png")
        if (ultimo_valor>UMBRAL_RAMMED and ENVIO1[1]):
            print('La RAM del agente '+agente.ip+' se está quemando, corre!!! D=')
            ENVIO1[1] = False
            #send_alert_attached("Sobrepasa Umbral Medio de RAM", "RAM.png")
        if (ultimo_valor>UMBRAL_RAM and ENVIO1[2]):
            print('La RAM del agente '+agente.ip+' se está quemando, corre!!! D=')
            ENVIO1[2] = False
            #send_alert_attached("Sobrepasa Umbral Alto de RAM", "RAM.png")
    except Exception as e:
        print('Error al momento de graficar RAM: '+ str(e))
Пример #10
0
def graph(request):

    project_dir = "/home/pi/virtualenvs/BrewPi"
    displayhours = 2
    args = ""
    width = 600
    height = 400

    if request.method == 'GET':
        try:
            displayhours = int(request.GET['hours'])
        except:
            pass
        try:
            width = int(request.GET['width'])
        except:
            pass
        try:
            height = int(request.GET['height'])
        except:
            pass

    arg = ["", ""]
    #
    file = rrdtool.graphv(
        "-", "--start", "-" + str(displayhours) + "h",
        "--vertical-label=Temperature (C)", "-w" + str(width),
        "-h" + str(height), "-D", "-Y",
        "DEF:HLT_Temp=" + project_dir + "/rrd/temps.rrd:temp_HLT:AVERAGE",
        "LINE1:HLT_Temp#00FF00:HLT Temperature",
        "CDEF:unavailable=HLT_Temp,UN,INF,0,IF", "AREA:unavailable#d0d0d0")

    return HttpResponse(file['image'], mimetype="image/png")
Пример #11
0
    def camera_image(self):
        """
        Return a still image response from the camera.

        This will run rrdtool graph to generate a temporary file which will be served by this method.
        """
        _LOGGER.debug("Get RRD camera image")

        try:
            ret = rrdtool.graphv(
                "-",
                "--width",
                str(self._width),
                "--height",
                str(self._height),
                "--start",
                "-" + self._timerange,
                *self._defs,
                *self._lines,
                *self._args,
            )

            return ret["image"]
        except rrdtool.OperationalError as exc:
            _LOGGER.error(exc)
            return False
Пример #12
0
def makeCPUGraph(root, startTime, endTime = rrdConstants.NOW):
    baseline = rrdConstants.BASELINE[rrdConstants.DS_CPU]

    return rrdtool.graphv(root + '/' + rrdConstants.CPU_GRAPH,
            '--start', startTime,
            '--end', endTime,
            
            '--width', rrdConstants.GRAPH_WIDTH,
            '--height', rrdConstants.GRAPH_HEIGHT,
            '--full-size-mode',

            '--title', 'Porcentage de uso de procesador.',
            '--vertical-label', '% CPU',
            '--lower-limit', '0',
            '--upper-limit', '100',

            'DEF:data=' + root + '/' + appConstants.DB_FILENAME + ':' + rrdConstants.DS_CPU + ':AVERAGE',
            'CDEF:ready=data,' + str(baseline[rrdConstants.READY]) + ',GT,data,0,IF',
            'CDEF:set=data,' + str(baseline[rrdConstants.SET]) + ',GT,data,0,IF',
            'CDEF:go=data,' + str(baseline[rrdConstants.GO]) + ',GT,data,0,IF',

            'VDEF:last=data,LAST',

            'AREA:data#D4E157:% Carga CPU Promedio',
            'AREA:ready#42A5F5:Ready',
            'AREA:set#FFEE58:Set',
            'AREA:go#EF5350:Go',

            'HRULE:' + str(baseline[rrdConstants.READY]) + '#2979FF',
            'HRULE:' + str(baseline[rrdConstants.SET]) + '#FFEA00',
            'HRULE:' + str(baseline[rrdConstants.GO]) + '#FF1744',

            'PRINT:last:%6.2lf'
        )['print[0]']
Пример #13
0
def graficarObjectsRRD(nombre):
        ultima_lectura = int(rrdtool.last("rrd/"+nombre+".rrd"))
        tiempo_final = ultima_lectura
        tiempo_inicial = tiempo_final-600
        ret = rrdtool.graphv( "png/"+nombre+".png",
                "--start",str(tiempo_inicial),
                "--end",str(tiempo_final),
                "--title=Uso de CPU",
                "--color", 
                "ARROW#009900",
                '--vertical-label', "Uso de CPU (%)",
                
                '--lower-limit', '0',
                '--upper-limit', '100',

                "DEF:outTrafic=rrd/"+nombre+".rrd:outoctets:AVERAGE",
                "CDEF:umbral25=outTrafic,25,LT,0,outTrafic,IF",
                "CDEF:umbral50=outTrafic,50,LT,0,outTrafic,IF",
                "CDEF:umbral75=outTrafic,75,LT,0,outTrafic,IF",

                "VDEF:m=outTrafic,LSLSLOPE",
                "VDEF:b=outTrafic,LSLINT",
                "CDEF:tendencia=outTrafic,POP,m,COUNT,*,b,+",


                #"CDEF:tendenciaPred=tendencia,90,LT,0,tendencia,IF",
                #"CDEF:tendenciaMin=outTrafic,POP,m,COUNT,*,b,+,3,-",
                #"CDEF:tendenciaMax=outTrafic,POP,m,COUNT,*,b,+,3,+",

                "VDEF:CPUlast=outTrafic,LAST",
                "VDEF:CPUmin=outTrafic,MINIMUM",
                "VDEF:CPUavg=outTrafic,AVERAGE",
                "VDEF:CPUmax=outTrafic,MAXIMUM",
                "VDEF:CPUSTDEV=outTrafic,STDEV",

                "GPRINT:CPUlast:%6.2lf %SLAST",
                "GPRINT:CPUmin:%6.2lf %SMIN",
                "GPRINT:CPUavg:%13.0lf%SAVG",
                "GPRINT:CPUmax:%6.2lf %SMAX",
                "GPRINT:CPUSTDEV:%6.2lf %SSTDEV",
                "PRINT:CPUlast:%6.2lf %S",
                #"PRINT:tendenciaPred:%6.2lf %S",

                "AREA:outTrafic#005500:Carga de cpu",
                "AREA:umbral25#00FF00:Tráfico de carga mayor que min",
                "AREA:umbral50#FFBB00:Tráfico de carga mayor que avg",
                "AREA:umbral75#FF0000:Tráfico de carga mayor que max",
                "HRULE:63#00FF00:Umbral ready",
                "HRULE:78#FFBB00:Umbral set",
                "HRULE:85#FF0000:Umbral go"
                #"LINE1:tendenciaMin#00FF00",
                #"LINE1:tendenciaMax#FF0000",
                )
        #print(ret['print[0]'])
        ultimo_valor=[float(ret['print[0]']),float(63),float(78),float(85)]
        return ultimo_valor
Пример #14
0
    def get_url(self):
        """Return url for displaying graph"""
        cached_image = cache.get(repr(self))
        if cached_image:
            return cached_image

        try:
            image = rrdtool.graphv(*self._get_graph_args())['image']
        except rrdtool.error, error:
            _LOGGER.error(error)
Пример #15
0
    def get_url(self):
        """Return url for displaying graph"""
        cached_image = cache.get(repr(self))
        if cached_image:
            return cached_image

        try:
            image = rrdtool.graphv(*self._get_graph_args())['image']
        except rrdtool.error, error:
            _LOGGER.error(error)
Пример #16
0
def graph(name, grouped, period):
    " Graph endpoint, returns generated graph "
    pd = "-1" + period
    if grouped == "i":
        test = rrdtool.graphv(
            "-", "--start", pd, "-w 800", "--title=Температуры %s" % name,
            "-u 60", "-l 15", "DEF:cpu_temp=rrd/%s.rrd:ds0:MAX" % name,
            "DEF:hdd_temp=rrd/%s.rrd:ds1:MAX" % name,
            "LINE1:cpu_temp#0000FF:Процессор", "LINE2:hdd_temp#FF0000:Диск\\j",
            "CDEF:unavailable=cpu_temp,UN,INF,0,IF", "AREA:unavailable#f0f0f0",
            "GPRINT:cpu_temp:MAX:Максимум\\: процессор\\: %3.0lf °C",
            "GPRINT:hdd_temp:MAX:жёсткий диск\\: %3.0lf °C\\j",
            "GPRINT:cpu_temp:AVERAGE:Среднее\\: процессор\\: %3.0lf °C",
            "GPRINT:hdd_temp:AVERAGE:жёсткий диск\\: %3.0lf °C\\j",
            "GPRINT:cpu_temp:LAST:Последнее\\: процессор\\: %3.0lf °C",
            "GPRINT:hdd_temp:LAST:жёсткий диск\\: %3.0lf °C\\j")
    else:
        names = glob.glob("./rrd/%s*.rrd" % name)
        names.sort()
        new_names = []
        for i in names:
            new_names.append(i.replace('./rrd/', '').replace('.rrd', ''))
        arguments = ("-", "--start", pd, "-w 800",
                     "--title=Температуры %s" % name, "-u 60", "-l 15")
        j = 1
        for i in new_names:
            new_arguments = (
                "DEF:cpu_temp%d=rrd/%s.rrd:ds0:MAX" % (j, i),
                "DEF:hdd_temp%d=rrd/%s.rrd:ds1:MAX" % (j, i),
                "LINE1:cpu_temp%d#00%02xFF: %s процессор" % (j, j * 8, i),
                "LINE2:hdd_temp%d#FF%02x00:диск\\j" % (j, j * 8),
                "GPRINT:cpu_temp%d:MAX:Максимум\\: процессор\\: %%3.0lf °C" %
                (j),
                "GPRINT:hdd_temp%d:MAX:жёсткий диск\\: %%3.0lf °C\\j" % (j))
            j = j + 1
            arguments = arguments + new_arguments


# Add arguments
        test = rrdtool.graphv(*arguments)
    response.set_header('Content-type', 'image/png')
    return str(test['image'])
def linebase(tiempo_inicial, tiempo_final, val_max, imagepath, pathrrd):
    #extrae la informacion del ultimo dato en net3.rrd
    #ultima_lectura = int(rrdtool.last("netPr.rrd"))
    val_max = 100  #Valor de procesamiento maximo del CPU
    val_desv = 5.70  #Valor de la desviacion estandar
    val_def = 60  #Valor a monitorear del CPU

    imagepath = imagepath + "Libase.png"
    ret = rrdtool.graphv(
        imagepath,
        "--start",
        str(tiempo_inicial),
        "--end",
        str(tiempo_final),
        "--vertical-label=Porcentraje uso CPU",
        "--lower-limit",
        "0",  #Valor menor a graficar
        "--upper-limit",
        "100",  #Valor maximo a graficar
        "DEF:entrada=" + str(pathrrd) + ":cpu:AVERAGE",  #Promedio de inoctets
        #"DEF:outoctets=net3.rrd:outoctets:AVERAGE", #Promedio de outoctets
        #Escalar valores a graficar de inoctets
        "CDEF:entrada5=entrada," + str(val_max) +
        ",GT,0,entrada,IF",  #Definimos el valor maximo
        "VDEF:entradaMAX=entrada,MAXIMUM",  #Obtiene el val maximo de entrada
        "VDEF:entradaMIN=entrada,MINIMUM",  #Obtiene el val minimo de entrada
        "VDEF:entradaSTDEV=entrada,STDEV",  #Obtiene el val stdev de entrada
        "VDEF:entradaLAST=entrada,LAST",  #Obtiene el val last de entrada
        "AREA:entrada#00FF00:Uso de CPU",  #Etiqueta entrada
        "HRULE:" + str(val_max) + "#FF0000:Umbral 1",  #Etiqueta umbral
        "HRULE:" + str(val_def) + "#0000FF:Umbral 2",
        "HRULE:" + str(val_desv) + "#0000FF:Umbral 3",
        "GPRINT:entradaMAX:%6.2lf %SMAX",  #Etiqueta val max
        "GPRINT:entradaMIN:%6.2lf %SMIN",  #Etiqueta val min
        "GPRINT:entradaSTDEV:%6.2lf %SSTDEV",  #Etiqueta stdev
        "GPRINT:entradaLAST:%6.2lf %SLAST")
    lista = []
    lista = list(ret.items())
    max = str(lista[16])
    min = str(lista[18])
    print(max, min)
    if max.find(str(val_def)) >= 0:  #Comparamos si sobre pasa el val_max
        print("El valor sobrepasa", max)
        #Envio de correo
        send_alert_attached(
            "Los valores del CPU sobreapasan al " + str(val_def) +
            " con un valor de : " + max, imagepath)
    #Si el valor minimo es menor que la desviacion estandard
    if min.find(str(val_desv)) >= 0:
        print("El valor es minimo")
        send_alert_attached(
            "Los valores del CPU son menores a " + str(val_desv) +
            " con un valor de : " + min, imagepath)
Пример #18
0
def Graficar(nombre, titulo, label, dato):
    ultimo = rrdtool.last("RRDsAgentes/monitoreo.rrd")
    tiempo_inicial = ultimo
    ret2 = rrdtool.graphv(
        "Graficas/" + nombre + ".png", "--start", str(tiempo_inicial - 180),
        "--title", titulo, "--vertical-label=" + label, '--lower-limit', '0',
        '--upper-limit', '100',
        "DEF:carga=RRDsAgentes/monitoreo.rrd:" + dato + ":AVERAGE",
        "VDEF:cargaMAX=carga,MAXIMUM", "VDEF:cargaMIN=carga,MINIMUM",
        "VDEF:cargaLAST=carga,LAST", "AREA:carga#00FF00:Carga del CPU",
        "GPRINT:cargaMIN:%6.2lf %SMIN", "GPRINT:cargaMAX:%6.2lf %SMAX",
        "GPRINT:cargaLAST:%6.2lf %SACTUAL")
Пример #19
0
def graph(hostname, period):
    test = rrdtool.graphv("-", "--start", period_conv(period), "-w 800", "--title=User count %s" % hostname,
        "DEF:users=rrds/%s_users.rrd:users:MAX" % (hostname) ,
        "DEF:usersa=rrds/%s_users.rrd:users:AVERAGE" % (hostname) ,
        "DEF:uptime=rrds/%s_uptime.rrd:uptime:LAST" % (hostname) ,
        "CDEF:users_m=users,UN,0,users,IF",
        "LINE2:users_m#0000FF:Users max",
        "LINE2:usersa#00FFFF:Users average",
        "CDEF:unavailable=uptime,UN,INF,0,IF",
        "AREA:unavailable#f0f0f0",
        )
    return test['image']
Пример #20
0
def graph(hostname, period):
    test = rrdtool.graphv(
        "-",
        "--start",
        period_conv(period),
        "-w 800",
        "--title=Uptime %s" % hostname,
        "DEF:uptime=rrds/%s_uptime.rrd:uptime:LAST" % (hostname),
        "LINE1:uptime#0000FF:Uptime",
        "CDEF:unavailable=uptime,UN,INF,0,IF",
        "AREA:unavailable#f0f0f0",
    )
    return test['image']
Пример #21
0
    def test_callback_args(self):
        """
        Test whether all required arguments are passed in kwargs.
        """
        def my_callback(*args, **kwargs):
            required_args = ('filename', 'cf', 'start', 'end', 'step')
            for k in required_args:
                self.assertIn(k, kwargs)

            items = int((kwargs['end'] - kwargs['start']) / kwargs['step'])
            return {
                'start': kwargs['start'],
                'step': 300,
                'data': {
                    'a': [math.sin(x / 200) for x in range(0, items)],
                    'b': [math.cos(x / 200) for x in range(10, items)],
                    'c': [math.sin(x / 100) for x in range(100, items)],
                }
            }

        rrdtool.register_fetch_cb(my_callback)
        rrdtool.graphv(*self.graphv_args)
Пример #22
0
def graficarMinimosCuadrados (nombre):
        ultima_lectura = int(rrdtool.last("rrd/"+nombre+".rrd"))
        tiempo_final = ultima_lectura
        #tiempo_inicial = tiempo_final-600
        tiempo_inicial = 1539658453
        ret = rrdtool.graphv( "png/"+nombre+"MinCua.png",
                "--start",str(tiempo_inicial),
                "--end",str(tiempo_final+4000),
                "--title=Uso de CPU",
                "--color", 
                "ARROW#009900",
                '--vertical-label', "Uso de CPU (%)",
                
                '--lower-limit', '0',
                '--upper-limit', '100',

                "DEF:outTrafic=rrd/"+nombre+".rrd:CPUload:AVERAGE",

                "VDEF:m=outTrafic,LSLSLOPE",
                "VDEF:b=outTrafic,LSLINT",
                "VDEF:CPUmax=outTrafic,MAXIMUM",
                "CDEF:tendencia=outTrafic,POP,m,COUNT,*,b,+",
                "CDEF:limites=tendencia,90,100,LIMIT",
                "VDEF:limite1=limites,FIRST",
                "VDEF:limite2=limites,LAST",

                

                "VDEF:CPUlast=outTrafic,LAST",
                "PRINT:CPUlast:%6.2lf %S",

                #"AREA:outTrafic#005500:Carga de cpu",
                "HRULE:90#00FF00",
                "AREA:limites#FFBB0077",
                #"AREA:limite1#00000077:limite1",
                #"AREA:tendencia#FFBB0077",
                #"LINE2:tendencia#FFBB00",
                "AREA:outTrafic#005500:Carga de cpu",
                "LINE1:tendencia#FFBB00:dashes=3:Tendencia",
                #"AREA:limite1#FFFFFF",
                
                
                "GPRINT:limite1:  limite 1 %c :strftime",
                "GPRINT:limite1:  limite 1 %6.2lf %S",
                #"GPRINT:limite2:  \nlimite2 %c \\n:strftime",
                #"GPRINT:limite2:  limite2 %6.2lf %S"
                
                )
        #print(ret['print[0]'])
        ultimo_valor=float(ret['print[0]'])
        return ultimo_valor
Пример #23
0
def graph(hostname, period):
    test = rrdtool.graphv("-", "--start", period_conv(period), "-w 800", "--title=Ansible %s" % hostname,
                          "DEF:ok=rrds/%s_ansible.rrd:ok:LAST" % (hostname),
                          "DEF:change=rrds/%s_ansible.rrd:change:LAST" % (hostname),
                          "DEF:unreachable=rrds/%s_ansible.rrd:unreachable:LAST" % (hostname),
                          "DEF:failed=rrds/%s_ansible.rrd:failed:LAST" % (hostname),
                          "LINE2:ok#00FF00:ok",
                          "LINE2:change#FFFF00:change",
                          "LINE3:unreachable#0000FF:unreachable",
                          "LINE4:failed#FF0000:failed",
                          "CDEF:unavailable=ok,UN,INF,0,IF",
                          "AREA:unavailable#f0f0f0",
                         )
    return test['image']
Пример #24
0
def graph(hostname, period):
    test = rrdtool.graphv(
        "-",
        "--start",
        period_conv(period),
        "-w 800",
        "--title=/scratch %s" % hostname,
        "DEF:free=rrds/%s_scratch.rrd:free:LAST" % (hostname),
        "DEF:total=rrds/%s_scratch.rrd:total:LAST" % (hostname),
        "LINE2:total#009F00:Total",
        "LINE2:free#FF00FF:Free",
        "CDEF:unavailable=total,UN,INF,0,IF",
        "AREA:unavailable#f0f0f0",
    )
    return test['image']
Пример #25
0
def graficarRRD(nombre, i):
    tiempo_final = int(rrdtool.last("files/" + nombre + ".rrd"))
    lateral = "";
    if nombre == C.CPU_NAME:
        lateral = "--vertical-label=%"
    else:
        lateral = "--vertical-label=Bytes"
    tiempo_inicial = int(rrdtool.first("files/" + nombre + ".rrd"))
    ret = rrdtool.graphv("images/" + nombre + ".png",
                         "--start", str(tiempo_inicial + 6800),
                         "--end", str(tiempo_final),
                        lateral,
                        "DEF:"+nombre+"=files/" + nombre + ".rrd:"+"cosa"+":AVERAGE",
                        "AREA:"+nombre+"#00FF00:" + nombre)
    return
Пример #26
0
def draw_graph(ifce, timestamp):
    graph_slug = ifce['slug']
    graph_type = ifce['type']
    graph_title = "%s:%s:%s"%(graph_type, ifce['name'], ifce['host'])
    graph_subtitle = "algorithm:%s threshold:%s "%(ifce['DETECTION_ALGO'], "%s" %(100*ifce['THRESHOLD']))+"%"
    graph_time = "%s" %timestamp
    tool_version = VERSION
    graph_time_timestamp = "%s" %int(time.mktime(timestamp.timetuple()))
    graph_ds = GRAPH_TYPES[graph_type]
    graph_legends = GRAPH_TITLES[graph_type]
    graph_options = GRAPH_OPTIONS[graph_type]
    graph_colors = GRAPH_COLORS[graph_type]
    vertical_legend = GRAPH_VERTICAL_LEGEND[graph_type]
    graph_multipliers = GRAPH_CDEF_MULTIPLIERS[graph_type]
    rrdpath = "%s/%s.rrd" %(RRD_LOCATION, graph_slug)
    imgpath = "%s/%s_%s.png" %(RRD_LOCATION, graph_slug, graph_time_timestamp)
    graph_args = [str("%s" %imgpath),
                  "--start", "-3h",
                  "--width", "800",
                  "--height", "600", 
                  "-t", "%s\n<span size='x-small'>%s</span>"%(graph_title,graph_subtitle),
                  "--pango-markup",
                  "--vertical-label", "%s"%vertical_legend,
                  "--watermark", "%s - rady %s" %(graph_time, tool_version),
                  ]
    for i, gds in enumerate(graph_ds):
        graph_args.append(str("DEF:ds%s=%s:ds%s:AVERAGE"%(gds,rrdpath,i)))
        if GRAPH_EMBED_AND_SHIFT:
            graph_args.append(str("DEF:last3hds%s=%s:ds%s:AVERAGE:end=now-3h:start=end-3h"%(gds,rrdpath,i)))
        graph_args.append(str("CDEF:%s=ds%s,%s,*"%(gds,gds,graph_multipliers[i])))
        if GRAPH_EMBED_AND_SHIFT:
            graph_args.append(str("CDEF:last3h%s=last3hds%s,%s,*"%(gds,gds,graph_multipliers[i])))
            graph_args.append(str("SHIFT:last3h%s:10800"%(gds)))
        graph_args.append(str("VDEF:max%s=%s,MAXIMUM"%(gds,gds)))
        if GRAPH_EMBED_AND_SHIFT:
            graph_args.append(str("%s:last3h%s%s:%s (3h ago)\\n"%(graph_options[i], gds ,invertHex(graph_colors[i])+"88", graph_legends[i])))
        graph_args.append(str("%s:%s%s:%s\\n"%(graph_options[i], gds ,graph_colors[i]+"dd", graph_legends[i])))
        
        gprint = "GPRINT:max%s" %gds + ":Max\:%8.2lf %s"
        graph_args.append(str("%s"%(gprint)))
        graph_args.append(str("GPRINT:max%s:" %gds +"at %c\\g:strftime"))
        graph_args.append(str("COMMENT:\\n"))
        if i == 0:
            dashline = "-"*120
            graph_args.append(str("COMMENT:%s\\n"%dashline))
    #graph_args[-1] = "%s\\r"%graph_args[-1]
    args=[str(val) for val in graph_args]
    return rrdtool.graphv(*args)
Пример #27
0
def graficarCPU(agente: Agente, n):
    """Gráfica una BD de RRDTOOL
    Usa la calse de Email para enviar un correo
    en caso de pasar un umbral"""
    global ENVIO
    UMBRALCPUMED = 9
    UMBRALCPU = 10
    ultima_lectura = int(rrdtool.last(RUTARRD+agente.ip+"CPU"+str(n)+".rrd"))
    tiempo_final = ultima_lectura
    tiempo_inicial = tiempo_final - 600
    try:
        ret = rrdtool.graphv( RUTAGRA+"CPU"+str(n)+".png",
                        "--start",str(tiempo_inicial),
                        "--end",str(tiempo_final),
                        "--vertical-label=Cpu load",
                        '--lower-limit', '0',
                        '--upper-limit', '100',
                        "DEF:cargaCPU="+RUTARRD+agente.ip+"CPU"+str(n)+".rrd:CPU"+str(n)+"load:AVERAGE",

                        "CDEF:umbral1=cargaCPU,"+str(UMBRALCPU)+",LT,0,cargaCPU,IF",
                        "CDEF:umbral=cargaCPU,"+str(UMBRALCPUMED)+",LT,0,cargaCPU,IF",
                        
                        
                        "VDEF:cargaMAX=cargaCPU,MAXIMUM",
                        "VDEF:cargaMIN=cargaCPU,MINIMUM",
                        "VDEF:cargaSTDEV=cargaCPU,STDEV",
                        "VDEF:cargaLAST=cargaCPU,LAST",
                        "AREA:cargaCPU#00FF00:Carga Normal del CPU",

                        
                        "AREA:umbral#FF9F00:Carga CPU mayor que "+str(UMBRALCPUMED),
                        "AREA:umbral1#FF0000:Carga CPU mayor que "+str(UMBRALCPU),

                        "HRULE:"+str(UMBRALCPU)+"#FF0000:Umbral - Oh, no "+str(UMBRALCPU),
                        "PRINT:cargaLAST:%6.2lf",
                        "GPRINT:cargaMIN:%6.2lf %SMIN",
                        "GPRINT:cargaSTDEV:%6.2lf %SSTDEV",
                        "GPRINT:cargaLAST:%6.2lf %SLAST" )
        #Obtener el último valor de la gráfica.                
        ultimo_valor=float(ret['print[0]'])
        #print('Último valor '+ str(ultimo_valor))
        if (ultimo_valor>UMBRALCPU and ENVIO[0]):
            print('El CPU '+str(n)+' del agente '+agente.ip+' se está quemando, corre!!! D=')
            ENVIO[0] = False
            #send_alert_attached("Sobrepasa Umbral línea base CPU", "CPU"+str(n)+".png")
    except Exception as e:
        print('Error al momento de graficar CPU: '+ str(e))
def analizarRAM(host):

    while True:
        # calculos de tiempos basado en la ultima entrada de la base
        tiempo_final = int(rrdtool.last(host + ".rrd"))
        tiempo_inicial = tiempo_final - 3600
        ret = rrdtool.graphv(
            host + "RAM.png", "--start", str(tiempo_inicial), "--end",
            str(tiempo_final), "--title", "Carga de Memoria RAM",
            "--vertical-label=Uso de RAM (%)", '--lower-limit', '0',
            '--upper-limit', '100', "DEF:carga=" + host + ".rrd:RAM:AVERAGE",
            "CDEF:umbral60=carga,60,LT,0,carga,IF",
            "CDEF:umbral75=carga,75,LT,0,carga,IF",
            "CDEF:umbral85=carga,85,LT,0,carga,IF",
            "VDEF:cargaMAX=carga,MAXIMUM", "VDEF:cargaMIN=carga,MINIMUM",
            "VDEF:cargaSTDEV=carga,STDEV", "VDEF:cargaLAST=carga,LAST",
            "AREA:carga#00FF00:Carga de la RAM",
            "AREA:umbral60#1ECC0E:Tráfico de carga mayor que 60",
            "AREA:umbral75#C97D02:Tráfico de carga mayor que 75",
            "AREA:umbral85#FF0000:Tráfico de carga mayor que 85",
            "HRULE:60#1ECC0E:Umbral 1 - 75%",
            "HRULE:75#C97D02:Umbral 75 - 85%",
            "HRULE:85#FF0000:Umbral 85 - 100%", "PRINT:cargaMAX:%6.2lf %S",
            "GPRINT:cargaMIN:%6.2lf %SMIN", "GPRINT:cargaSTDEV:%6.2lf %SSTDEV",
            "GPRINT:cargaLAST:%6.2lf %SLAST")
        # print (ret)
        # print(ret.keys())
        # print(ret.items())

        ultimo_valor = float(ret['print[0]'])

        print("Ultimo valor RAM: " + str(ultimo_valor))
        if ultimo_valor >= 60 and ultimo_valor < 75:
            send_alert_attached("Sobrepasa 60% de la RAM", host, "RAM")
            print("Sobrepasa 60% de la RAM")
            sleep(60)
        elif ultimo_valor >= 75 and ultimo_valor < 85:
            send_alert_attached("Sobrepasa 75% de la RAM", host, "RAM")
            print("Sobrepasa 75% de la RAM, cuidado")
            sleep(60)
        elif ultimo_valor >= 90 and ultimo_valor <= 100:
            send_alert_attached("Sobrepasa 90% de la RAM, niveles criticos",
                                host, "RAM")
            print("Sobrepasa 90% de la RAM, niveles criticos")
            sleep(60)

        sleep(5)
def analizarHDD(host):
    while True:
        # calculos de tiempos basado en la ultima entrada de la base
        tiempo_final = int(rrdtool.last(host + ".rrd"))
        tiempo_inicial = tiempo_final - 3600
        ret = rrdtool.graphv(
            host + "HDD.png", "--start", str(tiempo_inicial), "--end",
            str(tiempo_final), "--title", "Carga del disco duro",
            "--vertical-label=Uso de HDD (%)", '--lower-limit', '0',
            '--upper-limit', '100', "DEF:carga=" + host + ".rrd:HDD:AVERAGE",
            "CDEF:umbral45=carga,45,LT,0,carga,IF",
            "CDEF:umbral50=carga,50,LT,0,carga,IF",
            "CDEF:umbral60=carga,60,LT,0,carga,IF",
            "VDEF:cargaMAX=carga,MAXIMUM", "VDEF:cargaMIN=carga,MINIMUM",
            "VDEF:cargaSTDEV=carga,STDEV", "VDEF:cargaLAST=carga,LAST",
            "AREA:carga#00FF00:Carga del HDD",
            "AREA:umbral45#1ECC0E:Tráfico de carga mayor que 45",
            "AREA:umbral50#C97D02:Tráfico de carga mayor que 50",
            "AREA:umbral60#FF0000:Tráfico de carga mayor que 60",
            "HRULE:45#1ECC0E:Umbral 1 - 45%",
            "HRULE:50#C97D02:Umbral 45 - 50%",
            "HRULE:60#FF0000:Umbral 60 - 100%", "PRINT:cargaMAX:%6.2lf %S",
            "GPRINT:cargaMIN:%6.2lf %SMIN", "GPRINT:cargaSTDEV:%6.2lf %SSTDEV",
            "GPRINT:cargaLAST:%6.2lf %SLAST")
        # print (ret)
        # print(ret.keys())
        # print(ret.items())

        ultimo_valor = float(ret['print[0]'])

        #print("Ultimo valor HDD: "+ str(ultimo_valor))
        if ultimo_valor >= 45 and ultimo_valor < 50:
            #send_alert_attached("Sobrepasa 45% del HDD", host, "HDD")
            print("Sobrepasa 45% del HDD")
            sleep(60)
        elif ultimo_valor >= 50 and ultimo_valor < 60:
            #send_alert_attached("Sobrepasa 50% del HDD, cuidado", host, "HDD")
            print("Sobrepasa 50% del HDD, cuidado")
            sleep(60)
        elif ultimo_valor >= 60 and ultimo_valor <= 100:
            send_alert_attached("Sobrepasa 60% del HDD, niveles criticos",
                                host, "HDD")
            print("Sobrepasa 60% del HDD, niveles criticos")
            sleep(60)

        sleep(5)
Пример #30
0
 def create_file(self):
     """Flush the rrd_cache if it's necessary, then get the rrd-config, generate the graph(s) and merge them to a single file"""
     graphs = []
     
     if not self.end or self.end > time.time() - self.__rrd_update_interval:
         self.flush_rrd_cache()
     
     if self.output_format == 'csv':
         for tmpl_params in self.template.rrd_params:
             graphs.append(rrdtool.xport(*tmpl_params))
         self._file = self.merge_files(graphs)
     else:
         for tmpl_params in self.template.rrd_params:
             graphs.append(rrdtool.graphv('-', *tmpl_params))
         self._file = self.merge_files(graphs)
     if not self._file:
         PyNPException('No graph was generated')
Пример #31
0
def graphTCP():
    ultima_lectura = int(rrdtool.last("trendTCP.rrd"))
    tiempo_final = ultima_lectura
    tiempo_inicial = tiempo_final - 600

    ret = rrdtool.graphv(
        "deteccionTCP.png", "--start", str(tiempo_inicial), "--end",
        str(tiempo_final), "--vertical-label=TCP load", '--lower-limit', '0',
        '--upper-limit', '2', "DEF:cargaTCP=trendTCP.rrd:TCPload:AVERAGE",
        "CDEF:umbral30=cargaTCP,1.7,LT,0,cargaTCP,IF",
        "VDEF:cargaMAX=cargaTCP,MAXIMUM", "VDEF:cargaMIN=cargaTCP,MINIMUM",
        "VDEF:cargaSTDEV=cargaTCP,STDEV", "VDEF:cargaLAST=cargaTCP,LAST",
        "AREA:cargaTCP#00FF00:Carga del TCP",
        "AREA:umbral30#FF9F00:Carga TCP mayor que maxbw",
        "HRULE:1.7#00FF00:Umbral 1", "PRINT:cargaLAST:%6.2lf %SLAst",
        "GPRINT:cargaMIN:%6.2lf %SMIN", "GPRINT:cargaSTDEV:%6.2lf %SSTDEV",
        "GPRINT:cargaLAST:%6.2lf %SLAST")
Пример #32
0
def graph(hostname, period):
    test = rrdtool.graphv(
        "-",
        "--start",
        period_conv(period),
        "-w 800",
        "--title=Load %s" % hostname,
        "DEF:load=rrds/%s_cpu.rrd:load:MAX" % (hostname),
        "DEF:cores=rrds/%s_cpu.rrd:cores:LAST" % (hostname),
        "DEF:loadavg=rrds/%s_cpu.rrd:loadavg:LAST" % (hostname),
        "CDEF:load100=load,100,/",
        "LINE2:load#0000FF:load",
        "LINE2:cores#00FFFF:cores",
        "LINE2:loadavg#FF00FF:loadavg",
        "CDEF:unavailable=load,UN,INF,0,IF",
        "AREA:unavailable#f0f0f0",
    )
    return test['image']
Пример #33
0
def makeNetworkGraph(root, startTime, endTime=rrdConstants.NOW):

    shift = int(rrdConstants.HW_PERIOD) * int(rrdConstants.STEP)

    shiftedStart = int(startTime) - shift
    shiftedEnd = int(endTime) - shift

    shiftedStart = str(shiftedStart)
    shiftedEnd = str(shiftedEnd)
    shift = str(shift)

    return rrdtool.graphv(
        root + '/' + rrdConstants.NETWORK_GRAPH, '--imgformat', 'PDF',
        '--start', startTime, '--end', endTime, '--width',
        rrdConstants.GRAPH_WIDTH, '--height', rrdConstants.GRAPH_HEIGHT,
        '--full-size-mode', '--title', 'Ancho de Banda de Entrada',
        '--vertical-label', 'bits/s', 'DEF:data=' + root + '/' +
        rrdConstants.HW_FILENAME + ':' + rrdConstants.DS_NETWORK + ':AVERAGE',
        'DEF:prev=' + root + '/' + rrdConstants.HW_FILENAME + ':' +
        rrdConstants.DS_NETWORK + ':AVERAGE:start=' + shiftedStart + ':end=' +
        shiftedEnd, 'DEF:pred=' + root + '/' + rrdConstants.HW_FILENAME + ':' +
        rrdConstants.DS_NETWORK + ':HWPREDICT', 'DEF:dev=' + root + '/' +
        rrdConstants.HW_FILENAME + ':' + rrdConstants.DS_NETWORK +
        ':DEVPREDICT', 'DEF:fail=' + root + '/' + rrdConstants.HW_FILENAME +
        ':' + rrdConstants.DS_NETWORK + ':FAILURES', 'VDEF:last=fail,LAST',
        'VDEF:maxDev=dev,MAXIMUM', 'CDEF:upper=pred,dev,2,*,+',
        'CDEF:lower=pred,dev,2,*,-', 'CDEF:printDev=dev,maxDev,-',
        'VDEF:firstData=data,FIRST', 'VDEF:lastData=data,LAST',
        'GPRINT:firstData:Desde %d/%m/%Y %H\:%M\:%S:strftime',
        'GPRINT:lastData:Hasta %d/%m/%Y %H\:%M\:%S\c:strftime',
        'TICK:fail#FFEB3B:1.0:  Fallos\c', 'SHIFT:prev:' + shift,
        'AREA:prev#e0e0e0CC:Periodo Anterior\t', 'VDEF:totalPrev=prev,TOTAL',
        'VDEF:maxPrev=prev,MAXIMUM', 'VDEF:avgPrev=prev,AVERAGE',
        'GPRINT:totalPrev:Total\:\t%0.3lf%s',
        'GPRINT:maxPrev:Máximo\:\t%0.3lf%s',
        'GPRINT:avgPrev:Promedio\: %0.3lf%s\c',
        'LINE2:data#0091EA:Ancho de Banda\t', 'VDEF:totalData=data,TOTAL',
        'VDEF:maxData=data,MAXIMUM', 'VDEF:avgData=data,AVERAGE',
        'GPRINT:totalData:Total\:\t%0.3lf%s',
        'GPRINT:maxData:Máximo\:\t%0.3lf%s',
        'GPRINT:avgData:Promedio\: %0.3lf%s\c', 'LINE2:pred#FF4081:Predicción',
        'LINE1:upper#D50000:Límite Superior',
        'LINE1:lower#64DD17:Límite Inferior',
        'LINE1:printDev#000000:Desviación\c', 'PRINT:last:%1.0lf')['print[0]']
Пример #34
0
def makeNetworkGraph(root, startTime, endTime=rrdConstants.NOW):

    return rrdtool.graphv(
        root + '/' + rrdConstants.NETWORK_GRAPH, '--imgformat', 'PDF',
        '--start', startTime, '--end', endTime, '--width',
        rrdConstants.GRAPH_WIDTH, '--height', rrdConstants.GRAPH_HEIGHT,
        '--full-size-mode', '--title', 'Ancho de Banda de Entrada',
        '--vertical-label', 'bits/s', 'DEF:data=' + root + '/' +
        rrdConstants.HW_FILENAME + ':' + rrdConstants.DS_NETWORK + ':AVERAGE',
        'DEF:pred=' + root + '/' + rrdConstants.HW_FILENAME + ':' +
        rrdConstants.DS_NETWORK + ':HWPREDICT',
        'DEF:dev=' + root + '/' + rrdConstants.HW_FILENAME + ':' +
        rrdConstants.DS_NETWORK + ':DEVPREDICT', 'DEF:fail=' + root + '/' +
        rrdConstants.HW_FILENAME + ':' + rrdConstants.DS_NETWORK + ':FAILURES',
        'VDEF:last=fail,LAST', 'CDEF:upper=pred,dev,2,*,+',
        'CDEF:lower=pred,dev,2,*,-', 'TICK:fail#F4433666:1.0:  Fallos',
        'LINE2:data#64DD17:Ancho de Banda Promedio',
        'LINE1:upper#D50000:Limite Superior',
        'LINE1:lower#0091EA:Limite Inferior', 'PRINT:last:%1.0lf')['print[0]']
Пример #35
0
def generate_plot(rrdfile, start, end, ds):
    r, w = os.pipe()
    pid = os.fork()
    if pid:
        os.close(w)
        r = os.fdopen(r, 'rb')
        image = r.read()
        os.waitpid(pid, 0)
    else:
        os.close(r)
        w = os.fdopen(w, 'wb')
        imagedata = rrdtool.graphv("-", '--end', "%d" % (end), '--start',
                                   "%d" % (start),
                                   "DEF:myspeed=%s:%s:AVERAGE" % (rrdfile, ds),
                                   'LINE1:myspeed#FF0000')
        w.write(imagedata['image'])
        w.close()
        os._exit(0)
    return image
Пример #36
0
def makeMemoryGraph(root, startTime, endTime=rrdConstants.NOW):
    baseline = rrdConstants.BASELINE[rrdConstants.DS_MEMORY]

    return rrdtool.graphv(
        root + '/' + rrdConstants.MEMORY_GRAPH, '--start', startTime, '--end',
        endTime, '--width', rrdConstants.GRAPH_WIDTH, '--height',
        rrdConstants.GRAPH_HEIGHT, '--full-size-mode', '--title',
        'Porcentage de uso de memoria.', '--vertical-label', '% Memoria',
        '--lower-limit', '0', '--upper-limit', '100', 'DEF:data=' + root +
        '/' + 'perf.rrd' + ':' + rrdConstants.DS_MEMORY + ':AVERAGE',
        'CDEF:ready=data,' + str(baseline[rrdConstants.READY]) +
        ',GT,data,0,IF',
        'CDEF:set=data,' + str(baseline[rrdConstants.SET]) + ',GT,data,0,IF',
        'CDEF:go=data,' + str(baseline[rrdConstants.GO]) + ',GT,data,0,IF',
        'VDEF:last=data,LAST', 'AREA:data#D4E157:% Memoria utilizada',
        'AREA:ready#42A5F5:Ready', 'AREA:set#FFEE58:Set', 'AREA:go#EF5350:Go',
        'HRULE:' + str(baseline[rrdConstants.READY]) + '#2979FF',
        'HRULE:' + str(baseline[rrdConstants.SET]) + '#FFEA00',
        'HRULE:' + str(baseline[rrdConstants.GO]) + '#FF1744',
        'PRINT:last:%6.2lf')['print[0]']
Пример #37
0
def generate_plot(rrdfile, start, end, ds):
    r, w = os.pipe()
    pid = os.fork()
    if pid:
        os.close(w)
        r = os.fdopen(r,'rb')
        image = r.read()
        os.waitpid(pid,0)
    else:
        os.close(r)
        w = os.fdopen(w,'wb')
        imagedata = rrdtool.graphv("-",
                                   '--end', "%d" % (end),
                                   '--start', "%d" % (start), 
                                   "DEF:myspeed=%s:%s:AVERAGE" % (rrdfile,ds),
                                   'LINE1:myspeed#FF0000')
        w.write(imagedata['image'])
        w.close()
        os._exit(0)
    return image 
Пример #38
0
def graph(request):
	
	project_dir="/home/pi/virtualenvs/BrewPi"
	displayhours=2
        args=""
	width=600
	height=400

        if request.method == 'GET':
                try:
                        displayhours = int(request.GET['hours'])
                except:
                        pass
		try:
                        width = int(request.GET['width'])
                except:
                        pass
		try:
                        height = int(request.GET['height'])
                except:
                        pass
	
	arg=["",""]
	#
	file=rrdtool.graphv("-","--start", 
		"-" + str(displayhours) + "h",
		"--vertical-label=Temperature (C)",
		"-w" + str(width),
		"-h" + str(height),
		"-D",
		"-Y",
		"DEF:HLT_Temp=" + project_dir + "/rrd/temps.rrd:temp_HLT:AVERAGE",
		"LINE1:HLT_Temp#00FF00:HLT Temperature",
		"CDEF:unavailable=HLT_Temp,UN,INF,0,IF",
		"AREA:unavailable#d0d0d0")
	
	return HttpResponse(file['image'], mimetype="image/png")
Пример #39
0
def create_graph_for_interfaces(datasources, start=None, end=None, **kwargs):
    if 'dryrun' in kwargs:
        dryrun = kwargs['dryrun']
    else:
        dryrun = False

    if not start:
        start = '-1d'
    if not end:
        end = '-100'
    if datasources:
        name = os.path.basename(datasources[0].rrdfile.path).split('.')
        if name[0]:
            name = name[0]
        else:
            name = name[1]
        title = '%s to %s' % (name.split('-')[0], name.split('-')[1])
        arguments = ['%s/%s%s%s.png' % (settings.RG_STATICPATH, name, start, end)]

        if hasattr(settings, 'RG_RRDCACHED'):
            arguments.append('--daemon=%s' % str(settings.RG_RRDCACHED))
        arguments.append('-s %s' % start)
        arguments.append('-e %s' % end)
        arguments.append('-t %s' % title)
        arguments.append('--slope-mode')
        arguments.append('-l 0')
        aggregate_dict = {'ds0': [], 'ds1': []}
        interfaces_dict = {
            'ds0': {
                'label': 'In ',
                'color': '#0000ff',
                'graph_type': 'AREA'
            },
            'ds1': {
                'label': 'Out',
                'color': '#00ff00',
                'graph_type': 'LINE'
            }
        }
        legend = []
        used_ds = []
        for d in datasources:
            if d.pk not in used_ds:
                arguments.append('DEF:d%s=%s:%s:AVERAGE' % (d.pk, d.rrdfile.path, d.name))
                arguments.append('DEF:%smax=%s:%s:MAX' % (d.pk, d.rrdfile.path, d.name))
                aggregate_dict[d.name].append(d.pk)
                arguments.append('CDEF:d%sdispAVG=d%s,8,*' % (d.pk, d.pk))
                used_ds.append(d.pk)
        arguments.append('COMMENT:\t\tMin\g')
        arguments.append('COMMENT:\tMax\g')
        arguments.append('COMMENT:\tAverage\g')
        arguments.append('COMMENT:\tCurrent\\n')
        for key, val in aggregate_dict.iteritems():
            arguments.append('CDEF:aggr%s=' % (key))
            legend.append('%s:aggr%s%s:%s' % (
                interfaces_dict.get(key).get('graph_type'), key, interfaces_dict.get(key).get('color'), interfaces_dict.get(key).get('label'))
            )
            for rrd in val:
                arguments[-1] += 'd%sdispAVG,' % rrd
                if rrd != val[0]:
                    arguments[-1] += 'ADDNAN,'
            legend.append('%s:aggr%s:%s:%s' % ('GPRINT', key, 'MIN', '\t%4.2lf%s\g'))
            legend.append('%s:aggr%s:%s:%s' % ('GPRINT', key, 'MAX', '\t%4.2lf%s\g'))
            legend.append('%s:aggr%s:%s:%s' % ('GPRINT', key, 'AVERAGE', '\t%4.2lf%s\g'))
            legend.append('%s:aggr%s:%s:%s' % ('GPRINT', key, 'LAST', '\t%4.2lf%s\\n'))
        arguments.extend(legend)
        args = [str(val) for val in arguments]

        if dryrun == True:
            import re
            for ri in range(len(args)):
                if args[ri].find('-') == 0 and \
                        len(args[ri].split()) > 2:
                    larg = args[ri].split()
                    larg[1] = "'" + larg[1]
                    larg[-1] = larg[-1] + "'"
                    args[ri] = ' '.join(larg)
                elif bool(re.search(r'^([CV]?DEF|AREA|GPRINT|COMMENT|HRULE):',
                                    args[ri])):
                    args[ri] = "'%s'" % args[ri]
            return ' \n'.join('rrdtool graph'.split() + args)
        else:
            rrdtool.graphv(*args)

        url = reverse(
            'get-png-data',
            kwargs={
                'path': '%s%s%s.png' % (name, start, end)
            }
        )
        return url
    return False
Пример #40
0
 def graph(self):
     params = self.common_params()
     params += self.get_period()
     params.extend(self.gen_params())
     return rrdtool.graphv(*params)
Пример #41
0
    def graph_rrdtool(self,stime):
	if stime == '-1d':
		perfix = '1d_'
		graph_cpu = perfix+self.graph_cpu
		graph_mem = perfix+self.graph_mem
		graph_disk = perfix+self.graph_disk
		graph_network = perfix+self.graph_network
		graph_login = perfix+self.graph_login
		 
	elif stime == '-1w':
		perfix = '1w_'
		graph_cpu = perfix+self.graph_cpu
		graph_mem = perfix+self.graph_mem
		graph_disk = perfix+self.graph_disk
		graph_network = perfix+self.graph_network
		graph_login = perfix+self.graph_login
		
	elif stime == '-1M':
		perfix = '1m_'
		graph_cpu = perfix+self.graph_cpu
		graph_mem = perfix+self.graph_mem
		graph_disk = perfix+self.graph_disk
		graph_network = perfix+self.graph_network
		graph_login = perfix+self.graph_login
		
	
	host = self.host
	ISOFORMAT='%Y%m%d'
	today = datetime.date.today()
	today_dir = today.strftime(ISOFORMAT)
	date = time.strftime('%Y-%m-%d',time.localtime(time.time()))
	if not os.path.exists(self.graph_dir):
		os.mkdir(self.graph_dir)
	for i in list(host.split(',')):
		os.chdir(self.graph_dir)
		if not os.path.exists(i):
			os.mkdir(i)
		os.chdir(i)
		if not os.path.exists(today_dir):
			os.mkdir(today_dir)
	
	for j in list(host.split(',')):
		os.chdir(self.rrdtool_dir)
		os.chdir(j)
		#os.chdir(today_dir)
		### nic.png
		#title = "Network Traffic Flow ("+date+")"
		title = "网络流量监控 ("+date+")"
         	rrdtool.graphv(graph_network,'--start',stime,
			'--vertical-label=Bytes/s',
			#'--x-grid','MINUTE:12:HOUR:1:HOUR:1:0:%H',
			'--font','LEGEND:8:/usr/share/fonts/wqy-microhei/wqy-microhei.ttc',
			'--width','1300','--height','460',
			'--title',title,
            		'DEF:input=nic.rrd:input:AVERAGE',
            		'DEF:output=nic.rrd:output:AVERAGE',
            		'DEF:ine=nic.rrd:input_err:AVERAGE',
            		'DEF:oute=nic.rrd:output_err:AVERAGE',
            		'CDEF:inp=input,8,*',
            		'CDEF:inerr=ine,8,*',
            		'CDEF:outp=output,8,*',
            		'CDEF:outerr=oute,8,*',
            		'COMMENT:\\r',
            		'COMMENT:\\r',
			'AREA:inp#FFC125:Network Input',
            		'GPRINT:inp:LAST:Currnet\:%8.2lf %Sbps',
            		'GPRINT:inp:AVERAGE:Average\:%8.2lf %Sbps',
            		'GPRINT:inp:MAX:Maxnum\:%8.2lf %Sbps\\n',
			'LINE3:inerr#CD2626:Network Output',
            		'GPRINT:inerr:LAST:Currnet\:%8.2lf %Sbps',
            		'GPRINT:inerr:AVERAGE:Average\:%8.2lf %Sbps',
            		'GPRINT:inerr:MAX:Maxnum\:%8.2lf %Sbps\\n',
			'LINE3:outp#00FF00:Network Output',
			'GPRINT:outp:LAST:Current\:%8.2lf %Sbps',
            		'GPRINT:outp:AVERAGE:Average\:%8.2lf %Sbps',
            		'GPRINT:outp:MAX:Maxnum\:%8.2lf %Sbps\\n',
			'LINE3:outerr#0000FF:Network Out err',
            		'GPRINT:outerr:LAST:Current\:%8.2lf %Sbps',
            		'GPRINT:outerr:AVERAGE:Average\:%8.2lf %Sbps',
            		'GPRINT:outerr:MAX:Maxnum\:%8.2lf %Sbps\\n')

		if not os.path.exists(graph_network):
			logging.error('Network png not found. PNG file generated failure.')
		else:
			k = '/'
			dst = self.graph_dir+k+j+k+today_dir
			dst_file = dst+k+graph_network
			print dst_file
			if not os.path.exists(dst_file):
				shutil.move(graph_network,dst)
			else:
				logging.warning("Network png already exists.To be convered.")
				os.remove(dst_file)
				shutil.move(graph_network,dst)
			
		### cpu.png
		#title = "CPU Utilzation rate  ("+date+")"
		title = "CPU 使用率  ("+date+")"
         	rrdtool.graphv(graph_cpu,'--start',stime,
			'--vertical-label=Bytes/s',
			#'--x-grid','MINUTE:12:HOUR:1:HOUR:1:0:%H',
			'--font','LEGEND:8:/usr/share/fonts/wqy-microhei/wqy-microhei.ttc',
			'--width','1300','--height','460',
			'--title',title,
            		'DEF:a=cpu.rrd:cpu_loadavg_1:AVERAGE',
            		'DEF:b=cpu.rrd:cpu_loadavg_5:AVERAGE',
            		'DEF:c=cpu.rrd:cpu_loadavg_15:AVERAGE',
			'DEF:user=cpu.rrd:cpu_user:AVERAGE', 
			'DEF:nic=cpu.rrd:cpu_nice:AVERAGE',
			'DEF:system=cpu.rrd:cpu_system:AVERAGE',
			'DEF:iowait=cpu.rrd:cpu_iowait:AVERAGE',
			'DEF:steal=cpu.rrd:cpu_steal:AVERAGE',
			'DEF:idel=cpu.rrd:cpu_idel:AVERAGE',
			'COMMENT:\\r',
			'COMMENT:\\r',
			'LINE3:a#FFC125:Loadavg 1',
			'GPRINT:a:LAST:Currnet\:%8.2lf %s',
			'GPRINT:a:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:a:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:b#EE7600:Loadavg 5',
			'GPRINT:b:LAST:Currnet\:%8.2lf %s',
			'GPRINT:b:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:b:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:c#FF0000:Loadavg 15',
			'GPRINT:c:LAST:Currnet\:%8.2lf %s',
			'GPRINT:c:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:c:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:user#0000FF:CPU User', 
			'GPRINT:user:LAST:Currnet\:%8.2lf %s',
			'GPRINT:user:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:user:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:nic#9AC0CD:CPU Nice',
			'GPRINT:nic:LAST:Currnet\:%8.2lf %s',
			'GPRINT:nic:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:nic:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:system#9A32CD:CPU System', 
			'GPRINT:system:LAST:Currnet\:%8.2lf %s',
			'GPRINT:system:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:system:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:iowait#999999:CPU Iowait',
			'GPRINT:iowait:LAST:Currnet\:%8.2lf %s',
			'GPRINT:iowait:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:iowait:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:steal#9AC0CD:CPU Steal',
			'GPRINT:steal:LAST:Currnet\:%8.2lf %s',
			'GPRINT:steal:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:steal:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:idel#00CD00:CPU Idel',
			'GPRINT:idel:LAST:Currnet\:%8.2lf %s',
			'GPRINT:idel:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:idel:MAX:Maximum\:%8.2lf %s\\n')

		if not os.path.exists(graph_cpu):
			logging.error('CPU png not found. PNG file generated failure.')
		else:
			k = '/'
			dst = self.graph_dir+k+j+k+today_dir
			dst_file = dst+k+graph_cpu
			print dst
			print dst_file
			if not os.path.exists(dst_file):
				shutil.move(graph_cpu,dst)
			else:
				logging.warning("CPU png already exists.To be convered.")
				os.remove(dst_file)
				shutil.move(graph_cpu,dst)
		
		
		### mem.png
		#title = "Mem Utilzation   ("+date+")"
		title = "内存使用情况  ("+date+")"
         	rrdtool.graphv(graph_mem,'--start',stime,
			'--vertical-label=Bytes',
			#'--x-grid','MINUTE:12:HOUR:1:HOUR:1:0:%H',
			'--font','LEGEND:8:/usr/share/fonts/wqy-microhei/wqy-microhei.ttc',
			'--width','1300','--height','460',
			'--title',title,
			'DEF:memtotal=mem.rrd:mem_total:AVERAGE',
			'DEF:memfreed=mem.rrd:mem_freed:AVERAGE',
			'DEF:memused=mem.rrd:mem_used:AVERAGE',
			'DEF:buffersfreed=mem.rrd:mem_buffers_freed:AVERAGE',
			'DEF:buffersused=mem.rrd:mem_buffers_used:AVERAGE',
			'DEF:mempercent=mem.rrd:mem_used_percent:AVERAGE',
			'DEF:swaptotal=mem.rrd:swap_total:AVERAGE',
			'DEF:swapfreed=mem.rrd:swap_freed:AVERAGE',
			'DEF:swapused=mem.rrd:swap_used:AVERAGE',
			'DEF:swappercent=mem.rrd:swap_used_percnet:AVERAGE',
			'CDEF:mtotal=memtotal,1048576,*',
			'CDEF:mfreed=memfreed,1048576,*',
			'CDEF:mused=memused,1048576,*',
			'CDEF:bfreed=buffersfreed,1048576,*',
			'CDEF:bused=buffersused,1048576,*',
			'CDEF:stotal=swaptotal,1048576,*',
			'CDEF:sfreed=swapfreed,1048576,*',
			'CDEF:sused=swapused,1048576,*',
			'COMMENT:\\r',
			'COMMENT:\\r',
			'LINE3:mtotal#FFC125:Mem Total',
			'GPRINT:mtotal:LAST:Currnet\:%8.2lf %s',
			'GPRINT:mtotal:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:mtotal:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:mused#CD2626:Mem Used',
			'GPRINT:mused:LAST:Currnet\:%8.2lf %s',
			'GPRINT:mused:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:mused:MAX:Maximum\:%8.2lf %s\\n',
			'LINE2:mfreed#00FF00:Mem Freed',
			'GPRINT:mfreed:LAST:Currnet\:%8.2lf %s',
			'GPRINT:mfreed:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:mfreed:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:bfreed#0000FF:Mem Buffers Freed',
			'GPRINT:bfreed:LAST:Currnet\:%8.2lf %s',
			'GPRINT:bfreed:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:bfreed:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:bused#EEEE00:Mem Buffers Used',
			'GPRINT:bused:LAST:Currnet\:%8.2lf %s',
			'GPRINT:bused:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:bused:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:mempercent#EE9A49:Mem Used Percent',
			'GPRINT:mempercent:LAST:Currnet\:%8.2lf %s',
			'GPRINT:mempercent:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:mempercent:MAX:Maximum\:%8.2lf %s\\n', 
			'LINE3:stotal#B4EEB4:SWAP Total',
			'GPRINT:stotal:LAST:Currnet\:%8.2lf %s',
			'GPRINT:stotal:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:stotal:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:sfreed#B4EEB4:SWAP Freed',
			'GPRINT:sfreed:LAST:Currnet\:%8.2lf %s',
			'GPRINT:sfreed:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:sfreed:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:sused#B4EEB4:SWAP Used',
			'GPRINT:sused:LAST:Currnet\:%8.2lf %s',
			'GPRINT:sused:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:sused:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:swappercent#AAAAAA:SWAP Used Percent',
			'GPRINT:swappercent:LAST:Currnet\:%8.2lf %s',
			'GPRINT:swappercent:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:swappercent:MAX:Maximum\:%8.2lf %s\\n')


		if not os.path.exists(graph_mem):
			logging.error('MEM png not found. PNG file generated failure.')
		else:
			k = '/'
			dst = self.graph_dir+k+j+k+today_dir
			dst_file = dst+k+graph_mem
			print dst
			print dst_file
			if not os.path.exists(dst_file):
				shutil.move(graph_mem,dst)
			else:
				logging.warning("MEM png already exists.To be convered.")
				os.remove(dst_file)
				shutil.move(graph_mem,dst)

		### disk.png
		title = "Disk Utilzation   ("+date+")"
		title = "磁盘使用情况   ("+date+")"
         	rrdtool.graphv(graph_disk,'--start',stime,
			'--vertical-label=Bytes',
			#'--x-grid','MINUTE:12:HOUR:1:HOUR:1:0:%H',
			'--font','LEGEND:8:/usr/share/fonts/wqy-microhei/wqy-microhei.ttc',
			'--width','1300','--height','460',
			'--title',title,
			'DEF:percent=disk.rrd:disk_used_percent:AVERAGE',
			'DEF:used=disk.rrd:disk_used:AVERAGE',
			'DEF:freed=disk.rrd:disk_freed:AVERAGE',
			'DEF:total=disk.rrd:disk_total:AVERAGE',
			'COMMENT:\\r',
			'COMMENT:\\r',
			'AREA:percent#FFC125:Percent',
			'GPRINT:percent:LAST:Currnet\:%8.2lf %s',
			'GPRINT:percent:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:percent:MAX:Maximum\:%8.2lf %s\\n',
			'AREA:used#CD2626:Used',
			'GPRINT:used:LAST:Currnet\:%8.2lf %s',
			'GPRINT:used:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:used:MAX:Maximum\:%8.2lf %s\\n',
			'LINE2:freed#00FF00:Freed',
			'GPRINT:freed:LAST:Currnet\:%8.2lf %s',
			'GPRINT:freed:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:freed:MAX:Maximum\:%8.2lf %s\\n',
			'LINE3:total#0000FF:Total',
			'GPRINT:total:LAST:Currnet\:%8.2lf %s',
			'GPRINT:total:AVERAGE:Average\:%8.2lf %s',
			'GPRINT:total:MAX:Maximum\:%8.2lf %s\\n')

		if not os.path.exists(graph_disk):
			logging.error('DISK png not found. PNG file generated failure.')
		else:
			k = '/'
			dst = self.graph_dir+k+j+k+today_dir
			dst_file = dst+k+graph_disk
			print dst
			print dst_file
			if not os.path.exists(dst_file):
				shutil.move(graph_disk,dst)
			else:
				logging.warning("DISK png already exists.To be convered.")
				os.remove(dst_file)
				shutil.move(graph_disk,dst)

		### login_user.png
		#title = "Lonin User Num   ("+date+")"
		title = "登陆用户数量   ("+date+")"
         	rrdtool.graphv(graph_login,'--start',stime,
			'--vertical-label=Bytes',
			#'--x-grid','MINUTE:12:HOUR:1:HOUR:1:0:%H',
			'--font','LEGEND:8:/usr/share/fonts/wqy-microhei/wqy-microhei.ttc',
			'--width','1300','--height','460',
			'--title',title,
			'DEF:o=login_user.rrd:login_user_num:AVERAGE',
			'COMMENT:\\r',
			'COMMENT:\\r',
			'AREA:o#00FF00:Users',
			'COMMENT: ',
			'GPRINT:o:LAST:Currnet\:%8.0lf',
			'COMMENT: ',
			'GPRINT:o:AVERAGE:Avg login user num\:%8.0lf',
			'COMMENT: ',
			'GPRINT:o:MAX:Maximum\:%8.0lf\\n')


		if not os.path.exists(graph_login):
			logging.error('login png not found. PNG file generated failure.')
		else:
			k = '/'
			dst = self.graph_dir+k+j+k+today_dir
			dst_file = dst+k+graph_login
			print dst
			print dst_file
			if not os.path.exists(dst_file):
				shutil.move(graph_login,dst)
			else:
				logging.warning("Login png already exists.To be convered.")
				os.remove(dst_file)
				shutil.move(graph_login,dst)
Пример #42
0
Файл: cg.py Проект: gitsr/pisrc
 rrdtool.graphv("/var/www/elec/%s.png" % k,
              '--imgformat', 'PNG',
              '--width', '740',
              '--height', '140',
              '--start', str(v[0]),
              '--end', str(v[1]),
              '--vertical-label', 'Watts',
              '--title', '30 Park Rd, Electricity Usage %s' % k,
              '--lower-limit', '0',
              'DEF:watts=/var/elec/elec.rrd:joules:AVERAGE',
              'CDEF:totaljoules=watts,%d,*' % (v[1]-v[0]),
              'CDEF:kWh=totaljoules,3600000,/',
              'CDEF:cost=kWh,0.1,*',
              'VDEF:MM=watts,MAXIMUM',
              'CDEF:s10=watts,150,LT,watts,150,IF',
              'CDEF:s20=watts,300,LT,watts,300,IF',
              'CDEF:s30=watts,450,LT,watts,450,IF',
              'CDEF:s40=watts,800,LT,watts,800,IF',
              'CDEF:s50=watts,1500,LT,watts,1500,IF',
              'CDEF:s60=watts,3000,LT,watts,3000,IF',
              'CDEF:s70=watts',
              'CDEF:sh10=s10,MM,LT,watts,MM,IF',
              'CDEF:sh20=s20,MM,LT,watts,MM,IF',
              'CDEF:sh30=s30,MM,LT,watts,MM,IF',
              'CDEF:sh40=s40,MM,LT,watts,MM,IF',
              'CDEF:sh50=s50,MM,LT,watts,MM,IF',
              'CDEF:sh60=s60,MM,LT,watts,MM,IF',
              'CDEF:sh70=s70,MM,LE,watts,MM,IF',
              'AREA:sh70#FF0000:',
              'AREA:sh60#FF9900:',
              'AREA:sh50#FFCC00:',
              'AREA:sh40#FFFF00:',
              'AREA:sh30#CCFF00:',
              'AREA:sh20#99FF00:',
              'AREA:sh10#65FF00:',
              'VDEF:Average=watts,AVERAGE',
              'HRULE:Average#9595FF:Average',
              'GPRINT:watts:AVERAGE:Power %4.0lf Watts\\t',
              'GPRINT:kWh:AVERAGE:kWh %4.2lf\\t',
              'GPRINT:cost:AVERAGE:Cost %3.2lf\\n')
Пример #43
0
def plot(values, rrd_root, width = None, height = None, timespan = None,
         title = None, ylabel = None, ymin = None, ymax = None):
    defs = []
    lines = []
    auto_colour_idx = 0

    for v in values:
        val_name = v['name']
        line_label = val_name

        if 'rrd' in v and 'ds' in v:
            datasource = v['ds']
            rrd_file = os.path.join(rrd_root, v['rrd'])
            consolidation_function = "AVERAGE" # let's hope it's there
            defs.append(
                "DEF:%s=%s:%s:%s" % \
                    (val_name, rrd_file, datasource, consolidation_function)
            )
        elif 'expr' in v:
            expression = v['expr']
            defs.append("CDEF:%s=%s" % (val_name, expression))

        if not val_name.startswith("_"):
            colour = _AUTO_COLOURS[auto_colour_idx]
            auto_colour_idx += 1
            lines.append("LINE:%s%s:%s" % (val_name, colour, line_label))

    rrd_commands = [
        '-', '--imgformat', 'PNG',
    ]
    if width is not None and height is not None:
        rrd_commands.extend([
            "--full-size-mode",
            "--width",  "%d" % (width),
            "--height", "%d" % (height),
        ])
    if title is not None:
        rrd_commands.extend(['--title', str(title)])
    if timespan is not None:
        rrd_commands.extend([
            '--start', 'now - %s' % (timespan,),
            '--end', 'now - 1',
        ])
    if ylabel is not None:
        rrd_commands.extend(['--vertical-label', ylabel])
    if ymin is not None:
        rrd_commands.extend(['--lower-limit', str(ymin)])
    if ymax is not None:
        rrd_commands.extend(['--upper-limit', str(ymax)])

    rrd_commands.extend(defs)
    rrd_commands.extend(lines)
    # make sure it's a string everywhere
    for i in range(len(rrd_commands)):
        rrd_commands[i] = str(rrd_commands[i])

    try:
        result = rrdtool.graphv(*rrd_commands)
        return result['image']
    except rrdtool.error, e:
        # XXX: pity I have to discriminate errors this way, but rrdtool
        # provides no other way
        if e.args[0].startswith('opening'):
            raise IOError(e)
        else:
            raise ValueError(e)