From a571e08b97a95f8543d7dea27902c135ab3a4378 Mon Sep 17 00:00:00 2001 From: TS <67011812+tsisodia10@users.noreply.github.com> Date: Tue, 6 Aug 2024 10:46:40 -0400 Subject: [PATCH] feat: Instrument Feast using Prometheus and OpenTelemetry (#4366) feat: instrument feature store This commit adds opentelemetry to monitor Feast Signed-off-by: Twinkll Sisodia --- README.md | 3 +- infra/charts/feast-feature-server/README.md | 4 + .../feast-feature-server/opentelemetry.md | 108 +++++++++++++ .../samples/instrumentation.yaml | 19 +++ .../samples/otel-collector.yaml | 53 +++++++ .../feast-feature-server/samples/otel-sm.yaml | 16 ++ .../samples/prometheus.yaml | 15 ++ .../feast-feature-server/samples/rbac.yaml | 68 ++++++++ .../samples/service-monitor.yaml | 16 ++ .../feast-feature-server/samples/workflow.png | Bin 0 -> 183119 bytes .../templates/deployment.yaml | 13 +- .../templates/service.yaml | 6 + infra/charts/feast-feature-server/values.yaml | 6 + sdk/python/feast/cli.py | 9 ++ sdk/python/feast/feature_server.py | 38 +++++ sdk/python/feast/feature_store.py | 2 + .../feature_servers/multicloud/Dockerfile | 2 +- .../feature_servers/multicloud/Dockerfile.dev | 2 +- .../requirements/py3.10-ci-requirements.txt | 148 ++++++++++++++++-- .../requirements/py3.10-requirements.txt | 50 +++++- .../requirements/py3.11-ci-requirements.txt | 148 ++++++++++++++++-- .../requirements/py3.11-requirements.txt | 50 +++++- .../requirements/py3.9-ci-requirements.txt | 148 ++++++++++++++++-- .../requirements/py3.9-requirements.txt | 56 +++++-- .../online_store/test_remote_online_store.py | 17 +- setup.py | 6 + 26 files changed, 928 insertions(+), 75 deletions(-) create mode 100644 infra/charts/feast-feature-server/opentelemetry.md create mode 100644 infra/charts/feast-feature-server/samples/instrumentation.yaml create mode 100644 infra/charts/feast-feature-server/samples/otel-collector.yaml create mode 100644 infra/charts/feast-feature-server/samples/otel-sm.yaml create mode 100644 infra/charts/feast-feature-server/samples/prometheus.yaml create mode 100644 infra/charts/feast-feature-server/samples/rbac.yaml create mode 100644 infra/charts/feast-feature-server/samples/service-monitor.yaml create mode 100644 infra/charts/feast-feature-server/samples/workflow.png diff --git a/README.md b/README.md index 13c5db443c..ede28c4c95 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,6 @@ [![GitHub Release](https://img.shields.io/github/v/release/feast-dev/feast.svg?style=flat&sort=semver&color=blue)](https://github.com/feast-dev/feast/releases) ## Join us on Slack! - 👋👋👋 [Come say hi on Slack!](https://join.slack.com/t/feastopensource/signup) ## Overview @@ -231,4 +230,4 @@ Thanks goes to these incredible people: - + \ No newline at end of file diff --git a/infra/charts/feast-feature-server/README.md b/infra/charts/feast-feature-server/README.md index 63ff7cf61b..bff7820d1f 100644 --- a/infra/charts/feast-feature-server/README.md +++ b/infra/charts/feast-feature-server/README.md @@ -44,8 +44,12 @@ See [here](https://github.com/feast-dev/feast/tree/master/examples/python-helm-d | imagePullSecrets | list | `[]` | | | livenessProbe.initialDelaySeconds | int | `30` | | | livenessProbe.periodSeconds | int | `30` | | +| metrics.enabled | bool | `false` | | +| metrics.otelCollector.endpoint | string | `""` | | +| metrics.otelCollector.port | int | `4317` | | | nameOverride | string | `""` | | | nodeSelector | object | `{}` | | +| otel_service.name | string | `"otelcol"` | | | podAnnotations | object | `{}` | | | podSecurityContext | object | `{}` | | | readinessProbe.initialDelaySeconds | int | `20` | | diff --git a/infra/charts/feast-feature-server/opentelemetry.md b/infra/charts/feast-feature-server/opentelemetry.md new file mode 100644 index 0000000000..fc0930821e --- /dev/null +++ b/infra/charts/feast-feature-server/opentelemetry.md @@ -0,0 +1,108 @@ +## Adding Monitoring +To add monitoring to the Feast Feature Server, follow these steps: + +### Workflow + +Feast instrumentation Using OpenTelemetry and Prometheus - +![Workflow](samples/workflow.png) + +### Deploy Prometheus Operator +Follow the Prometheus Operator documentation to install the operator - +https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/user-guides/getting-started.md + +### Deploy OpenTelemetry Operator +Before installing OTEL Operator, install `cert-manager` and validate the `pods` should spin up -- +``` +kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml +``` + +Follow the documentation for further installation steps - +https://github.com/open-telemetry/opentelemetry-operator + +### Configure OpenTelemetry Collector +Add the OpenTelemetry Collector configuration under the metrics section in your values.yaml file. + +Example values.yaml: + +``` +metrics: + enabled: true + otelCollector: + endpoint: "otel-collector.default.svc.cluster.local:4317" #sample + headers: + api-key: "your-api-key" +``` + +### Add instrumentation annotation and environment variables in the deployment.yaml + +``` +template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + instrumentation.opentelemetry.io/inject-python: "true" +``` + +``` +- name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://{{ .Values.service.name }}-collector.{{ .Release.namespace }}.svc.cluster.local:{{ .Values.metrics.endpoint.port}} +- name: OTEL_EXPORTER_OTLP_INSECURE + value: "true" +``` + +### Add checks +Add metric checks to all manifests and deployment file - + +``` +{{ if .Values.metrics.enabled }} +apiVersion: opentelemetry.io/v1alpha1 +kind: Instrumentation +metadata: + name: feast-instrumentation +spec: + exporter: + endpoint: http://{{ .Values.service.name }}-collector.{{ .Release.Namespace }}.svc.cluster.local:4318 # This is the default port for the OpenTelemetry Collector + env: + propagators: + - tracecontext + - baggage + python: + env: + - name: OTEL_METRICS_EXPORTER + value: console,otlp_proto_http + - name: OTEL_LOGS_EXPORTER + value: otlp_proto_http + - name: OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED + value: "true" +{{end}} +``` + +### Add manifests to the chart +Add Instrumentation, OpenTelemetryCollector, ServiceMonitors, Prometheus Instance and RBAC rules as provided in the [samples/](https://github.com/feast-dev/feast/tree/91540703c483f1cd03b534a1a45bc4ccdcf79f81/infra/charts/feast-feature-server/samples) directory. + +For latest updates please refer the official repository - https://github.com/open-telemetry/opentelemetry-operator + +### Deploy Feast +Deploy Feast and set `metrics` value to `true`. + +Example - +``` +helm install feast-release infra/charts/feast-feature-server --set metric=true --set feature_store_yaml_base64="" +``` + +## See logs +Once the opentelemetry is deployed, you can search the logs to see the required metrics - + +``` +oc logs otelcol-collector-0 | grep "Name: feast_feature_server_memory_usage\|Value: 0.*" +oc logs otelcol-collector-0 | grep "Name: feast_feature_server_cpu_usage\|Value: 0.*" +``` +``` + -> Name: feast_feature_server_memory_usage +Value: 0.579426 +``` +``` +-> Name: feast_feature_server_cpu_usage +Value: 0.000000 +``` diff --git a/infra/charts/feast-feature-server/samples/instrumentation.yaml b/infra/charts/feast-feature-server/samples/instrumentation.yaml new file mode 100644 index 0000000000..8ade7ee1bd --- /dev/null +++ b/infra/charts/feast-feature-server/samples/instrumentation.yaml @@ -0,0 +1,19 @@ +apiVersion: opentelemetry.io/v1alpha1 +kind: Instrumentation +metadata: + name: feast-instrumentation +spec: + exporter: + endpoint: # eg: http://{{ .Values.service.name }}-collector.{{ .Release.Namespace }}.svc.cluster.local:4318 + env: + propagators: + - tracecontext + - baggage + python: + env: + - name: OTEL_METRICS_EXPORTER + value: console,otlp_proto_http + - name: OTEL_LOGS_EXPORTER + value: otlp_proto_http + - name: OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED + value: "true" \ No newline at end of file diff --git a/infra/charts/feast-feature-server/samples/otel-collector.yaml b/infra/charts/feast-feature-server/samples/otel-collector.yaml new file mode 100644 index 0000000000..d35a957e9b --- /dev/null +++ b/infra/charts/feast-feature-server/samples/otel-collector.yaml @@ -0,0 +1,53 @@ +# API reference https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md +# Refs for v1beta1 config: https://github.com/open-telemetry/opentelemetry-operator/issues/3011#issuecomment-2154118998 +apiVersion: opentelemetry.io/v1beta1 +kind: OpenTelemetryCollector +metadata: + name: otelcol +spec: + mode: statefulset + image: otel/opentelemetry-collector-contrib:0.102.1 + targetAllocator: + enabled: true + serviceAccount: opentelemetry-targetallocator-sa + prometheusCR: + enabled: true + podMonitorSelector: {} + serviceMonitorSelector: {} + ## If uncommented, only service monitors with this label will get picked up + # app: feast + config: + receivers: + otlp: + protocols: + grpc: {} + http: {} + prometheus: + config: + scrape_configs: + - job_name: 'otelcol-collector' + scrape_interval: 10s + static_configs: + - targets: [ '0.0.0.0:8888' ] + + processors: + batch: {} + + exporters: + logging: + verbosity: detailed + + service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [logging] + metrics: + receivers: [otlp, prometheus] + processors: [] + exporters: [logging] + logs: + receivers: [otlp] + processors: [batch] + exporters: [logging] \ No newline at end of file diff --git a/infra/charts/feast-feature-server/samples/otel-sm.yaml b/infra/charts/feast-feature-server/samples/otel-sm.yaml new file mode 100644 index 0000000000..88cb6a6b41 --- /dev/null +++ b/infra/charts/feast-feature-server/samples/otel-sm.yaml @@ -0,0 +1,16 @@ +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + labels: + app: feast + name: otel-sm-1 +spec: + endpoints: + - port: metrics + namespaceSelector: + matchNames: + - # helm value - {{ .Release.Namespace }} + selector: + matchLabels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/managed-by: opentelemetry-operator \ No newline at end of file diff --git a/infra/charts/feast-feature-server/samples/prometheus.yaml b/infra/charts/feast-feature-server/samples/prometheus.yaml new file mode 100644 index 0000000000..d960fadd1e --- /dev/null +++ b/infra/charts/feast-feature-server/samples/prometheus.yaml @@ -0,0 +1,15 @@ +kind: Prometheus +metadata: + name: prometheus +spec: + evaluationInterval: 30s + podMonitorSelector: + matchLabels: + app: feast + portName: web + replicas: 1 + scrapeInterval: 30s + serviceAccountName: prometheus-k8s + serviceMonitorSelector: + matchLabels: + app: feast \ No newline at end of file diff --git a/infra/charts/feast-feature-server/samples/rbac.yaml b/infra/charts/feast-feature-server/samples/rbac.yaml new file mode 100644 index 0000000000..195777d5fa --- /dev/null +++ b/infra/charts/feast-feature-server/samples/rbac.yaml @@ -0,0 +1,68 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: opentelemetry-targetallocator-sa +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: opentelemetry-targetallocator-role-1 + annotations: + meta.helm.sh/release-name: "feast-release" + meta.helm.sh/release-namespace: "feast-val" + labels: + app.kubernetes.io/managed-by: "Helm" +rules: +- apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + - podmonitors + verbs: + - '*' +- apiGroups: [""] + resources: + - namespaces + verbs: ["get", "list", "watch"] +- apiGroups: [""] + resources: + - nodes + - nodes/metrics + - services + - endpoints + - pods + verbs: ["get", "list", "watch"] +- apiGroups: [""] + resources: + - configmaps + verbs: ["get"] +- apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: ["get", "list", "watch"] +- apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: ["get", "list", "watch"] +- nonResourceURLs: ["/metrics"] + verbs: ["get"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: opentelemetry-targetallocator-rb-1 + annotations: + meta.helm.sh/release-name: "feast-release" + meta.helm.sh/release-namespace: "feast-val" + labels: + app.kubernetes.io/managed-by: "Helm" +subjects: + - kind: ServiceAccount + name: opentelemetry-targetallocator-sa + namespace: # helm value - {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: opentelemetry-targetallocator-role-1 + apiGroup: rbac.authorization.k8s.io \ No newline at end of file diff --git a/infra/charts/feast-feature-server/samples/service-monitor.yaml b/infra/charts/feast-feature-server/samples/service-monitor.yaml new file mode 100644 index 0000000000..b120bde6d5 --- /dev/null +++ b/infra/charts/feast-feature-server/samples/service-monitor.yaml @@ -0,0 +1,16 @@ +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + labels: + app: feast + name: otel-sm +spec: + endpoints: + - port: metrics + namespaceSelector: + matchNames: + - # helm value - {{ .Release.Namespace }} + selector: + matchLabels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/managed-by: opentelemetry-operator \ No newline at end of file diff --git a/infra/charts/feast-feature-server/samples/workflow.png b/infra/charts/feast-feature-server/samples/workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..18bc6e959e3ae02a38b49a8a2d77a6e56844477c GIT binary patch literal 183119 zcmeFYbyS>7wg(D?1b26LP4M6z2p-(srJ;ewNuco{5!?bKxCU!HG%kS7Yz-KK;wyu0U8=60`+2G zKR~6>-L`6?q2X4!DJ$z~C@VAT`T01zc{-t?JxNH<#L|2AgL0@Rbec|pg`B5I;)lTV zx5VaX=s#@P*wK}69ugbwkFMd?-lrfjB)1~g2M9c$N7Lu$$4H!~a@5zG9f&F~@5IBm z1Fd#mY~^Q*Y-heXz3F*$(E$`hBfnp3nup7Wmc}{y7W^yZQL%$P4Mg$zJ$7aye)QO} zG2%ugB@A?Xk>kVjW4Y&?>sF^4HIa9BJvpp4X}$N*a1|vB3VWX_U-GZj1=(wGqLnK@ zvGxfr4SH=sT&j_FpY_`IHCb73(ChUwYJyUCsPY2#G}@;(ZI&9WXpRqFyEq<`k}!P4 zf*P}S>w)X3?OL0f{N+l#M5j!)jPOkO`hSV zC2JGl=D{(Gh}28pjNla7DaL~4@t=NGb^>xdnXjhV(sbTVFI5>n(ZER2l9%R@agS{T zzfu&*dqqkqY|)po$?;Wh;n#guo5_XXaK}*HvCFZD82W|z@%I4vg_X9(J*s%q#vGcd zkIl#TtydbwNIr)6mX>)6`ntzgTc_>vjk!3+j0`%n5^e0y6EDzk0&kR^sp}OVKT);B zpk^k%+Ptq&YOA`np*H_xEuGZP-heYY1}2Oi&9-JX?lf<@Fpn-AY*WS*ck#0#6no0& z^OiUR=BKm${{H@$1xtl{Xf7w{%;)15C~ zf>E3R2G|3JcXTojx@^%pAFzFAqmE<7#?oizegD8s`9T_ub5d^8lXo=wB5`VodZqCGHT(yB>Qa#dd=7x-w z#741|YGUuq^+Ebw<#yj(L@BjZMZRpgQZ+F>#`vr(q+F-!qe@khTI4Y$u+y<4_Y?b< zbZperr!2d?hxA&aoFt9(Z<2WW-#Sd#)!MZ`yqA?~%Ab)U27PRQQ~z+@ai4eJcpu%9 zpoL^9;b16b4In9&M>9b|^>Tgfk#8F$96|=+g9yUV5M%}5xxuCH;YSTYBoS=g#F6xo zG^;U@2~1qv#Q4|~U|WpB`q%aOfVW>1Aj;ItFUcqp)KpCDB_C!(UYM#>b6T^>v2=62 zdeY9$^%diFT2q0c%45}b#a*^=PQF*#Bc3O$AK!K+TPk|9%d_{C>2b%B6KV2uy!n`H zpwXrotain&p5Baj&jJ~2%sZHhTwVx1!s>FNXPQ}lIpVL2)KZSU6 zc=;(_j8dk%rwgV(oRO+zti+g+nW3HWo)L1#7xQT*Z_alQaMzug+AZD1`<7Y7WY|+G zCle<=wXeLv2(@L}<+2bJ*;4DM z74I(RE|PGso2y?{XH`F$Xo&H%9%wuWB`_x##81XA!Iz+$r6HuPp!I$EF}d<(0rj(& z%gLEEnKY{+y*a|#23mw!{#nq{^HPmcj#ALLtq7J#(E@toL|ayy4p0?1wsoHM=Cj$B z*_P2(IHiA*LQ*ni0HqKAnSg@;$h^foqV;2|X7gkBvw8E8#nq6Kfao)6x@U9++6kX! zEfQ-|4<0XtEVTwY2V!(Y2NLa9oSz;@EJ-Xy0s;PMl7`awQoGWFQV7t#-PbIZ@tScu z9cnJ!vH%^bd^u@pNtefkfw$8GFphyu$k=z8lHjOd_3g8c-F81KqK@$(nkSJmWS+B{#?>0wOaj2o)hczG%PtM1qbhZzfepBzhuNR;3$rucZ= zHga-R>`o(1F^#)ikQx&h1-dU!@DSIG($5Y(P;ofw^?f0w8fBBXmRSA1j93ODBsGGj zTlU%)>BK8!f<^zu;fkX7hch`C)h zL7GlkIrJ0DIjs1?RYS_=wet87R$HB(lOIVmp1+s5H)@)vU#Ou>TOwZ3@Dt0;Cd0y5 zW43Jb)!1aUo+XRb+^PNwpQZJh~LJ$F*0O7?CrdQC}0@(RUs#T`#R7jX3mQ4X##bVD5Mq zId^T<+(FZE8W=g>=s)>csRR18tH0}OSC{Gw)idPJi-Y-#X2}XjM}Omc=bph^0pt+j z5s^Q`Pf1g&O0yiBUz=%1U!wcE<2=Uj$8b|^Qym$CeML`P_a?^+`Nn3(PRDwT;(0?- zV;DUu{Hv>FYJI~(DJ(f^XdgH1s0?Y;y*ZoNnu+t+5xXk;#Pg%Vq^JMJ@6P|zk1dgL zkr@|)352}5Y^Dj`Ol>to#nZ~Yn$(IznZwBLw%!kL*!?6t3aS9X3`>LVrkh8{eiNGs zdpP%M3*(7&|)Hx|WMK(Y8kf=pk_AHLNclq_54G!c^NKCHUuT*v% z06JPecOSs&&U*?xK(2LN>p^AReHA4|KN>1rnc>@Vu>9I>bb+dD z7ttlr1Ex~BFeLZh)aCk_uCVS&0k4ceSm|-~zQmhV_Yj5)(_dtjYplS;IGTXZ>eD>3LZar@)gW$DS!;ZGJL zO9>#0)vB(#OWTX0U{S}P3qwt*>kh$%-{csOiuX zi~Zm%KDbUZ26sOkjES~lgr<;y{(SMpPa?cB}#$9L|fT7`g3=7trpdN zH8dR-@0}N}Y`z~ka4*p6Yih<_LRKr}!oSuJQ;o6IX@o#L;4e$ZOG7Vvs*!~xT9u10 zA_pVUTdA=z&zkNHqPW*YCsPe)ZEZAOR2&-(6P*_AJ}QQedgajR{vB6C=SI8tk8}() zv^Y03%zu^9L5076X{h&ioqvY+UdN(gq5hGg-k^6F|5F+h@$TNgUFDHLH<{&RmZ{Xt~S=N7)c#MkwP8MQi{znmi4_Q`IZ9QgXA3rB% zaY120VOBX@W@cs?KS$@s1}bX*s*d_6%j)Xy4|psj1OkBsK_Y@ael9`}rKF^UgdYh# zdL)1V7Q1y}cqd!*tL)Krb8UdaBlzqHVo%+lDXTkne`Hz|ZswgA$d+dLhi+@h^ zKT=UMEr%;3^zT)Z!xc64W<)I{y_<@zAu9X_d7y&dM8*Bj5EVx+M;}#^&_hF0K+{lB zGz>!D&%d9SK64)1`nH^Td6{{+=6!kjyg;DM8SNb66Jo;SU9qig6gDe1wgIcvR{~aS zZszN`#zEN&VZuIP{Gg3HL}<1MaDoaMdVVVxiIhDw_b9BHjmp7}fBrX*f&t0AI@HP_ zIqoqV1}pRb{^%$`^EspbriJI&>@4UwAPq_G-PeCxCb;VI+7a^vhF`I%&%1D?e9%_41(BIH z271kRUJ=O?oW2Rpc@x~8>g;a3;M0JN?DOe~S&dxH3c-eKjpR$8`P{Jn^%`DKMP1N= zudcD^hp6)CBJiGO3M~Ct*;<53Bc zw=+h#4ySV4hka9FHpBjT^?kiQXvE-9=l1$4tbmf&lzC$`ozJWt(id^<%(}2UgTgWi z=%B_(n*y2Oed{qQTyjZ32a?sa*6P&bGJO58`*Q^HfC`sB$aX&R?xv+f*IC}QH6ol^ zEW|TQ(pPg=P@R57%CN%l;s5tAT-FD*?RufAMR(5?rI(jpb0o&;Fc9Kk(bxA#j|Kih z(`f43`kdQWw>KL{!DswSsrwxc4RQ%8C*rj}m~00x=75(jAqY>Y_J?co)E{;uIlVK!^$3}FvcF`yD_Qli z7(X^|dIHz$3YpRC@jf^>4?TJ7W;gonhuy*nMK^)x?pzha=u-2cyG7gX_R*@u3L#VY zwb^b_2rS^KBt*OFThCe2Us+v8Din{ppnAdtpjQDO4!y){h4~)pT(syMn8Q;nYA;kz zwe&=Q`aUTyD^25R!YlDGQdS*8-gd4P$l=+y=*-Y(ftt zY^V|`1W5h3G$8aWU3@0BxI&#LA*MYM%C0lTW|Hr{_=wW4$5ekLdvc-OrOI8&XywX@ zFfTHEZE-3$Zq{tUEt8yzC8VQyKy)>GzvHQ(+jn~qiT`{NH*^k*^r=QpgQV-`#Qt`|3{Hv3mWVh>iy>-H{Xz?V#?u0z@ zjhLy{7s&H0)_*fd@X=^KUp6!)Df;FCK0b1RKI~))d5_i4K3C46wBu>8kZu92$nQfU zOI_Q+Fz72nY=LW$NCIv)vmLKia z?I}%IN`>FO>=#iw_;toaZ5>=w7BeM4^f^cLk>cLvmv1WRy5zUVq6u-3tk*4s*f4F zeP)s8ut5T&@%ELc69;x~&U4Js4HXNc2haL>aTT(h1|eWqMMKJ|F=maCxB-Nf6cdtX z@4s}KmEgxnJCj}XQUcSRwrJ(As(U)RIduw1hvDaIBB>9cEo5}}$t5|Hg{}HK#_KJR zdvy`X$i)DJdoNiedSbH5Bre>uqN$|KpLxbDxtN)EUk&njv^_qt$VwPW_$U zk|{5Pj*E01NLbqlj!`A0HGBVrWxF3IQ_zaBbTW^IQ@enc^JEeh!+%Nlt(6yT&loUnk$kYB3BeH6Te1kIXDhYjqr2@9omM<{cuJ69vEmn z_uz9`HyD}tY{|+_{s6c&4r)l3N&29ff$uby(b8rhYSsJJ*SsmnElUJc+fhK8>?8ko0}J)|BZtHOrcMMUM1I1`&bN#e| zTnarjKWi(BP8xwFfAPhRjsFfdDMyqm>h8)v_A9u`xMJgKXP@$8aQ&1SQr6a?({F~C zDgfY%|80-ou)Ub~ndp?qxKkNZKmY|rdg z!ZIknmHti3T?De@iSDb!CSdZhwd;D{8B3JNBsOx3`pCK4u<2OR_U@*YWOJ_eMr^!Z zN_4MG>Na9zZ9w*p{wCkYf%eb~y!GhAKJ~fQyHu(D;Mc>;(vWye8iM`r&Cv#1ru1JTWVmZuagR{pz~ZsOg7`uy@o?hR);WPrYL%2RH&F z0kt>D91g0tU2m`7EJfInlFSKw8ybUdsjc;W^SfURK&ir;u`xv`q#tTdtv-1=1;ACUf8%&^Pch$=is z)IE(ie!zjOQhd?x>{We4DGtX*!>@ql_P44vIM32~4FUS4ZtH4AYRQ!mUf4-g)*(jj z*6l&n{U$I?NCrU2tIjuBnpfv|=A93e;X)=Y1RFD5F#j8~4~nr^36#G4%x=_%djeNi7m67 z-CQ{Ib%e{|u5w_bDJzw#Yzq7kgu zZfKCI^vDE^Pg(WxJ{^uMiHSJT^zgLbCQF5F_Y5(CiMoI8<_em#R+k3k5HLRC|9N$^ zF1!MMw%8B|i{<2Av!#3J=T9vX*lEKQa|NV~osyf<2o3CYFyo;FJ=qkZlEP4sc;mfVisAB9fa zOb&^lu6uaUbvG^sCf>#CeEG;1R&&%;O4%MCw88GKFbgps+TFQ22dJCeVW`cR$Hmtw zpZ@8aO$zigutO^00ipLnF<$XFIN?orp36iI!`4LZA(ArRidC5qd0DgqNV50Fsv%7s z;109%ed>!ou(0 zHsUa~AvCx$nPrWE)%96!4A8kM+j>{R-{)|?-$^Cc(#6DLFxga zo7W^v8$RMta`GSr_OldZztXPW>pAlNpX+k`0rdyV@s306u)*2;S`RX(t|J z6-o4KQ16Tb#>D)f$h6u)v{9SKKl4Ui2HMQQt5hYvg+ch|AK=}4c1FTgIqQ6N3`v77 zkja9u^8w+@T%VgRNa5Y_w)nMmjV8s@Cy`o`Fw7h=kJ(r}p{FE>wd3`3-$=>{A(>=A zreE!4@R~;m9`O8WHE*slgsq>tD9ZkR9^b*0)UA<;H7lLwukWNU{sNG+9yX$AQVl2q8}1o2^X<7k#tiu4kMckyQqLPEHHnO$-Zb}=mRdr zlbk2Apf$c&D^A^`#42nZ8Tu=j1&rM6O%ET4o?MtLI zJ@N$~anXCT=|MsIiyLw{;`6tLgr$K~HW)+XxV|;_2378x3)o%!1z9GYfcMbhPpmlR zo6h6*$PUwlozp>!!*)O%*~5l`a1w-I8!@~VF#H6vewqD4Sw=kq7?SV2CK$!HMoCcS zQFkGS?Q^!f9zH}c+oYi^6dyIOStzONDSQAJ?hUjF6e+3<3zP1ftHuU}*GLXc(t6pJ>)}&dwBLrLQ75VG!u{49f{=oSd?^XL$&K| z(Z?|;Oo)=ctf$J3QdN<0>U=zE<`5)gCiiz=olu^YoK(Z}2`$;~;JglBFG`1$J-OC> z!o||uDB$R`)5;^r2Uf~+T27IHDKie~X1Pujk5o+XP<{gEHcLaa%k{e|rIEXHH8+{U zN)vPz#$f4wT&jE8J+2Nfw{k-FxbU($`X9C+$_nY*vnA1lXem5=C&H)h_=u`h>Gxp` z`9|NWH!w($JxkllE<0CPx#Bo?-PiV$F0DZ$q-5-|F`$)Dc}6)=3A=K<>ZoubbaMo*X*nk}I$6*Mu^%#9$Hs!K6wh{OPlrfG`r_y%|^TXPX zC-8~)e0^`9)>4xvyjByc^3?3|Qf}6S{zYBaRZG$wIEBrS30CUFoag^`Sy{3dTU)KO z#GU7gS|az0#%*Wz*5dWi`s6cJIwdKgj!T(67hfiaEwQT~k4O==H_4yhSc|7}Hz_ck zY>sVT;1;b)ZURCFE1Qn0Y+6$$u`rFyivdHco_(DQlUt-krINf@__TTE!|0{L9aphc zR#_bH1Jwoipv&=x-9${0vy-YeDTSs+8CR;q=Rl$E-N}2kG(&t*Tr8tt%2Wo4-t#+X zM=Y{+51#)l<}9BAVPKi0DznkyeCE!0E4v7(71`zl5^_q?*7a=R>OMpxgFUy2IBQ-m zWD2?zT1dFdp!l^fqHf-&E@(;C%ubTT7J>NP28`UdK1&B9!1F6J z>nubPeZGdZo<9Je(=&rz1+Kmfo5k=Y#7MwHz|^FaBYbTY5%qH6vy;4|ITl3l+81r( zI*)H%iEdy+zoL*FB^ea(T7?()lm+k(*drMUYYGL%gT7rjSQ^^GwUr@{+xOts!Ebx8 z@agFR1j&U*C3v~u*n)s9o{9O{BSFD1uUhqfDzFgrm>NqZO2Fb)81DWAGMUKM9~-1G zELb$$2HX^%;w!_;LQ(tDBjb4bO)o9m7q0rFel?$STbY-Xouq7Pa%Pmb2@jMU@DeyJ z+YifZAhrW84RBM>$R`$L+oPsW*7;W-yvP`AmY-iI1eLHuG8>We+KktB$)d&sHYiRF1Hja}b0=eNwTgz?BNZhQKP zFQe(a_8(5d!t1(kTdanN3W!oGKXNh7eeR1SAq6gUvTp>@U zoaVF0u)vt@rzhl2zkL}2FP%_69+% z>Ww%pas>A2HjQ}DaBIZf_jqM;bxE!{`pNP_&j^AhWKt~fm1SJKhorp-DI#d)7{C2j zyM-qs|IrPJkuQuD-;aI^-|`2Y-FI-JNsWON^Gd7hO26u^&&!KkpDwCWokIAK!Z(iU zf-C(la|%%8qjQMS)gxAM9MCK9p8)~eLl$PZ_aV&~gSAEol)?LbMn+kcZSTEl0;(je zfsts43isN*R2jG6%m;(1mWB#JY<7{Jb!KAEDAOSbZs8XW<=)HDuvd*?SDF^zCWv~j zKhDOaecfuQa$0);#VZO0V?=mj=y|WS8YuL+@)p z8QHVvm`fM8l<2DbxSCAcmAsxpCPKw+Y_Oohj`<+Z4qFwx?$o-Tvd$EISp=7nX2Q89 z87O$jg46pb_JzS^3DS+L4H8TIG@`8|RAwKTbjvzxjXWIF2DoqJ0s2_>{rG9yP6V6v z)K4nloY#FS+A7O&jG?3QT;I~ZOyW(*P6IJHAOEIu-&2CQpjx#&doaIX0|qmZ{H_0G z#81;zb|aZ;qrQP^hRt6NT!|@q<(RK>LlYhJ0MC)n&!eU8k#rDayFq>dGFT^AZR;$X zAHnX9$PnY}rw2yq%LRa;hp{<*$KDPU7JC_=WyvXB96aMKH;^5Z{a<$WS+8%}t9;`q zeC;0906k3c!^4Y4CDdO5J=={pW zAQ~rvpZVwJw2S#_e3`-3ANiIrQhn+}t&?$)$4PE#&Xo<4N^6~a03MzyI|f95p*;#xrEMJ=a2iJwLZEq~iC;IS$R zu6|KqO%7tQmm%g;+N#R^evNbW`XtoV$l%@8_ZV~(7V1{ziXeoi=xIVreBTVrp60Iz z!blKL+1&1UxEQww=-0%_Z<)!d72_icd{XoWne?58Tl@N^CwuZnUye4!1-deU&gR-U zX(Qc>T|EIkM=->Mh(08m3;O-u#R}ZJ$~1tc_cCxyR=htiG`>DQN*2*R!%#AQHjWL- zqaz_M3h9dB6v>>s$ssKscM)-!3@oE7HuI#i0q97se%AS95&>iZFW7GER z81}nmDISb1mz;swncQt}VUkp|Y=2?vq-PPU0mLb1eEE7!8AVG6%nnPQ`VhJ}!UYx- zpDQ=*{C$fNx(Gn6?&@xLAtjUdKEKjbB(N-q_X1xUR~U{cz3{Lwg7H%3*o-be5Bs5j zEp?&R*@I$7Ae7J&q0ar?Z&A|mh)nCC0_m;tT`h;so*jANFh>lA2^q_90Si$OdfU4; zTAs_}Z$P1|mg`T+O9#V!)$=-u^<$ynN5I1MoR`{AEA}FjKN&B~hoWH7rO-jYIFr{5 zP=*+ef_mOqaL!;X5Vtk&!)&Tg8~2Ov{l$_s0QCX=N@%z9%)@6&ssiWJx4P^16=NeC zIB-Foy3{F2-q*AYupU`^(nDfQ+_2KhTa8U13g)?Gc?775M@yy?$Bv_ijoOf8+m9sz;;7^I z4u3w=jgLE?Ti%2ygWn(BSLL-we#6E6Db^d4*dj`=CP_eIXdk+eSR8gW^S$2nc+Cqe zy|pyAiccW4u&uujrUJ4xcr_mkzoJ??2TNN53=ca`Y^Z{R>|q6Sj6`x<7ig^7D7N}n z-1=J?Fhme1m~&iQTyE79YHhC{wNH+q6fj?_oi6AK8G07dycB7M?a9wdCa>Vwy<=k% zjLmbX{~3b(QD&-0$fsmCS7;3BxXt0~BjJQ`P@2^SEJfjDu6fRj*32zK$jRxU#KJ@0sYMw~xZbsT|$_s5Ewr{)Ew< zGotKE&I=k~@bup-U@M+)5}IET(M~%iK58ixlRI;HgD7jKDPxXCJ}|9_D>3+yF{DaW2O3G+!L>C3IwH~ zrDriBX)x%ubmFe5cdv+!>`2Po@b&}2HaSj}*K8@qW#@|4H6oOczsu$UBtLNKW{(!a zzmcU9SydBb1W((CcFZA*R-eD1bbq`p1Z9{>v57c{gfd8t5$im1Pv!@i<*_BCNN?$} z0dou*GU*c%4!W_JK(C08F^eu!EPRfHouRy-4TuBbx_#(Da;q$6aQbH##J$9<@Af77 z_p^yLm5dz5bl~1Ek}2S8K0QlZjBBt;O3Oc^;0xb7m8oN9AQM5(QU4+_rM?)I%%u=ID zvm+8xz;j(h*vlxPNhO33W^+h@d)#>j=W`co)KP0?KjW5yKK80)Fm_Jh!>5-$*r4Ff zPq^@bhWvmB&}EV(8Rc>nnPKoQmOy}_Cn#6c)t*s#S}gh-f@^;MPRr90$Uh6@GUegBPx-BPU3? z!~RzNrP8Mo)G=Zea<$nh*&DB)A#{XuNF`4iBYj(X2R68M#JH!l?-LU<{JHV{ zIhcX<@_SRsLI@`;n<^3yG&E1HL4kO(tyDT6`t{7-7W>5F6HRvgbgx`bfdL>4BBUQk zT!`gyl3;3(#-5QEK?t)lti<>1Ez*aP&-QItKzJ(NFVn1BJ zR2J>N-rak~00Ily1nFGpmFWo7Ddf%i#$AqE>UiFC({HqKaOr6Bya&9@Px2!C*!f)A zo!s?un0M#330W&WMGi@}59C}ESZL0uMt3o9i(}JmdHFT34clK7Y=+w;%w)g5NGV{w z3*9j2=$Wmy+Ed~w=A2CD{-rNKy}jM$lJ9)6*xg|TVY}{Xl|mGR!)NA=fXacuA*(eR zOJ}89G$5q`gT(*IWm|<-?Faovv>Vyke50e6a^|6<;@~&|A_ntUWE3aV3Z=pBU-p`Nd?qaBMI?ohPPR5eDNU?=6Ots{Vx%#JVEicMUsBoF zkr>|q4~ms4_kKK|7dJ_hG>?MbE}wrtLLSoHPzZttykU?L-mkTUl1rQx+-^2}9~FlM z1X-Y#6}3;(jkDfUAWXj$MvUTQVD_lUSUs`Gvk!$b++@kR=s<3_q^%@3(BdUPD}K>! zv;wbsj@6$>9f-}X=FqORm7%^u3%6M2a_3nElp+18Pxq}mRg9HwQ@2mkp5pr#&j_pD zYwh@sM`xMA5nD@#$Gc7SPsoX$W(rZ| zddhX)VdQ1PHYADX9(SH%Z)%1>&M)9g7tC}w9$Tf_?*9YI>)?eAkjb1}iWt}UKJVxX zB2p)#aN)Bk4(=EAQ`63Vv@AdAQ`DT5FZn>1;ko>%`pZgtsKlbE!9jP&A6y2Pm17o9$Ah7T>P>)geb=Y zTRsjTtXfw$!gEF4Dlb?BM>XE1j_n)?GFW|LQMZnI!4=4ICe{J&2tK8RKw_y$=%CBV zcUP@chu3B@Ht1`>Hb$@SYlAOo0 zqA)C&=N4}YpA@Uv8|R1*1cW8($Fy9Ech>I zgP05ATKE(AP~whX3xf~jZ}uwLewGMaXkxwhqZl7*=4puJ=qG2PKi-J|?yI`+de1C* z-=-$}FbLuHUY_`bLi62@?D|2gaiL5>?CBKt{8EG@r`bTm0;`s=Hj~>-%?clM2& z#VWxI4B_!Ul+?E2EOR^0_H3XwDEUX1A5mHr;zeAce{Z2LM?Vvlz=X8YnqAb z3kAllBv`jmJiuPfv_Q!93!PZ44LZpQJ#1w_GRyS|v|nUNgW)!jrwnqLQfjBA$$h_7 z5q8%ucs47`(BzWjV6YB50nf%oTQN$X)KU*C9%mUo{bK?hl%-xjI8bFLh z&9pe^7;u)J8GEuh3VyMb7d&vHD`3|C4XK0voU(;`Frd|TinWRxX_O`HV_n%8n@mhj zxCfi6dNg5E&)w->JowsaOs0pf$cMiikCLAlB3Id9&}n}e|B45m(;_r9Sfi9H?bA)w z@@Yy*xms#bY3DJ>^AP^}{`f+yL&88vh?g!7Xwoc;K1EXL4GEPm{!9fh%|y=1XD*@R zpvJoECWIJKX;@3n*mmc=4tOX1o!E&n@>eh@lI8uw2k{{g1R$Ql)}AiqJxbQX=BSFe zm4bQCgyAf+lapjJ%m|UtT{Mq&iSTcK&pKY0{U+tdcHMZx;??EO&$@@8L|_l75r@x% zH{Dhy&(JfSXGYUywO;G__~npn5zJXqI-3=RNl|?!6oChVa6lX0)z&rckge6sE18&8 zY`k=*Fnd1hPE%L+U|b%Bqavxc!Nqw!G4k^UmU5B_O;@SYqlr)^{65cuY2t6FLuaw} zLo{A#{N~G3lx!fED;Ap4VIlP(-HW7+rjgLNH#;=AV%b5tn*pwB2vhV3SFAtyS`kep ztVrC4o`XUs-z1>ik=dRcmb1uBHXvJuZc=00PN^VODWT+30jr%z^V@bcYdwb)SqVzB z6|LI)Al}o0y?&>VXq>fXehH=vG3Y@!X9%gi?h}dH)y4_QnNw<3n2@l3Y7`68`OP>` z%nv`&(9+q4nK=!Cpa)4JxI2}*)h(MvYcpM*p{$UW1BR}dMe~ElE#voxZGB8GBWPni|9Db z0{+n+#@7aIl-tj&_#B@Drrzt{9M$H7c8(5Z=IB%(0)FYEMb|$%w{fOmBOy11u=(eC z3v$q#h*Ik@vphVO_HJGqNR090T7R5!l*=!Bs({KFU<10BmZD&`KQA{K=^L6WEqNBAuvX^oZoH91n$OCc+r zC<^0&&Bk1;9PZsG7_L!Ymm#OjovQm*z-Fe}$BwkYu>C3hbazsgCFCXF{ zhf)fOS9TWo#y_r6{7h;yEY;#E%pEsTG74r=JP6_&Rw#;2-0CiIid#=v;~{t0xv{eW zJ!b(N_^gS?a1kHnNO*13wufrPL#>8nR7KZsKWV7lDq)KHRl&uTG0S?!pZ0e-2<*2d zwq05WT?J6FnADnYI=omX-b$wZMszTqU|ga$0~n#0YtQ=Jtp5$(-Qhz(F`6E*%~V~Q zb$XOgR&WuT5ghYmAlwpWSq;u#t7i{;s}``+M|7|eOzhB*R*ehdq7Q8{AxjyMyvC%t zHuVVqKzdeH*Rv`0gH*!FnyvlT{UXr*m@@0+nuWaJXyx94nVm!?)$o<~hHKrTjK{gI z;LA7Cf`vF6^IpM(S27J>LX}QQ9;EIr4k#nCPeYX;>sJY6=PY>0Ek>6V;nZ?lEzKyS zD&vlINtcwo3Y(};Dp0Gn@h^vea_OiC5vKuKK`$LjYgs$M(%=u-jS(mGHtP{t--CYu z+StW0u~jfn^7N0GIr0R`@X#FwwU2P$oNf#GzrfPRaIp@ya3r%{c<*~}EVXsOPa@nM z|#$#3tP7>Q!7JIT%HU)y> zA;WBEw7InWTXB=@<+!M3mRnbMZk(qIt(VB44BG>$aUO(l0v7_7=kYR;rZ#Ta*x1tK zH=mlnHQe-C2d7`S#p5{)l}YYy<=`cUy8-0B(LWnv0KWHXc?VNbk@&*1D` zkHaY_0C@FsvK&{dRsoiZ&5g3Z%T9`lj030#aRHB?0<8=L$m5umfS!`~NkU1avwgtj zv!aU0$LDRY2#P*}*VnH1u5^6x+VZ{|rLA9Cw0a`eG%H>Y$fnY?;gTq|Nsu^Wf2c92 zD2{pFf}6fifkkt*2#{f|<}mi(lv6@e|FU*EZ=Qopcke#iWqex%7&@yJF}C^1L_PSD z;V?Z1Cs})Gt!w0x(O!w4a9$>ZDkZ}R?(I@J>c@!C|Fw8GrbzifdITsq(VVt^(Clu+ z8@DT7yAdYS-bsQ@(gL#K7vDJNQJn8gkp@0~% z!^VRycPPQEB@E9%7Dlm#(L_ZP+fnJ0nur7=?AN>HE~-Uf1azy@Re#b*#eb5|Md@85 z&o2)Q4}D9t^5v$LwbxVF`{XD53gPDo#k$x0B_@;*es&V|Sc`yf6r31d52qZfZcz_j<$1o}Mkyz;O4StT4tlSj7RB3&jSt@5YJ~+Q5STDZUCLc`_9UTORO|k1 zt4@%D0BuQPy8CY~8PGjqj6mU6C_@A6k2P~^3M-)fnxgk)FTSXkB#TL-1bk@#aH&xGVqh7PbIunY7qJQq6^aH| zN-@t}+W8s=H0ccwa;Eq(*bv={H=|+flW>#rL4N5(-YSS%y0T6~j^*2#V;UdEZBp_X zeSE(i<>3lU(A$_q5&^_xJn46H=cmsAP`8VKBLCqpa6vS`C*ZHMoRzQD1;z993@!7e zK?OZA!%sHXUvv5ooHtXPQJ>w+*MG^&Z}Z#6wd(LEJUf743pBtDiVMdl7q&Y4qz0}B z#f%44h*ZkmjYd*UVfjz@u^KC$xquZ{@qJf<1v*=u&vpy$(jMw~ZoEVGf^Ezf<%H$1 zg)H~Vr)DSR84^90-uo&~whddBWQ{)QAmpuKmD?6RrY3po>k6wcuma*xm47!8Jrwnsm1JD8 zfeU+H4u9)TL*q$>T?wqrpk3;MY)=&^s}Ub)0R)c5vQ92 z%BivgEH~MzEP1C|5H?XO?LR?yDz=Brzcp9XLp?XV#B=sfOh}aGZv9*L%N_VL%>1AA zN2QHbi&Mg}g|J07e3t0wf;((qmPdKu`#v17Y2B`)yr3#d*f3zLmee0#I7OWcFZKB+ zoI0`1IAFrrwCjlq(cd#yF-v+HS->nZH|^f}NqutNIIOFy3$0DtTM=b-lE;8z7B%Oy z?(e4Hbpr^71dCl`$BB&Q(p>&c?k#iqBgQZmrPE!QcwBJH;t-|UP0}Vl11V$ZiPYV- zLTGFO3Oa&o0XeGv;)Ay@`&&CL>u}X-je|(5;rzrR$DHQa(je^gDsjoxM1{Mbh8DxX zS+#Hc{GnM(G+C!>$Eb%%9nS|Llp@ohG83_T9JqZe7&U(#4`f?VQTsI{Z~kc93gNV6 zhFiD6xcW9Y>jeM!76AqJt3K*D5BJm&Aw+%l;>=a&JnxE*Xc>Re%7&y$XGxSuN~hn} z?Dgl$(TLN7qoXUTd$60)D**qSyZZ1B@s5y?1ED{0^sH$rza1N=Y|Hunbqm(_L(6;U zuEK+m%NMfhY#1C@{3E_ke6wScsN&2rT;3A9DS_O6t8tazSD93?KL69@$&3+7@>|a{ zWxH$ePcOgQD@<&of`<+nRA1g{io`f#S8&p2g%ys~a1%*Ab!ebC5ewW42`aa#OWDS| z*(Uo!@fQzB6_mvBA4pH(HSxQ5xHI0Xd#A7B#!f=B_P7k}2j^ewB20w5U& zYTo>XYW_1)g{|M_-Sk{u9DiP%KR9ECzC~R&vWXU4WPh~%`D6UWILd)DQ%Yx1^Ur(k z52obj+`kuxyj6$uZ~Mt+LmAEk^O|Pvo?#gJS~l-)3xjT>>H`nzSbm$X1B#T23M!P$H%mWe>$UtB4dJU9zH`?45GL~^-2=ru5E1TT|1 zh5mNdKt~=jB~l5|^1c;njSG1<{hvwr2WWd8i8>$zHPnOmW@`k=Ys@;tt1VjPuFscz zx<9$}7E1W60Bmo=IOz{O>aO~3k%v@%o1^LPO+M}|n|C_8U7pPan8|&KKyDInXp$4P z`EB7N_Zug57+j`Hwe3dV{`h^8S$0NWC^ox;*@)yt$@xuf%Thiht1^?$yPmrL___)I zV6uvh6808WYYmISAZs6!_N^yiGFF}Qh@^l$j7eNDTZBvCp~qz0&AyGN4A%)medKWF z;qx?U5Mu|{8du0N1qRBmhLrPKk|%7@M*-zY5zcK?tm66=qPX+5t*@5e82KlB8a3=s z;;2376}^6V$0i8%UDpzonCMS<)A!O$K8E9IW~^#bCMNj(*AJRGL53o4g+b~llgAj8 zaYbygDsBgzr%Oyl&s`!27Tp?hhV!OOYw0+4X#oQSLpeDd*t?|AOSLo_{qk9_q>*y> z3|c?1MtN4yY_;%Fn~VBTPRMV+)ax{z`UzUZTXnLoZI!wjVu}Rkaq=JJa!pzbP#z*! z9IfGNoyW5s+Mg`8%BsvtLV|X>rNaxhL|+A~3#?GZ2SOCfCi5t=R#E2J*iK__b(XtS zj_r%gXGV+E&ML)SlCqC_e7;|Xt~aut6*vCKBtW?)<%;|G)dp*$XV`;ud&+Jz*hZzpZ)zbpqrfVcGn zSI%VG#CoPOq#v_ITm-4~Dvhd07n{8p9tTJ|){!3~Ixl*U4vt=#F;@IKbC27r?PewC zu^hgilrNPA?jSessWu}k2s!^CJgu@3?LLdG?*D^)_gh7?2zRp=#tW3<0NfmU*vUcu zkVFo|N#6v5o!U~1LlJnPoSqBq9G)nwl>sE>wW{(0r_9Ye)cQN6muXLdEEgf6k@hfK z(=#t5CP1R+|6%W~-=b>w_F+Yll9KL{kVaZcT0y$Ily0O;kZx2OK|s2th8nsghRz{| z8ggic=3VaZ-p_OI``Pb*uz#83fHkw$x~_FypFGcVU0p4h4S|l%8Q)erf1K%h1o^^J zq5xVD7xDianJd8`SP>s+293nWcT55>03H+I+4-T(gWo+9g$oS9PNpkd2L0S&w}g&9zx`UOifr zT9dHH#pA5U=sFJi6#yz7SZ7{l1Bv_g~qYv?bkvd^!>hkRQVezP2(;PP+P<~+O@Z3)wFa?zJhA+Pwgmn8}9&fny8OyfD7)uie9^oyG9TD>YriZSh~GPYPA4Dd&ptU$`PsvP4>EjaMT42a5QjHZ z3zx4oXtHl~q6u7iM=62`cL<5r=Ew*wh^0Uc8S0kfiEP@$VVHD?c3H_>e|oc#!Ve}Z z!>O`cf!d%#zPm%|Snkdj4uWn4W`+B?!V)k|dU;!uwSNppAKFrktB5lMP6si)Qh&<8 zk#Q!DLowu1Hzhk*n_VcD?O+L;rqJje?Tx>46+eFNdON1n9T3Cs2+0mK-gny{W6pNB z1gJfj04P(G&t{x^eaOtQLPEAcDMP@Qh2whlVwL8Wt|b}I$+dL9Mg^yhvpz=_X|0dQ zypETszX(ukS?b%wp`38caQ%52`0`%p-e-_tAoHjt0c~>up?kqk@pU-k{*9RFQ;vKZ zsGZ%Af9hcG@dFDv@IZ|I`!`t%h&n$3!P});i+t>)9+wm?7>;Dqh-4kROnuB^-@V(o zgFsj`F~>OyX2`;X=^yr2=!CNP(sd`)jQR$@a;_I+B!Li;^ErW zxw5<)FDZiW#rvQN&3f>D7^l|_rd9RK~*ZY8HW((ACA+vzS?_4-FT?7|}M zm`mPSg!isg`!3V0$bP5Q#=@vyYR{}XuW|5fLPyuJYV;!_{*k>XvIblL?|kp8+bc&Z zvcTwy^c{d#IHVkBKWwwC5NqxATe;fqBF>NiZc%{uR^`CUN9Et$v+2wq32vrI9EZR`tdv=z8zu;U6}n*}xY@YPpPqPmiPu z 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

QP;#Lb0dDVT!*f_>UhxPMplm=^66})vycY|2%K? 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 literal 0 HcmV?d00001 diff --git a/infra/charts/feast-feature-server/templates/deployment.yaml b/infra/charts/feast-feature-server/templates/deployment.yaml index 85b323610d..a550433db5 100644 --- a/infra/charts/feast-feature-server/templates/deployment.yaml +++ b/infra/charts/feast-feature-server/templates/deployment.yaml @@ -14,6 +14,9 @@ spec: {{- with .Values.podAnnotations }} annotations: {{- toYaml . | nindent 8 }} + {{- if .Values.metrics.enabled }} + instrumentation.opentelemetry.io/inject-python: "true" + {{- end }} {{- end }} labels: {{- include "feast-feature-server.selectorLabels" . | nindent 8 }} @@ -48,10 +51,18 @@ spec: - "feast" - "serve_registry" {{- else }} + {{- if .Values.metrics.enlabled }} - "feast" - "serve" + - "--metrics" - "-h" - "0.0.0.0" + {{- else }} + - "feast" + - "serve" + - "-h" + - "0.0.0.0" + {{- end }} {{- end }} ports: - name: {{ .Values.feast_mode }} @@ -88,4 +99,4 @@ spec: {{- with .Values.tolerations }} tolerations: {{- toYaml . | nindent 8 }} - {{- end }} + {{- end }} \ No newline at end of file diff --git a/infra/charts/feast-feature-server/templates/service.yaml b/infra/charts/feast-feature-server/templates/service.yaml index 68f096264e..11f7cc4cf2 100644 --- a/infra/charts/feast-feature-server/templates/service.yaml +++ b/infra/charts/feast-feature-server/templates/service.yaml @@ -11,5 +11,11 @@ spec: targetPort: {{ .Values.feast_mode }} protocol: TCP name: http + {{- if .Values.metrics.enabled }} + - name: metrics + port: 8000 + protocol: TCP + targetPort: 8000 # metrics port + {{- end }} selector: {{- include "feast-feature-server.selectorLabels" . | nindent 4 }} diff --git a/infra/charts/feast-feature-server/values.yaml b/infra/charts/feast-feature-server/values.yaml index 0c46bfff85..64d805a66c 100644 --- a/infra/charts/feast-feature-server/values.yaml +++ b/infra/charts/feast-feature-server/values.yaml @@ -15,6 +15,12 @@ imagePullSecrets: [] nameOverride: "" fullnameOverride: "" +metrics: + enabled: false + otelCollector: + endpoint: "" # sample endpoint: "otel-collector.default.svc.cluster.local:4317" + port: 4317 + # feature_store_yaml_base64 -- [required] a base64 encoded version of feature_store.yaml feature_store_yaml_base64: "" diff --git a/sdk/python/feast/cli.py b/sdk/python/feast/cli.py index f0655c40f2..f4e3e97d27 100644 --- a/sdk/python/feast/cli.py +++ b/sdk/python/feast/cli.py @@ -684,6 +684,13 @@ def init_command(project_directory, minimal: bool, template: str): default=5, show_default=True, ) +@click.option( + "--metrics", + "-m", + is_flag=True, + show_default=True, + help="Enable the Metrics Server", +) @click.pass_context def serve_command( ctx: click.Context, @@ -692,6 +699,7 @@ def serve_command( type_: str, no_access_log: bool, workers: int, + metrics: bool, keep_alive_timeout: int, registry_ttl_sec: int = 5, ): @@ -704,6 +712,7 @@ def serve_command( type_=type_, no_access_log=no_access_log, workers=workers, + metrics=metrics, keep_alive_timeout=keep_alive_timeout, registry_ttl_sec=registry_ttl_sec, ) diff --git a/sdk/python/feast/feature_server.py b/sdk/python/feast/feature_server.py index bf20e51df9..908c9741c2 100644 --- a/sdk/python/feast/feature_server.py +++ b/sdk/python/feast/feature_server.py @@ -1,16 +1,19 @@ import json import sys import threading +import time import traceback from contextlib import asynccontextmanager from typing import List, Optional import pandas as pd +import psutil from dateutil import parser from fastapi import FastAPI, HTTPException, Request, Response, status from fastapi.logger import logger from fastapi.params import Depends from google.protobuf.json_format import MessageToDict +from prometheus_client import Gauge, start_http_server from pydantic import BaseModel import feast @@ -19,6 +22,14 @@ from feast.data_source import PushMode from feast.errors import PushSourceNotFoundException +# Define prometheus metrics +cpu_usage_gauge = Gauge( + "feast_feature_server_cpu_usage", "CPU usage of the Feast feature server" +) +memory_usage_gauge = Gauge( + "feast_feature_server_memory_usage", "Memory usage of the Feast feature server" +) + # TODO: deprecate this in favor of push features class WriteToFeatureStoreRequest(BaseModel): @@ -218,6 +229,22 @@ def load(self): return self._app +def monitor_resources(self, interval: int = 5): + """Function to monitor and update CPU and memory usage metrics.""" + print(f"Start monitor_resources({interval})") + p = psutil.Process() + print(f"PID is {p.pid}") + while True: + with p.oneshot(): + cpu_usage = p.cpu_percent() + memory_usage = p.memory_percent() + print(f"cpu_usage is {cpu_usage}") + print(f"memory_usage is {memory_usage}") + cpu_usage_gauge.set(cpu_usage) + memory_usage_gauge.set(memory_usage) + time.sleep(interval) + + def start_server( store: "feast.FeatureStore", host: str, @@ -226,7 +253,18 @@ def start_server( workers: int, keep_alive_timeout: int, registry_ttl_sec: int, + metrics: bool, ): + if metrics: + print("Start Prometheus Server") + start_http_server(8000) + + print("Start a background thread to monitor CPU and memory usage") + monitoring_thread = threading.Thread( + target=monitor_resources, args=(5,), daemon=True + ) + monitoring_thread.start() + if sys.platform != "win32": FeastServeApplication( store=store, diff --git a/sdk/python/feast/feature_store.py b/sdk/python/feast/feature_store.py index 9600732e17..77638f5a62 100644 --- a/sdk/python/feast/feature_store.py +++ b/sdk/python/feast/feature_store.py @@ -1738,6 +1738,7 @@ def serve( type_: str = "http", no_access_log: bool = True, workers: int = 1, + metrics: bool = False, keep_alive_timeout: int = 30, registry_ttl_sec: int = 2, ) -> None: @@ -1754,6 +1755,7 @@ def serve( port=port, no_access_log=no_access_log, workers=workers, + metrics=metrics, keep_alive_timeout=keep_alive_timeout, registry_ttl_sec=registry_ttl_sec, ) diff --git a/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile b/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile index c272f4ed66..3114f03f52 100644 --- a/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile +++ b/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile @@ -7,7 +7,7 @@ RUN apt update && \ build-essential RUN pip install pip --upgrade -RUN pip install "feast[aws,gcp,snowflake,redis,go,mysql,postgres]" +RUN pip install "feast[aws,gcp,snowflake,redis,go,mysql,postgres,opentelemetry]" RUN apt update diff --git a/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile.dev b/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile.dev index 858a5ae7d1..49e70839a9 100644 --- a/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile.dev +++ b/sdk/python/feast/infra/feature_servers/multicloud/Dockerfile.dev @@ -9,7 +9,7 @@ RUN apt update && \ RUN pip install pip --upgrade COPY . . -RUN pip install "feast[aws,gcp,snowflake,redis,go,mysql,postgres]" +RUN pip install "feast[aws,gcp,snowflake,redis,go,mysql,postgres,opentelemetry]" RUN apt update RUN apt install -y -V ca-certificates lsb-release wget diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt index a9f1d625a8..ddf72c59f4 100644 --- a/sdk/python/requirements/py3.10-ci-requirements.txt +++ b/sdk/python/requirements/py3.10-ci-requirements.txt @@ -1,6 +1,7 @@ # This file was autogenerated by uv via the following command: # uv pip compile --system --no-strip-extras setup.py --extra ci --output-file sdk/python/requirements/py3.10-ci-requirements.txt aiobotocore==2.13.1 + # via feast (setup.py) aiohttp==3.9.5 # via aiobotocore aioitertools==0.11.0 @@ -19,6 +20,8 @@ anyio==4.4.0 # jupyter-server # starlette # watchfiles +appnope==0.1.4 + # via ipykernel argon2-cffi==23.1.0 # via jupyter-server argon2-cffi-bindings==21.2.0 @@ -28,6 +31,7 @@ arrow==1.3.0 asn1crypto==1.5.1 # via snowflake-connector-python assertpy==1.1 + # via feast (setup.py) asttokens==2.4.1 # via stack-data async-lru==2.0.4 @@ -48,7 +52,9 @@ azure-core==1.30.2 # azure-identity # azure-storage-blob azure-identity==1.17.1 + # via feast (setup.py) azure-storage-blob==12.20.0 + # via feast (setup.py) babel==2.15.0 # via # jupyterlab-server @@ -60,7 +66,9 @@ bidict==0.23.1 bleach==6.1.0 # via nbconvert boto3==1.34.131 - # via moto + # via + # feast (setup.py) + # moto botocore==1.34.131 # via # aiobotocore @@ -69,11 +77,13 @@ botocore==1.34.131 # s3transfer build==1.2.1 # via + # feast (setup.py) # pip-tools # singlestoredb cachetools==5.3.3 # via google-auth cassandra-driver==3.29.1 + # via feast (setup.py) certifi==2024.7.4 # via # elastic-transport @@ -96,6 +106,7 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via + # feast (setup.py) # dask # geomet # great-expectations @@ -105,7 +116,9 @@ click==8.1.7 cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via great-expectations + # via + # feast (setup.py) + # great-expectations comm==0.2.2 # via # ipykernel @@ -114,6 +127,7 @@ coverage[toml]==7.5.4 # via pytest-cov cryptography==42.0.8 # via + # feast (setup.py) # azure-identity # azure-storage-blob # great-expectations @@ -125,7 +139,9 @@ cryptography==42.0.8 # types-pyopenssl # types-redis dask[dataframe]==2024.6.2 - # via dask-expr + # via + # feast (setup.py) + # dask-expr dask-expr==1.1.6 # via dask db-dtypes==1.2.0 @@ -137,7 +153,9 @@ decorator==5.1.1 defusedxml==0.7.1 # via nbconvert deltalake==0.18.1 + # via feast (setup.py) dill==0.3.8 + # via feast (setup.py) distlib==0.3.8 # via virtualenv dnspython==2.6.1 @@ -151,6 +169,7 @@ duckdb==0.10.3 elastic-transport==8.13.1 # via elasticsearch elasticsearch==8.14.0 + # via feast (setup.py) email-validator==2.2.0 # via fastapi entrypoints==0.4 @@ -165,6 +184,7 @@ execnet==2.1.1 executing==2.0.1 # via stack-data fastapi==0.111.0 + # via feast (setup.py) fastapi-cli==0.0.4 # via fastapi fastjsonschema==2.20.0 @@ -180,13 +200,16 @@ frozenlist==1.4.1 # aiohttp # aiosignal fsspec==2023.12.2 - # via dask + # via + # feast (setup.py) + # dask geojson==2.5.0 # via rockset geomet==0.2.1.post1 # via cassandra-driver google-api-core[grpc]==2.19.1 # via + # feast (setup.py) # google-cloud-bigquery # google-cloud-bigquery-storage # google-cloud-bigtable @@ -201,8 +224,11 @@ google-auth==2.30.0 # google-cloud-storage # kubernetes google-cloud-bigquery[pandas]==3.13.0 + # via feast (setup.py) google-cloud-bigquery-storage==2.25.0 + # via feast (setup.py) google-cloud-bigtable==2.24.0 + # via feast (setup.py) google-cloud-core==2.4.1 # via # google-cloud-bigquery @@ -210,7 +236,9 @@ google-cloud-core==2.4.1 # google-cloud-datastore # google-cloud-storage google-cloud-datastore==2.19.0 + # via feast (setup.py) google-cloud-storage==2.17.0 + # via feast (setup.py) google-crc32c==1.5.0 # via # google-cloud-storage @@ -221,16 +249,19 @@ google-resumable-media==2.7.1 # google-cloud-storage googleapis-common-protos[grpc]==1.63.2 # via + # feast (setup.py) # google-api-core # grpc-google-iam-v1 # grpcio-status great-expectations==0.18.16 + # via feast (setup.py) greenlet==3.0.3 # via sqlalchemy grpc-google-iam-v1==0.13.1 # via google-cloud-bigtable grpcio==1.64.1 # via + # feast (setup.py) # google-api-core # google-cloud-bigquery # googleapis-common-protos @@ -241,30 +272,42 @@ grpcio==1.64.1 # grpcio-testing # grpcio-tools grpcio-health-checking==1.62.2 + # via feast (setup.py) grpcio-reflection==1.62.2 + # via feast (setup.py) grpcio-status==1.62.2 # via google-api-core grpcio-testing==1.62.2 + # via feast (setup.py) grpcio-tools==1.62.2 + # via feast (setup.py) gunicorn==22.0.0 + # via feast (setup.py) h11==0.14.0 # via # httpcore # uvicorn happybase==1.2.0 + # via feast (setup.py) hazelcast-python-client==5.4.0 + # via feast (setup.py) hiredis==2.3.2 + # via feast (setup.py) httpcore==1.0.5 # via httpx httptools==0.6.1 # via uvicorn httpx==0.27.0 # via + # feast (setup.py) # fastapi # jupyterlab ibis-framework[duckdb]==9.1.0 - # via ibis-substrait + # via + # feast (setup.py) + # ibis-substrait ibis-substrait==4.0.0 + # via feast (setup.py) identify==2.5.36 # via pre-commit idna==3.7 @@ -299,6 +342,7 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via + # feast (setup.py) # altair # fastapi # great-expectations @@ -322,6 +366,7 @@ jsonpointer==3.0.0 # jsonschema jsonschema[format-nongpl]==4.22.0 # via + # feast (setup.py) # altair # great-expectations # jupyter-events @@ -367,6 +412,7 @@ jupyterlab-server==2.27.2 jupyterlab-widgets==3.0.11 # via ipywidgets kubernetes==20.13.0 + # via feast (setup.py) locket==1.0.0 # via partd makefun==1.15.2 @@ -387,13 +433,17 @@ matplotlib-inline==0.1.7 mdurl==0.1.2 # via markdown-it-py minio==7.1.0 + # via feast (setup.py) mistune==3.0.2 # via # great-expectations # nbconvert mmh3==4.1.0 + # via feast (setup.py) mock==2.0.0 + # via feast (setup.py) moto==4.2.14 + # via feast (setup.py) msal==1.29.0 # via # azure-identity @@ -405,10 +455,13 @@ multidict==6.0.5 # aiohttp # yarl mypy==1.10.1 - # via sqlalchemy + # via + # feast (setup.py) + # sqlalchemy mypy-extensions==1.0.0 # via mypy mypy-protobuf==3.3.0 + # via feast (setup.py) nbclient==0.10.0 # via nbconvert nbconvert==7.16.4 @@ -431,6 +484,7 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via + # feast (setup.py) # altair # dask # db-dtypes @@ -465,6 +519,7 @@ packaging==24.1 # sphinx pandas==2.2.2 # via + # feast (setup.py) # altair # dask # dask-expr @@ -490,6 +545,7 @@ pexpect==4.9.0 pip==24.1.1 # via pip-tools pip-tools==7.4.1 + # via feast (setup.py) platformdirs==3.11.0 # via # jupyter-core @@ -502,8 +558,11 @@ ply==3.11 portalocker==2.10.0 # via msal-extensions pre-commit==3.3.1 + # via feast (setup.py) prometheus-client==0.20.0 - # via jupyter-server + # via + # feast (setup.py) + # jupyter-server prompt-toolkit==3.0.47 # via ipython proto-plus==1.24.0 @@ -515,6 +574,7 @@ proto-plus==1.24.0 # google-cloud-datastore protobuf==4.25.3 # via + # feast (setup.py) # google-api-core # google-cloud-bigquery # google-cloud-bigquery-storage @@ -531,8 +591,11 @@ protobuf==4.25.3 # proto-plus # substrait psutil==5.9.0 - # via ipykernel + # via + # feast (setup.py) + # ipykernel psycopg[binary, pool]==3.1.19 + # via feast (setup.py) psycopg-binary==3.1.19 # via psycopg psycopg-pool==3.2.2 @@ -544,12 +607,14 @@ ptyprocess==0.7.0 pure-eval==0.2.2 # via stack-data py==1.11.0 + # via feast (setup.py) py-cpuinfo==9.0.0 # via pytest-benchmark py4j==0.10.9.7 # via pyspark pyarrow==15.0.2 # via + # feast (setup.py) # dask-expr # db-dtypes # deltalake @@ -567,16 +632,19 @@ pyasn1==0.6.0 pyasn1-modules==0.4.0 # via google-auth pybindgen==0.22.1 + # via feast (setup.py) pycparser==2.22 # via cffi pydantic==2.7.4 # via + # feast (setup.py) # fastapi # great-expectations pydantic-core==2.18.4 # via pydantic pygments==2.18.0 # via + # feast (setup.py) # ipython # nbconvert # rich @@ -587,8 +655,11 @@ pyjwt[crypto]==2.8.0 # singlestoredb # snowflake-connector-python pymssql==2.3.0 + # via feast (setup.py) pymysql==1.1.1 + # via feast (setup.py) pyodbc==5.1.0 + # via feast (setup.py) pyopenssl==24.1.0 # via snowflake-connector-python pyparsing==3.1.2 @@ -598,8 +669,10 @@ pyproject-hooks==1.1.0 # build # pip-tools pyspark==3.5.1 + # via feast (setup.py) pytest==7.4.4 # via + # feast (setup.py) # pytest-benchmark # pytest-cov # pytest-env @@ -609,13 +682,21 @@ pytest==7.4.4 # pytest-timeout # pytest-xdist pytest-benchmark==3.4.1 + # via feast (setup.py) pytest-cov==5.0.0 + # via feast (setup.py) pytest-env==1.1.3 + # via feast (setup.py) pytest-lazy-fixture==0.6.3 + # via feast (setup.py) pytest-mock==1.10.4 + # via feast (setup.py) pytest-ordering==0.6 + # via feast (setup.py) pytest-timeout==1.4.2 + # via feast (setup.py) pytest-xdist==3.6.1 + # via feast (setup.py) python-dateutil==2.9.0.post0 # via # arrow @@ -644,6 +725,7 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via + # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -657,15 +739,19 @@ pyzmq==26.0.3 # jupyter-client # jupyter-server redis==4.6.0 + # via feast (setup.py) referencing==0.35.1 # via # jsonschema # jsonschema-specifications # jupyter-events regex==2024.5.15 - # via parsimonious + # via + # feast (setup.py) + # parsimonious requests==2.32.3 # via + # feast (setup.py) # azure-core # docker # google-api-core @@ -699,6 +785,7 @@ rich==13.7.1 # ibis-framework # typer rockset==2.1.2 + # via feast (setup.py) rpds-py==0.18.1 # via # jsonschema @@ -708,6 +795,7 @@ rsa==4.9 ruamel-yaml==0.17.17 # via great-expectations ruff==0.4.10 + # via feast (setup.py) s3transfer==0.10.2 # via boto3 scipy==1.14.0 @@ -724,6 +812,7 @@ setuptools==70.1.1 shellingham==1.5.4 # via typer singlestoredb==1.4.0 + # via feast (setup.py) six==1.16.0 # via # asttokens @@ -744,11 +833,13 @@ sniffio==1.3.1 snowballstemmer==2.2.0 # via sphinx snowflake-connector-python[pandas]==3.11.0 + # via feast (setup.py) sortedcontainers==2.4.0 # via snowflake-connector-python soupsieve==2.5 # via beautifulsoup4 sphinx==6.2.1 + # via feast (setup.py) sphinxcontrib-applehelp==1.0.8 # via sphinx sphinxcontrib-devhelp==1.0.6 @@ -762,9 +853,11 @@ sphinxcontrib-qthelp==1.0.7 sphinxcontrib-serializinghtml==1.1.10 # via sphinx sqlalchemy[mypy]==2.0.31 + # via feast (setup.py) sqlglot==25.1.0 # via ibis-framework sqlite-vec==0.0.1a10 + # via feast (setup.py) sqlparams==6.0.1 # via singlestoredb stack-data==0.6.3 @@ -774,17 +867,21 @@ starlette==0.37.2 substrait==0.19.0 # via ibis-substrait tabulate==0.9.0 + # via feast (setup.py) tenacity==8.4.2 + # via feast (setup.py) terminado==0.18.1 # via # jupyter-server # jupyter-server-terminals testcontainers==4.4.0 + # via feast (setup.py) thriftpy2==0.5.1 # via happybase tinycss2==1.3.0 # via nbconvert toml==0.10.2 + # via feast (setup.py) tomli==2.0.1 # via # build @@ -812,7 +909,9 @@ tornado==6.4.1 # notebook # terminado tqdm==4.66.4 - # via great-expectations + # via + # feast (setup.py) + # great-expectations traitlets==5.14.3 # via # comm @@ -829,25 +928,39 @@ traitlets==5.14.3 # nbconvert # nbformat trino==0.328.0 + # via feast (setup.py) typeguard==4.3.0 + # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-cffi==1.16.0.20240331 # via types-pyopenssl types-protobuf==3.19.22 - # via mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf types-pymysql==1.1.0.20240524 + # via feast (setup.py) types-pyopenssl==24.1.0.20240425 # via types-redis types-python-dateutil==2.9.0.20240316 - # via arrow + # via + # feast (setup.py) + # arrow types-pytz==2024.1.0.20240417 + # via feast (setup.py) types-pyyaml==6.0.12.20240311 + # via feast (setup.py) types-redis==4.6.0.20240425 + # via feast (setup.py) types-requests==2.30.0.0 + # via feast (setup.py) types-setuptools==70.1.0.20240627 - # via types-cffi + # via + # feast (setup.py) + # types-cffi types-tabulate==0.9.0.20240106 + # via feast (setup.py) types-urllib3==1.26.25.14 # via types-requests typing-extensions==4.12.2 @@ -884,6 +997,7 @@ uri-template==1.3.0 # via jsonschema urllib3==1.26.19 # via + # feast (setup.py) # botocore # docker # elastic-transport @@ -895,11 +1009,15 @@ urllib3==1.26.19 # rockset # testcontainers uvicorn[standard]==0.30.1 - # via fastapi + # via + # feast (setup.py) + # fastapi uvloop==0.19.0 # via uvicorn virtualenv==20.23.0 - # via pre-commit + # via + # feast (setup.py) + # pre-commit watchfiles==0.22.0 # via uvicorn wcwidth==0.2.13 diff --git a/sdk/python/requirements/py3.10-requirements.txt b/sdk/python/requirements/py3.10-requirements.txt index 0cca106863..93322ae434 100644 --- a/sdk/python/requirements/py3.10-requirements.txt +++ b/sdk/python/requirements/py3.10-requirements.txt @@ -20,17 +20,22 @@ charset-normalizer==3.3.2 # via requests click==8.1.7 # via + # feast (setup.py) # dask # typer # uvicorn cloudpickle==3.0.0 # via dask colorama==0.4.6 + # via feast (setup.py) dask[dataframe]==2024.5.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr dask-expr==1.1.0 # via dask dill==0.3.8 + # via feast (setup.py) dnspython==2.6.1 # via email-validator email-validator==2.1.1 @@ -38,7 +43,9 @@ email-validator==2.1.1 exceptiongroup==1.2.1 # via anyio fastapi==0.111.0 - # via fastapi-cli + # via + # feast (setup.py) + # fastapi-cli fastapi-cli==0.0.2 # via fastapi fsspec==2024.3.1 @@ -46,6 +53,7 @@ fsspec==2024.3.1 greenlet==3.0.3 # via sqlalchemy gunicorn==22.0.0 + # via feast (setup.py) h11==0.14.0 # via # httpcore @@ -65,8 +73,11 @@ idna==3.7 importlib-metadata==7.1.0 # via dask jinja2==3.1.4 - # via fastapi + # via + # feast (setup.py) + # fastapi jsonschema==4.22.0 + # via feast (setup.py) jsonschema-specifications==2023.12.1 # via jsonschema locket==1.0.0 @@ -78,13 +89,16 @@ markupsafe==2.1.5 mdurl==0.1.2 # via markdown-it-py mmh3==4.1.0 + # via feast (setup.py) mypy==1.10.0 # via sqlalchemy mypy-extensions==1.0.0 # via mypy mypy-protobuf==3.6.0 + # via feast (setup.py) numpy==1.26.4 # via + # feast (setup.py) # dask # pandas # pyarrow @@ -96,20 +110,33 @@ packaging==24.0 # gunicorn pandas==2.2.2 # via + # feast (setup.py) # dask # dask-expr partd==1.4.2 # via dask +prometheus-client==0.20.0 + # via feast (setup.py) protobuf==4.25.3 - # via mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf +psutil==6.0.0 + # via feast (setup.py) pyarrow==16.0.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr pydantic==2.7.1 - # via fastapi + # via + # feast (setup.py) + # fastapi pydantic-core==2.18.2 # via pydantic pygments==2.18.0 - # via rich + # via + # feast (setup.py) + # rich python-dateutil==2.9.0.post0 # via pandas python-dotenv==1.0.1 @@ -120,6 +147,7 @@ pytz==2024.1 # via pandas pyyaml==6.0.1 # via + # feast (setup.py) # dask # uvicorn referencing==0.35.1 @@ -127,6 +155,7 @@ referencing==0.35.1 # jsonschema # jsonschema-specifications requests==2.31.0 + # via feast (setup.py) rich==13.7.1 # via typer rpds-py==0.18.1 @@ -142,11 +171,15 @@ sniffio==1.3.1 # anyio # httpx sqlalchemy[mypy]==2.0.30 + # via feast (setup.py) starlette==0.37.2 # via fastapi tabulate==0.9.0 + # via feast (setup.py) tenacity==8.3.0 + # via feast (setup.py) toml==0.10.2 + # via feast (setup.py) tomli==2.0.1 # via mypy toolz==0.12.1 @@ -154,7 +187,9 @@ toolz==0.12.1 # dask # partd tqdm==4.66.4 + # via feast (setup.py) typeguard==4.2.1 + # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-protobuf==5.26.0.20240422 @@ -178,6 +213,7 @@ urllib3==2.2.1 # via requests uvicorn[standard]==0.29.0 # via + # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 diff --git a/sdk/python/requirements/py3.11-ci-requirements.txt b/sdk/python/requirements/py3.11-ci-requirements.txt index ce2e50b8a7..a451ad58af 100644 --- a/sdk/python/requirements/py3.11-ci-requirements.txt +++ b/sdk/python/requirements/py3.11-ci-requirements.txt @@ -1,6 +1,7 @@ # This file was autogenerated by uv via the following command: # uv pip compile --system --no-strip-extras setup.py --extra ci --output-file sdk/python/requirements/py3.11-ci-requirements.txt aiobotocore==2.13.1 + # via feast (setup.py) aiohttp==3.9.5 # via aiobotocore aioitertools==0.11.0 @@ -19,6 +20,8 @@ anyio==4.4.0 # jupyter-server # starlette # watchfiles +appnope==0.1.4 + # via ipykernel argon2-cffi==23.1.0 # via jupyter-server argon2-cffi-bindings==21.2.0 @@ -28,6 +31,7 @@ arrow==1.3.0 asn1crypto==1.5.1 # via snowflake-connector-python assertpy==1.1 + # via feast (setup.py) asttokens==2.4.1 # via stack-data async-lru==2.0.4 @@ -44,7 +48,9 @@ azure-core==1.30.2 # azure-identity # azure-storage-blob azure-identity==1.17.1 + # via feast (setup.py) azure-storage-blob==12.20.0 + # via feast (setup.py) babel==2.15.0 # via # jupyterlab-server @@ -56,7 +62,9 @@ bidict==0.23.1 bleach==6.1.0 # via nbconvert boto3==1.34.131 - # via moto + # via + # feast (setup.py) + # moto botocore==1.34.131 # via # aiobotocore @@ -65,11 +73,13 @@ botocore==1.34.131 # s3transfer build==1.2.1 # via + # feast (setup.py) # pip-tools # singlestoredb cachetools==5.3.3 # via google-auth cassandra-driver==3.29.1 + # via feast (setup.py) certifi==2024.7.4 # via # elastic-transport @@ -92,6 +102,7 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via + # feast (setup.py) # dask # geomet # great-expectations @@ -101,7 +112,9 @@ click==8.1.7 cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via great-expectations + # via + # feast (setup.py) + # great-expectations comm==0.2.2 # via # ipykernel @@ -110,6 +123,7 @@ coverage[toml]==7.5.4 # via pytest-cov cryptography==42.0.8 # via + # feast (setup.py) # azure-identity # azure-storage-blob # great-expectations @@ -121,7 +135,9 @@ cryptography==42.0.8 # types-pyopenssl # types-redis dask[dataframe]==2024.6.2 - # via dask-expr + # via + # feast (setup.py) + # dask-expr dask-expr==1.1.6 # via dask db-dtypes==1.2.0 @@ -133,7 +149,9 @@ decorator==5.1.1 defusedxml==0.7.1 # via nbconvert deltalake==0.18.1 + # via feast (setup.py) dill==0.3.8 + # via feast (setup.py) distlib==0.3.8 # via virtualenv dnspython==2.6.1 @@ -147,6 +165,7 @@ duckdb==0.10.3 elastic-transport==8.13.1 # via elasticsearch elasticsearch==8.14.0 + # via feast (setup.py) email-validator==2.2.0 # via fastapi entrypoints==0.4 @@ -156,6 +175,7 @@ execnet==2.1.1 executing==2.0.1 # via stack-data fastapi==0.111.0 + # via feast (setup.py) fastapi-cli==0.0.4 # via fastapi fastjsonschema==2.20.0 @@ -171,13 +191,16 @@ frozenlist==1.4.1 # aiohttp # aiosignal fsspec==2023.12.2 - # via dask + # via + # feast (setup.py) + # dask geojson==2.5.0 # via rockset geomet==0.2.1.post1 # via cassandra-driver google-api-core[grpc]==2.19.1 # via + # feast (setup.py) # google-cloud-bigquery # google-cloud-bigquery-storage # google-cloud-bigtable @@ -192,8 +215,11 @@ google-auth==2.30.0 # google-cloud-storage # kubernetes google-cloud-bigquery[pandas]==3.13.0 + # via feast (setup.py) google-cloud-bigquery-storage==2.25.0 + # via feast (setup.py) google-cloud-bigtable==2.24.0 + # via feast (setup.py) google-cloud-core==2.4.1 # via # google-cloud-bigquery @@ -201,7 +227,9 @@ google-cloud-core==2.4.1 # google-cloud-datastore # google-cloud-storage google-cloud-datastore==2.19.0 + # via feast (setup.py) google-cloud-storage==2.17.0 + # via feast (setup.py) google-crc32c==1.5.0 # via # google-cloud-storage @@ -212,16 +240,19 @@ google-resumable-media==2.7.1 # google-cloud-storage googleapis-common-protos[grpc]==1.63.2 # via + # feast (setup.py) # google-api-core # grpc-google-iam-v1 # grpcio-status great-expectations==0.18.16 + # via feast (setup.py) greenlet==3.0.3 # via sqlalchemy grpc-google-iam-v1==0.13.1 # via google-cloud-bigtable grpcio==1.64.1 # via + # feast (setup.py) # google-api-core # google-cloud-bigquery # googleapis-common-protos @@ -232,30 +263,42 @@ grpcio==1.64.1 # grpcio-testing # grpcio-tools grpcio-health-checking==1.62.2 + # via feast (setup.py) grpcio-reflection==1.62.2 + # via feast (setup.py) grpcio-status==1.62.2 # via google-api-core grpcio-testing==1.62.2 + # via feast (setup.py) grpcio-tools==1.62.2 + # via feast (setup.py) gunicorn==22.0.0 + # via feast (setup.py) h11==0.14.0 # via # httpcore # uvicorn happybase==1.2.0 + # via feast (setup.py) hazelcast-python-client==5.4.0 + # via feast (setup.py) hiredis==2.3.2 + # via feast (setup.py) httpcore==1.0.5 # via httpx httptools==0.6.1 # via uvicorn httpx==0.27.0 # via + # feast (setup.py) # fastapi # jupyterlab ibis-framework[duckdb]==9.1.0 - # via ibis-substrait + # via + # feast (setup.py) + # ibis-substrait ibis-substrait==4.0.0 + # via feast (setup.py) identify==2.5.36 # via pre-commit idna==3.7 @@ -290,6 +333,7 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via + # feast (setup.py) # altair # fastapi # great-expectations @@ -313,6 +357,7 @@ jsonpointer==3.0.0 # jsonschema jsonschema[format-nongpl]==4.22.0 # via + # feast (setup.py) # altair # great-expectations # jupyter-events @@ -358,6 +403,7 @@ jupyterlab-server==2.27.2 jupyterlab-widgets==3.0.11 # via ipywidgets kubernetes==20.13.0 + # via feast (setup.py) locket==1.0.0 # via partd makefun==1.15.2 @@ -378,13 +424,17 @@ matplotlib-inline==0.1.7 mdurl==0.1.2 # via markdown-it-py minio==7.1.0 + # via feast (setup.py) mistune==3.0.2 # via # great-expectations # nbconvert mmh3==4.1.0 + # via feast (setup.py) mock==2.0.0 + # via feast (setup.py) moto==4.2.14 + # via feast (setup.py) msal==1.29.0 # via # azure-identity @@ -396,10 +446,13 @@ multidict==6.0.5 # aiohttp # yarl mypy==1.10.1 - # via sqlalchemy + # via + # feast (setup.py) + # sqlalchemy mypy-extensions==1.0.0 # via mypy mypy-protobuf==3.3.0 + # via feast (setup.py) nbclient==0.10.0 # via nbconvert nbconvert==7.16.4 @@ -422,6 +475,7 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via + # feast (setup.py) # altair # dask # db-dtypes @@ -456,6 +510,7 @@ packaging==24.1 # sphinx pandas==2.2.2 # via + # feast (setup.py) # altair # dask # dask-expr @@ -481,6 +536,7 @@ pexpect==4.9.0 pip==24.1.1 # via pip-tools pip-tools==7.4.1 + # via feast (setup.py) platformdirs==3.11.0 # via # jupyter-core @@ -493,8 +549,11 @@ ply==3.11 portalocker==2.10.0 # via msal-extensions pre-commit==3.3.1 + # via feast (setup.py) prometheus-client==0.20.0 - # via jupyter-server + # via + # feast (setup.py) + # jupyter-server prompt-toolkit==3.0.47 # via ipython proto-plus==1.24.0 @@ -506,6 +565,7 @@ proto-plus==1.24.0 # google-cloud-datastore protobuf==4.25.3 # via + # feast (setup.py) # google-api-core # google-cloud-bigquery # google-cloud-bigquery-storage @@ -522,8 +582,11 @@ protobuf==4.25.3 # proto-plus # substrait psutil==5.9.0 - # via ipykernel + # via + # feast (setup.py) + # ipykernel psycopg[binary, pool]==3.1.19 + # via feast (setup.py) psycopg-binary==3.1.19 # via psycopg psycopg-pool==3.2.2 @@ -535,12 +598,14 @@ ptyprocess==0.7.0 pure-eval==0.2.2 # via stack-data py==1.11.0 + # via feast (setup.py) py-cpuinfo==9.0.0 # via pytest-benchmark py4j==0.10.9.7 # via pyspark pyarrow==15.0.2 # via + # feast (setup.py) # dask-expr # db-dtypes # deltalake @@ -558,16 +623,19 @@ pyasn1==0.6.0 pyasn1-modules==0.4.0 # via google-auth pybindgen==0.22.1 + # via feast (setup.py) pycparser==2.22 # via cffi pydantic==2.7.4 # via + # feast (setup.py) # fastapi # great-expectations pydantic-core==2.18.4 # via pydantic pygments==2.18.0 # via + # feast (setup.py) # ipython # nbconvert # rich @@ -578,8 +646,11 @@ pyjwt[crypto]==2.8.0 # singlestoredb # snowflake-connector-python pymssql==2.3.0 + # via feast (setup.py) pymysql==1.1.1 + # via feast (setup.py) pyodbc==5.1.0 + # via feast (setup.py) pyopenssl==24.1.0 # via snowflake-connector-python pyparsing==3.1.2 @@ -589,8 +660,10 @@ pyproject-hooks==1.1.0 # build # pip-tools pyspark==3.5.1 + # via feast (setup.py) pytest==7.4.4 # via + # feast (setup.py) # pytest-benchmark # pytest-cov # pytest-env @@ -600,13 +673,21 @@ pytest==7.4.4 # pytest-timeout # pytest-xdist pytest-benchmark==3.4.1 + # via feast (setup.py) pytest-cov==5.0.0 + # via feast (setup.py) pytest-env==1.1.3 + # via feast (setup.py) pytest-lazy-fixture==0.6.3 + # via feast (setup.py) pytest-mock==1.10.4 + # via feast (setup.py) pytest-ordering==0.6 + # via feast (setup.py) pytest-timeout==1.4.2 + # via feast (setup.py) pytest-xdist==3.6.1 + # via feast (setup.py) python-dateutil==2.9.0.post0 # via # arrow @@ -635,6 +716,7 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via + # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -648,15 +730,19 @@ pyzmq==26.0.3 # jupyter-client # jupyter-server redis==4.6.0 + # via feast (setup.py) referencing==0.35.1 # via # jsonschema # jsonschema-specifications # jupyter-events regex==2024.5.15 - # via parsimonious + # via + # feast (setup.py) + # parsimonious requests==2.32.3 # via + # feast (setup.py) # azure-core # docker # google-api-core @@ -690,6 +776,7 @@ rich==13.7.1 # ibis-framework # typer rockset==2.1.2 + # via feast (setup.py) rpds-py==0.18.1 # via # jsonschema @@ -699,6 +786,7 @@ rsa==4.9 ruamel-yaml==0.17.17 # via great-expectations ruff==0.4.10 + # via feast (setup.py) s3transfer==0.10.2 # via boto3 scipy==1.14.0 @@ -715,6 +803,7 @@ setuptools==70.1.1 shellingham==1.5.4 # via typer singlestoredb==1.4.0 + # via feast (setup.py) six==1.16.0 # via # asttokens @@ -735,11 +824,13 @@ sniffio==1.3.1 snowballstemmer==2.2.0 # via sphinx snowflake-connector-python[pandas]==3.11.0 + # via feast (setup.py) sortedcontainers==2.4.0 # via snowflake-connector-python soupsieve==2.5 # via beautifulsoup4 sphinx==6.2.1 + # via feast (setup.py) sphinxcontrib-applehelp==1.0.8 # via sphinx sphinxcontrib-devhelp==1.0.6 @@ -753,9 +844,11 @@ sphinxcontrib-qthelp==1.0.7 sphinxcontrib-serializinghtml==1.1.10 # via sphinx sqlalchemy[mypy]==2.0.31 + # via feast (setup.py) sqlglot==25.1.0 # via ibis-framework sqlite-vec==0.0.1a10 + # via feast (setup.py) sqlparams==6.0.1 # via singlestoredb stack-data==0.6.3 @@ -765,17 +858,21 @@ starlette==0.37.2 substrait==0.19.0 # via ibis-substrait tabulate==0.9.0 + # via feast (setup.py) tenacity==8.4.2 + # via feast (setup.py) terminado==0.18.1 # via # jupyter-server # jupyter-server-terminals testcontainers==4.4.0 + # via feast (setup.py) thriftpy2==0.5.1 # via happybase tinycss2==1.3.0 # via nbconvert toml==0.10.2 + # via feast (setup.py) tomlkit==0.12.5 # via snowflake-connector-python toolz==0.12.1 @@ -793,7 +890,9 @@ tornado==6.4.1 # notebook # terminado tqdm==4.66.4 - # via great-expectations + # via + # feast (setup.py) + # great-expectations traitlets==5.14.3 # via # comm @@ -810,25 +909,39 @@ traitlets==5.14.3 # nbconvert # nbformat trino==0.328.0 + # via feast (setup.py) typeguard==4.3.0 + # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-cffi==1.16.0.20240331 # via types-pyopenssl types-protobuf==3.19.22 - # via mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf types-pymysql==1.1.0.20240524 + # via feast (setup.py) types-pyopenssl==24.1.0.20240425 # via types-redis types-python-dateutil==2.9.0.20240316 - # via arrow + # via + # feast (setup.py) + # arrow types-pytz==2024.1.0.20240417 + # via feast (setup.py) types-pyyaml==6.0.12.20240311 + # via feast (setup.py) types-redis==4.6.0.20240425 + # via feast (setup.py) types-requests==2.30.0.0 + # via feast (setup.py) types-setuptools==70.1.0.20240627 - # via types-cffi + # via + # feast (setup.py) + # types-cffi types-tabulate==0.9.0.20240106 + # via feast (setup.py) types-urllib3==1.26.25.14 # via types-requests typing-extensions==4.12.2 @@ -862,6 +975,7 @@ uri-template==1.3.0 # via jsonschema urllib3==1.26.19 # via + # feast (setup.py) # botocore # docker # elastic-transport @@ -873,11 +987,15 @@ urllib3==1.26.19 # rockset # testcontainers uvicorn[standard]==0.30.1 - # via fastapi + # via + # feast (setup.py) + # fastapi uvloop==0.19.0 # via uvicorn virtualenv==20.23.0 - # via pre-commit + # via + # feast (setup.py) + # pre-commit watchfiles==0.22.0 # via uvicorn wcwidth==0.2.13 diff --git a/sdk/python/requirements/py3.11-requirements.txt b/sdk/python/requirements/py3.11-requirements.txt index 687e4bfe52..48104ebc2c 100644 --- a/sdk/python/requirements/py3.11-requirements.txt +++ b/sdk/python/requirements/py3.11-requirements.txt @@ -20,23 +20,30 @@ charset-normalizer==3.3.2 # via requests click==8.1.7 # via + # feast (setup.py) # dask # typer # uvicorn cloudpickle==3.0.0 # via dask colorama==0.4.6 + # via feast (setup.py) dask[dataframe]==2024.5.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr dask-expr==1.1.0 # via dask dill==0.3.8 + # via feast (setup.py) dnspython==2.6.1 # via email-validator email-validator==2.1.1 # via fastapi fastapi==0.111.0 - # via fastapi-cli + # via + # feast (setup.py) + # fastapi-cli fastapi-cli==0.0.2 # via fastapi fsspec==2024.3.1 @@ -44,6 +51,7 @@ fsspec==2024.3.1 greenlet==3.0.3 # via sqlalchemy gunicorn==22.0.0 + # via feast (setup.py) h11==0.14.0 # via # httpcore @@ -63,8 +71,11 @@ idna==3.7 importlib-metadata==7.1.0 # via dask jinja2==3.1.4 - # via fastapi + # via + # feast (setup.py) + # fastapi jsonschema==4.22.0 + # via feast (setup.py) jsonschema-specifications==2023.12.1 # via jsonschema locket==1.0.0 @@ -76,13 +87,16 @@ markupsafe==2.1.5 mdurl==0.1.2 # via markdown-it-py mmh3==4.1.0 + # via feast (setup.py) mypy==1.10.0 # via sqlalchemy mypy-extensions==1.0.0 # via mypy mypy-protobuf==3.6.0 + # via feast (setup.py) numpy==1.26.4 # via + # feast (setup.py) # dask # pandas # pyarrow @@ -94,20 +108,33 @@ packaging==24.0 # gunicorn pandas==2.2.2 # via + # feast (setup.py) # dask # dask-expr partd==1.4.2 # via dask +prometheus-client==0.20.0 + # via feast (setup.py) protobuf==4.25.3 - # via mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf +psutil==6.0.0 + # via feast (setup.py) pyarrow==16.0.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr pydantic==2.7.1 - # via fastapi + # via + # feast (setup.py) + # fastapi pydantic-core==2.18.2 # via pydantic pygments==2.18.0 - # via rich + # via + # feast (setup.py) + # rich python-dateutil==2.9.0.post0 # via pandas python-dotenv==1.0.1 @@ -118,6 +145,7 @@ pytz==2024.1 # via pandas pyyaml==6.0.1 # via + # feast (setup.py) # dask # uvicorn referencing==0.35.1 @@ -125,6 +153,7 @@ referencing==0.35.1 # jsonschema # jsonschema-specifications requests==2.31.0 + # via feast (setup.py) rich==13.7.1 # via typer rpds-py==0.18.1 @@ -140,17 +169,23 @@ sniffio==1.3.1 # anyio # httpx sqlalchemy[mypy]==2.0.30 + # via feast (setup.py) starlette==0.37.2 # via fastapi tabulate==0.9.0 + # via feast (setup.py) tenacity==8.3.0 + # via feast (setup.py) toml==0.10.2 + # via feast (setup.py) toolz==0.12.1 # via # dask # partd tqdm==4.66.4 + # via feast (setup.py) typeguard==4.2.1 + # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-protobuf==5.26.0.20240422 @@ -172,6 +207,7 @@ urllib3==2.2.1 # via requests uvicorn[standard]==0.29.0 # via + # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 diff --git a/sdk/python/requirements/py3.9-ci-requirements.txt b/sdk/python/requirements/py3.9-ci-requirements.txt index 017c1c8920..5055b3c79f 100644 --- a/sdk/python/requirements/py3.9-ci-requirements.txt +++ b/sdk/python/requirements/py3.9-ci-requirements.txt @@ -1,6 +1,7 @@ # This file was autogenerated by uv via the following command: # uv pip compile --system --no-strip-extras setup.py --extra ci --output-file sdk/python/requirements/py3.9-ci-requirements.txt aiobotocore==2.13.1 + # via feast (setup.py) aiohttp==3.9.5 # via aiobotocore aioitertools==0.11.0 @@ -19,6 +20,8 @@ anyio==4.4.0 # jupyter-server # starlette # watchfiles +appnope==0.1.4 + # via ipykernel argon2-cffi==23.1.0 # via jupyter-server argon2-cffi-bindings==21.2.0 @@ -28,6 +31,7 @@ arrow==1.3.0 asn1crypto==1.5.1 # via snowflake-connector-python assertpy==1.1 + # via feast (setup.py) asttokens==2.4.1 # via stack-data async-lru==2.0.4 @@ -48,7 +52,9 @@ azure-core==1.30.2 # azure-identity # azure-storage-blob azure-identity==1.17.1 + # via feast (setup.py) azure-storage-blob==12.20.0 + # via feast (setup.py) babel==2.15.0 # via # jupyterlab-server @@ -60,7 +66,9 @@ bidict==0.23.1 bleach==6.1.0 # via nbconvert boto3==1.34.131 - # via moto + # via + # feast (setup.py) + # moto botocore==1.34.131 # via # aiobotocore @@ -69,11 +77,13 @@ botocore==1.34.131 # s3transfer build==1.2.1 # via + # feast (setup.py) # pip-tools # singlestoredb cachetools==5.3.3 # via google-auth cassandra-driver==3.29.1 + # via feast (setup.py) certifi==2024.7.4 # via # elastic-transport @@ -96,6 +106,7 @@ charset-normalizer==3.3.2 # snowflake-connector-python click==8.1.7 # via + # feast (setup.py) # dask # geomet # great-expectations @@ -105,7 +116,9 @@ click==8.1.7 cloudpickle==3.0.0 # via dask colorama==0.4.6 - # via great-expectations + # via + # feast (setup.py) + # great-expectations comm==0.2.2 # via # ipykernel @@ -114,6 +127,7 @@ coverage[toml]==7.5.4 # via pytest-cov cryptography==42.0.8 # via + # feast (setup.py) # azure-identity # azure-storage-blob # great-expectations @@ -125,7 +139,9 @@ cryptography==42.0.8 # types-pyopenssl # types-redis dask[dataframe]==2024.6.2 - # via dask-expr + # via + # feast (setup.py) + # dask-expr dask-expr==1.1.6 # via dask db-dtypes==1.2.0 @@ -137,7 +153,9 @@ decorator==5.1.1 defusedxml==0.7.1 # via nbconvert deltalake==0.18.1 + # via feast (setup.py) dill==0.3.8 + # via feast (setup.py) distlib==0.3.8 # via virtualenv dnspython==2.6.1 @@ -151,6 +169,7 @@ duckdb==0.10.3 elastic-transport==8.13.1 # via elasticsearch elasticsearch==8.14.0 + # via feast (setup.py) email-validator==2.2.0 # via fastapi entrypoints==0.4 @@ -165,6 +184,7 @@ execnet==2.1.1 executing==2.0.1 # via stack-data fastapi==0.111.0 + # via feast (setup.py) fastapi-cli==0.0.4 # via fastapi fastjsonschema==2.20.0 @@ -180,13 +200,16 @@ frozenlist==1.4.1 # aiohttp # aiosignal fsspec==2023.12.2 - # via dask + # via + # feast (setup.py) + # dask geojson==2.5.0 # via rockset geomet==0.2.1.post1 # via cassandra-driver google-api-core[grpc]==2.19.1 # via + # feast (setup.py) # google-cloud-bigquery # google-cloud-bigquery-storage # google-cloud-bigtable @@ -201,8 +224,11 @@ google-auth==2.30.0 # google-cloud-storage # kubernetes google-cloud-bigquery[pandas]==3.13.0 + # via feast (setup.py) google-cloud-bigquery-storage==2.25.0 + # via feast (setup.py) google-cloud-bigtable==2.24.0 + # via feast (setup.py) google-cloud-core==2.4.1 # via # google-cloud-bigquery @@ -210,7 +236,9 @@ google-cloud-core==2.4.1 # google-cloud-datastore # google-cloud-storage google-cloud-datastore==2.19.0 + # via feast (setup.py) google-cloud-storage==2.17.0 + # via feast (setup.py) google-crc32c==1.5.0 # via # google-cloud-storage @@ -221,16 +249,19 @@ google-resumable-media==2.7.1 # google-cloud-storage googleapis-common-protos[grpc]==1.63.2 # via + # feast (setup.py) # google-api-core # grpc-google-iam-v1 # grpcio-status great-expectations==0.18.16 + # via feast (setup.py) greenlet==3.0.3 # via sqlalchemy grpc-google-iam-v1==0.13.1 # via google-cloud-bigtable grpcio==1.64.1 # via + # feast (setup.py) # google-api-core # google-cloud-bigquery # googleapis-common-protos @@ -241,30 +272,42 @@ grpcio==1.64.1 # grpcio-testing # grpcio-tools grpcio-health-checking==1.62.2 + # via feast (setup.py) grpcio-reflection==1.62.2 + # via feast (setup.py) grpcio-status==1.62.2 # via google-api-core grpcio-testing==1.62.2 + # via feast (setup.py) grpcio-tools==1.62.2 + # via feast (setup.py) gunicorn==22.0.0 + # via feast (setup.py) h11==0.14.0 # via # httpcore # uvicorn happybase==1.2.0 + # via feast (setup.py) hazelcast-python-client==5.4.0 + # via feast (setup.py) hiredis==2.3.2 + # via feast (setup.py) httpcore==1.0.5 # via httpx httptools==0.6.1 # via uvicorn httpx==0.27.0 # via + # feast (setup.py) # fastapi # jupyterlab ibis-framework[duckdb]==9.0.0 - # via ibis-substrait + # via + # feast (setup.py) + # ibis-substrait ibis-substrait==4.0.0 + # via feast (setup.py) identify==2.5.36 # via pre-commit idna==3.7 @@ -308,6 +351,7 @@ jedi==0.19.1 # via ipython jinja2==3.1.4 # via + # feast (setup.py) # altair # fastapi # great-expectations @@ -331,6 +375,7 @@ jsonpointer==3.0.0 # jsonschema jsonschema[format-nongpl]==4.22.0 # via + # feast (setup.py) # altair # great-expectations # jupyter-events @@ -376,6 +421,7 @@ jupyterlab-server==2.27.2 jupyterlab-widgets==3.0.11 # via ipywidgets kubernetes==20.13.0 + # via feast (setup.py) locket==1.0.0 # via partd makefun==1.15.2 @@ -396,13 +442,17 @@ matplotlib-inline==0.1.7 mdurl==0.1.2 # via markdown-it-py minio==7.1.0 + # via feast (setup.py) mistune==3.0.2 # via # great-expectations # nbconvert mmh3==4.1.0 + # via feast (setup.py) mock==2.0.0 + # via feast (setup.py) moto==4.2.14 + # via feast (setup.py) msal==1.29.0 # via # azure-identity @@ -414,10 +464,13 @@ multidict==6.0.5 # aiohttp # yarl mypy==1.10.1 - # via sqlalchemy + # via + # feast (setup.py) + # sqlalchemy mypy-extensions==1.0.0 # via mypy mypy-protobuf==3.3.0 + # via feast (setup.py) nbclient==0.10.0 # via nbconvert nbconvert==7.16.4 @@ -440,6 +493,7 @@ notebook-shim==0.2.4 # notebook numpy==1.26.4 # via + # feast (setup.py) # altair # dask # db-dtypes @@ -474,6 +528,7 @@ packaging==24.1 # sphinx pandas==2.2.2 # via + # feast (setup.py) # altair # dask # dask-expr @@ -499,6 +554,7 @@ pexpect==4.9.0 pip==24.1.1 # via pip-tools pip-tools==7.4.1 + # via feast (setup.py) platformdirs==3.11.0 # via # jupyter-core @@ -511,8 +567,11 @@ ply==3.11 portalocker==2.10.0 # via msal-extensions pre-commit==3.3.1 + # via feast (setup.py) prometheus-client==0.20.0 - # via jupyter-server + # via + # feast (setup.py) + # jupyter-server prompt-toolkit==3.0.47 # via ipython proto-plus==1.24.0 @@ -524,6 +583,7 @@ proto-plus==1.24.0 # google-cloud-datastore protobuf==4.25.3 # via + # feast (setup.py) # google-api-core # google-cloud-bigquery # google-cloud-bigquery-storage @@ -540,8 +600,11 @@ protobuf==4.25.3 # proto-plus # substrait psutil==5.9.0 - # via ipykernel + # via + # feast (setup.py) + # ipykernel psycopg[binary, pool]==3.1.18 + # via feast (setup.py) psycopg-binary==3.1.18 # via psycopg psycopg-pool==3.2.2 @@ -553,12 +616,14 @@ ptyprocess==0.7.0 pure-eval==0.2.2 # via stack-data py==1.11.0 + # via feast (setup.py) py-cpuinfo==9.0.0 # via pytest-benchmark py4j==0.10.9.7 # via pyspark pyarrow==15.0.2 # via + # feast (setup.py) # dask-expr # db-dtypes # deltalake @@ -576,16 +641,19 @@ pyasn1==0.6.0 pyasn1-modules==0.4.0 # via google-auth pybindgen==0.22.1 + # via feast (setup.py) pycparser==2.22 # via cffi pydantic==2.7.4 # via + # feast (setup.py) # fastapi # great-expectations pydantic-core==2.18.4 # via pydantic pygments==2.18.0 # via + # feast (setup.py) # ipython # nbconvert # rich @@ -596,8 +664,11 @@ pyjwt[crypto]==2.8.0 # singlestoredb # snowflake-connector-python pymssql==2.3.0 + # via feast (setup.py) pymysql==1.1.1 + # via feast (setup.py) pyodbc==5.1.0 + # via feast (setup.py) pyopenssl==24.1.0 # via snowflake-connector-python pyparsing==3.1.2 @@ -607,8 +678,10 @@ pyproject-hooks==1.1.0 # build # pip-tools pyspark==3.5.1 + # via feast (setup.py) pytest==7.4.4 # via + # feast (setup.py) # pytest-benchmark # pytest-cov # pytest-env @@ -618,13 +691,21 @@ pytest==7.4.4 # pytest-timeout # pytest-xdist pytest-benchmark==3.4.1 + # via feast (setup.py) pytest-cov==5.0.0 + # via feast (setup.py) pytest-env==1.1.3 + # via feast (setup.py) pytest-lazy-fixture==0.6.3 + # via feast (setup.py) pytest-mock==1.10.4 + # via feast (setup.py) pytest-ordering==0.6 + # via feast (setup.py) pytest-timeout==1.4.2 + # via feast (setup.py) pytest-xdist==3.6.1 + # via feast (setup.py) python-dateutil==2.9.0.post0 # via # arrow @@ -653,6 +734,7 @@ pytz==2024.1 # trino pyyaml==6.0.1 # via + # feast (setup.py) # dask # ibis-substrait # jupyter-events @@ -666,15 +748,19 @@ pyzmq==26.0.3 # jupyter-client # jupyter-server redis==4.6.0 + # via feast (setup.py) referencing==0.35.1 # via # jsonschema # jsonschema-specifications # jupyter-events regex==2024.5.15 - # via parsimonious + # via + # feast (setup.py) + # parsimonious requests==2.32.3 # via + # feast (setup.py) # azure-core # docker # google-api-core @@ -708,6 +794,7 @@ rich==13.7.1 # ibis-framework # typer rockset==2.1.2 + # via feast (setup.py) rpds-py==0.18.1 # via # jsonschema @@ -719,6 +806,7 @@ ruamel-yaml==0.17.17 ruamel-yaml-clib==0.2.8 # via ruamel-yaml ruff==0.4.10 + # via feast (setup.py) s3transfer==0.10.2 # via boto3 scipy==1.13.1 @@ -735,6 +823,7 @@ setuptools==70.1.1 shellingham==1.5.4 # via typer singlestoredb==1.4.0 + # via feast (setup.py) six==1.16.0 # via # asttokens @@ -755,11 +844,13 @@ sniffio==1.3.1 snowballstemmer==2.2.0 # via sphinx snowflake-connector-python[pandas]==3.11.0 + # via feast (setup.py) sortedcontainers==2.4.0 # via snowflake-connector-python soupsieve==2.5 # via beautifulsoup4 sphinx==6.2.1 + # via feast (setup.py) sphinxcontrib-applehelp==1.0.8 # via sphinx sphinxcontrib-devhelp==1.0.6 @@ -773,9 +864,11 @@ sphinxcontrib-qthelp==1.0.7 sphinxcontrib-serializinghtml==1.1.10 # via sphinx sqlalchemy[mypy]==2.0.31 + # via feast (setup.py) sqlglot==23.12.2 # via ibis-framework sqlite-vec==0.0.1a10 + # via feast (setup.py) sqlparams==6.0.1 # via singlestoredb stack-data==0.6.3 @@ -785,17 +878,21 @@ starlette==0.37.2 substrait==0.19.0 # via ibis-substrait tabulate==0.9.0 + # via feast (setup.py) tenacity==8.4.2 + # via feast (setup.py) terminado==0.18.1 # via # jupyter-server # jupyter-server-terminals testcontainers==4.4.0 + # via feast (setup.py) thriftpy2==0.5.1 # via happybase tinycss2==1.3.0 # via nbconvert toml==0.10.2 + # via feast (setup.py) tomli==2.0.1 # via # build @@ -823,7 +920,9 @@ tornado==6.4.1 # notebook # terminado tqdm==4.66.4 - # via great-expectations + # via + # feast (setup.py) + # great-expectations traitlets==5.14.3 # via # comm @@ -840,25 +939,39 @@ traitlets==5.14.3 # nbconvert # nbformat trino==0.328.0 + # via feast (setup.py) typeguard==4.3.0 + # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-cffi==1.16.0.20240331 # via types-pyopenssl types-protobuf==3.19.22 - # via mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf types-pymysql==1.1.0.20240524 + # via feast (setup.py) types-pyopenssl==24.1.0.20240425 # via types-redis types-python-dateutil==2.9.0.20240316 - # via arrow + # via + # feast (setup.py) + # arrow types-pytz==2024.1.0.20240417 + # via feast (setup.py) types-pyyaml==6.0.12.20240311 + # via feast (setup.py) types-redis==4.6.0.20240425 + # via feast (setup.py) types-requests==2.30.0.0 + # via feast (setup.py) types-setuptools==70.1.0.20240627 - # via types-cffi + # via + # feast (setup.py) + # types-cffi types-tabulate==0.9.0.20240106 + # via feast (setup.py) types-urllib3==1.26.25.14 # via types-requests typing-extensions==4.12.2 @@ -897,6 +1010,7 @@ uri-template==1.3.0 # via jsonschema urllib3==1.26.19 # via + # feast (setup.py) # botocore # docker # elastic-transport @@ -909,11 +1023,15 @@ urllib3==1.26.19 # snowflake-connector-python # testcontainers uvicorn[standard]==0.30.1 - # via fastapi + # via + # feast (setup.py) + # fastapi uvloop==0.19.0 # via uvicorn virtualenv==20.23.0 - # via pre-commit + # via + # feast (setup.py) + # pre-commit watchfiles==0.22.0 # via uvicorn wcwidth==0.2.13 diff --git a/sdk/python/requirements/py3.9-requirements.txt b/sdk/python/requirements/py3.9-requirements.txt index 096f54ab1f..7d549f908d 100644 --- a/sdk/python/requirements/py3.9-requirements.txt +++ b/sdk/python/requirements/py3.9-requirements.txt @@ -20,25 +20,32 @@ charset-normalizer==3.3.2 # via requests click==8.1.7 # via + # feast (setup.py) # dask # typer # uvicorn cloudpickle==3.0.0 # via dask colorama==0.4.6 + # via feast (setup.py) dask[dataframe]==2024.5.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr dask-expr==1.1.0 # via dask dill==0.3.8 + # via feast (setup.py) dnspython==2.6.1 # via email-validator email-validator==2.1.1 # via fastapi -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 # via anyio fastapi==0.111.0 - # via fastapi-cli + # via + # feast (setup.py) + # fastapi-cli fastapi-cli==0.0.2 # via fastapi fsspec==2024.3.1 @@ -46,6 +53,7 @@ fsspec==2024.3.1 greenlet==3.0.3 # via sqlalchemy gunicorn==22.0.0 + # via feast (setup.py) h11==0.14.0 # via # httpcore @@ -62,13 +70,16 @@ idna==3.7 # email-validator # httpx # requests -importlib-metadata==7.1.0 +importlib-metadata==8.2.0 # via # dask # typeguard jinja2==3.1.4 - # via fastapi + # via + # feast (setup.py) + # fastapi jsonschema==4.22.0 + # via feast (setup.py) jsonschema-specifications==2023.12.1 # via jsonschema locket==1.0.0 @@ -80,13 +91,16 @@ markupsafe==2.1.5 mdurl==0.1.2 # via markdown-it-py mmh3==4.1.0 + # via feast (setup.py) mypy==1.10.0 # via sqlalchemy mypy-extensions==1.0.0 # via mypy mypy-protobuf==3.6.0 + # via feast (setup.py) numpy==1.26.4 # via + # feast (setup.py) # dask # pandas # pyarrow @@ -98,20 +112,33 @@ packaging==24.0 # gunicorn pandas==2.2.2 # via + # feast (setup.py) # dask # dask-expr partd==1.4.2 # via dask +prometheus-client==0.20.0 + # via feast (setup.py) protobuf==4.25.3 - # via mypy-protobuf + # via + # feast (setup.py) + # mypy-protobuf +psutil==6.0.0 + # via feast (setup.py) pyarrow==16.0.0 - # via dask-expr + # via + # feast (setup.py) + # dask-expr pydantic==2.7.1 - # via fastapi + # via + # feast (setup.py) + # fastapi pydantic-core==2.18.2 # via pydantic pygments==2.18.0 - # via rich + # via + # feast (setup.py) + # rich python-dateutil==2.9.0.post0 # via pandas python-dotenv==1.0.1 @@ -122,6 +149,7 @@ pytz==2024.1 # via pandas pyyaml==6.0.1 # via + # feast (setup.py) # dask # uvicorn referencing==0.35.1 @@ -129,6 +157,7 @@ referencing==0.35.1 # jsonschema # jsonschema-specifications requests==2.31.0 + # via feast (setup.py) rich==13.7.1 # via typer rpds-py==0.18.1 @@ -144,11 +173,15 @@ sniffio==1.3.1 # anyio # httpx sqlalchemy[mypy]==2.0.30 + # via feast (setup.py) starlette==0.37.2 # via fastapi tabulate==0.9.0 + # via feast (setup.py) tenacity==8.3.0 + # via feast (setup.py) toml==0.10.2 + # via feast (setup.py) tomli==2.0.1 # via mypy toolz==0.12.1 @@ -156,7 +189,9 @@ toolz==0.12.1 # dask # partd tqdm==4.66.4 + # via feast (setup.py) typeguard==4.2.1 + # via feast (setup.py) typer==0.12.3 # via fastapi-cli types-protobuf==5.26.0.20240422 @@ -181,6 +216,7 @@ urllib3==2.2.1 # via requests uvicorn[standard]==0.29.0 # via + # feast (setup.py) # fastapi # fastapi-cli uvloop==0.19.0 @@ -189,5 +225,5 @@ watchfiles==0.21.0 # via uvicorn websockets==12.0 # via uvicorn -zipp==3.19.1 +zipp==3.19.2 # via importlib-metadata diff --git a/sdk/python/tests/integration/online_store/test_remote_online_store.py b/sdk/python/tests/integration/online_store/test_remote_online_store.py index 1d5dd0fca0..21ac00583b 100644 --- a/sdk/python/tests/integration/online_store/test_remote_online_store.py +++ b/sdk/python/tests/integration/online_store/test_remote_online_store.py @@ -195,7 +195,7 @@ def _overwrite_remote_client_feature_store_yaml( ) -def _start_feature_server(repo_path: str, server_port: int): +def _start_feature_server(repo_path: str, server_port: int, metrics: bool = False): host = "0.0.0.0" cmd = [ "feast", @@ -217,6 +217,21 @@ def _start_feature_server(repo_path: str, server_port: int): timeout_msg=f"Unable to start the feast server in {_time_out_sec} seconds for remote online store type, port={server_port}", ) + if metrics: + cmd.append("--metrics") + + # Check if metrics are enabled and Prometheus server is running + if metrics: + wait_retry_backoff( + lambda: (None, check_port_open("localhost", 8000)), + timeout_secs=_time_out_sec, + timeout_msg="Unable to start the Prometheus server in 60 seconds.", + ) + else: + assert not check_port_open( + "localhost", 8000 + ), "Prometheus server is running when it should be disabled." + yield f"http://localhost:{server_port}" if feast_server_process is not None: diff --git a/setup.py b/setup.py index b983617712..f5a4dd8c62 100644 --- a/setup.py +++ b/setup.py @@ -59,6 +59,8 @@ "uvicorn[standard]>=0.14.0,<1", "gunicorn; platform_system != 'Windows'", "dask[dataframe]>=2024.2.1", + "prometheus_client", + "psutil", ] GCP_REQUIRED = [ @@ -98,6 +100,8 @@ "psycopg[binary,pool]>=3.0.0,<4", ] +OPENTELEMETRY = ["prometheus_client","psutil"] + MYSQL_REQUIRED = ["pymysql", "types-PyMySQL"] HBASE_REQUIRED = [ @@ -215,6 +219,7 @@ + ELASTICSEARCH_REQUIRED + SQLITE_VEC_REQUIRED + SINGLESTORE_REQUIRED + + OPENTELEMETRY ) DOCS_REQUIRED = CI_REQUIRED @@ -385,6 +390,7 @@ def run(self): "elasticsearch": ELASTICSEARCH_REQUIRED, "sqlite_vec": SQLITE_VEC_REQUIRED, "singlestore": SINGLESTORE_REQUIRED, + "opentelemetry": OPENTELEMETRY, }, include_package_data=True, license="Apache",