Skip to content

Commit 50b8f23

Browse files
authored
fix: Logger settings for feature servers and updated logger for permission flow (feast-dev#4531)
* Logger setting for feature servers Signed-off-by: Abdul Hameed <ahameed@redhat.com> * added/updated logger for permission flow Signed-off-by: Abdul Hameed <ahameed@redhat.com> * set defualt logger level for feature servers as WARNING Signed-off-by: Abdul Hameed <ahameed@redhat.com> --------- Signed-off-by: Abdul Hameed <ahameed@redhat.com>
1 parent 0fb76e9 commit 50b8f23

File tree

9 files changed

+30
-12
lines changed

9 files changed

+30
-12
lines changed

infra/charts/feast-feature-server/templates/deployment.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,28 @@ spec:
4242
command:
4343
{{- if eq .Values.feast_mode "offline" }}
4444
- "feast"
45+
- "--log-level"
46+
- "{{ .Values.logLevel }}"
4547
- "serve_offline"
4648
- "-h"
4749
- "0.0.0.0"
4850
{{- else if eq .Values.feast_mode "ui" }}
4951
- "feast"
52+
- "--log-level"
53+
- "{{ .Values.logLevel }}"
5054
- "ui"
5155
- "-h"
5256
- "0.0.0.0"
5357
{{- else if eq .Values.feast_mode "registry" }}
5458
- "feast"
59+
- "--log-level"
60+
- "{{ .Values.logLevel }}"
5561
- "serve_registry"
5662
{{- else }}
5763
{{- if .Values.metrics.enlabled }}
5864
- "feast"
65+
- "--log-level"
66+
- "{{ .Values.logLevel }}"
5967
- "serve"
6068
- "--metrics"
6169
- "-h"

infra/charts/feast-feature-server/values.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ image:
1111
# image.tag -- The Docker image tag (can be overwritten if custom feature server deps are needed for on demand transforms)
1212
tag: 0.40.0
1313

14+
logLevel: "WARNING" # Set log level DEBUG, INFO, WARNING, ERROR, and CRITICAL (case-insensitive)
15+
1416
imagePullSecrets: []
1517
nameOverride: ""
1618
fullnameOverride: ""

sdk/python/feast/permissions/auth/kubernetes_token_parser.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,16 @@ async def user_details_from_access_token(self, access_token: str) -> User:
4040
"""
4141
sa_namespace, sa_name = _decode_token(access_token)
4242
current_user = f"{sa_namespace}:{sa_name}"
43-
logging.info(f"Received request from {sa_name} in {sa_namespace}")
43+
logger.info(
44+
f"Request received from ServiceAccount: {sa_name} in namespace: {sa_namespace}"
45+
)
4446

4547
intra_communication_base64 = os.getenv("INTRA_COMMUNICATION_BASE64")
4648
if sa_name is not None and sa_name == intra_communication_base64:
4749
return User(username=sa_name, roles=[])
4850
else:
4951
roles = self.get_roles(sa_namespace, sa_name)
50-
logging.info(f"SA roles are: {roles}")
52+
logger.info(f"Roles for ServiceAccount {sa_name}: {roles}")
5153

5254
return User(username=current_user, roles=roles)
5355

sdk/python/feast/permissions/auth/oidc_token_parser.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from feast.permissions.user import User
1818

1919
logger = logging.getLogger(__name__)
20-
logger.setLevel(logging.INFO)
2120

2221

2322
class OidcTokenParser(TokenParser):
@@ -69,8 +68,9 @@ async def user_details_from_access_token(self, access_token: str) -> User:
6968

7069
try:
7170
await self._validate_token(access_token)
72-
logger.info("Validated token")
71+
logger.debug("Token successfully validated.")
7372
except Exception as e:
73+
logger.error(f"Token validation failed: {e}")
7474
raise AuthenticationError(f"Invalid token: {e}")
7575

7676
optional_custom_headers = {"User-agent": "custom-user-agent"}

sdk/python/feast/permissions/client/intra_comm_authentication_client_manager.py

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class IntraCommAuthClientManager(AuthenticationClientManager):
1313
def __init__(self, auth_config: AuthConfig, intra_communication_base64: str):
1414
self.auth_config = auth_config
1515
self.intra_communication_base64 = intra_communication_base64
16+
logger.debug(f"AuthConfig type set to {self.auth_config.type}")
1617

1718
def get_token(self):
1819
if self.auth_config.type == AuthType.OIDC.value:

sdk/python/feast/permissions/enforcer.py

+4
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,12 @@ def enforce_policy(
6767
if evaluator.is_decided():
6868
grant, explanations = evaluator.grant()
6969
if not grant and not filter_only:
70+
logger.error(f"Permission denied: {','.join(explanations)}")
7071
raise FeastPermissionError(",".join(explanations))
7172
if grant:
73+
logger.debug(
74+
f"Permission granted for {type(resource).__name__}:{resource.name}"
75+
)
7276
_permitted_resources.append(resource)
7377
break
7478
else:

sdk/python/feast/permissions/server/arrow.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from feast.permissions.user import User
1818

1919
logger = logging.getLogger(__name__)
20-
logger.setLevel(logging.INFO)
2120

2221

2322
class AuthorizationMiddlewareFactory(fl.ServerMiddlewareFactory):
@@ -49,7 +48,9 @@ def __init__(self, access_token: str, *args, **kwargs):
4948

5049
def call_completed(self, exception):
5150
if exception:
52-
print(f"{AuthorizationMiddleware.__name__} received {exception}")
51+
logger.exception(
52+
f"{AuthorizationMiddleware.__name__} encountered an exception: {exception}"
53+
)
5354

5455
async def extract_user(self) -> User:
5556
"""
@@ -69,14 +70,14 @@ def inject_user_details(context: ServerCallContext):
6970
context: The endpoint context.
7071
"""
7172
if context.get_middleware("auth") is None:
72-
logger.info("No `auth` middleware.")
73+
logger.warning("No `auth` middleware.")
7374
return
7475

7576
sm = get_security_manager()
7677
if sm is not None:
7778
auth_middleware = cast(AuthorizationMiddleware, context.get_middleware("auth"))
7879
current_user = asyncio.run(auth_middleware.extract_user())
79-
print(f"extracted user: {current_user}")
80+
logger.debug(f"User extracted: {current_user}")
8081

8182
sm.set_current_user(current_user)
8283

sdk/python/feast/permissions/server/grpc.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from feast.permissions.security_manager import get_security_manager
1010

1111
logger = logging.getLogger(__name__)
12-
logger.setLevel(logging.INFO)
1312

1413

1514
class AuthInterceptor(grpc.ServerInterceptor):
@@ -22,11 +21,13 @@ def intercept_service(self, continuation, handler_call_details):
2221
metadata=dict(handler_call_details.invocation_metadata)
2322
)
2423

25-
print(f"Fetching user for token: {len(access_token)}")
24+
logger.debug(
25+
f"Fetching user details for token of length: {len(access_token)}"
26+
)
2627
current_user = asyncio.run(
2728
auth_manager.token_parser.user_details_from_access_token(access_token)
2829
)
29-
print(f"User is: {current_user}")
30+
logger.debug(f"User is: {current_user}")
3031
sm.set_current_user(current_user)
3132

3233
return continuation(handler_call_details)

sdk/python/feast/permissions/server/utils.py

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
from feast.permissions.server.rest_token_extractor import RestTokenExtractor
3131

3232
logger = logging.getLogger(__name__)
33-
logger.setLevel(logging.INFO)
3433

3534

3635
class ServerType(enum.Enum):

0 commit comments

Comments
 (0)