Quantcast
Channel: 🎛️ Dash - Plotly Community Forum
Viewing all articles
Browse latest Browse all 6271

Trying to run a function after a period of time on a multipage app with rotating layouts

$
0
0

I have a dash app that rotates through each layout every 5 seconds. I want the data to update once a day at the minimum. I wrote a function UPDATE_DATA() that does that successfully, however no matter what I’ve done I can’t get the data to update without reloading the app.

from dash.dependencies import Input, Output
import csv
import dash
import dash_bootstrap_components as dbc
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
from sqlConn import DataUtility
import plotly.express as px

# noinspection DuplicatedCode
sql = DataUtility()
conn = 'DSN=keyvanTest;Database=Digitalization;TrustedConnection=yes;MARS_Connection=yes;UID=UserID;PWD=password'
DashboardValues = '''hold lengthy select statement '''


MTTR_MTBF = ''' holds lengthy select statement'''

update_interval = 20
# Change contents every (INTERVAL) seconds
INTERVAL = 5


def SQL_to_CSV(file_name: str, sql_str: str):
    df = pd.DataFrame(sql.min_query(sql_str))
    file_string = "assets/{}".format(file_name)
    df.to_csv(file_string, index=False)
    with open(file_string, 'r+') as newFile:
        rd = csv.reader(newFile, delimiter=',', quotechar='"')
        new_array = []
        for row in rd:
            new_array.append(row)
        return new_array


def UPDATE_DATA():
    SQL_to_CSV('test.csv', DashboardValues)
    dash_data = pd.read_csv('assets/test.csv')
    global so_data
    so_data = dash_data['DashboardValues']
    global mt_data
    mt_data = SQL_to_CSV('MTTR_MTBF.csv', MTTR_MTBF)


UPDATE_DATA()

Total_Time_Scheduled = so_data[0]
Total_Time_Unscheduled = so_data[1]
Total_Time_ScheduledP = so_data[2]
Total_Time_UnscheduledP = so_data[3]
Leading_Scheduled = so_data[4]
Leading_Unscheduled = so_data[5]
MTTR = mt_data[1]
MTBF = mt_data[2]
MTTR_Definition = "This metric is the average time needed to restore an asset to its full operational capabilities " \
                  "after a loss of function "
MTBF_Definition = "This metric is the average length of operating time between failures for an asset or " \
                  "component"

colors = {'background': '#4f81bd', 'text': 'white'}
borders = {'border': '2px #073763 solid', 'border-radius': '15px'}

app = dash.Dash(__name__)
# noinspection DuplicatedCode
# app layouts to flip through
PAGES = [
    dcc.Tab(label='Tab one', children=[
        dbc.Row(html.H1('Hot Mill Maintenance KPI Dashboard (Total Score)'), style={
            'height': 100,
            'textAlign': 'center',
            'color': colors['text'],
            'backgroundColor': colors['background'],
            'fontSize': 24,
            'border': '2px #073763 solid',
            'border-radius': '4px'
        }, ),
        dbc.Row(children=[
            html.Span("Leading Indicators",
                      style={'textAlign': 'left',
                             'color': colors['text'],
                             'background': colors['background'],
                             'fontSize': 60,
                             'display': 'inline-block',
                             'margin-left': 150,
                             'margin-top': 10,
                             'border': '4px #073763 solid',
                             'border-radius': '4px'
                             }),
            html.Span("Lagging Indicators",
                      style={'textAlign': 'right',
                             'color': colors['text'],
                             'background': colors['background'],
                             'fontSize': 60,
                             'display': 'inline-block',
                             'margin-left': 670,
                             'margin-top': 10,
                             'border': '4px #073763 solid',
                             'border-radius': '4px'
                             }),

        ]),
        dbc.Row(children=[

            html.Span("% Scheduled", style={'textAlign': 'center',
                                            'color': colors['text'],
                                            'background': colors['background'],
                                            'fontSize': 50,
                                            'display': 'inline-block',
                                            'margin-left': 10,
                                            'margin-top': 10,
                                            'border': '4px #073763 solid',
                                            'border-radius': '4px',
                                            'width': 350
                                            }, ),
            html.Span("% Unscheduled", style={'textAlign': 'center',
                                              'color': colors['text'],
                                              'background': colors['background'],
                                              'fontSize': 50,
                                              'display': 'inline-block',
                                              'margin-left': 10,
                                              'margin-top': 10,
                                              'border': '4px #073763 solid',
                                              'border-radius': '4px',
                                              'width': 350
                                              }, ),
            html.Span("% Scheduled", style={'textAlign': 'center',
                                            'color': colors['text'],
                                            'background': colors['background'],
                                            'fontSize': 50,
                                            'display': 'inline-block',
                                            'margin-left': 400,
                                            'border': '4px #073763 solid',
                                            'border-radius': '4px',
                                            'width': 350
                                            }, ),
            html.Span("% Unscheduled", style={'textAlign': 'center',
                                              'color': colors['text'],
                                              'background': colors['background'],
                                              'fontSize': 50,
                                              'display': 'inline-block',
                                              'margin-left': 10,
                                              'border': '4px #073763 solid',
                                              'border-radius': '4px',
                                              'width': 350
                                              }, ),
        ]),
        dbc.Row(children=[
            html.Span(Leading_Scheduled, style={'textAlign': 'center',
                                                'color': colors['text'],
                                                'background': colors['background'],
                                                'fontSize': 50,
                                                'display': 'inline-block',
                                                'margin-left': 10,
                                                'margin-top': 10,
                                                'border': '4px #073763 solid',
                                                'border-radius': '4px',
                                                'width': 350
                                                }),
            html.Span(Leading_Unscheduled, style={'textAlign': 'center',
                                                  'color': colors['text'],
                                                  'background': colors['background'],
                                                  'fontSize': 50,
                                                  'display': 'inline-block',
                                                  'margin-left': 10,
                                                  'border': '4px #073763 solid',
                                                  'border-radius': '4px',
                                                  'width': 350
                                                  }, ),
            html.Span(MTTR, style={'textAlign': 'right',
                                   'color': colors['text'],
                                   'background': colors['background'],
                                   'fontSize': 50,
                                   'display': 'inline-block',
                                   'margin-left': 550,
                                   'border': '4px #073763 solid',
                                   'border-radius': '4px'
                                   }, ),
            html.Span(MTBF, style={'textAlign': 'right',
                                   'color': colors['text'],
                                   'background': colors['background'],
                                   'fontSize': 50,
                                   'display': 'inline-block',
                                   'margin-left': 250,
                                   'margin-top': 10,
                                   'border': '4px #073763 solid',
                                   'border-radius': '4px'
                                   }, )
        ]),
        html.Div(html.Img(src=app.get_asset_url("NASLogo.jpg"),
                          style={'height': '25%',
                                 'width': '25%',
                                 }),
                 style={
                     'textAlign': 'center'
                 }
                 ),
    ]),
    dcc.Tab(label='Tab two', children=[
        html.Div(children=[
            dbc.Row(html.H1('May 2021: Scheduled vs Unscheduled Maintenance'),
                    style={
                        'height': 100,
                        'textAlign': 'center',
                        'color': colors['text'],
                        'backgroundColor': colors['background'],
                        'fontSize': 24,
                        'border': '2px #073763 solid',
                        'border-radius': '4px'
                    }, ),
            dbc.Row(children=[
                dbc.Col(html.Span("Total Time Hours"),
                        style={'textAlign': 'left',
                               'color': colors['text'],
                               'background': colors['background'],
                               'fontSize': 60,
                               'display': 'inline-block',
                               'margin-left': 200,
                               'margin-top': 10,
                               'border': '4px #073763 solid',
                               'border-radius': '4px'
                               }),
                dbc.Col(html.Span("Total Time %"),
                        style={'textAlign': 'right',
                               'color': colors['text'],
                               'background': colors['background'],
                               'fontSize': 60,
                               'display': 'inline-block',
                               'margin-left': 700,
                               'margin-top': 10,
                               'border': '4px #073763 solid',
                               'border-radius': '4px'
                               }),
            ], ),
            dbc.Row(children=[

                html.Span("Scheduled", style={'textAlign': 'center',
                                              'color': colors['text'],
                                              'background': colors['background'],
                                              'fontSize': 50,
                                              'display': 'inline-block',
                                              'margin-left': 10,
                                              'margin-top': 10,
                                              'border': '4px #073763 solid',
                                              'border-radius': '4px',
                                              'width': 350
                                              }),
                html.Span("Unscheduled", style={'textAlign': 'center',
                                                'color': colors['text'],
                                                'background': colors['background'],
                                                'fontSize': 50,
                                                'display': 'inline-block',
                                                'margin-left': 10,
                                                'margin-top': 10,
                                                'border': '4px #073763 solid',
                                                'border-radius': '4px',
                                                'width': 350
                                                }, ),
                html.Span("% Scheduled", style={'textAlign': 'center',
                                                'color': colors['text'],
                                                'background': colors['background'],
                                                'fontSize': 50,
                                                'display': 'inline-block',
                                                'margin-left': 400,
                                                'border': '4px #073763 solid',
                                                'border-radius': '4px',
                                                'width': 350
                                                }, ),
                html.Span("% Unscheduled", style={'textAlign': 'center',
                                                  'color': colors['text'],
                                                  'background': colors['background'],
                                                  'fontSize': 50,
                                                  'display': 'inline-block',
                                                  'margin-left': 10,
                                                  'border': '4px #073763 solid',
                                                  'border-radius': '4px',
                                                  'width': 350
                                                  }, ),
            ]),
            dbc.Row(id='row4', children=[
                html.Span(Total_Time_Scheduled, style={'textAlign': 'center',
                                                       'color': colors['text'],
                                                       'background': colors['background'],
                                                       'fontSize': 50,
                                                       'display': 'inline-block',
                                                       'margin-left': 10,
                                                       'margin-top': 10,
                                                       'border': '4px #073763 solid',
                                                       'border-radius': '4px',
                                                       'width': 350
                                                       }),
                html.Span(Total_Time_Unscheduled, style={'textAlign': 'center',
                                                         'color': colors['text'],
                                                         'background': colors['background'],
                                                         'fontSize': 50,
                                                         'display': 'inline-block',
                                                         'margin-left': 10,
                                                         'border': '4px #073763 solid',
                                                         'border-radius': '4px',
                                                         'width': 350
                                                         }, ),
                html.Span(Total_Time_ScheduledP, style={'textAlign': 'right',
                                                        'color': colors['text'],
                                                        'background': colors['background'],
                                                        'fontSize': 50,
                                                        'display': 'inline-block',
                                                        'margin-left': 550,
                                                        'border': '4px #073763 solid',
                                                        'border-radius': '4px'
                                                        }, ),
                html.Span(Total_Time_UnscheduledP, style={'textAlign': 'right',
                                                          'color': colors['text'],
                                                          'background': colors['background'],
                                                          'fontSize': 50,
                                                          'display': 'inline-block',
                                                          'margin-left': 225,
                                                          'margin-top': 10,
                                                          'border': '4px #073763 solid',
                                                          'border-radius': '4px'
                                                          }, )
            ]),
            html.Div(html.Img(src=app.get_asset_url("NASLogo.jpg"),
                              style={'height': '25%',
                                     'width': '25%',
                                     }),
                     style={
                         'textAlign': 'center'
                     }
                     ),
        ])
    ]),
    dcc.Tab(label='Tab three', children=[
        html.Div(children=

                 [html.H1('Defining MTTR and MTBF',
                          style={
                              'height': 100,
                              'textAlign': 'center',
                              'color': colors['text'],
                              'backgroundColor': colors['background'],
                              'fontSize': 65,
                              'border': borders['border'],
                              'border-radius': borders['border-radius']}),
                  html.Div("MTTR-Mean Time to Repair:",
                           style={
                               'textAlign': 'center',
                               'color': colors['text'],
                               'backgroundColor': colors['background'],
                               'fontSize': 60,
                               'border': borders['border'],
                               'border-radius': borders['border-radius'],
                               'width': 800,
                               'margin-bottom': 3}),
                  dcc.Textarea(value=MTTR_Definition,
                               style={
                                   'fontSize': 50,
                                   'color': colors['text'],
                                   'backgroundColor': colors['background'],
                                   'border': borders['border'],
                                   'border-radius': borders['border-radius'],
                                   'width': '100%', 'height': 150
                               }),
                  html.Div("MTBF- Mean Time Between Failure:",
                           style={
                               'margin-top': 50,
                               'textAlign': 'center',
                               'color': colors['text'],
                               'backgroundColor': colors['background'],
                               'fontSize': 60,
                               'border': borders['border'],
                               'border-radius': borders['border-radius'],
                               'width': 1000,
                               'margin-bottom': 3
                           }),
                  dcc.Textarea(
                      value=MTBF_Definition,
                      style={
                          'fontSize': 50,
                          'color': colors['text'],
                          'backgroundColor': colors['background'],
                          'border': borders['border'],
                          'border-radius': borders['border-radius'],
                          'width': '100%', 'height': 150
                      }),
                  ],

                 )
    ]),
    dcc.Tab(label='Tab Four', children=[
        html.Div(children=[
            dbc.Row(dbc.Col(html.H1('Mean Time to Repair(MTTR): Mechanical Only May 2021')),
                    style={
                        'height': 100,
                        'textAlign': 'center',
                        'color': colors['text'],
                        'backgroundColor': colors['background'],
                        'fontSize': 24,
                        'border': '2px #073763 solid',
                        'border-radius': '4px'
                    }, ),
            dbc.Row(dbc.Col(dcc.Graph(
                id='Graph',
                figure=px.bar(figure_df, y='MeanTime', x='OpCodeGroupCode',
                              title='testing',
                              )
            )
            ),
            )
        ])
    ]),
    dcc.Tab(label='Tab Five', children=[
        dcc.Graph(
            figure={
                'data': [
                    {'x': [1, 5, 3], 'y': [2, 4, 3],
                     'type': 'line', 'name': 'SF'},
                    {'x': [1, 2, 3], 'y': [5, 4, 3],
                     'type': 'line', 'name': u'Montréal'},
                ]
            }
        )
    ]),
]
# app.config.suppress_callback_exceptions = True
app.layout = html.Div(children=[
    html.Div(id='app-container'),
    dcc.Interval(
        id='interval1',
        interval=INTERVAL * 1000,  # in milliseconds
        n_intervals=0
    ),
], )


@app.callback(Output('app-container', 'children'),
              [Input('interval1', 'n_intervals')])
def CHANGE_PAGE(n_intervals):
    return PAGES[n_intervals % len(PAGES)]


if __name__ == '__main__':
    app.run_server(debug=True)

2 posts - 2 participants

Read full topic


Viewing all articles
Browse latest Browse all 6271

Latest Images

Trending Articles



Latest Images