def slack(team_id=None, channel=None, params=None): target = Misc.array_pop(params,0) height = Misc.to_int(Misc.array_pop(params, 0)) width = Misc.to_int(Misc.array_pop(params, 0)) if target is None: target = 'general' if width is None: width = 800 if height is None: height = 1000 target_url = '/messages/{0}'.format(target) slack_message(":point_right: taking screenshot of slack channel: `{0}` with height `{1}` and width `{2}`".format(target, height,width), [], channel, team_id) payload = {'target' : target_url, 'channel': channel, 'team_id': team_id, 'width' : width, 'height' : height} aws_lambda = Lambda('osbot_browser.lambdas.slack_web') png_data = aws_lambda.invoke(payload) browser_helper = Browser_Lamdba_Helper() return browser_helper.send_png_data_to_slack(team_id, channel, target, png_data)
def screenshot(team_id=None, channel=None, params=[]): url = params.pop(0).replace('<', '').replace('>', '') # fix extra chars added by Slack delay = Misc.to_int(Misc.array_pop(params,0)) slack_message(":point_right: taking screenshot of url: {0}".format(url),[], channel,team_id) browser_helper = Browser_Lamdba_Helper().setup() png_data = browser_helper.get_screenshot_png(url,full_page=True, delay=delay) return browser_helper.send_png_data_to_slack(team_id,channel,url, png_data)
def run(event, context=None): headless = event.get('headless', True) url = event.get('url') delay = event.get('delay') js_code = event.get('js_code') browser_helper = Browser_Lamdba_Helper(headless).setup() png_data = browser_helper.get_screenshot_png(url=url, full_page=True, delay=delay, js_code=js_code) return png_data
def run(event, context): issue_id = event.get('issue_id') channel = event.get('channel') team_id = event.get('team_id') width = event.get('width') height = event.get('height') delay = Misc.to_int(event.get('delay')) headless = event.get('headless', True) if issue_id is None: return { 'error': 'No issue ID provided' } Browser_Lamdba_Helper().load_browser_dependencies() #load_dependencies('syncer,requests,pyppeteer,websocket-client') try: from osbot_browser.browser.sites.Web_Jira import Web_Jira web_jira = Web_Jira(headless=headless).setup() slack_message(':one: Logging in...', [] ,channel) web_jira.login() #return web_jira.screenshot() slack_message(f':two: opening issue `{issue_id}` in headless chrome', [], channel) web_jira.issue(issue_id) if width is None: width = 1200 if height is None: height = 300 if delay: slack_message(f':hourglass: Pausing for {delay} seconds before taking the screenshot',[],channel) sleep(delay) web_jira.fix_issue_remove_ui_elements() #todo: next line breaks when delay is too big (need to find a way to keep the browser alive) png_data = web_jira.screenshot(width, height) if channel: title = "Issue: {0}".format(issue_id) slack_message(f':three: sending screenshot to slack image with size {len(png_data)}', [], channel) Browser_Lamdba_Helper().send_png_data_to_slack(team_id, channel, title, png_data) #return "sent png to slack" except Exception as error: message = f'Error in jira_web lambda: {error}' slack_message(message,[],channel) return message return png_data
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
def default(team_id=None, channel=None, params=None, screenshot=True, no_render=False, headless=True): Browser_Lamdba_Helper().load_browser_dependencies() #load_dependencies('syncer,requests,pyppeteer,websocket-client'); from osbot_browser.view_helpers.VivaGraph_Js import VivaGraph_Js graph_name = params[0] vivagraph_js = VivaGraph_Js(headless=headless) if len(params) > 1: vivagraph_js.browser_width = to_int(params[1], None) if len(params) > 2: vivagraph_js.render_wait = to_int(params[2], None) graph_data = vivagraph_js.get_graph_data(graph_name) if graph_data: (nodes, edges) = vivagraph_js.get_nodes_edges_from_graph_data(graph_data) if no_render is True: return graph_name, nodes, edges, graph_data, vivagraph_js return vivagraph_js.create_graph_and_send_screenshot_to_slack( nodes, edges, graph_name, screenshot, team_id, channel)
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
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
def send_screenshot_to_slack(self, team_id=None, channel=None, with_diffs=False): png_file = self.create_dashboard_screenshot(with_diffs) return Browser_Lamdba_Helper().send_png_file_to_slack( team_id, channel, 'risk dashboard', png_file)
def markdown(team_id, channel, params): path = 'examples/markdown.html' js_code = {'name': 'convert', 'params': '# Markdown code!!! \n 123 \n - bullet point \n - another one ![](http://visjs.org/images/gettingstartedSlide.png)'} if params and len(params) > 0: js_code['params']= ' '.join(params).replace('```','') return Browser_Lamdba_Helper().setup() \ .render_file(team_id, channel, path,js_code)
def setup(self): self.browser_helper = Browser_Lamdba_Helper(headless=self.headless).setup() self.browser = self.browser_helper.api_browser if self.new_page: self.page = self.browser.sync__new_page() else: self.page = self.browser.sync__page() return self
def browser( self ): #Â we have make sure there is only one instance of browser created if self._browser is None: from osbot_browser.browser.Browser_Lamdba_Helper import Browser_Lamdba_Helper browser_helper = Browser_Lamdba_Helper( headless=self.headless).setup() self._browser = browser_helper.api_browser return self._browser
def list(team_id, channel, params): text = "Here are the current examples files:" attachments = [] files = '' web_root = Browser_Lamdba_Helper().web_root() + '/' for file in Files.files(web_root): files += '{0} \n'.format(file.replace(web_root, '')) attachments.append({'text': files}) return text, attachments
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)
def test_send_to_slack(self): team_id = None channel = 'DRE51D4EM' issue_id = 'Person-42' png_data = "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8" \ "/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" 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)
def send_screenshot_to_slack( self, team_id, channel): # todo: refactor screenshot creation from this method if self.browser_width: self.browser().sync__browser_width(self.browser_width) if self.render_wait: sleep(self.render_wait) png_file = self.create_dashboard_screenshot() return Browser_Lamdba_Helper().send_png_file_to_slack( team_id, channel, 'risk dashboard', png_file)
def screenshot(team_id=None, channel=None, params=None): params = params or [] try: url = None if len(params) > 0: url = params.pop(0).replace('<', '') \ .replace('>', '') # fix extra chars added by Slack and the u00a0 unicode char. if url == '_': # special mode to not render url = None else: message = ":point_right: taking screenshot of url: {0}".format( url) if url is None: message = ':point_right: no url provided, so showing what is currently on the browser' width = to_int(Misc.array_pop(params, 0)) height = to_int(Misc.array_pop(params, 0)) delay = to_int(Misc.array_pop(params, 0)) if width: message += ", with width `{0}`".format(width) if height: message += ", with height `{0}` (min height)".format(height) if delay: message += ", with delay of `{0}` seconds".format(delay) slack_message(message, [], channel) browser_helper = Browser_Lamdba_Helper().setup() if width: browser_helper.api_browser.sync__browser_width(width, height) png_data = browser_helper.get_screenshot_png(url, full_page=True, delay=delay) slack_message( f':point_right: got screenshot of size {len(png_data)}, sending it to Slack...', [], channel) return browser_helper.send_png_data_to_slack( team_id, channel, url, png_data) except Exception as error: import traceback message = f':red_circle: Browser Error: {error} \n {traceback.format_exc()}' #message = f':red_circle: Browser Error: {error}' return slack_message(message, [], channel, team_id)
def render(team_id, channel, params): 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)
def view(team_id=None, channel=None, params=None): if params and len(params) == 1: issue_id = params.pop() from osbot_browser.browser.Browser_Lamdba_Helper import Browser_Lamdba_Helper from osbot_aws.apis.Lambda import Lambda lambda_name = 'osbot_browser.lambdas.gw.sow' png_data = Lambda(lambda_name).invoke({'issue_id': issue_id}) if png_data is None: return f':red_circle: No png data created for {issue_id}' if channel is None: return png_data else: title = f'howing issue: {issue_id}' Browser_Lamdba_Helper().send_png_data_to_slack( team_id, channel, title, png_data) else: return f":red_circle: Missing `jira_id` param, try SOW-121"
def test_create_dashboard_with_scores(self): scores = { 'r1_1': 1, 'r2_1': 2, 'r3_1': 3, 'r4_1': None, 'r5_1': 5, 'r6_1': 6, 'r1_2': 4, 'r2_2': 5, 'r3_2': 6, 'r4_2': None, 'r5_2': 2, 'r6_2': 7, 'r1_3': 7, 'r2_3': 8, 'r3_3': 9, 'r4_3': None, 'r5_3': 3, 'r6_3': 8, 'r2_4': None, 'r3_4': None, 'r4_4': None, 'r5_4': 4, 'r6_4': 9, 'r2_5': None, 'r3_5': None, 'r4_5': None, 'r5_5': 5, 'r3_6': None, 'r4_6': None, } self.risk_dashboard.create_dashboard_with_scores(scores) png_data = self.risk_dashboard.send_screenshot_to_slack() Browser_Lamdba_Helper().save_png_data(png_data)
def tearDown(self): super().tearDown() if self.png_data: Browser_Lamdba_Helper().save_png_data(self.png_data)
def tearDown(self): png_data = self.browser.sync__screenshot_base64() Browser_Lamdba_Helper().save_png_data(png_data)
def tearDown(self): if self.png_data: Browser_Lamdba_Helper(headless=False).save_png_data(self.png_data) if self.result: Dev.pprint(self.result)
def run(event, context): url = event.get('url') if url: from osbot_browser.browser.Browser_Lamdba_Helper import Browser_Lamdba_Helper browser = Browser_Lamdba_Helper().setup() return browser.get_screenshot_png(url)
def tearDown(self): if self.png_data: Browser_Lamdba_Helper(headless=False).save_png_data(self.png_data)
def tearDown(self): if self.result is not None: Dev.pprint(self.result) if self.png_data: Browser_Lamdba_Helper().save_png_data(self.png_data)
def test_create_dashboard_with_test_data(self): result = self.risk_dashboard.create_dashboard_with_test_data() png_data = self.risk_dashboard.send_screenshot_to_slack() result = Browser_Lamdba_Helper().save_png_data(png_data) Dev.pprint(result)
def send_screenshot_to_slack(self, team_id, channel): png_file = self.create_dashboard_screenshot() return Browser_Lamdba_Helper().send_png_file_to_slack( team_id, channel, 'risk dashboard', png_file)
def send_screenshot_to_slack(self, team_id=None, channel=None, clip=None): png_file = self.create_dashboard_screenshot(clip) return Browser_Lamdba_Helper().send_png_file_to_slack( team_id, channel, self.title, png_file)