Esempio n. 1
0
def define_config():
    """Defines some configuration options for the pygal plot."""
    config = Config()
    config.show_legend = False
    config.legend_at_bottom = True
    config.human_readable = True
    config.print_values = True
    config.show_x_labels = True
    config.show_y_labels = True
    config.fill = True
    return config
Esempio n. 2
0
	def renderGraph(self,graphingParams):
		config = Config()
		config.legend_at_bottom = True
		config.legend_at_bottom_columns = 2
		config.margin_bottom = 30
		aStyle = DefaultStyle(font_family='Arial',colors=self.getColors(),background='rgba(255,255,255,1)')
		pie_chart = pygal.Pie(config,style=aStyle)
		pie_chart.title = graphingParams.get('title','')
		for each in graphingParams.get('items',[]):
			descr = each.get('descr','')
			value = each.get('value',0.0)
			pie_chart.add(descr,value)
		return pie_chart.render()
Esempio n. 3
0
def genfoodchart(start, end):
    '''Generate food chart with Pygal'''
    now = datetime.datetime.now().strftime("%Y-%m-%d")
    goodcount = session.query(Food) \
        .filter_by(user_id=current_user.id) \
        .filter(Food.food_date.between(start, end)).join(Ranks) \
        .filter_by(rank=1).add_columns(Ranks.rank).count()
    okaycount = session.query(Food) \
        .filter_by(user_id=current_user.id) \
        .filter(Food.food_date.between(start, end)).join(Ranks) \
        .filter_by(rank=2).add_columns(Ranks.rank).count()
    badcount = session.query(Food) \
        .filter_by(user_id=current_user.id) \
        .filter(Food.food_date.between(start, end)).join(Ranks) \
        .filter_by(rank=3).add_columns(Ranks.rank).count()

    custom_style = Style(
                    background='transparent',
                    value_font_size=24,
                    title_font_size=36,
                    margin=1,
                    plot_background='transparent',
                    foreground='#53E89B',
                    foreground_strong='#53A0E8',
                    foreground_subtle='#630C0D',
                    opacity='.6',
                    opacity_hover='.9',
                    transition='400ms ease-in',
                    colors=('#5cb85c', '#f0ad4e', '#d9534f'))

    config = Config()
    config.show_legend = True
    config.legend_at_bottom=True
    config.legend_at_bottom_columns=1
    config.legend_box_size=10
    config.human_readable = True
    config.fill = True
    config.style=custom_style
    config.print_labels=True
    config.print_values=True
    config.no_data_text='Need to add some food!'

    pie_chart = pygal.Pie(config)
    pie_chart.title = "Current Food Stats"
    pie_chart.add('Good', goodcount)
    pie_chart.add('Okay', okaycount)
    pie_chart.add('Bad', badcount)
    chart = pie_chart.render(is_unicode=True)
    return chart
Esempio n. 4
0
def genfoodchart(start, end):
    '''Generate food chart with Pygal'''
    now = datetime.datetime.now().strftime("%Y-%m-%d")
    goodcount = session.query(Food) \
        .filter_by(user_id=current_user.id) \
        .filter(Food.food_date.between(start, end)).join(Ranks) \
        .filter_by(rank=1).add_columns(Ranks.rank).count()
    okaycount = session.query(Food) \
        .filter_by(user_id=current_user.id) \
        .filter(Food.food_date.between(start, end)).join(Ranks) \
        .filter_by(rank=2).add_columns(Ranks.rank).count()
    badcount = session.query(Food) \
        .filter_by(user_id=current_user.id) \
        .filter(Food.food_date.between(start, end)).join(Ranks) \
        .filter_by(rank=3).add_columns(Ranks.rank).count()

    custom_style = Style(
                    background='transparent',
                    value_font_size=24,
                    title_font_size=36,
                    margin=1,
                    plot_background='transparent',
                    foreground='#53E89B',
                    foreground_strong='#53A0E8',
                    foreground_subtle='#630C0D',
                    opacity='.6',
                    opacity_hover='.9',
                    transition='400ms ease-in',
                    colors=('#5cb85c', '#f0ad4e', '#d9534f'))

    config = Config()
    config.show_legend = True
    config.legend_at_bottom=True
    config.legend_at_bottom_columns=1
    config.legend_box_size=10
    config.human_readable = True
    config.fill = True
    config.style=custom_style
    config.print_labels=True
    config.print_values=True
    config.no_data_text='Need to add some food!'

    pie_chart = pygal.Pie(config)
    pie_chart.title = "Current Food Stats"
    pie_chart.add('Good', goodcount)
    pie_chart.add('Okay', okaycount)
    pie_chart.add('Bad', badcount)
    chart = pie_chart.render(is_unicode=True)
    return chart
Esempio n. 5
0
def genweightchart():
    '''Generate weight chart with Pygal'''
    weighthistory = session.query(Weight) \
        .filter_by(user_id=current_user.id) \
        .order_by(Weight.id.desc()) \
        .all()

    maxweight = session.query(Weight) \
        .filter_by(user_id=current_user.id) \
        .order_by(Weight.id.desc()) \
        .first()

    if maxweight is None:
        maxrange = 100
    else:
        maxrange = (int(maxweight.weight) + 50)

    custom_style = Style(
                background='transparent',
                value_font_size=24,
                title_font_size=36,
                margin=1,
                plot_background='transparent',
                foreground='#53E89B',
                foreground_strong='#53A0E8',
                foreground_subtle='#630C0D',
                opacity='.6',
                opacity_hover='.9',
                transition='400ms ease-in',
                colors=('#5cb85c', '#f0ad4e', '#d9534f'))
    config = Config()
    config.show_legend = True
    config.legend_at_bottom=True
    config.y_labels = range(0, maxrange, 25)
    config.human_readable = True
    config.fill = True
    config.style=custom_style
    config.print_labels=True
    config.no_data_text='Add weight measurements!'

    wlist = []
    for entry in enumerate(weighthistory):
        wlist.append(entry[1].weight)

    line_chart = pygal.Line(config)
    line_chart.title = "Weight History"
    line_chart.add('Values', wlist)
    chart = line_chart.render(is_unicode=True)
    return chart
Esempio n. 6
0
def make_buildmd(allmetadata, fullreport, reportFile, metadataFolder):
    """
    Creates several plots from some metadata 
    and a report.md markdown file embedding the plots.
    """
    allmetadata = pd.DataFrame(allmetadata)
    import pygal
    from pygal.style import CleanStyle
    from pygal.style import Style
    mystyle = CleanStyle(font_family="sans-serif")
    # Pygal chart configuration
    from pygal import Config
    config = Config()
    config.legend_at_bottom = True
    config.legend_at_bottom_columns = 3
    config.print_values = True
    config.style = mystyle
    #config.width=500
    #config.height=300
    config.font_family = "Arial"
    # Donut chart for author genders
    genders = dict(Counter(allmetadata.loc[:, "au-gender"]))
    chart = pygal.Pie(config,
                      title="Number of novels per author gender",
                      inner_radius=.60,
                      font_family="sans-serif")
    chart.add("male", genders["M"])
    chart.add("female", genders["F"])
    chart.add("other", 0)
    chart.render_to_file(join(metadataFolder, "au-genders.svg"))
    # Bar chart for time periods
    timeslots = dict(Counter(allmetadata.loc[:, "time-slot"]))
    chart = pygal.Bar(config,
                      range=(0, 30),
                      title="Number of novels per 20-year period",
                      font_family="sans-serif",
                      legend_at_bottom_columns=4)
    chart.add("1840-1859", timeslots["T1"])
    chart.add("1860-1879", timeslots["T2"])
    chart.add("1880-1899", timeslots["T3"])
    chart.add("1900-1919", timeslots["T4"])
    chart.render_to_file(join(metadataFolder, "timeslots.svg"))
    # Save report.md with embedded charts
    reportmd = "## Corpus composition for ELTeC-fra\n\n<img src=\"/Metadata/au-genders.svg\">\n<img src=\"/Metadata/timeslots.svg\">"
    with open(reportFile, "w", encoding="utf8") as outfile:
        outfile.write(reportmd)
def drawcapitalcostcomponentsfigure(techlist):
    config = Config()
    config.show_legend = True
    config.human_readable = True
    config.dots_size = 3
    config.x_label_rotation = 270
    config.legend_at_bottom = True
    config.x_title = "capital cost of power based components [$/kW]"
    config.y_title = "capital cost of energy based components [$/kWh]"
    #config.show_dots = False
    config.fill = True
    #config.show_minor_x_labels = False
    config.stroke_style = {'width': 1}
    config.style = pygal.style.styles['default'](
        label_font_size=12,
        stroke_opacity=0,
        stroke_opacity_hover=0,
        transition='100000000000s ease-in')
    xy_chart = pygal.XY(config)
    xmin = 10000
    ymin = 10000
    xmax = 0.001
    ymax = 0.001
    for tech in techlist:
        power_minstring = "capital_cost_of_power_based_components_min"
        power_maxstring = "capital_cost_of_power_based_components_max"
        energy_minstring = "capital_cost_of_energy_based_components_min"
        energy_maxstring = "capital_cost_of_energy_based_components_max"
        minpowerlink = ''
        maxpowerlink = ''
        minenergylink = ''
        maxenergylink = ''
        minpowerlabel = ''
        maxpowerlabel = ''
        minenergylabel = ''
        maxenergylabel = ''
        if Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(name=power_minstring).
                                  first().source_id).first() is not None:
            minpowerlink = Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(
                    name=power_minstring).first().source_id).first().link
            minpowerlabel = 'min. cost of power based components: ' + Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(name=power_minstring).
                first().source_id).first().author + ', ' + str(
                    Source.query.filter_by(id=Parameter.query.filter_by(
                        technology_name=tech.name).filter_by(
                            name=power_minstring).first().source_id).first().
                    releaseyear)
        if Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(name=power_maxstring).
                                  first().source_id).first() is not None:
            maxpowerlink = Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(
                    name=power_maxstring).first().source_id).first().link
            maxpowerlabel = 'max. cost of power based components: ' + Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(name=power_maxstring).
                first().source_id).first().author + ', ' + str(
                    Source.query.filter_by(id=Parameter.query.filter_by(
                        technology_name=tech.name).filter_by(
                            name=power_maxstring).first().source_id).first().
                    releaseyear)
        if Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(name=energy_minstring).
                                  first().source_id).first() is not None:
            minenergylink = Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(
                        name=energy_minstring).first().source_id).first().link
            minenergylabel = 'min. cost of energy based components: ' + Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(name=energy_minstring)
                .first().source_id).first().author + ', ' + str(
                    Source.query.filter_by(id=Parameter.query.filter_by(
                        technology_name=tech.name).filter_by(
                            name=energy_minstring).first().source_id).first().
                    releaseyear)
        if Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(name=energy_maxstring).
                                  first().source_id).first() is not None:
            maxenergylink = Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(
                        name=energy_maxstring).first().source_id).first().link
            maxenergylabel = 'max. cost of energy based components: ' + Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(name=energy_maxstring)
                .first().source_id).first().author + ', ' + str(
                    Source.query.filter_by(id=Parameter.query.filter_by(
                        technology_name=tech.name).filter_by(
                            name=energy_maxstring).first().source_id).first().
                    releaseyear)
        xy_chart.add(f"{tech.name}", [{
            'value':
            (Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_minstring).first().value,
             Parameter.query.filter_by(technology_name=tech.name).filter_by(
                 name=energy_minstring).first().value),
            'label':
            minenergylabel,
            'xlink': {
                'href': minenergylink,
                'target': '_blank'
            }
        }, {
            'value':
            (Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_minstring).first().value,
             Parameter.query.filter_by(technology_name=tech.name).filter_by(
                 name=energy_maxstring).first().value),
            'label':
            minpowerlabel,
            'xlink': {
                'href': minpowerlink,
                'target': '_blank'
            }
        }, {
            'value':
            (Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_maxstring).first().value,
             Parameter.query.filter_by(technology_name=tech.name).filter_by(
                 name=energy_maxstring).first().value),
            'label':
            maxenergylabel,
            'xlink': {
                'href': maxenergylink,
                'target': '_blank'
            }
        }, {
            'value':
            (Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_maxstring).first().value,
             Parameter.query.filter_by(technology_name=tech.name).filter_by(
                 name=energy_minstring).first().value),
            'label':
            maxpowerlabel,
            'xlink': {
                'href': maxpowerlink,
                'target': '_blank'
            }
        }, {
            'value':
            (Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_minstring).first().value,
             Parameter.query.filter_by(technology_name=tech.name).filter_by(
                 name=energy_minstring).first().value),
            'label':
            minenergylabel,
            'xlink': {
                'href': minenergylink,
                'target': '_blank'
            }
        }])

        if Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_minstring).first().value is not None:
            xmin = min(
                xmin,
                Parameter.query.filter_by(technology_name=tech.name).filter_by(
                    name=power_minstring).first().value)
            xmax = max(
                xmax,
                Parameter.query.filter_by(technology_name=tech.name).filter_by(
                    name=power_maxstring).first().value)
        if Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=energy_minstring).first().value is not None:
            ymin = min(
                ymin,
                Parameter.query.filter_by(technology_name=tech.name).filter_by(
                    name=energy_minstring).first().value)
            ymax = max(
                ymax,
                Parameter.query.filter_by(technology_name=tech.name).filter_by(
                    name=energy_maxstring).first().value)

        xup = 10**int(math.floor(math.log10(xmax)))
        yup = 10**int(math.floor(math.log10(ymax)))
        while xup < xmax:
            xup = xup + 10**int(math.floor(math.log10(xmax)))
        while yup < ymax:
            yup = yup + 10**int(math.floor(math.log10(ymax)))

    xy_chart.xrange = (10**int(math.floor(math.log10(xmin))), xup)
    xy_chart.range = (10**int(math.floor(math.log10(ymin))), yup)
    xy_chart.render()
    return xy_chart.render_data_uri()
def drawdensityfigure(techlist, par):
    config = Config()
    config.show_legend = True
    config.human_readable = True
    config.dots_size = 3
    config.x_label_rotation = 270
    config.legend_at_bottom = True
    if par == "gravimetric":
        power_unit = "[W/kg]"
        energy_unit = "[Wh/kg]"
    else:
        power_unit = "[kW/m^3]"
        energy_unit = "[kWh/m^3]"
    config.x_title = par + " power density " + power_unit
    config.y_title = par + " energy density " + energy_unit
    #config.show_dots = False
    config.logarithmic = True
    config.fill = True
    #config.show_minor_x_labels = False
    config.stroke_style = {'width': 1}
    config.style = pygal.style.styles['default'](
        label_font_size=12,
        stroke_opacity=0,
        stroke_opacity_hover=0,
        transition='100000000000s ease-in')
    xy_chart = pygal.XY(config)
    xmin = 10000
    ymin = 10000
    xmax = 0.001
    ymax = 0.001
    for tech in techlist:
        power_minstring = par + "_power_density_min"
        power_maxstring = par + "_power_density_max"
        energy_minstring = par + "_energy_density_min"
        energy_maxstring = par + "_energy_density_max"
        minpowerlink = ''
        maxpowerlink = ''
        minenergylink = ''
        maxenergylink = ''
        minpowerlabel = ''
        maxpowerlabel = ''
        minenergylabel = ''
        maxenergylabel = ''
        if Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(name=power_minstring).
                                  first().source_id).first() is not None:
            minpowerlink = Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(
                    name=power_minstring).first().source_id).first().link
            minpowerlabel = 'min. power density: ' + Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(name=power_minstring).
                first().source_id).first().author + ', ' + str(
                    Source.query.filter_by(id=Parameter.query.filter_by(
                        technology_name=tech.name).filter_by(
                            name=power_minstring).first().source_id).first().
                    releaseyear)
        if Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(name=power_maxstring).
                                  first().source_id).first() is not None:
            maxpowerlink = Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(
                    name=power_maxstring).first().source_id).first().link
            maxpowerlabel = 'max. power density: ' + Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(name=power_maxstring).
                first().source_id).first().author + ', ' + str(
                    Source.query.filter_by(id=Parameter.query.filter_by(
                        technology_name=tech.name).filter_by(
                            name=power_maxstring).first().source_id).first().
                    releaseyear)
        if Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(name=energy_minstring).
                                  first().source_id).first() is not None:
            minenergylink = Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(
                        name=energy_minstring).first().source_id).first().link
            minenergylabel = 'min. energy density: ' + Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(name=energy_minstring)
                .first().source_id).first().author + ', ' + str(
                    Source.query.filter_by(id=Parameter.query.filter_by(
                        technology_name=tech.name).filter_by(
                            name=energy_minstring).first().source_id).first().
                    releaseyear)
        if Source.query.filter_by(id=Parameter.query.filter_by(
                technology_name=tech.name).filter_by(name=energy_maxstring).
                                  first().source_id).first() is not None:
            maxenergylink = Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(
                        name=energy_maxstring).first().source_id).first().link
            maxenergylabel = 'max. energy density: ' + Source.query.filter_by(
                id=Parameter.query.filter_by(
                    technology_name=tech.name).filter_by(name=energy_maxstring)
                .first().source_id).first().author + ', ' + str(
                    Source.query.filter_by(id=Parameter.query.filter_by(
                        technology_name=tech.name).filter_by(
                            name=energy_maxstring).first().source_id).first().
                    releaseyear)
        xy_chart.add(f"{tech.name}", [{
            'value':
            (Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_minstring).first().value,
             Parameter.query.filter_by(technology_name=tech.name).filter_by(
                 name=energy_minstring).first().value),
            'label':
            minenergylabel,
            'xlink': {
                'href': minenergylink,
                'target': '_blank'
            }
        }, {
            'value':
            (Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_minstring).first().value,
             Parameter.query.filter_by(technology_name=tech.name).filter_by(
                 name=energy_maxstring).first().value),
            'label':
            minpowerlabel,
            'xlink': {
                'href': minpowerlink,
                'target': '_blank'
            }
        }, {
            'value':
            (Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_maxstring).first().value,
             Parameter.query.filter_by(technology_name=tech.name).filter_by(
                 name=energy_maxstring).first().value),
            'label':
            maxenergylabel,
            'xlink': {
                'href': maxenergylink,
                'target': '_blank'
            }
        }, {
            'value':
            (Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_maxstring).first().value,
             Parameter.query.filter_by(technology_name=tech.name).filter_by(
                 name=energy_minstring).first().value),
            'label':
            maxpowerlabel,
            'xlink': {
                'href': maxpowerlink,
                'target': '_blank'
            }
        }, {
            'value':
            (Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_minstring).first().value,
             Parameter.query.filter_by(technology_name=tech.name).filter_by(
                 name=energy_minstring).first().value),
            'label':
            minenergylabel,
            'xlink': {
                'href': minenergylink,
                'target': '_blank'
            }
        }])

        if Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=power_minstring).first().value is not None:
            xmin = min(
                xmin,
                Parameter.query.filter_by(technology_name=tech.name).filter_by(
                    name=power_minstring).first().value)
            xmax = max(
                xmax,
                Parameter.query.filter_by(technology_name=tech.name).filter_by(
                    name=power_maxstring).first().value)
        if Parameter.query.filter_by(technology_name=tech.name).filter_by(
                name=energy_minstring).first().value is not None:
            ymin = min(
                ymin,
                Parameter.query.filter_by(technology_name=tech.name).filter_by(
                    name=energy_minstring).first().value)
            ymax = max(
                ymax,
                Parameter.query.filter_by(technology_name=tech.name).filter_by(
                    name=energy_maxstring).first().value)

    xy_chart.xrange = (10**int(math.floor(math.log10(xmin))),
                       10**(int(math.floor(math.log10(xmax))) + 1) + 1)
    xy_chart.range = (10**int(math.floor(math.log10(ymin))),
                      10**(int(math.floor(math.log10(ymax))) + 1) + 1)
    xy_chart.render()
    return xy_chart.render_data_uri()
Esempio n. 9
0
global diskUsage

global sender
global receivers

sender = 'Monito admin <*****@*****.**>'
receivers = ['*****@*****.**']

config = Config()
config.range=(.0001, 5)
config.legend_font_size=30
config.tooltip_font_size=30
config.legend_box_size=18
config.title_font_size=30
config.label_font_size=20
config.legend_at_bottom=True
config.major_label_font_size=20
config.no_data_text='Fetching data..'

config1 = Config()
config1.fill=True
config1.spacing=50
config1.range=(1, 100)
config1.legend_font_size=30
config1.tooltip_font_size=30
config1.legend_box_size=18
config1.title_font_size=30
config1.label_font_size=20
config1.legend_at_bottom=True
config1.major_label_font_size=20
config1.no_data_text='Fetching data..'
Esempio n. 10
0
def create_chartguardian(id_station, station):

    data_status = dict()
    data_time = dict()
    list_status = list()
    list_time = list()
    station_name = str()
    station_id = str()
    data_down = list()
    data_up = list()
    data_label = list()
    last_problem = str()
    status_alert = str()
    provider_alert = str()
    mediatype_alert = str()
    streamuri_alert = str()
    stationid_alert = str()

    ts = int(time.time())
    date_query = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d')

    with drt.connect(db=data_config[env_app]['RETHINK-DB']) as conn:
        cursor_up = drt.table(data_config[env_app]['RETHINK-TABLE']).filter((drt.row["date"] == date_query) & (drt.row["station_id"] == id_station)).run(conn)
        cursor_down = drt.table(data_config[env_app]['RETHINK-TABLE']).filter((drt.row["date"] == date_query) & (drt.row["station_id"] == id_station)).run(conn)

        for document_down in cursor_down:
            station_name = document_down["station_name"]
            station_id = document_down["station_id"]
            if len(document_down["status_array"]) < 31:
                print("Size array status DOWN")
                print(len(document_down["status_array"]))
                start_point = 0
            else:
                start_point = len(document_down["status_array"]) - 31
            stat_array = document_down["status_array"]
            provider_alert = document_down["provider"]
            mediatype_alert = stream_config[env_app][station]['media-type']
            streamuri_alert =  stream_config[env_app][station]['uri-stream']
            stationid_alert = id_station
            for index, item in enumerate(stat_array[start_point:]):
                status_len = len(document_down["status_array"])
                ts = int(item["time"])
                date_down = datetime.datetime.fromtimestamp(ts).strftime('%H:%M:%S')
                #[None, None, None, None, None, None, {'value': 0, 'label': '10:10:10'}
                if item["status"] == "down":
                    item_down = {
                        'value': 0,
                        'label': date_down
                    }
                    item_label = date_down
                    data_down.append(item_down)
                    data_label.append(item_label)
                    last_problem = date_down
                    status_alert = item["status"]
                else:
                    item_none = None
                    data_down.append(item_none)
                    item_label = None
                    data_label.append(item_label)
                ts = int(item["time"])
                date_day = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d')
                data_status.update({ index: item["status"] })
                data_time.update({ index: date_day })
                list_status.append(item["status"])
                list_time.append(date_day)

        for document_up in cursor_up:
            print("==== document_up ===")
            print(document_up)
            station_name = document_up["station_name"]
            station_id = document_up["station_id"]
            if len(document_up["status_array"]) < 31:
                print("Size array status UP")
                len(document_up["status_array"])
                start_point = 0
            else:
                start_point = len(document_up["status_array"]) - 31
            stat_array = document_up["status_array"]
            for index, item in enumerate(stat_array[start_point:]):
                status_len = len(document_up["status_array"])
                #{'value': 1, 'label': ''}
                if item["status"] == "up":
                    print("====== ITEM STATUS =====")
                    print(item)
                    status_val = 1
                    status_label = "Sin Problemas"
                    item_up = {
                        'value': 1,
                        'label': ''
                    }
                    data_up.append(item_up)
                else:
                    status_val = 0
                    status_label = "Problemas"
                    item_down = None
                    data_up.append(item_down)

        try:
            custom_style = Style(
            opacity='.6',
            opacity_hover='.9',
            transition='400ms ease-in',
            label_font_family='Liberation Mono',
            label_font_size=8,
            major_label_font_size=10,
            colors=('#e74c3c', '#2980b9', '#e67e22', '#E87653', '#E89B53'))


            configpg = Config()
            configpg.human_readable = True
            configpg.fill = False
            configpg.x_title='Ultimo Problema: ' + last_problem
            configpg.show_y_labels=False
            configpg.legend_at_bottom_columns=False
            configpg.legend_at_bottom=True
            configpg.width=850
            configpg.height=400
            configpg.print_labels=False
            configpg.margin_bottom=30
            configpg.x_label_rotation=60
            configpg.range=(0, 1)
            configpg.show_y_labels=True
            configpg.pretty_print=True

            extra_args = {
                'ACL': 'public-read', 
                'CacheControl': 'no-cache, no-store, must-revalidate'
                }

            line_chart = pygal.Line(style=custom_style, config=configpg)
            line_chart.title = station_name + ' - ' + date_query
            line_chart.x_labels = (data_label)
            line_chart.x_labels_major = (data_label)
            line_chart.add('Problemas', data_down , allow_interruptions=True, dots_size=5, stroke_style={'width': 4, 'linecap': 'round', 'linejoin': 'round'})
            line_chart.add('Activo',data_up , allow_interruptions=True, show_dots=True, dots_size=5, stroke_style={'width': 4, 'linecap': 'round', 'linejoin': 'round'})
            line_chart.add('Rango: 30 minutos', None)
            line_chart.render_to_png(station_id + '-' + date_query + '.png')
            #connection.close()
            #connection.close()
            upload_s3 = s3.upload_file(station_id + '-' + date_query + '.png', bucket_name, env_app+'/'+station_id + '-' + str(ts) + '.png', ExtraArgs=extra_args)
            os.remove(station_id + '-' + date_query + '.png')
            print(last_problem)
            alert_data = {
                's3_key': env_app+'/'+station_id + '-' + str(ts) + '.png',
                'time_alert': last_problem
            }
            
            if status_alert == "down":
                #alert_error(status_alert, station_name, provider_alert, ts, mediatype_alert, streamuri_alert, stationid_alert, date_query, alert_data)
                streaming_alert(status_alert, station_name, provider_alert, ts, mediatype_alert, streamuri_alert, stationid_alert, date_query, alert_data)
                return alert_data
            else:
                message = "No se tiene data que mostrar"
                print(message)
                return message
        except IOError as e:
            print("Se tiene un problema")
            print(e)
            message = e
            return message

#create_chartguardian("tv-capital", "capital-tv")