blob: d7de102d0168d75f74cea5562789fe3bdd04b972 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""
This module contains the Provider part of the e2e tests.
consumer (FastAPI) -> consumer (AIOHTTP) -> provider (FastAPI + logging_with_exception)
We also cover the usage of logging interception in this module.
"""
import logging
import os
import random
import time
import uvicorn
from fastapi import FastAPI
from log_formatter import E2EProviderFormatter
formatter = E2EProviderFormatter(logging.BASIC_FORMAT)
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
e2e_provider_logger = logging.getLogger('__name__')
e2e_provider_logger.setLevel(logging.INFO)
e2e_provider_logger.addHandler(stream_handler)
app = FastAPI()
@app.get('/pid')
async def get_pid():
"""
This endpoint is used to get the pid of the provider, for e2e tests.
Returns: The instance name of the provider.
"""
from skywalking import config
# Instance name is dynamically modified by uwsgi hook/os.fork handler
return {'instance': config.agent_instance_name}
@app.post('/artist-provider')
async def artist():
time.sleep(random.random())
# Exception is reported with trackback depth of 5 (default)
try:
raise Exception('E2E Provider Exception Text!')
except Exception: # noqa
e2e_provider_logger.exception('E2E Provider Exception, this is reported!')
# FIXME - a temp workaround of a flaky test related to issue #8752
# Later arrived logs are at top of list, thus q
time.sleep(0.5)
# Warning is reported
e2e_provider_logger.warning('E2E Provider Warning, this is reported!')
time.sleep(0.5)
# The user:password part will be removed
e2e_provider_logger.warning('Leak basic auth info at https://user:password@example.com')
# Debug is not reported according to default agent setting
e2e_provider_logger.debug('E2E Provider Debug, this is not reported!')
return {
'artist': 'Luis Fonsi',
'pid': os.getpid()
}
if __name__ == '__main__':
# noinspection PyTypeChecker
uvicorn.run(app, host='0.0.0.0', port=9090)