Skip to content

Commit 814e602

Browse files
author
Francesco Faraone
committed
LITE-25146 add support for call context
1 parent d591543 commit 814e602

File tree

11 files changed

+289
-87
lines changed

11 files changed

+289
-87
lines changed

connect/eaas/runner/handlers/anvil.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@
88
import anvil.server
99

1010
from connect.client import ConnectClient
11-
12-
from pkg_resources import iter_entry_points
13-
1411
from connect.eaas.core.logging import ExtensionLogHandler, RequestLogger
1512
from connect.eaas.runner.config import ConfigHelper
13+
from connect.eaas.runner.helpers import iter_entry_points
1614

1715

1816
logger = logging.getLogger(__name__)

connect/eaas/runner/handlers/events.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
import inspect
22
import logging
33

4-
from pkg_resources import iter_entry_points
5-
64
from connect.client import AsyncConnectClient, ConnectClient
75
from connect.eaas.core.logging import ExtensionLogHandler, RequestLogger
86
from connect.eaas.runner.config import ConfigHelper
97
from connect.eaas.runner.constants import EVENT_TYPE_EXT_METHOD_MAP
8+
from connect.eaas.runner.helpers import iter_entry_points
109

1110

1211
logger = logging.getLogger(__name__)

connect/eaas/runner/handlers/web.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
from fastapi.middleware.cors import CORSMiddleware
66
from fastapi.staticfiles import StaticFiles
77
from fastapi.openapi.utils import get_openapi
8-
from pkg_resources import iter_entry_points
98

109
from connect.eaas.runner.config import ConfigHelper
10+
from connect.eaas.runner.helpers import iter_entry_points
1111

1212

1313
logger = logging.getLogger(__name__)

connect/eaas/runner/helpers.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@
88
import subprocess
99
import sys
1010
from datetime import datetime
11+
from importlib.metadata import entry_points, version
1112
from uuid import uuid4
1213

1314
from connect.client import ClientError, ConnectClient
1415

1516
import requests
16-
from pkg_resources import (
17-
DistributionNotFound,
18-
get_distribution,
19-
)
17+
2018

2119
from connect.eaas.runner.constants import (
2220
BACKGROUND_TASK_MAX_EXECUTION_TIME,
@@ -86,8 +84,8 @@ def get_environment():
8684

8785
def get_version():
8886
try:
89-
return get_distribution('connect-extension-runner').version
90-
except DistributionNotFound:
87+
return version('connect-extension-runner')
88+
except Exception:
9189
return '0.0.0'
9290

9391

@@ -179,3 +177,15 @@ def notify_process_restarted(process_type):
179177
)
180178
except ClientError as ce:
181179
logger.warning(f'Cannot notify {process_type} process restart: {ce}')
180+
181+
182+
def iter_entry_points(group, name=None):
183+
group_entrypoints = entry_points().get(group)
184+
if not group_entrypoints:
185+
return
186+
for ep in group_entrypoints:
187+
if name:
188+
if ep.name == name:
189+
yield ep
190+
else:
191+
yield ep

connect/eaas/runner/workers/web.py

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,34 @@ async def shutdown(self):
7272
async def process_task(self, task):
7373
logger.info(f'new webtask received: {task.request.method} {task.request.url}')
7474
headers = copy.copy(task.request.headers)
75+
headers.update(self.get_internal_headers(task))
76+
message = None
77+
try:
78+
async with httpx.AsyncClient(
79+
app=self.handler.app, base_url='http://localhost',
80+
) as client:
81+
body = (
82+
base64.decodebytes(task.request.content.encode('utf-8'))
83+
if task.request.content else b''
84+
)
85+
response = await client.request(
86+
task.request.method,
87+
task.request.url,
88+
headers=headers,
89+
content=body,
90+
)
91+
92+
message = self.build_response(
93+
task, response.status_code, response.headers, response.content,
94+
)
95+
except Exception as e:
96+
message = self.build_response(
97+
task, 500, {}, str(e).encode('utf-8'),
98+
)
99+
await self.send(message)
100+
101+
def get_internal_headers(self, task):
102+
headers = {}
75103
headers['X-Connect-Api-Gateway-Url'] = self.config.get_api_url()
76104
headers['X-Connect-User-Agent'] = self.config.get_user_agent()['User-Agent']
77105
headers['X-Connect-Extension-Id'] = self.config.service_id
@@ -83,26 +111,29 @@ async def process_task(self, task):
83111
if task.options.installation_id:
84112
headers['X-Connect-Installation-Id'] = task.options.installation_id
85113

114+
if task.options.connect_correlation_id:
115+
headers['X-Connect-Correlation-Id'] = task.options.connect_correlation_id
116+
117+
if task.options.user_id:
118+
headers['X-Connect-User-Id'] = task.options.user_id
119+
120+
if task.options.account_id:
121+
headers['X-Connect-Account-Id'] = task.options.account_id
122+
123+
if task.options.account_role:
124+
headers['X-Connect-Account-Role'] = task.options.account_role
125+
126+
if task.options.call_type:
127+
headers['X-Connect-Call-Type'] = task.options.call_type
128+
129+
if task.options.call_source:
130+
headers['X-Connect-Call-Source'] = task.options.call_source
131+
86132
if self.config.logging_api_key is not None:
87133
headers['X-Connect-Logging-Api-Key'] = self.config.logging_api_key
88134
headers['X-Connect-Logging-Metadata'] = json.dumps(self.config.metadata)
89135

90-
async with httpx.AsyncClient(app=self.handler.app, base_url='http://localhost') as client:
91-
body = (
92-
base64.decodebytes(task.request.content.encode('utf-8'))
93-
if task.request.content else b''
94-
)
95-
response = await client.request(
96-
task.request.method,
97-
task.request.url,
98-
headers=headers,
99-
content=body,
100-
)
101-
102-
message = self.build_response(
103-
task, response.status_code, response.headers, response.content,
104-
)
105-
await self.send(message)
136+
return headers
106137

107138
def build_response(self, task, status, headers, body):
108139
log = logger.info if status < 500 else logger.error

0 commit comments

Comments
 (0)