Example #1
0
def run(event, context):
    load_dependencies('syncer,requests,pyppeteer,websocket-client')
    from osbot_browser.browser.Browser_Lamdba_Helper import Browser_Lamdba_Helper

    channel = event.get('channel')

    try:
        wait = 3
        aws = Web_AWS().setup()
        slack_message(':one: Logging in to AWS', [], channel)
        aws.login()

        slack_message(
            f':two: Opening Billing page and waiting {wait} seconds for data to load',
            [], channel)
        aws.page_billing()
        aws.page.wait(wait)
        png_data = aws.screenshot(width=1200)

        if channel:
            slack_message(
                f':three: sending screenshot of size {len(png_data)} to Slack channel {channel}',
                [], channel)
            Browser_Lamdba_Helper().send_png_data_to_slack(
                None, channel, 'AWS Billing', png_data)
        return png_data
    except Exception as error:
        message = f'Error in aws_web lambda: {error}'
        slack_message(message, [], channel)
        return message
Example #2
0
    def graph_tasks(team_id=None, channel=None, params=None):
        load_dependencies('syncer,requests,pyppeteer,websocket-client')
        graph_name = params.pop(0)
        table_width = "1200px"
        headers = [
            'Key', 'Summary', 'Latest_Information', 'Status', 'Issue Type'
        ]  # without issue links
        columns_defs = [
            {
                "targets": [1],
                "width": "70px"
            },  # Key
            {
                "targets": [1],
                "width": "300px"
            },  # Summary
            {
                "targets": [2],
                "width": "300px"
            },  # Latest_Information
            #{"targets": [3], "width": "100px"},  # Status
            #{"targets": [5], "width": "100px"},  # Rating
        ]

        return DataTable_Js_Views._create_table_with_headers(
            team_id, channel, graph_name, headers, columns_defs, table_width)
Example #3
0
def setup(event):
    from osbot_aws.Dependencies import load_dependencies
    load_dependencies('syncer,requests,pyppeteer,websocket-client,jira')

    from osbot_browser.view_helpers.Sow_Views import Sow
    headless = event.get('headless') is None
    return Sow(headless=headless)
Example #4
0
    def _get_graph_data(params, layout=None, headless=True):
        load_dependencies('syncer,requests,pyppeteer,websocket-client')
        from osbot_browser.view_helpers.Go_Js import Go_Js

        graph_name = params.pop(0)

        go_js = Go_Js(headless=headless, layout=layout)
        graph_data = go_js.get_graph_data(graph_name)
        return go_js, graph_data
Example #5
0
    def _get_graph_data(params,layout=None, headless=True):
        load_dependencies('syncer,requests,pyppeteer,websocket-client');
        from osbot_browser.view_helpers.Am_Charts import Am_Charts

        am_charts  = Am_Charts(headless=headless,layout=layout)
        graph_name = Misc.array_pop(params,0)
        if graph_name:
            graph_data = am_charts.get_graph_data(graph_name)
            return am_charts, graph_data
        return am_charts,None
Example #6
0
def run(event, context):
    try:
        load_dependencies(
            'elastic,slack,requests'
        )  # load dependency (download and unzip if first run)
        from osbot_jira.api.graph.Lambda_Graph import Lambda_Graph  # import Lambda_Graph class
        return Lambda_Graph().handle_lambda_event(
            event)  # invoke lambda handler from Lambda_Graph class
    except Exception as error:
        return ":red_circle: error in `osbot_jira.lambdas.graph`: {0}".format(
            error)
Example #7
0
    def test_data(team_id=None, channel=None, params=None):

        load_dependencies('syncer,requests,pyppeteer,websocket-client')

        from osbot_browser.view_helpers.DataTable_Js import DataTable_Js
        headers = ['Header AAA', 'Header BBB']
        rows = [['value 1', 'value 2'], ['value 3', 'value 4'], ['value 5'],
                [], ['value 6', 'value 7'], [None], [None, 'value 8', 'AB'],
                ['value 9', 'value 10']]
        return DataTable_Js().create_table(headers,
                                           rows).send_screenshot_to_slack(
                                               team_id, channel)
Example #8
0
def run(event, context):
    try:
        from osbot_aws.Dependencies import load_dependencies
        load_dependencies('syncer,requests,pyppeteer,websocket-client')
        from osbot_browser.view_helpers.gw.Xml_Report import Xml_Report

        headless  = event.get('headless')
        file_name = event.get('file_name')
        json_data = event.get('json_data')

        png_data  = Xml_Report(headless=headless).gw_exec_summary(file_name, json_data)
        return {'png_data': png_data }
    except Exception as error:
        return {'error': f'{error}'}
Example #9
0
def run(event, context):
    load_dependencies('syncer,requests,pyppeteer,websocket-client')
    from osbot_browser.view_helpers.Google_Charts_Js import Google_Charts_Js
    google_charts = Google_Charts_Js()
    google_charts.load_page(True)
    chart_type = event.get('chart_type')
    options = event.get('options')
    width = event.get('width')
    height = event.get('height')
    data = event.get('data')
    clip = event.get('clip')
    png_data = google_charts.create_chart(chart_type, options, width, height,
                                          data, clip)
    return png_data
Example #10
0
def run(event, context=None):
    load_dependencies('syncer,requests,pyppeteer2,websocket-client')
    from osbot_browser.browser.API_Browser import API_Browser

    url = event.get('url')
    #return url
    # error in this line:  Read-only file system: '/home/sbx_user1051
    api_browser = API_Browser().sync__setup_browser()
    # we don't get here

    if url:
        api_browser.sync__open(url)

    return api_browser.sync__screenshot_base64()
Example #11
0
def run(event, context):
    try:
        load_dependencies('requests,syncer,pyppeteer,websocket-client')
        from osbot_jupyter.osbot.Jupyter_Commands import Jupyter_Commands
        params = Misc.get_value(event, 'params', [])
        if not params: params = ['']
        data = event.get('data')
        channel = Misc.get_value(data, 'channel')
        team_id = Misc.get_value(data, 'team_id')
        params.append({"data": data})
        return Slack_Commands_Helper(Jupyter_Commands).invoke(
            team_id, channel, params)
    except Exception as error:
        message = "[lambda_osbot] Error: {0}".format(error)
        #log_to_elk(message, level='error')
        return message
    def go_js(team_id=None, channel=None, params=None):
        load_dependencies('syncer,requests,pyppeteer,websocket-client')
        if len(params) < 2:
            text = ':red_circle: Hi, for the `go_js` command, you need to provide 2 parameters: '
            attachment_text = '*graph name* - the nodes and edges you want to view\n' \
                              '*view name* - the view to render'
            return text, [{'text': attachment_text}]

        from osbot_browser.view_helpers.Go_Js_Views import Go_Js_Views
        params[0], params[1] = params[1], params[0]

        (text, attachments
         ) = Slack_Commands_Helper(Go_Js_Views).show_duration(True).invoke(
             team_id, channel, params)

        if team_id is None:
            return text
Example #13
0
 def graph(team_id=None, channel=None, params=None):
     load_dependencies('syncer,requests,pyppeteer,websocket-client')
     graph_name = params.pop(0)
     headers = [
         'Issue Type', 'Summary', 'Description', 'Status', 'Rating', 'Key'
     ]  # without issue links
     table_width = "1500px"
     columns_defs = [
         {
             "targets": [1],
             "width": "60px"
         },  # Key
         {
             "targets": [2],
             "width": "600px"
         },  # Summary
     ]
     return DataTable_Js_Views._create_table_with_headers(
         team_id, channel, graph_name, headers, columns_defs, table_width)
Example #14
0
    def graph_all_fields(team_id=None, channel=None, params=None):
        load_dependencies('syncer,requests,pyppeteer,websocket-client')
        graph_data = DataTable_Js_Views._get_data(params.pop(0))

        if graph_data:
            nodes = graph_data.get('nodes')
            headers = sorted(list(set(list(nodes.values()).pop())))
            rows = []
            for index, node in enumerate(nodes.values()):
                row = [index + 1]
                for header in headers:
                    value = node.get(header)
                    if type(value).__name__ == 'dict':
                        value = json.dumps(value)
                    row.append(value)
                rows.append(row)
            headers.insert(0, '#')
            return DataTable_Js_Views._create_table(headers, rows, team_id,
                                                    channel)
Example #15
0
def run(event, context):
    load_dependencies('syncer,requests,pyppeteer,websocket-client')
    from osbot_aws.helpers.Lambda_Helpers import slack_message

    from osbot_browser.browser.sites.Web_Slack import Web_Slack
    from osbot_browser.browser.Browser_Lamdba_Helper import Browser_Lamdba_Helper

    target = event.get('target')
    channel = event.get('channel')
    team_id = event.get('team_id')
    width = event.get('width')
    height = event.get('height')
    scroll_by = event.get('scroll_by')
    delay = event.get('delay')

    try:
        if width is None: width = 1200
        if height is None: height = 1000

        web_slack = Web_Slack(team_id=team_id).setup()

        web_slack.login()
        web_slack.page.width(width, height)

        if target: web_slack.open(target)
        if scroll_by: web_slack.scroll_messages_by(scroll_by)
        if delay: web_slack.wait(delay)

        web_slack.fix_ui_for_screenshot()
        png_data = web_slack.screenshot()
        slack_message(
            ':information_source: got screenshot with size `{0}` | :point_right: sending screeenshot to slack channel `{1}`'
            .format(len(png_data), channel), [],
            channel=channel,
            team_id=team_id)
        browser_helper = Browser_Lamdba_Helper()
        return browser_helper.send_png_data_to_slack(team_id, channel, target,
                                                     png_data)
    except Exception as error:
        return slack_message(
            ':red_circle: Error in `slack_web` lambda: {0}'.format(error), [],
            channel=channel,
            team_id=team_id)
Example #16
0
    def default(team_id=None,
                channel=None,
                params=None,
                no_render=False,
                take_screenshot=True,
                headless=True):

        load_dependencies('syncer,requests,pyppeteer,websocket-client')
        from osbot_browser.view_helpers.Vis_Js import Vis_Js

        graph_name = params.pop(0)
        vis_js = Vis_Js(headless=headless)  # will start browser
        graph_data = vis_js.get_graph_data(graph_name)

        nodes = []
        edges = []
        vis_js.load_page(False)
        if graph_data:
            graph_name = graph_data.get('graph_name')
            for key, issue in graph_data.get('nodes').items():
                nodes.append({'id': key, 'label': key})

            for edge in graph_data.get('edges'):
                from_node = edge[0]
                link_type = edge[1]
                to_node = edge[2]
                edges.append({
                    'from': from_node,
                    'to': to_node,
                    'label': link_type
                })

            if no_render is False:
                vis_js.create_graph(nodes, edges, {}, graph_name)

        if no_render is True:
            return (graph_name, nodes, edges, graph_data, vis_js)

        if take_screenshot:
            return vis_js.send_screenshot_to_slack(team_id, channel)
        else:
            return vis_js
Example #17
0
    def issue(team_id=None, channel=None, params=None):
        load_dependencies('syncer,requests,pyppeteer,websocket-client')

        graph_data = DataTable_Js_Views._get_data(params.pop(0))
        if graph_data:
            nodes = graph_data.get('nodes')
            node = list(nodes.values()).pop()
            fields = sorted(list(set(node)))
            rows = []
            for field in fields:
                row = ['<b>{0}</b>'.format(field)]
                value = node.get(field)
                if value:
                    if type(value).__name__ == 'dict':
                        value = json.dumps(value)
                    row.append(value)
                    rows.append(row)

            return DataTable_Js_Views._create_table(['name', 'value'], rows,
                                                    team_id, channel)
    def graph(team_id=None, channel=None, params=None):
        load_dependencies(
            'syncer,requests,pyppeteer,websocket-client'
        )  # todo: remove this from here (should already not be needed)
        if len(params) < 2:
            text = ':red_circle: Hi, for the `graph` command, you need to provide 2 parameters: '
            attachment_text = '*graph name* - the nodes and edges you want to view\n' \
                              '*view name* - the view to render'
            return text, [{'text': attachment_text}]

        from osbot_browser.view_helpers.Vis_Js_Views import Vis_Js_Views

        params[0], params[1] = params[1], params[
            0]  # swap items (since it is more user friendly to add the graph name first)

        (text, attachments
         ) = Slack_Commands_Helper(Vis_Js_Views).show_duration(False).invoke(
             team_id, channel, params)

        if team_id is None:
            return text
Example #19
0
def run(event, context=None):
    try:
        load_dependencies('requests,syncer,pyppeteer,websocket-client')

        channel = event.get('channel')
        team_id = event.get('team_id')
        params = event.get('params')

        if params and len(params) == 1:
            params = [
            ]  # todo: fix this case (when the last param is the events data), needs to be handled by Jupyter_Web_Commands

        from osbot_jupyter.osbot.Jupyter_Web_Commands import Jupyter_Web_Commands

        result = Slack_Commands_Helper(Jupyter_Web_Commands).invoke(
            team_id, channel, params)
        if channel is None:
            return result

    except Exception as error:
        message = "[jupyter_web] Error: {0}".format(error)
        return message
Example #20
0
    def chord(team_id=None, channel=None, params=None, headless=True):
        load_dependencies('syncer,requests,pyppeteer,websocket-client');
        (am_charts, graph_data) = Am_Charts_Views._get_graph_data(params, headless=headless)
        Dev.pprint(graph_data)
        am_charts.load_page(True)
        js_code= """
var chart = am4core.create("chartdiv", am4charts.ChordDiagram);
chart.hiddenState.properties.opacity = 0;

chart.dataFields.fromName = "from";
chart.dataFields.toName = "to";
chart.dataFields.value = "value";

// make nodes draggable
var nodeTemplate = chart.nodes.template;
nodeTemplate.readerTitle = "Click to show/hide or drag to rearrange";
nodeTemplate.showSystemTooltip = true;
nodeTemplate.cursorOverStyle = am4core.MouseCursorStyle.pointer
"""
        am_charts.exec_js(js_code)

        data = [{ "from": "A", "to": "D", "value": 1 },
                { "from": "B", "to": "D", "value": 1 },
                { "from": "B", "to": "E", "value": 1 },
                { "from": "B", "to": "C", "value": 1 },
                { "from": "C", "to": "E", "value": 1 },
                { "from": "E", "to": "D", "value": 1 },
                { "from": "C", "to": "A", "value": 1 },
                { "from": "G", "to": "A", "value": 1 },
                { "from": "D", "to": "B", "value": 1 }];


        data = []
        for edge in graph_data.get('edges'):
            data.append({ "from": edge[0], "to": edge[2], "value": 1 })

        am_charts.assign_variable_js('window.chart.data',data)

        return am_charts.send_screenshot_to_slack(team_id, channel)
Example #21
0
def run(event, context):
    load_dependencies('requests,elastic')
    from osbot_aws.helpers.Lambda_Helpers import log_to_elk
    from osbot_jira.api.jira_server.API_Jira_To_Elastic import API_Jira_To_Elastic
    try:
        data       = json.loads(event.get('body'))
        event_type = data.get('webhookEvent')
        user_id    = event.get('queryStringParameters').get('user_id')
        message    = API_Jira_To_Elastic().handle_event(event_type, user_id, data)
        status_code = 200
    except Exception as error:
        message = f'error in on_jira_change: {error}'
        log_to_elk(message, f"{event.get('body')}", index='elastic_logs', level='error')
        status_code = 200                                                   # don't return error 500 or Jira will keep sending it


    return {
                "isBase64Encoded": False      ,
                "statusCode"     : status_code,
                "headers"        : {}         ,
                "body"           : f'{message}'
           }
    def render(team_id, channel, params):
        load_dependencies('syncer,requests,pyppeteer,websocket-client')
        if params:
            target = params.pop(0)
            delay = Misc.to_int(Misc.array_pop(params, 0))
            if len(params) == 4:
                clip = {
                    'x': int(params[0]),
                    'y': int(params[1]),
                    'width': int(params[2]),
                    'height': int(params[3])
                }
            else:
                clip = None
        else:
            return None

        slack_message(":point_right: rendering file `{0}`".format(target), [],
                      channel, team_id)
        return Browser_Lamdba_Helper().setup().render_file(team_id,
                                                           channel,
                                                           target,
                                                           clip=clip,
                                                           delay=delay)
Example #23
0
 def _get_gcalendar():
     load_dependencies('syncer', 'requests', 'gmail')
     return GCalendar(gsuite_secret_id=gsuite_secret_id)
Example #24
0
    def timeline(team_id=None, channel=None, params=None, headless=True):
        load_dependencies('syncer,requests,pyppeteer,websocket-client');
        from osbot_browser.view_helpers.Am_Charts import Am_Charts

        am_charts = Am_Charts(headless=headless)
        Misc.array_pop(params,0)        # remove the graph name (which is not used)
        width  = Misc.to_int(Misc.array_pop(params, 0))
        height = Misc.to_int(Misc.array_pop(params, 0))
        clip = {'x': 0, 'y': 50, 'width': width, 'height': height-100}
        #clip  = None

        am_charts.browser().sync__browser_width(width, height)
        try:
            data = json.loads(" ".join(params))
            am_charts.load_page(True)

            js_code = """
// Create chart instance
var chart = am4core.create("chartdiv", am4charts.XYChart);

// Create axes
var xAxis = chart.xAxes.push(new am4charts.CategoryAxis());
xAxis.dataFields.category = "x";
xAxis.renderer.grid.template.disabled = true;
xAxis.renderer.labels.template.disabled = true;
xAxis.tooltip.disabled = true;

var yAxis = chart.yAxes.push(new am4charts.ValueAxis());
yAxis.min = 0;
yAxis.max = 1.99;
yAxis.renderer.grid.template.disabled = true;
yAxis.renderer.labels.template.disabled = true;
yAxis.renderer.baseGrid.disabled = true;
yAxis.tooltip.disabled = true;


// Create series
var series = chart.series.push(new am4charts.LineSeries());
series.dataFields.categoryX = "x";
series.dataFields.valueY = "y";
series.strokeWidth = 4;
series.sequencedInterpolation = true;

var bullet = series.bullets.push(new am4charts.CircleBullet());
bullet.setStateOnChildren = true;
bullet.states.create("hover");
bullet.circle.radius = 10;
bullet.circle.states.create("hover").properties.radius = 15;

var labelBullet = series.bullets.push(new am4charts.LabelBullet());
labelBullet.setStateOnChildren = true;
labelBullet.states.create("hover").properties.scale = 1.2;
labelBullet.label.text = "{text}";
labelBullet.label.maxWidth = 150;
labelBullet.label.wrap = true;
labelBullet.label.truncate = false;
labelBullet.label.textAlign = "middle";
labelBullet.label.paddingTop = 20;
labelBullet.label.paddingBottom = 20;
labelBullet.label.fill = am4core.color("#999");
labelBullet.label.states.create("hover").properties.fill = am4core.color("#000");

labelBullet.label.propertyFields.verticalCenter = "center";


chart.cursor = new am4charts.XYCursor();
chart.cursor.lineX.disabled = true;
chart.cursor.lineY.disabled = true;
        """
        # data = [{"x": "1","y": 1,"text": "[bold]2018 Q1[/]\nAAAA There seems to be some furry animal living in the neighborhood.", "center": "bottom"}, {
        #           "x": "2",
        #           "y": 1,
        #           "text": "[bold]2018 Q2[/]\nWe're now mostly certain it's a fox.",
        #           "center": "top"
        #         }, {
        #           "x": "3",
        #           "y": 1,
        #           "text": "[bold]2018 Q3[/]\nOur dog does not seem to mind the newcomer at all.",
        #           "center": "bottom"
        #         }, {
        #           "x": "4",
        #           "y": 1,
        #           "text": "[bold]2018 Q4[/]\nThe quick brown fox jumps over the lazy dog.",
        #           "center": "top"
        #         }];
            am_charts.exec_js(js_code)
            am_charts.assign_variable_js('window.chart.data', data)
            return am_charts.send_screenshot_to_slack(team_id, channel,clip=clip)
            #return "ok {0}".format(data)
        except Exception as error:
            return "error: {0}".format(error)
Example #25
0
 def load_browser_dependencies(self):
     load_dependencies('syncer,requests,pyppeteer2,websocket-client')