Пример #1
0
    def parse_response(self, url: str, status_code: int, headers: dict,
                       body: bytes) -> dict:
        max_size = Configuration.get_max_entry_size(
            has_error=is_error_code(status_code))
        if Configuration.verbose and not should_scrub_domain(url):
            additional_info = {
                "headers": lumigo_dumps(headers, max_size),
                "body": lumigo_dumps(body, max_size) if body else "",
                "statusCode": status_code,
            }
        else:
            additional_info = {
                "statusCode": status_code,
                "body": "The data is not available"
            }

        return {
            "type": HTTP_TYPE,
            "info": {
                "httpInfo": {
                    "host": url,
                    "response": additional_info
                }
            },
            "ended": get_current_ms_time(),
        }
Пример #2
0
 def dump_event(event: Dict,
                handlers: List[EventParseHandler] = None,
                has_error: bool = False) -> str:
     max_size = Configuration.get_max_entry_size(has_error)
     if should_use_tracer_extension():
         return aws_dump(event)
     handlers = handlers or [
         ApiGWHandler(),
         SNSHandler(),
         SQSHandler(),
         S3Handler(),
         CloudfrontHandler(),
         DDBHandler(),
     ]
     event_obj = Event(event)
     for handler in handlers:
         try:
             if handler.is_supported(event_obj):
                 return lumigo_dumps(
                     handler.parse(event),
                     max_size,
                     omit_skip_path=handler.get_omit_skip_path(),
                 )
         except Exception as e:
             get_logger().debug(
                 f"Error while trying to parse with handler {handler.__class__.__name__} event {event}",
                 exc_info=e,
             )
     return lumigo_dumps(event, max_size)
Пример #3
0
    def parse_request(self, parse_params: HttpRequest) -> dict:
        if Configuration.verbose and parse_params and not should_scrub_domain(
                parse_params.host):
            HttpState.omit_skip_path = self.get_omit_skip_path()
            additional_info = {
                "headers":
                lumigo_dumps(parse_params.headers),
                "body":
                lumigo_dumps(parse_params.body,
                             omit_skip_path=HttpState.omit_skip_path)
                if parse_params.body else "",
                "method":
                parse_params.method,
                "uri":
                parse_params.uri,
            }
        else:
            additional_info = {
                "method": parse_params.method if parse_params else "",
                "body": "The data is not available",
            }

        return {
            "id": str(uuid.uuid4()),
            "type": HTTP_TYPE,
            "info": {
                "httpInfo": {
                    "host": parse_params.host if parse_params else "",
                    "request": additional_info,
                }
            },
            "started": get_current_ms_time(),
        }
Пример #4
0
def _update_request_data_increased_size_limit(http_info: dict,
                                              max_size: int) -> None:
    if not HttpState.previous_request or not http_info.get("request"):
        return
    http_info["request"].update({
        "body":
        lumigo_dumps(
            HttpState.previous_request.body,
            max_size,
            omit_skip_path=HttpState.omit_skip_path,
        ) if HttpState.previous_request.body else "",
        "headers":
        lumigo_dumps(HttpState.previous_request.headers, max_size),
    })
Пример #5
0
def test_lumigo_dumps_with_omit_skip_and_should_scrub_known_services(
        monkeypatch):
    monkeypatch.setenv("LUMIGO_SCRUB_KNOWN_SERVICES", "true")
    config()

    assert lumigo_dumps({"key": "v"},
                        omit_skip_path=["key"]) == '{"key": "****"}'
Пример #6
0
def test_parse_cloudfront_event(cloudfront_event):
    ordered_cloudfront_event = EventDumper.dump_event(event=cloudfront_event)
    assert ordered_cloudfront_event == lumigo_dumps(
        OrderedDict({
            "Records": [{
                "cf": {
                    "config": {
                        "distributionDomainName":
                        "d3f1hyel7d5adt.cloudfront.net",
                        "distributionId":
                        "E8PDQHVQH1V0Q",
                        "eventType":
                        "origin-request",
                        "requestId":
                        "hnql0vH8VDvTTLGwmKn337OH08mMiV5sTPsYGyBqCKgCXPZbfNqYlw==",
                    },
                    "request": {
                        "body": {
                            "action": "read-only",
                            "data": "",
                            "encoding": "base64",
                            "inputTruncated": False,
                        },
                        "clientIp": "176.12.196.206",
                        "method": "GET",
                        "querystring": "",
                        "uri": "/favicon.ico",
                    },
                }
            }]
        }))
Пример #7
0
def test_parse_event_not_api_gw():
    event = {"a": 1}

    new_event = EventDumper.dump_event(event=event,
                                       handlers=[ExceptionHandler()])

    assert new_event == lumigo_dumps(event)
Пример #8
0
 def started(self, event):
     with lumigo_safe_execute("pymongo started"):
         span_id = str(uuid.uuid4())
         LumigoMongoMonitoring.request_to_span_id[
             event.request_id] = span_id
         SpansContainer.get_span().add_span({
             "id":
             span_id,
             "type":
             self.MONGO_SPAN,
             "started":
             get_current_ms_time(),
             "databaseName":
             event.database_name,
             "commandName":
             event.command_name,
             "request":
             lumigo_dumps(event.command),
             "mongoRequestId":
             event.request_id,
             "mongoOperationId":
             event.operation_id,
             "mongoConnectionId":
             event.connection_id,
         })
Пример #9
0
def _before_cursor_execute(conn, cursor, statement, parameters, context, executemany):
    with lumigo_safe_execute("handle sqlalchemy before execute"):
        SpansContainer.get_span().add_span(
            {
                "id": str(uuid.uuid4()),
                "type": SQL_SPAN,
                "started": get_current_ms_time(),
                "connectionParameters": {
                    "host": conn.engine.url.host or conn.engine.url.database,
                    "port": conn.engine.url.port,
                    "database": conn.engine.url.database,
                    "user": conn.engine.url.username,
                },
                "query": lumigo_dumps(statement),
                "values": lumigo_dumps(parameters),
            }
        )
Пример #10
0
def _update_request_data_increased_size_limit(http_info: dict,
                                              max_size: int) -> None:
    if not HttpState.previous_request or not http_info.get("request"):
        return
    if not HttpState.previous_request.body.startswith(http_info["request"].get(
            "body", "").encode()[:len(TRUNCATE_SUFFIX)]):
        return  # this is a different request (non-sync case)
    http_info["request"].update({
        "body":
        lumigo_dumps(
            HttpState.previous_request.body,
            max_size,
            omit_skip_path=HttpState.omit_skip_path,
        ) if HttpState.previous_request.body else "",
        "headers":
        lumigo_dumps(HttpState.previous_request.headers, max_size),
    })
Пример #11
0
def command_finished(ret_val: Dict):
    with lumigo_safe_execute("redis command finished"):
        span = SpansContainer.get_span().get_last_span()
        if not span:
            get_logger().warning(
                "Redis span ended without a record on its start")
            return
        span.update({
            "ended": get_current_ms_time(),
            "response": lumigo_dumps(copy.deepcopy(ret_val))
        })
Пример #12
0
def execute_wrapper(func, instance, args, kwargs):
    with lumigo_safe_execute("redis start"):
        commands = instance.command_stack
        command = [cmd[0] for cmd in commands if cmd] or None
        request_args = [cmd[1:] for cmd in commands if cmd and len(cmd) > 1]
        connection_options = instance.connection_pool.connection_kwargs
        command_started(lumigo_dumps(command), request_args,
                        connection_options)
    try:
        ret_val = func(*args, **kwargs)
        command_finished(ret_val)
        return ret_val
    except Exception as e:
        command_failed(e)
        raise
Пример #13
0
 def failed(self, event):
     with lumigo_safe_execute("pymongo failed"):
         if event.request_id not in LumigoMongoMonitoring.request_to_span_id:
             get_logger().warning(
                 "Mongo span ended without a record on its start")
             return
         span_id = LumigoMongoMonitoring.request_to_span_id.pop(
             event.request_id)
         span = SpansContainer.get_span().get_span_by_id(span_id)
         span.update({
             "ended":
             span["started"] + (event.duration_micros / 1000),
             "error":
             lumigo_dumps(event.failure),
         })
Пример #14
0
def _handle_error(context):
    with lumigo_safe_execute("handle sqlalchemy error"):
        span = SpansContainer.get_span().get_span_by_id(_last_span_id)
        if not span:
            get_logger().warning(
                "Redis span ended without a record on its start")
            return
        span.update({
            "ended":
            get_current_ms_time(),
            "error":
            lumigo_dumps({
                "type": context.original_exception.__class__.__name__,
                "args": context.original_exception.args,
            }),
        })
Пример #15
0
    def end(self,
            ret_val=None,
            event: Optional[dict] = None,
            context=None) -> Optional[int]:
        TimeoutMechanism.stop()
        reported_rtt = None
        self.previous_request = None
        self.function_span.update({"ended": get_current_ms_time()})
        if Configuration.is_step_function:
            self.add_step_end_event(ret_val)
        parsed_ret_val = None
        if Configuration.verbose:
            try:
                if ret_val is not None:
                    parsed_ret_val = lumigo_dumps(ret_val,
                                                  enforce_jsonify=True,
                                                  decimal_safe=True)
            except Exception as err:
                suffix = ""
                if err.args:
                    suffix = f'Original message: "{err.args[0]}"'
                self.function_span["error"] = self._create_exception_event(
                    "ReturnValueError",
                    "The lambda will probably fail due to bad return value. " +
                    suffix,
                )
        self.function_span.update({"return_value": parsed_ret_val})
        if _is_span_has_error(self.function_span):
            self._set_error_extra_data(event)
        spans_contain_errors: bool = any(
            _is_span_has_error(s) for s in self.spans + [self.function_span])

        if (not Configuration.send_only_if_error) or spans_contain_errors:
            to_send = [self.function_span] + [
                s for s in self.spans if s["id"] in self.span_ids_to_send
            ]
            reported_rtt = lumigo_utils.report_json(region=self.region,
                                                    msgs=to_send)
        else:
            get_logger().debug(
                "No Spans were sent, `Configuration.send_only_if_error` is on and no span has error"
            )
        return reported_rtt
Пример #16
0
def command_started(command: str, request_args: Union[Dict, List[Dict]],
                    connection_options: Optional[Dict]):
    span_id = str(uuid.uuid4())
    host = (connection_options or {}).get("host")
    port = (connection_options or {}).get("port")
    SpansContainer.get_span().add_span({
        "id":
        span_id,
        "type":
        REDIS_SPAN,
        "started":
        get_current_ms_time(),
        "requestCommand":
        command,
        "requestArgs":
        lumigo_dumps(copy.deepcopy(request_args)),
        "connectionOptions": {
            "host": host,
            "port": port
        },
    })
Пример #17
0
def test_lumigo_dumps_enforce_jsonify_raise_error():
    with pytest.raises(TypeError):
        assert lumigo_dumps({"a": set()}, max_size=100, enforce_jsonify=True)
Пример #18
0
def test_parse_event_not_api_gw_none_check():
    new_event = EventDumper.dump_event(event=None)

    assert new_event == lumigo_dumps(None)
Пример #19
0
def test_parse_event_api_gw_v2():
    not_order_api_gw_event = {
        "version":
        "2.0",
        "routeKey":
        "ANY /nodejs-apig-function-1G3XMPLZXVXYI",
        "rawPath":
        "/default/nodejs-apig-function-1G3XMPLZXVXYI",
        "rawQueryString":
        "",
        "cookies":
        ["s_fid=7AABXMPL1AFD9BBF-0643XMPL09956DE2", "regStatus=pre-register"],
        "headers": {
            "accept":
            "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
            "accept-encoding": "gzip, deflate, br",
            "accept-language": "en-US,en;q=0.9",
            "content-length": "0",
            "host": "r3pmxmplak.execute-api.us-east-2.amazonaws.com",
            "sec-fetch-dest": "document",
            "sec-fetch-mode": "navigate",
            "sec-fetch-site": "cross-site",
            "sec-fetch-user": "******",
            "upgrade-insecure-requests": "1",
            "user-agent":
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
            "x-amzn-trace-id": "Root=1-5e6722a7-cc56xmpl46db7ae02d4da47e",
            "x-forwarded-for": "205.255.255.176",
            "x-forwarded-port": "443",
            "x-forwarded-proto": "https",
        },
        "requestContext": {
            "accountId": "123456789012",
            "apiId": "r3pmxmplak",
            "domainName": "r3pmxmplak.execute-api.us-east-2.amazonaws.com",
            "domainPrefix": "r3pmxmplak",
            "http": {
                "method":
                "GET",
                "path":
                "/default/nodejs-apig-function-1G3XMPLZXVXYI",
                "protocol":
                "HTTP/1.1",
                "sourceIp":
                "205.255.255.176",
                "userAgent":
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
            },
            "requestId": "JKJaXmPLvHcESHA=",
            "routeKey": "ANY /nodejs-apig-function-1G3XMPLZXVXYI",
            "stage": "default",
            "time": "10/Mar/2020:05:16:23 +0000",
            "timeEpoch": 1583817383220,
        },
        "isBase64Encoded":
        True,
    }

    order_api_gw_event = EventDumper.dump_event(event=not_order_api_gw_event)

    assert order_api_gw_event == lumigo_dumps(
        OrderedDict({
            "version":
            "2.0",
            "routeKey":
            "ANY /nodejs-apig-function-1G3XMPLZXVXYI",
            "rawPath":
            "/default/nodejs-apig-function-1G3XMPLZXVXYI",
            "requestContext": {
                "http": {
                    "method":
                    "GET",
                    "path":
                    "/default/nodejs-apig-function-1G3XMPLZXVXYI",
                    "protocol":
                    "HTTP/1.1",
                    "sourceIp":
                    "205.255.255.176",
                    "userAgent":
                    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
                },
                "requestId": "JKJaXmPLvHcESHA=",
            },
            "headers": {
                "content-length":
                "0",
                "host":
                "r3pmxmplak.execute-api.us-east-2.amazonaws.com",
                "upgrade-insecure-requests":
                "1",
                "user-agent":
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
            },
            "cookies": [
                "s_fid=7AABXMPL1AFD9BBF-0643XMPL09956DE2",
                "regStatus=pre-register"
            ],
            "isBase64Encoded":
            True,
        }))
Пример #20
0
def _get_envs_for_span(has_error: bool = False) -> str:
    return lumigo_dumps(dict(os.environ),
                        Configuration.get_max_entry_size(has_error))
Пример #21
0
def test_lumigo_dumps(value, output):
    assert lumigo_dumps(value, max_size=100) == output
Пример #22
0
def test_parse_event_sqs():
    not_order_sns_event = {
        "Records": [
            {
                "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
                "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
                "body": "Test message1",
                "attributes": {
                    "ApproximateReceiveCount": "1",
                    "SentTimestamp": "1545082649183",
                    "SenderId": "AIDAIENQZJOLO23YVJ4VO",
                    "ApproximateFirstReceiveTimestamp": "1545082649185",
                },
                "messageAttributes": {
                    "a": 1
                },
                "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
                "eventSource": "aws:sqs",
                "eventSourceARN":
                "arn:aws:sqs:us-east-2:123456789012:my-queue",
                "awsRegion": "us-east-2",
            },
            {
                "messageId": "2e1424d4-f796-459a-8184-9c92662be6da",
                "receiptHandle": "AQEBzWwaftRI0KuVm4tP+/7q1rGgNqicHq...",
                "body": "Test message2",
                "attributes": {
                    "ApproximateReceiveCount": "1",
                    "SentTimestamp": "1545082650636",
                    "SenderId": "AIDAIENQZJOLO23YVJ4VO",
                    "ApproximateFirstReceiveTimestamp": "1545082650649",
                },
                "messageAttributes": {
                    "b": 2
                },
                "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
                "eventSource": "aws:sqs",
                "eventSourceARN":
                "arn:aws:sqs:us-east-2:123456789012:my-queue",
                "awsRegion": "us-east-2",
            },
        ]
    }

    order_sns_event = EventDumper.dump_event(event=not_order_sns_event)

    assert order_sns_event == lumigo_dumps(
        OrderedDict({
            "Records": [
                {
                    "body": "Test message1",
                    "messageAttributes": {
                        "a": 1
                    },
                    "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
                },
                {
                    "body": "Test message2",
                    "messageAttributes": {
                        "b": 2
                    },
                    "messageId": "2e1424d4-f796-459a-8184-9c92662be6da",
                },
            ]
        }))
Пример #23
0
def test_parse_event_sns():
    not_order_sns_event = {
        "Records": [
            {
                "EventVersion": "1.0",
                "EventSubscriptionArn":
                "arn:aws:sns:us-east-2:123456789012:sns-lambda:21be56ed-a058-49f5-8c98-aedd2564c486",
                "EventSource": "aws:sns",
                "Sns": {
                    "SignatureVersion": "1",
                    "Timestamp": "2019-01-02T12:45:07.000Z",
                    "Signature":
                    "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==",
                    "SigningCertUrl":
                    "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-ac565b8b1a6c5d002d285f9598aa1d9b.pem",
                    "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
                    "Message": "Hello from SNS1!",
                    "MessageAttributes": {
                        "Test": {
                            "Type": "String",
                            "Value": "TestString"
                        },
                        "TestBinary": {
                            "Type": "Binary",
                            "Value": "TestBinary"
                        },
                    },
                    "Type": "Notification",
                    "UnsubscribeUrl":
                    "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:123456789012:test-lambda:21be56ed-a058-49f5-8c98-aedd2564c486",
                    "TopicArn":
                    "arn:aws:sns:us-east-2:123456789012:sns-lambda",
                    "Subject": "TestInvoke",
                },
            },
            {
                "EventVersion": "1.0",
                "EventSubscriptionArn":
                "arn:aws:sns:us-east-2:123456789012:sns-lambda:21be56ed-a058-49f5-8c98-aedd2564c486",
                "EventSource": "aws:sns",
                "Sns": {
                    "SignatureVersion": "1",
                    "Timestamp": "2019-01-02T12:45:07.000Z",
                    "Signature":
                    "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==",
                    "SigningCertUrl":
                    "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-ac565b8b1a6c5d002d285f9598aa1d9b.pem",
                    "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
                    "Message": "Hello from SNS2!",
                    "MessageAttributes": {
                        "Test": {
                            "Type": "String",
                            "Value": "TestString"
                        },
                        "TestBinary": {
                            "Type": "Binary",
                            "Value": "TestBinary"
                        },
                    },
                    "Type": "Notification",
                    "UnsubscribeUrl":
                    "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:123456789012:test-lambda:21be56ed-a058-49f5-8c98-aedd2564c486",
                    "TopicArn":
                    "arn:aws:sns:us-east-2:123456789012:sns-lambda",
                    "Subject": "TestInvoke",
                },
            },
        ]
    }

    order_sns_event = EventDumper.dump_event(event=not_order_sns_event)

    assert order_sns_event == lumigo_dumps(
        OrderedDict({
            "Records": [
                {
                    "Sns": {
                        "Message": "Hello from SNS1!",
                        "MessageAttributes": {
                            "Test": {
                                "Type": "String",
                                "Value": "TestString"
                            },
                            "TestBinary": {
                                "Type": "Binary",
                                "Value": "TestBinary"
                            },
                        },
                        "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
                    }
                },
                {
                    "Sns": {
                        "Message": "Hello from SNS2!",
                        "MessageAttributes": {
                            "Test": {
                                "Type": "String",
                                "Value": "TestString"
                            },
                            "TestBinary": {
                                "Type": "Binary",
                                "Value": "TestBinary"
                            },
                        },
                        "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
                    }
                },
            ]
        }))
Пример #24
0
def test_lumigo_dumps_with_omit_skip(value, omit_skip_path, output):
    assert lumigo_dumps(value, omit_skip_path=omit_skip_path) == output
Пример #25
0
def test_parse_event_api_gw_v1():
    not_order_api_gw_event = {
        "resource": "/add-user",
        "path": "/add-user",
        "httpMethod": "POST",
        "headers": {
            "Accept": "application/json, text/plain, */*",
            "Accept-Encoding": "gzip, deflate, br",
            "Accept-Language": "he-IL,he;q=0.9,en-US;q=0.8,en;q=0.7",
            "Authorization": "auth",
            "CloudFront-Forwarded-Proto": "https",
            "CloudFront-Is-Desktop-Viewer": "true",
            "CloudFront-Is-Mobile-Viewer": "false",
            "CloudFront-Is-SmartTV-Viewer": "false",
            "CloudFront-Is-Tablet-Viewer": "false",
            "CloudFront-Viewer-Country": "IL",
            "content-type": "application/json;charset=UTF-8",
            "customer_id": "c_1111",
            "Host": "aaaa.execute-api.us-west-2.amazonaws.com",
            "origin": "https://aaa.io",
            "Referer": "https://aaa.io/users",
            "sec-fetch-dest": "empty",
            "sec-fetch-mode": "cors",
            "sec-fetch-site": "cross-site",
            "User-Agent":
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36",
            "Via":
            "2.0 59574f77a7cf2d23d64904db278e5711.cloudfront.net (CloudFront)",
            "X-Amz-Cf-Id":
            "J4KbOEUrZCnUQSLsDq1PyYXmfpVy8x634huSeBX0HCbscgH-N2AtVA==",
            "X-Amzn-Trace-Id": "Root=1-5e9bf868-1c53a38cfe070266db0bfbd9",
            "X-Forwarded-For": "5.102.206.161, 54.182.243.106",
            "X-Forwarded-Port": "443",
            "X-Forwarded-Proto": "https",
        },
        "multiValueHeaders": {
            "Accept": ["application/json, text/plain, */*"],
            "Accept-Encoding": ["gzip, deflate, br"],
            "Accept-Language": ["he-IL,he;q=0.9,en-US;q=0.8,en;q=0.7"],
            "Authorization": ["auth"],
            "CloudFront-Forwarded-Proto": ["https"],
            "CloudFront-Is-Desktop-Viewer": ["true"],
            "CloudFront-Is-Mobile-Viewer": ["false"],
            "CloudFront-Is-SmartTV-Viewer": ["false"],
            "CloudFront-Is-Tablet-Viewer": ["false"],
            "CloudFront-Viewer-Country": ["IL"],
            "content-type": ["application/json;charset=UTF-8"],
            "customer_id": ["c_1111"],
            "Host": ["a.execute-api.us-west-2.amazonaws.com"],
            "origin": ["https://aaa.io"],
            "Referer": ["https://aaa.io/users"],
            "sec-fetch-dest": ["empty"],
            "sec-fetch-mode": ["cors"],
            "sec-fetch-site": ["cross-site"],
            "User-Agent": [
                "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
            ],
            "Via": [
                "2.0 59574f77a7cf2d23d64904db278e5711.cloudfront.net (CloudFront)"
            ],
            "X-Amz-Cf-Id":
            ["J4KbOEUrZCnUQSLsDq1PyYXmfpVy8x634huSeBX0HCbscgH-N2AtVA=="],
            "X-Amzn-Trace-Id": ["Root=1-5e9bf868-1c53a38cfe070266db0bfbd9"],
            "X-Forwarded-For": ["5.102.206.161, 54.182.243.106"],
            "X-Forwarded-Port": ["443"],
            "X-Forwarded-Proto": ["https"],
        },
        "queryStringParameters": "1",
        "multiValueQueryStringParameters": "1",
        "pathParameters": "1",
        "stageVariables": None,
        "requestContext": {
            "resourceId": "ua33sn",
            "authorizer": {
                "claims": {
                    "sub": "a87005bb-3030-4962-bae8-48cd629ba20b",
                    "custom:customer": "c_1111",
                    "iss":
                    "https://cognito-idp.us-west-2.amazonaws.com/us-west-2",
                    "custom:customer-name": "a",
                    "cognito:username": "******",
                    "aud": "4lidcnek50hi18996gadaop8j0",
                    "event_id": "9fe80735-f265-41d5-a7ca-04b88c2a4a4c",
                    "token_use": "id",
                    "auth_time": "1587038744",
                    "exp": "Sun Apr 19 08:06:14 UTC 2020",
                    "custom:role": "admin",
                    "iat": "Sun Apr 19 07:06:14 UTC 2020",
                    "email": "*****@*****.**",
                }
            },
            "resourcePath": "/add-user",
            "httpMethod": "POST",
            "extendedRequestId": "LOPAXFcuvHcFUKg=",
            "requestTime": "19/Apr/2020:07:06:16 +0000",
            "path": "/prod/add-user",
            "accountId": "114300393969",
            "protocol": "HTTP/1.1",
            "stage": "prod",
            "domainPrefix": "psqn7b0ev2",
            "requestTimeEpoch": 1587279976628,
            "requestId": "78542821-ca17-4e83-94ec-96993a9d451d",
            "identity": {
                "cognitoIdentityPoolId": None,
                "accountId": None,
                "cognitoIdentityId": None,
                "caller": None,
                "sourceIp": "5.102.206.161",
                "principalOrgId": None,
                "accessKey": None,
                "cognitoAuthenticationType": None,
                "cognitoAuthenticationProvider": None,
                "userArn": None,
                "userAgent":
                "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36",
                "user": None,
            },
            "domainName": "psqn7b0ev2.execute-api.us-west-2.amazonaws.com",
            "apiId": "psqn7b0ev2",
        },
        "body": '{"email":"*****@*****.**"}',
        "isBase64Encoded": False,
    }

    order_api_gw_event = EventDumper.dump_event(event=not_order_api_gw_event)

    assert order_api_gw_event == lumigo_dumps(
        OrderedDict({
            "resource": "/add-user",
            "path": "/add-user",
            "httpMethod": "POST",
            "queryStringParameters": "1",
            "pathParameters": "1",
            "body": '{"email":"*****@*****.**"}',
            "requestContext": {
                "authorizer": {
                    "claims": {
                        "sub": "a87005bb-3030-4962-bae8-48cd629ba20b",
                        "custom:customer": "c_1111",
                        "iss":
                        "https://cognito-idp.us-west-2.amazonaws.com/us-west-2",
                        "custom:customer-name": "a",
                        "cognito:username": "******",
                        "aud": "4lidcnek50hi18996gadaop8j0",
                        "event_id": "9fe80735-f265-41d5-a7ca-04b88c2a4a4c",
                        "token_use": "id",
                        "auth_time": "1587038744",
                        "exp": "Sun Apr 19 08:06:14 UTC 2020",
                        "custom:role": "admin",
                        "iat": "Sun Apr 19 07:06:14 UTC 2020",
                        "email": "*****@*****.**",
                    }
                },
                "requestId": "78542821-ca17-4e83-94ec-96993a9d451d",
            },
            "headers": {
                "Authorization":
                "auth",
                "content-type":
                "application/json;charset=UTF-8",
                "customer_id":
                "c_1111",
                "Host":
                "aaaa.execute-api.us-west-2.amazonaws.com",
                "origin":
                "https://aaa.io",
                "Referer":
                "https://aaa.io/users",
                "User-Agent":
                "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36",
            },
            "stageVariables": None,
            "isBase64Encoded": False,
        }))
Пример #26
0
def test_lumigo_dumps_no_regexes(monkeypatch):
    monkeypatch.setenv(LUMIGO_SECRET_MASKING_REGEX, "[]")
    result = lumigo_dumps({"key": "123"}, max_size=100, enforce_jsonify=True)
    assert result == '{"key": "123"}'
Пример #27
0
def test_concat_old_body_to_new(old, new, expected, monkeypatch):
    monkeypatch.setattr(Configuration, "max_entry_size", 5)
    assert concat_old_body_to_new(lumigo_dumps(old), new) == lumigo_dumps(expected)
Пример #28
0
def test_lumigo_dumps_omit_keys_environment(monkeypatch):
    monkeypatch.setenv(LUMIGO_SECRET_MASKING_REGEX, '[".*evilPlan.*"]')
    value = {"password": "******", "evilPlan": {"take": "over", "the": "world"}}
    assert lumigo_dumps(
        value, max_size=100) == '{"password": "******", "evilPlan": "****"}'