Exemplo n.º 1
0
def run(event, context):
    load_dependency('pydot')
    channel = event.get('channel')
    data    = event.get('dot')

    #slack_message("in dot to svg: {0}".format(event), [], channel)
    log_to_elk("in dot to svg: {0}".format(event))

    import dot_parser

    try:
        (fd, tmp_file) = tempfile.mkstemp('dot)')
        dot_static     = '/tmp/lambdas-dependencies/pydot/dot_static'
        Process.run("chmod", ['+x', dot_static])
        data           = data.replace('&lt;', '<').replace('&gt;','>')  # this solved a really nasty bug caused by the fact that Slack will html encode the < and >

        # graph          = pydot.graph_from_dot_data(data).pop()
        # <from pydot>  use code below (instead of above) to get a better error message from dot parser
        graphparser = dot_parser.graph_definition()
        graphparser.parseWithTabs()
        tokens      = graphparser.parseString(data)
        graph       = list(tokens).pop()
        # </from pydot>
        graph.write_svg(tmp_file, prog=dot_static)
        svg_raw        = Files.contents(tmp_file)
        return base64.b64encode(svg_raw.encode()).decode()
    except Exception as error:
        slack_message("[dot_to_svg] Error: {0} ".format(error), [], channel)
        return None
Exemplo n.º 2
0
    def risks_test_data(team_id=None, channel=None, params=None):
        load_dependency('syncer') ;
        load_dependency('requests')

        from osbot_browser.view_helpers.Risk_Dashboard import Risk_Dashboard

        return Risk_Dashboard().create_dashboard_with_test_data().send_screenshot_to_slack(team_id, channel)
Exemplo n.º 3
0
    def sync__setup_browser(
        self
    ):  # weirdly this works but the version below (using @sync) doesn't (we get an 'Read-only file system' error)
        import asyncio
        if os.getenv(
                'AWS_REGION'
        ) is None:  # we not in AWS so run the normal browser connect using pyppeteer normal method
            asyncio.get_event_loop().run_until_complete(self.browser_connect())
            return self

        load_dependency('pyppeteer')
        path_headless_shell = '/tmp/lambdas-dependencies/pyppeteer/headless_shell'  # path to headless_shell AWS Linux executable
        os.environ[
            'PYPPETEER_HOME'] = '/tmp'  # tell pyppeteer to use this read-write path in Lambda aws

        async def set_up_browser():
            from pyppeteer import launch  # import pyppeteer dependency
            Process.run("chmod",
                        ['+x', path_headless_shell
                         ])  # set the privs of path_headless_shell to execute
            self._browser = await launch(
                executablePath=
                path_headless_shell,  # lauch chrome (i.e. headless_shell)
                args=[
                    '--no-sandbox',
                    '--single-process',
                    #'--disable-dev-shm-usage'
                ])  # two key settings or the requests will not work

        asyncio.get_event_loop().run_until_complete(set_up_browser())
        return self
Exemplo n.º 4
0
def run(event, context):
    load_dependency('plantuml')
    dot_static = '/tmp/lambdas-dependencies/plantuml/dot_static'
    plantuml_jar = '/tmp/lambdas-dependencies/plantuml/plantuml.jar'

    Process.run("chmod", ['+x', dot_static])
    Process.run("chmod", ['+x', plantuml_jar])

    os.environ['PLANTUML_LIMIT_SIZE'] = str(
        4096 * 4)  # set max with to 4 times the default (16,384)
    os.environ['GRAPHVIZ_DOT'] = dot_static
    (fd, puml_file) = tempfile.mkstemp('.puml')
    png_file = puml_file.replace(".puml", ".png")
    code = event.get('puml')
    Files.write(puml_file, code)

    subprocess.run([
        'java', '-jar', plantuml_jar, '-Xmx2512m', '-tpng', '-o', '/tmp',
        puml_file
    ],
                   stdout=subprocess.PIPE,
                   stderr=subprocess.PIPE)

    if os.path.exists(png_file):
        with open(png_file, "rb") as image_file:
            png = base64.b64encode(image_file.read()).decode()
    else:
        png = None

    return {"png_base64": png}
    def elk(team_id=None, channel=None, params=None):
        load_dependency('syncer')
        from osbot_browser.browser.sites.Site_ELK import ELK_Commands
        from osbot_browser.browser.sites.Site_ELK import Site_ELK

        if len(params) == 0:
            Slack_Commands_Helper(ELK_Commands).invoke(team_id, channel,
                                                       params)
            return None

        browser_helper = Browser_Lamdba_Helper().setup()
        elk = Site_ELK(browser_helper.api_browser, team_id, channel)

        elk.sync__connect_and_login()

        params.append(browser_helper)
        params.append(elk)

        result = Slack_Commands_Helper(ELK_Commands).invoke(
            team_id, channel, params)

        if team_id:
            return None
        else:
            return result
Exemplo n.º 6
0
def run(event, context):
    load_dependency('syncer')
    from osbot_browser.browser.sites.Web_Jira import Web_Jira

    issue_id = event.get('issue_id')
    channel = event.get('channel')
    team_id = event.get('team_id')
    width = event.get('width')
    height = event.get('height')

    web_jira = Web_Jira().setup()

    web_jira.login()  #web_jira.fix_set_list_view()
    web_jira.issue(issue_id)
    web_jira.fix_issue_remove_ui_elements()
    if width is None:
        width = 1200
    if height is None:
        height = 300
    png_data = web_jira.screenshot(width, height)

    if channel:
        from osbot_browser.browser.Browser_Lamdba_Helper import Browser_Lamdba_Helper
        title = "Issue: {0}".format(issue_id)
        Browser_Lamdba_Helper().send_png_data_to_slack(team_id, channel, title,
                                                       png_data)
        return "send png to slack"

    return png_data
Exemplo n.º 7
0
def run(event, context):
    load_dependency('syncer')

    target = event.get('target')
    channel = event.get('channel')
    team_id = event.get('team_id')
    width = event.get('width')
    height = event.get('height')
    if width is None:
        width = 1200
    if height is None:
        height = 1000

    from osbot_browser.browser.sites.Web_Slack import Web_Slack

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

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

    if target:
        web_slack.open(target)

    web_slack.fix_ui_for_screenshot()
    png_data = web_slack.screenshot()
    return png_data
    def risks(team_id=None, channel=None, params=None):
        load_dependency('syncer')
        load_dependency('requests')

        from osbot_browser.view_helpers.Risk_Dashboard import Risk_Dashboard

        jira_key = params.pop(0)

        return (Risk_Dashboard().create_dashboard_for_jira_key(
            jira_key).send_graph_name_to_slack(
                team_id, channel).send_screenshot_to_slack(team_id, channel))
Exemplo n.º 9
0
def run(event, context):
    from osbot_aws.apis.Lambda import load_dependency
    load_dependency('slack')

    from pbx_gs_python_utils.utils.slack.API_Slack import API_Slack

    channel = event.get('channel')
    team_id = event.get('team_id')
    text = event.get('text')
    attachments = event.get('attachments')
    return API_Slack(channel=channel,
                     team_id=team_id).send_message(text, attachments)
Exemplo n.º 10
0
def run(event, context):
    from osbot_aws.apis.Lambda import load_dependency
    from pbx_gs_python_utils.utils.slack.Slack_Commands_Helper import Slack_Commands_Helper

    data = event.get('data')
    if data is not None:
        load_dependency('slack')
        channel = data.get('channel')
        team_id = data.get('team_id')
        params = event.get('params')
        from pbx_gs_python_utils.gsbot.Slack_Commands import Slack_Commands
        return Slack_Commands_Helper(Slack_Commands).invoke(
            team_id, channel, params)
 def get_screenshot_png(self,
                        url=None,
                        clip=None,
                        full_page=None,
                        close_browser=True,
                        delay=None):
     load_dependency('syncer')
     return self.api_browser.sync__screenshot_base64(
         url,
         close_browser=close_browser,
         clip=clip,
         full_page=full_page,
         delay=delay)
Exemplo n.º 12
0
    def setup(self):

        if os.getenv('AWS_REGION'):
            load_dependency('syncer')
            load_dependency('requests')
            #self.setup_AWS()
        # else:
        #     self.setup_local()

        from osbot_browser.browser.API_Browser import API_Browser
        from osbot_browser.browser.Render_Page import Render_Page
        self.api_browser = API_Browser(headless=self.headless).sync__setup_browser()
        self.render_page = Render_Page(api_browser=self.api_browser, web_root=self.web_root())

        return self
Exemplo n.º 13
0
def send_file_to_slack(file_path, title, bot_token,
                       channel):  # refactor into Slack_API class
    load_dependency('requests')
    import requests

    my_file = {'file': ('/tmp/file.pdf', open(file_path, 'rb'), 'pdf')}

    payload = {
        "filename": '{0}.pdf'.format(title),
        "token": bot_token,
        "channels": [channel],
    }
    requests.post("https://slack.com/api/files.upload",
                  params=payload,
                  files=my_file)

    return 'send pdf: {0}'.format(title)
Exemplo n.º 14
0
def run(event, context):
    from osbot_aws.apis.Lambda import load_dependency
    load_dependency('elastic')

    from pbx_gs_python_utils.utils.Log_To_Elk import Log_To_Elk

    try:

        log_to_elk = Log_To_Elk()
        level = event.get('level')
        category = event.get('category')
        message = event.get('message')
        data = event.get('data')
        index = event.get('index')
        if message:
            if level == 'info':
                return log_to_elk.log_info(message=message,
                                           category=category,
                                           data=data,
                                           index=index)
            elif level == 'debug':
                return log_to_elk.log_debug(message=message,
                                            category=category,
                                            data=data,
                                            index=index)
            elif level == 'error':
                return log_to_elk.log_error(message=message,
                                            category=category,
                                            data=data,
                                            index=index)
            else:
                return log_to_elk.log_error(
                    "Error: not supported error level: {0} \n\nmessage: {1}\ncategory: {2}\ndata: {3}"
                    .format(level, message, category, data))
        return message
    except Exception as error:
        return log_to_elk.log_error('Error: ' + str(error),
                                    'Lambda.utils.log_to_elk')
Exemplo n.º 15
0
import sys

sys.path.append('..')

print('***** loading dependency')
from osbot_aws.apis.Lambda import load_dependency

load_dependency('elastic')

print('***** done')

from unittest import TestCase

from pbx_gs_python_utils.utils.Dev import Dev
from pbx_gs_python_utils.utils.Json import Json
from pbx_gs_python_utils.utils.Elastic_Search import Elastic_Search


class Pytest_To_Elk:
    def __init__(self):
        self.pytest_json = './report.json'
        self.index_id = 'pytest_data'
        self.aws_secret_id = 'elastic-logs-server-1'
        self._elastic = None

    # helper methods
    def elastic(self):
        if self._elastic is None:
            self._elastic = Elastic_Search(index=self.index_id,
                                           aws_secret_id=self.aws_secret_id)
        return self._elastic
def run(event, context):
    load_dependency('elastic')
    from gs.API_Elastic_Lambda import API_Elastic_Lambda
    return API_Elastic_Lambda().handle_lambda_event(event)
import sys
import unittest

sys.path.append('..')

from osbot_aws.apis.Lambda      import load_dependency
load_dependency('slack')

from pbx_gs_python_utils.utils.slack.API_Slack  import API_Slack



class test_API_Slack(unittest.TestCase):

    def setUp(self):
        self.channel = 'GDL2EC3EE' #''gs-bot-tests'
        self.api     = API_Slack(self.channel)

    def test_add_reaction(self):
        response = self.api.send_message("Testing reaction")
        ts       = response['message']['ts']
        response = self.api.add_reaction(ts, "thumbsup")
        assert response['ok'] is True

    def test_channels_public(self):
        channels = self.api.channels_public()
        assert len(set(channels)) > 40
        assert channels['random']['id'] == 'C7EUMACGJ'

    def test_channels_private(self):
        channels = self.api.channels_private()