From ea5979f36ad8bb79e8a184aaf7fe412137ad28eb Mon Sep 17 00:00:00 2001 From: Kyle-Neale Date: Wed, 29 May 2024 13:21:27 -0400 Subject: [PATCH 1/3] disable Traefik integration --- .codecov.yml | 9 - .github/CODEOWNERS | 8 - .github/workflows/test-all.yml | 19 -- traefik/CHANGELOG.md | 26 -- traefik/README.md | 216 +-------------- traefik/assets/logos/avatars-bot.png | Bin 8331 -> 0 bytes traefik/assets/logos/saas_logos-bot.png | Bin 6484 -> 0 bytes traefik/assets/logos/saas_logos-small.png | Bin 3675 -> 0 bytes traefik/assets/logs/traefik.yaml | 228 ---------------- traefik/assets/logs/traefik_tests.yaml | 245 ------------------ traefik/assets/service_checks.json | 20 -- traefik/datadog_checks/__init__.py | 5 - traefik/datadog_checks/traefik/__about__.py | 5 - traefik/datadog_checks/traefik/__init__.py | 8 - .../traefik/data/conf.yaml.example | 23 -- traefik/datadog_checks/traefik/traefik.py | 59 ----- traefik/hatch.toml | 13 - traefik/images/total_count_requests.png | Bin 46347 -> 0 bytes .../total_count_requests_status_code.png | Bin 52685 -> 0 bytes traefik/manifest.json | 47 ---- traefik/metadata.csv | 4 - traefik/pyproject.toml | 61 ----- traefik/setup.py | 75 ------ traefik/tests/__init__.py | 3 - traefik/tests/common.py | 16 -- traefik/tests/conftest.py | 35 --- traefik/tests/docker/docker-compose.yaml | 10 - traefik/tests/docker/traefik.toml | 25 -- traefik/tests/test_check.py | 29 --- 29 files changed, 2 insertions(+), 1187 deletions(-) delete mode 100644 traefik/CHANGELOG.md delete mode 100644 traefik/assets/logos/avatars-bot.png delete mode 100644 traefik/assets/logos/saas_logos-bot.png delete mode 100644 traefik/assets/logos/saas_logos-small.png delete mode 100644 traefik/assets/logs/traefik.yaml delete mode 100644 traefik/assets/logs/traefik_tests.yaml delete mode 100644 traefik/assets/service_checks.json delete mode 100644 traefik/datadog_checks/__init__.py delete mode 100644 traefik/datadog_checks/traefik/__about__.py delete mode 100644 traefik/datadog_checks/traefik/__init__.py delete mode 100644 traefik/datadog_checks/traefik/data/conf.yaml.example delete mode 100644 traefik/datadog_checks/traefik/traefik.py delete mode 100644 traefik/hatch.toml delete mode 100644 traefik/images/total_count_requests.png delete mode 100644 traefik/images/total_count_requests_status_code.png delete mode 100644 traefik/manifest.json delete mode 100644 traefik/metadata.csv delete mode 100644 traefik/pyproject.toml delete mode 100644 traefik/setup.py delete mode 100644 traefik/tests/__init__.py delete mode 100644 traefik/tests/common.py delete mode 100644 traefik/tests/conftest.py delete mode 100644 traefik/tests/docker/docker-compose.yaml delete mode 100644 traefik/tests/docker/traefik.toml delete mode 100644 traefik/tests/test_check.py diff --git a/.codecov.yml b/.codecov.yml index 2ce5446ec4..805f4e052d 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -199,10 +199,6 @@ coverage: target: 75 flags: - tidb - Traefik: - target: 75 - flags: - - traefik Trino: target: 75 flags: @@ -601,11 +597,6 @@ flags: paths: - tidb/datadog_checks/tidb - tidb/tests - traefik: - carryforward: true - paths: - - traefik/datadog_checks/traefik - - traefik/tests trino: carryforward: true paths: diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 07bb3ac846..7dc004736b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -205,7 +205,6 @@ /tidb/ @SabaPing xuyifan02@pingcap.com @DataDog/ecosystems-review /tidb_cloud/ @SabaPing xuyifan02@pingcap.com @DataDog/ecosystems-review /torq/ @torqio/rnd support@torq.io -/traefik/ @renaudhager /trino/ @ndrluis /twenty_forty_eight/ @DataDog/apps-sdk @DataDog/ecosystems-review /twingate/ @emrul partnerships@twingate.com @DataDog/ecosystems-review @@ -1106,13 +1105,6 @@ /tidb/assets/monitors @SabaPing xuyifan02@pingcap.com @DataDog/documentation @DataDog/monitor-app @DataDog/agent-integrations /tidb/assets/logs/ @SabaPing xuyifan02@pingcap.com @DataDog/agent-integrations @DataDog/logs-backend -/traefik/*metadata.csv @renaudhager @DataDog/documentation -/traefik/manifest.json @renaudhager @DataDog/documentation -/traefik/README.md @renaudhager @DataDog/documentation -/traefik/assets/dashboards @renaudhager @DataDog/documentation @DataDog/dashboards-backend @DataDog/agent-integrations -/traefik/assets/monitors @renaudhager @DataDog/documentation @DataDog/monitor-app @DataDog/agent-integrations -/traefik/assets/logs/ @renaudhager @DataDog/agent-integrations @DataDog/logs-backend - /twingate/*metadata.csv @emrul partnerships@twingate.com @DataDog/documentation @DataDog/ecosystems-review /twingate/manifest.json @emrul partnerships@twingate.com @DataDog/documentation @DataDog/ecosystems-review diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index b8bf42b317..6697f31e01 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -1227,25 +1227,6 @@ jobs: test-py3: ${{ inputs.test-py3 }} setup-env-vars: "${{ inputs.setup-env-vars }}" secrets: inherit - j54ace69: - uses: DataDog/integrations-core/.github/workflows/test-target.yml@master - with: - job-name: Traefik - target: traefik - platform: linux - runner: '["ubuntu-22.04"]' - repo: "${{ inputs.repo }}" - python-version: "${{ inputs.python-version }}" - standard: ${{ inputs.standard }} - latest: ${{ inputs.latest }} - agent-image: "${{ inputs.agent-image }}" - agent-image-py2: "${{ inputs.agent-image-py2 }}" - agent-image-windows: "${{ inputs.agent-image-windows }}" - agent-image-windows-py2: "${{ inputs.agent-image-windows-py2 }}" - test-py2: ${{ inputs.test-py2 }} - test-py3: ${{ inputs.test-py3 }} - setup-env-vars: "${{ inputs.setup-env-vars }}" - secrets: inherit jd73ec80: uses: DataDog/integrations-core/.github/workflows/test-target.yml@master with: diff --git a/traefik/CHANGELOG.md b/traefik/CHANGELOG.md deleted file mode 100644 index 4396dc7c93..0000000000 --- a/traefik/CHANGELOG.md +++ /dev/null @@ -1,26 +0,0 @@ -# CHANGELOG - traefik - -## 1.1.0 / 2023-06-13 - -***Added***: - -* Add `pyproject.toml` file ([#1195](https://github.com/DataDog/integrations-extras/pull/1195)) -* Add curated_metric column to metadata.csv files ([#1209](https://github.com/DataDog/integrations-extras/pull/1209)) -* Add average_response_time_sec to traefik integration ([#836](https://github.com/DataDog/integrations-extras/pull/836). Thanks [divyamamgai](https://github.com/divyamamgai)) - -***Fixed***: - -* Do not use requests directly ([#1090](https://github.com/DataDog/integrations-extras/pull/1090)) - -## 0.2.0 - -***Added***: - -* configuration now allows scheme parameter - -## 0.1.0 - -***Added***: - -* first version - diff --git a/traefik/README.md b/traefik/README.md index e9203f3f6d..1a590a6ac8 100644 --- a/traefik/README.md +++ b/traefik/README.md @@ -1,217 +1,5 @@ # Traefik Integration -## Overview +This integration has been moved to [integrations-core repo][1]. All development continues there. -Send [Traefik][1] metrics, logs, and traces to Datadog to monitor your Traefik services. - -## Setup - -The Traefik check is not included in the [Datadog Agent][2] package, so you need to install it. - -### Installation - -For Agent v7.21+ / v6.21+, follow the instructions below to install the Traefik check on your host. See [Use Community Integrations][3] to install with the Docker Agent or earlier versions of the Agent. - -1. Run the following command to install the Agent integration: - - ```shell - datadog-agent integration install -t datadog-traefik== - ``` - -2. Configure your integration similar to core [integrations][4]. - -### Configuration - - - - -#### About v2 -For information about the changes from v1 to v2, see the [Traefik migration guide][5]. For information about the latest version, see the [Traefik documentation][6]. - -#### Metric collection - -Follow [Traefik's documentation][7] to send [Traefik metrics][8] to Datadog. - -#### Log collection - -**Available for Agent >6.0** - -By default, [Traefik logs][9] are sent to stdout. This should not be changed for containerized version, because the Datadog Agent can collect logs directly from the container `stdout`/`stderr`. - -1. To configure [Traefik to log to a file][9], add the following in the Traefik configuration file: - - ```conf - [traefikLog] - filePath = "/path/to/traefik.log" - format = "json" - ``` - - The [common Apache Access format][10] is used by default and is supported by this integration. - -2. Collecting logs is disabled by default in the Datadog Agent. Enable it in your `datadog.yaml` file with: - - ```yaml - logs_enabled: true - ``` - -3. Add this configuration block to your `traefik.d/conf.yaml` file at the root of your [Agent's configuration directory][11] to start collecting your Traefik logs: - - ```yaml - logs: - - type: file - path: /path/to/traefik.log - source: traefik - service: traefik - ``` - - Change the `path` and `service` parameter values and configure them for your environment. - -4. [Restart the Agent][12] - -#### Trace collection - -1. [Enable APM][13] for Datadog, if needed. -2. Follow [Traefik's documentation][14] to send [traces][15] to Datadog. - - - - -#### About v1 - -See [Traefik documentation][16] for information about v1. For information about the changes from v1 to v2, see the [Traefik migration guide][17]. - -#### Metric collection - -1. To collect Traefik [metrics][17], open the `traefik.d/conf.yaml` file in the `conf.d/` folder at the root of your [Agent's configuration directory][18]. - -2. Add this configuration setup to your `traefik.d/conf.yaml` file to start gathering your [metrics][17]: - - ```yaml - init_config: - - instances: - - host: 10.1.2.3 - port: "8080" - path: "/health" - scheme: "http" - ``` - - Configuration Options: - - - host: Traefik endpoint to query. **Required** - - port: API listener of Traefik endpoint. Default value `8080`. _Optional_ - - path: Path of Traefik health check endpoint. Default `/health`. _Optional_ - - scheme: Scheme of Traefik health check endpoint. Default `http`. _Optional_ - -3. [Restart the Agent][19] to begin sending Traefik metrics to Datadog. - -See the [sample traefik.d/conf.yaml][20] for all available configuration options. - -#### Log collection - -**Available for Agent >6.0** - -By default, [Traefik logs][21] are sent to stdout. This should not be changed for containerized version, as the Datadog Agent is able to collect logs directly from container `stdout`/`stderr`. - -1. To configure [Traefik to log to a file][21], add the following in the Traefik configuration file: - - ```conf - [traefikLog] - filePath = "/path/to/traefik.log" - format = "json" - ``` - - The [common Apache Access format][22] is used by default and is supported by this integration. - -2. Collecting logs is disabled by default in the Datadog Agent. Enable it in your `datadog.yaml` file with: - - ```yaml - logs_enabled: true - ``` - -3. Add this configuration block to your `traefik.d/conf.yaml` file at the root of your [Agent's configuration directory][18] to start collecting your Traefik logs: - - ```yaml - logs: - - type: file - path: /path/to/traefik.log - source: traefik - service: traefik - ``` - - Change the `path` and `service` parameter values and configure them for your environment. - -4. [Restart the Agent][19] - -#### Trace collection - -**Available for Traefik v1.7+** - -1. [Enable APM][23] for Datadog, if needed. -2. Follow [Traefik's documentation][24] to send traces to Datadog. - - - - -### Validation - -[Run the Agent's `status` subcommand][25] and look for `traefik` under the Checks section. - -## Compatibility - -The check is compatible with all major platforms. - -**Metrics** - -For v2, see the list of [Traefik metrics][26] sent to Datadog. - -For v1, see the list of [metrics][27] provided by the integration. - -## Data Collected - -### Metrics - -See [metadata.csv][28] for a list of metrics provided by this integration. - -### Events - -The Traefik check does not include any events. - -### Service Checks - -See [service_checks.json][29] for a list of service checks provided by this integration. - -## Troubleshooting - -Need help? Contact [Datadog support][30]. - -[1]: https://traefik.io -[2]: https://app.datadoghq.com/account/settings/agent/latest -[3]: https://docs.datadoghq.com/agent/guide/use-community-integrations/ -[4]: https://docs.datadoghq.com/getting_started/integrations/ -[5]: https://doc.traefik.io/traefik/v2.0/migration/v1-to-v2/ -[6]: https://doc.traefik.io/traefik/ -[7]: https://doc.traefik.io/traefik/observability/metrics/datadog/ -[8]: https://doc.traefik.io/traefik/observability/metrics/overview/ -[9]: https://doc.traefik.io/traefik/observability/logs/#filepath -[10]: https://doc.traefik.io/traefik/observability/logs/#format -[11]: https://docs.datadoghq.com/agent/faq/agent-configuration-files/#agent-configuration-directory -[12]: https://docs.datadoghq.com/agent/faq/agent-commands/#start-stop-restart-the-agent -[13]: https://docs.datadoghq.com/getting_started/tracing/#enable-apm -[14]: https://doc.traefik.io/traefik/observability/tracing/datadog/ -[15]: https://doc.traefik.io/traefik/observability/tracing/overview/ -[16]: https://doc.traefik.io/traefik/v1.7/ -[17]: https://github.com/DataDog/integrations-extras/blob/master/traefik/metadata.csv -[18]: https://docs.datadoghq.com/agent/faq/agent-configuration-files/#agent-configuration-directory -[19]: https://docs.datadoghq.com/agent/faq/agent-commands/#start-stop-restart-the-agent -[20]: https://github.com/DataDog/integrations-extras/blob/master/traefik/datadog_checks/traefik/data/conf.yaml.example -[21]: https://doc.traefik.io/traefik/v1.7/configuration/logs/#traefik-logs -[22]: https://doc.traefik.io/traefik/v1.7/configuration/logs/#clf-common-log-format -[23]: https://docs.datadoghq.com/getting_started/tracing/#enable-apm -[24]: https://doc.traefik.io/traefik/v1.7/configuration/tracing/#datadog -[25]: https://docs.datadoghq.com/agent/guide/agent-commands/#service-status -[26]: https://doc.traefik.io/traefik/observability/metrics/overview/ -[27]: https://docs.datadoghq.com/integrations/traefik/#metrics -[28]: https://github.com/DataDog/integrations-extras/blob/master/traefik/metadata.csv -[29]: https://github.com/DataDog/integrations-extras/blob/master/traefik/assets/service_checks.json -[30]: https://docs.datadoghq.com/help +[1]: https://github.com/DataDog/integrations-core/tree/9938bf3afc91b8a12b83d3f79ef6941d3a0ed21e/traefik_mesh diff --git a/traefik/assets/logos/avatars-bot.png b/traefik/assets/logos/avatars-bot.png deleted file mode 100644 index 9705296a073c4fd410512fcc4de7db4415fcc7a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8331 zcmV;6Aavh}P)4$uwB={y#C9Af_!UEl<3Q{KDJ49b zo|3e*>A^rDZPJDmdfGxMO}aRjo^$CbZ8@Bi%L2k8aA-pzoZC`L=ygI#VoHo1JBi~Y zj-$x3EqknoEot-^&D^!eBO%F>JbKKGQu?i>WzBdrvuFR`{`bHC{qKJZNRkA93+U|Z ztO5X3(XXNb05m6gt&Sw;`vCyX1m~Uf|036QcXubc?yAI9L4eNA&agnkf5XCt$4xvI z?I`{Ca{Q;eyZbVaiBC^Dix@%uBN`XwYAwqB9RY%udAy= z3JVK~`0F(qO`%e$)JC7PTCL_}WjK5GtjOc>;P5+&qJ=|4L)33=HXE3noMiecr)ceQ zsJpxS5Yr!ViM$~I-O6_Z0J;DGrtoFw?9VAG~eme$r* zgGeNj^IpIV010BZ+r1xs^pWWB;lsv}k&*CCpw{W??(RO459Q>Q0CcN|s&NB6-n3~G z_P_%V1PTfY7O4EI9dmPYuIHbBUh>X6?}Q0`Z+Cb1e!gFeHv-W8Jgk5wsOF!1@=3I) zsK~%eVK~I}^fdbTD$9C@ADbEKI za83YP?L*-=LE%6A@WWSSAD=CvNC1t)j_&U6es-Uj7zhu~JoH%?J_IywpMLsjmrA8l z(_JAi;FJKgwZEaMsR?|Rg&zhqcDHZej=~1f+1c5}M;SQl0%%w5D0JW)Jb2J27K>$E zJl7ozfeS7#_5Ij{(}t6zFV*!1nYeJ3PDMF=S_}nT6cKFOwhj6YU{_GZwU0o=;j<_; zw|DPeR4f)7yk4*4a>>*+`T|jtUZtzkD&@86)b=WhqCl(BV5iTVL63BI zR}KvgMcz-LPymz31lF~;qwVeOO4t?b*s;U*#1l^#X-C+ebjz3xIMD!|ot@C7+r4hx zy1<$>Yi4_TdJI?0NxiTUZ1(xl@)awD&5t~cNHv-TWSI2&!O5vv?Du9AJ@51wf&|G) zw*pDAT%$y9HyI2auz>L z9~(zUElhulAPCTEwQ4brn|4<%{W2>BO!Qo~Zv31?3R`}k&h5Uges=~-~b z?smL-egc^b;*^1k)~<>%`UC_a*IBKMy8#Fx066{i3-riobIxBZ3TzDnpNT$jtCDC{q0lz|yp4_yFu_|nN@31YN041-#<-YCC&kMzffRR-lBuMPH z7bgO*43DeRA%aAR_@B78I@D3FOM7ApYM>t+A4ZKI|3%pNFW-wHXYZy>z^_y?x({ps z*Bt#I`qZf%0e`ai#;n1H28ao|yl~xhjD;U={mSxkP_uQbrJ$;+5(otT`b{^fgouD~ z0U%Mnw!BQfQl|n}=2ANTB7nEQp;RZ;NHePv*hRc~Ym32BOgf#0XE1B`{|i_SA6DZS z2A1~s+s?JOGjc+?ii&_otwxnDSGe9-jd^6l2#o0a@#VEP_(Dtp`+h@Hlegvj-v^ZN z0RTl!O+KMSl2Jjf(G>uNNXXzy0In@ogG_}V4NYyWMo>{Huef=mdi4)}Xcx)lKsP>a zR63b^c!$=lGeAE=)`ek!oD%>mC^!k#{<*fb-qFTJ#;#Y``U`_W9w61}bd9?nqQ2Mu^{+Oj_wXwf zp!b$rYW2dtzjo_ZzoNL<3_q%}vdL^(e>58ODoPt9f?6U12HAWU69@#rhadh0y!-AS zsZW1@AEW!nqo|@B0F4$6pI&;$osEf9sYhS2GP%h|xBsOkMAsHv?5x>YM9 zo<2oMi3|4qGcz;T__);<3Wc;Hk;q+HxkRN_r^gFu2h?j-^xJ*gb1|w<)un#xlSggRuS23lT$@SMdt8F zCX-pEQmI)W5X@%!96>{~T4ppl3zk%x<#gW<$!;1POv^RSCfMi#7!#oU{COX&5cplD z*Hf*JM1(+5T1Jf?d_G@7A8NAm*`Tbfyx8wgZYX97a!s2?F=5dZEUCoM{ys|emz_T^ zv94GFaIrY&&r27)X#i0$2u!EXMBI>K)qEJ%T)D{+lFoP2GMOx)(F9v(x`lEFLkaKY z3x%jUfT3yvfnb5US1MJE7Xn5j5So9rfJ^~!iPWa9uAU128_p5bFdr74%H;V>!3F^s zEqN+GH|&BH5q&P8Eb!tIsn!=FC_z+IR3`Kzl$4Y%mUAj7o_@RywNWy1pP!q7RyYIG1=!$26=*q!X3^~aB+@y?=g zEI189gb%~1rV}X_6iPus0X0U4!jNR(7;*-19|=IxC}g`os4kR3|#jJwksdDSKfJjv;1?_rN*t- z)@#1=)w|R?yS9N}Jh@kVc@DE@N`kQPLrH!=;=)8nAO2qkNcQOSDTamjzWUm0tS=X1 zjR3E{_L`G+3Q;7022V}zCkxc~#g5z1D{D3=X8gezH5epF@Mp`6E*laI&dm8fnsi25 zu6eI{&&!kH|jl~-N_qEnycrcjKhIss? z-+;#J+d!F8hLtL$s7@wUi4j4}sDmI$%!?EDD{f3-b^EnmeDR=@{XJx(Ea9ic^(wNqNcagLiBQjSEQNCz(ee zErv_87<4B`2mrf+cYnH1cKr)Kw@Bw)1g6#Z>>WJ0I6GMYr}+We4)(y|;ZKtNzfvUw zTWfL~`hR_(7u69CO5L75Zvp@OvsWx9PhW~5N})>b==#SFWY;~ns+HO@FjvsvyNrv; z>5wodvv&JVTYxKor@G|r6I<4@8vUCLi)w%Y^Y$uwTo3>5Z#3=8#yCl-S}krL7@TpV z4SH2hmVCjM9~M5uHOni(A76Zo68^E?;mA34f#TCH1$P3KXNXuPulAJ!GH@1Gs&PT) zigI9P4s`|a#oi}pUCw}c`(}Fh2pw{}8%_ICb}3BW>=`;n9b&_PdHaz@)4oiTATAm# z@}32Sm6b6GpwAyC2x_R+MwrDw01~$1_SU+j_YenAg&Ka~5XN2PIOHzXnhNC9YF3Rz zglOp*M6FbuGFaoh(_??vjB>Vqk#4N}>1=BoXkw+*EKCRx&(1yc7@svj67-|9V5LrF zD^o}VQXztv=P*i#5&+0XT;9kW0aUHCvFbJQzZ;hY&6>=7M-gDb!0ZL5S9`(fO)Bgq z1@pFCwOU~l3Ix6>EKqEo#pJF4p3o_j02^{tm(Ro{)m&7wFd@L@xB}iYVBWqb3oXD1 zaL6=ewP%$Oax5T5$|b2BZHogZ1&b!K2#20une*|Mz;eL6y(3Cfhq0)Pm=FNA_U> zq`-e*M#qUz+Ya_1u(tgFQ!bsO}g+B_u$# zbUx7I*Pmbf(IKC6`uM;R-ykMe{obk8xmf=^@ zcwBBV;mLixUoO$+?_CS)DT7-+6L;)Na4snr6QI$w??@I}fbsxt@b&N(4GUKW!BxY2 zJ%2HL*Y*5XXtmp)tz)bS2F%;L5-c2H-1@6~;Kcu^tJt^cLC)Ay$9 zs?US~X+PNhY#rm_-`mv-*^pUj1$OR$T1k`e^{sG5Y|0nJm+-wk$IFrdGrUbYg zr~Vghh>4K4X$%DoJ%Mo#-;=B8RoF5r@Coom@4M9T)kKIS0@u=?oFPH|gG@7wW;!<7 z6Q>1CP&1^^0{xjffZ_=;E;O2l#5JN5vexneNj>lg_}gZ{7(zjF;0)I0??qPz&a3Et zJm&(B25of5kG_s(I!l`o0g`Be-6^y{&Z1n(LN-%b$Odlm9ixuzh{o0@S%q^!h$I4+ zCksSj3A+>6QyJ$M&c-_e$C|&0I&Ok4NqV@*8FYlx2+0s8ghwEEoRuthpOCg1`X#I6 zHeu$ov0;_IDtO+_qrf9b(fTv4^K1yPKYFJx8hg@R9-eDJAzkM`1wYiCAt5ZHGB+G) zd>~t^O+^SL=>_Y3A7h`xj-qV#;aMQ3tsi6)7EU`G;yq3q=!uEE0VKqV;7Dbc`=Itk z^bzow^VbQ-`LMOWI{h8ruGtsm@Op+8J7=JSJ>pyc%h_t&Y-c;3pdt*^d#CVEBjo?Nwl zkmJ?CyUz}y6W{pqJC-lr^gGb~p1EEjmqkx)?p`c&$ltM`W$y_F3Hh)8?WAnun*Vme z`pt4-&I06gX&5c==s5zj7xTr82oAk)@92%#anAO{Nd!2b@POgpB5v$I*y6ib?qL%a z&ly8gOK5Eg>k@XMZ^aelUN7d$DFJdF^>`@m*rbrlV*0ROX&$s5R&?+hnFHq&_!00o|JUuk`;XXr_ml8bEDlw?t-6)7 zsGF++9z+2qrKVCkwA%se>4m4hB`Z|LOl+|-v}PmjIl|I!-o4Sc`R41E#ZLuWMP)fp z^q4953{(wcRBQrQLduv0D7W0uWc=_qKXub2V5Ri~HVELwd`Ftl_x>a$K*}gx22LOQ} z?puFt{p_ZWmX&N(2P^vp6sY9dyYEUMvlofh_3u+`H#F!f@a|vwsZq)cPkqZK7K@;5@LRTC zF6SCR*V+YV{(h-0P^h662%kUEcOE?Sqi3m&dG2?;!rL?cD zS=ZXdTIMj;lSC=xvY3S=WB)rpd@w)MJ_=x%IkW|S=6H(t@_g;5<=Mr#*PF@s*#v9)>8Xo;p?QDH@1-fm6{Jlqh*VeZ7zU!~QUI(YO1il#?GW`iI96wf$pr?Q!$m-U32_XU@W?PD~2vT7L zp`z6oQMMix7p*qjcekkUzWK*-7M;XNAjIz755;W#PRjJgP~}DdKOjs9*GK@F8B`(m zAuS}u-x{FiBh}R)RI=7a=vD>Df+Z?atV|YW&RG@}t|DPlW(J`MA=879aZTi$An0)b zpWQ2*?!^VZnLGJ|`tjOGN>>p2HkS&;H>{{1QdCkeG!CxGL*RT@Fi z!{AD8G421fx0v+d`4|??2?4n10-EK2ybAzCgb|8TJ5khvhl-j_MBy^ZXyOY~{>3+W z-~s}#4Io|{5ZXSnA@;KY0X8iW_-2fh*4%N1^%8Iw4^QB7#BC`@+!i1j{h!EbQdwpW z>FPzKYKel-uF!@Ijhq#UOF%6MM=*%voI~Kg;uYG5aDit$x@+X6HLy+qQf}BRz>@p^ zVI_z>vD@^JVx{bJ%;@KoxZZRp_Gi{A0Cs7lROcm%R^vqB(qh=U33WB>5_k`e<$?f< zdI6#9lqN+?3kVYf0+Is|As^x#Mg)P`d37Fe6=u?MUDDDR0)(=#E1=p2LMb(|G~W%C z5u{94NNDS|&|ZPsFW>t8XykPU9$^=g2n6M;Hv;FR8waDG=C$x>8i2Qb zJ_{MNR}%Rx2=y|MWGb6YwcWvXZiT#0p`8g98%m=7P>j&d%zm0knr^Y58F1kW=5&Jy zCKz!C^Enj^r(j(JNKX9dBT}lVAoSPhNX>G2KD01TXyItl8zLMEA;NnwhtF`Gyk!&nKovU?id2CX;NJsAXJqSqGYX+Om1{# zg^%q%+rJLaEHKM+LD!SMX#H?eCw87Iq>~`v~iIo@IR>Va~RWWkP~P zfZBqTs1Z`ToYLEbq1hBB21#4>$q=siFoHrw;J%AWi3d*{^RdTp1#R*5Wj1vg^oS7q z*-xh!Lw?yJLQaO4^*hgUwj&#-dk6pcm8YNB<~j5oL&(nAZko|}O1;y2Oxl_>nJ~-+ zyl>`FuLy+r%0RtWzw<1o8P+)67VCZ4`VYGFPa9rV-Q|FrMR57-W71Z8D&Ye#A0GCf z1z*qIw&4un7ARduWNUxSweSHCyNAQju*kx|Td)tXyS@M8VOt}-q1fcwueytI*8|J- zE%yPycDmSe;%dub*$sw2$!~C&7XTLe+bt|F4dluw&keP|~eb z(!!Xq)cR+6yW#`snv@BmlVLt_^hvA=ADe0koDr1})4FU45#AyP3jIUbweqOc_O26K z*7A~9kq-hax_t~>uC)Tc$7f5^|AQZv93>cK_?GszprrhP5E%4zA zUUc^mxMpuqvVzG33a7!Qu*EVgTe{Xi>(Rf-z{lRGd6hUiPrzH9{G9;&1FC;c7J?=M z=LDd)NPnB_=jJhZQ~!V`4FLFl={$n@#Fn+Jq<>=yUI;+HG;jL|=Mi`nKHyOUfLx|L zze4nzkFVAFvTK{^4<4`!KVg*BslaL+(^Qe<`(g+ zf>#32*iGlc`>ddg&vAb|cqahe6?A+??16h}t(P~*2MrJ=!REhJP0*ykz}w3&Io@A! zG4D3d$_oNOyuaci_*318aNkl3S|SeSL5XsMM@pv9pD(cjB|^Z-qdw2zfxPMe0Uy)B ziQpMLu$gv>P(d3wDe%5Htw(-q*Ic#n`_(c(c(Qx~EfV92f)T!`Y}l3;T>qgsr5`f8rUsg73OWI1>4)!$DMCjmX5$Y*Apalwj z(ZCkZ-~kPNeKHb!SJ|+Q*9jp$36Lr{l-eF$*|04we|g)%o(?)ANi&_Dv^fhc0k^rm zOn;6r5qKidnxH>HIZn}rAg>cbd=enpQZd+{ZqB8JOlykhu5^^{76~bVkN2PW zez^CZIcLtDJJ0jXoik_Rv^13Pa42yA005qfGFaz1jy_u$7RIyJ&}Aul4%i;b#@+w` zi0D5!1ke!;QV%s$t^D{y_)b~|gX2Nvc0Q~5`V?0Fo;Y6zp-(FSPAeDG9~-jNwiTWjkM!#Xc7~#kth+9js0UO?K9HeemmYO_65#DWt(iR z>rx0ka$k?+@+|wAA5T8#Ea&ZF>+OB<*R_jR?QSePZvN*_T+n6>AnaZ>J^`g>A%oI$h7FUnjhC-uqowu#aA8^h;~Q@Q*Pcx0+5AOZg2%1@>83 zp{PgD*x@LH8hy`8mhf)bfdy`SU@{U1!(>ocUhajf($wX+xEZCyCVXpSfj5|_ox}}# zd+T4=buo2*7{#QLTW4_0ffEMzL@fMcVnhvhNYG;Y_aWS%hB-FJz~b=-q0zY?>%${b z^IF6lhpH_U<-&hSMnR_pxnrQR_WD;*FPx zTfo6wp;S_gE_G@=!Ia5XO;0fv?qcm~HjbyqyqG*@zI)$CUX>}MKE@Wi6w4AcH7%z0Aa5B;W%6fU5QqmKi}*> zHJtTne{x--iapNN=g9GWjVti5-t4I3Q`Qt; z3q3PRs2nBE$$N`*Xa^_7lF;f#O4lFdnz*Z8Cd`#bsy>d)tINvM17rohiAyt*6N(aA|MnoBFH=B#pU2kEXnQdpDF@cgn+TJl-7?Iukr zD9Q*oi(+9HgpJ~;IB}7&r#W}{;CSNhbm<=jc#q_mFdTynWs8=OfChDIYFf$B^M3X> z2Zb)SAXLfye2oL~VqRX0Sm>ZiIk%~Ac{ypbqL7VBG1SS7ewkq&tjF_5(d02q;Q}NC zB2w1x_IN=+1(=$tE-{HJQ}3;Q&7Mvs*e*$?U$2zu=G$OJafz8q)%?r~GGx*6(Bsfc zigwC}PDt2U>FRES@3VXs^J}URmUn` zlmbKQn1hj#ZY_`2(F*2?Zjtpd%#t2z$`!nRy%D;>kf|E&zt#p*CVK7KbxX=aQbx~WU()3>=OD--I4T=a1i)7>ltM!KUH8UKUKWYb7ixXm0zv7}8OzWgA#CH; zR~W#uuwqk!Y=Vv3ue7qU#ZASVsBIY>?0I2G*xNUOf#%v{f-*F8P>UIk)aS+cW=BzK z3*OzsO?gmM#(-x8F$gvO@;g>=iLjgP>}58(!}o3LHQlmT`GjA$ch!CxwO{& za<^Xf2J?HCUbh}tO5_uv=+qyWOtwR zaY~_&VoH)!d+%hs+~k@w7;U(TV~){ZJz#LqmL_>oQlrOv9_Os9VtyqMX~sxQR#(tS z?EFi|=rca(1`cK<+1pt4)~Ae3olW+4uRbU|9+FS7XO)J~7j7hX@heBm;lGkCEms^! z@lTt+D`j;w>(ydGDVlbvGpV*)$!Bw-|uUf z`SBw)fvl7NBK}T|WmfM49|f-3VL4CBa()}BDn~`GUWozBS45t`ia~l#@|$pu=SXg9 z&vS$B#yu ztDEZ5WV9^h?jKKc_Iwm3-yJT5=nz(XLNIHTY$b?Xv11kmHWif*ZFZm)LN$@s^Kbi4#0uSBx%`77Eg#6dpwo67|b0t zVXxM8;lLEQ=6sUWCnXT1gBFeR7oXiAjn}ivXM&G$&l*tIu7lV1L|Sjzke5(p94?6L zBl+{bp9F0lajbqIx2;R0 zEYV$1rIYWz+`GRw_Yre3jPtP}t5foE%WHPJOoD4PMgE?azmyPJ9Oml%Z-^E! zy9)Mkt;7p5gB(e>)c8^G3A#fM>b?2SeR%eZRmPHOK+NQt=K?zEcGQQ#RNvCm%3`C!G}jQ zGDu+!HLG&0YP0n=r&Ark&VdFUnLbwn*)RpY(Mqaq$lll$%2AtM>ujsqj{49BPKl<# z#rS)1!k70wpBsl#(@CC=Aou%znSoF>85S4N@Q2ddQq70aWh^F2w(QyT)uFZY^1G>g z;o1Iqi0dZ)lL{PTV9b={<-{8;!f7>PENAJ&!yOpqLx1P?^()o|3MCyeHk{z}>QKMe zuV2&EY@W(B)YaNH0u}`hglHx8?-ROmZRQrTC^F&U;ni`4LQ`I|K%IVx zzr>B%dD{aTb#Gag`VLM~qF1(q8zbbPzvbZ>^(spJ%9wYsq-PPe3Eu^)Bw(QiM>n7G zbuQksP>?#GNVXzoba!B~e~96Nv<$Ilc=%K3er^;UNR)!JXNliyC4HhIRcND{ukcA4 zC&P>|uTdfxGS*6YaZl}lARWoDH9_+DB$}_bfI2~KL_ToUohDs1yzgbkarFq2zak4U z;OU-F{8SwxdcDNaO2)UZIcpYNt)-0&^V>|#NEBT^G|q?hS+B0~ zUV-GJ1hIaa$*(P_4X)EPI1PtQ7Vl8ksk}k$Gn({{6n>J&=SSJK1(T~{tdO`!`F)NS zMgtT-sSvNq%5y_po@>xBSaCZuyP*+4KRO0?u&_YcnUmWGtzv1b{maLzHE#n5cm4T< z$3z?yEIDl6kSf*>`)Q@QPkE*>4YpF$A z#O(myP`8RZi{$AN)o_`EDh?Hd#a{q<`#etJheqQ8Zgaapf3e}^*NeZYPOBf=|KPnr z887FKZ1L+^CVtw-x)=R6Nt|QyGMYKL`T!7}%i$U3GdvtoH@Zk`>AhV}J{8PC@``T# zg7_!}Bc%SFyoie}wJ}pv#5waUGEDfle3u#yXcYR+A9vJnk+eY2_tM@gK>4S6eJzhE zkC(AbWc1PZczGWsut{kT1#V2Fb^+Frytw77ZYvh@}953F-nj7GwijDjX^{@2Uc|+3f+}hu7mF3jdHf#x8J^txiy4eT*Kbd-_HCWQx2}6?Hdy z^K(rLdeZb^*}RAKxp#O@Wkg3)c z4?5TTG*(-M(70bK*eNhM2{)ZDxV{Umyq}@z;(&xcor%%ohsb)EZkkEFW3c{-e6*w} z6x{mjcl>LB17X_oP_Z;gEWZ1DL1fkMe2;{a2yOM}N|vfO=gD9VU67Y%iucfkvb8nr z>LRZn42j1JBjVf<6MRVh1+jVx4T9Vjn6D}p1)g?^LW9tzrM1T>9UB|hy%%an(^6<} z5`=#hvfr4rWL1eFw3yhto_vseke#dBRZPtK8QqB-u~!kPaQP)fcibOA)u9j#Mh|n0 zh*U{f&|aDU!T@G`cse;sbMb=0J`c<2Pt(>g!m)T1tR?06rwSVK_c2_H79YPx^%Px)JP>0UEoZgOqe;nO;R>Ep7AGfKcI7AVG@F`{*$-)vC~ z&BBZ>KbVVQi@t<#0B0i3lW1E!JhLfSjb^`oP@0hxS#(pX8~jTV(NSy=ozoOZP5P+L zk3nXA7wO5B>+INO!CDV(PY}L=+iNs|#1DMM!9+B!K~r{2mxoK1PbVlk#vx&oefo-@ zYtpljTQ$VVhL~%)pB6tcachPz;$St9V$~sy&*ON6ETW9wn{KrD87(NS2^K7&A%JN&JDM};i=-Oi>0ru5Jh1HSu9iuV z%=nqo$Vt=vWRlu~Kx&3bJct9(YXS`dGo>v)upBfo6}u~pYz*CGF{4viiq8DNdx<-o z+3>mr2ara&d--6@7N0of4lW?PRsPUaz-2`9oM#StE8Iwx`vPx$%daqvoi%uTJ!Y+@ zjPexk=8ImP`VaG7S~;;PabUl?ST0Ibm9fEyApl!n}RBeO)ZK{1xNG*OWL+*WeNjSJwIIfNzNnK|7JAoGWHoiZ1 zPTUxaEA@k-VtY7Qfh^Z6S7~el;Q5P+s%pN9Wcr*r(r6#etU64>zuuy@jiR^&FP-GU zeWCAdI9{Rqgk_St3%tvT;`+R(y*Qa4b@6YMCIU3$G_c<~+puiHFPZeiCall6od?8! z*RQ-uGxb{9cB-snH-&c8sL~jY5_?>3u~5g1v_@IG0fL#@ zX17cjti5?Z7u+p_fUkTlqcNM}~EA=fX7p za5-A(^P#{L%}1CT9c})^Bh4n>GOOEDpB22->4FdVL*||!*c+Du^DEYaK6#UL>@dIV zSe4uYoiw&%h72}Z-x@NwZ$RYIT7f}c8Z~D}Gd|EBzI*NAK8O7^=`=S8COfTF%4gZ) z1L9@u68``bUoef6@a_~RIE4wC?E0trAdo9M))mx8qdD78P6C^>#J%eArr%`Rlq0Nr7ZT{`Q1@ntI;ejy0t zv$7;)n~)6}MGN2l!e^%rLVbB6b6&J&vHaID#@Bo8pR9F%_Q9pB!CR=ntSSj7?Z_i0 zOCWGt{9;@0{XHS`*^`g5QonGu+AWSuc`6WLfV)Dr2V5$RG-9I2t>tTya!D-`7Rew&L=O3?(TfK^P6MfYEubtDwO*E7 O08}6v;CcnCi2ngf12513 diff --git a/traefik/assets/logos/saas_logos-small.png b/traefik/assets/logos/saas_logos-small.png deleted file mode 100644 index 19e94fbcf60f2682f7ec8ee460a2763590ad1ec7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3675 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 diff --git a/traefik/assets/logs/traefik.yaml b/traefik/assets/logs/traefik.yaml deleted file mode 100644 index 5aa72bf0b8..0000000000 --- a/traefik/assets/logs/traefik.yaml +++ /dev/null @@ -1,228 +0,0 @@ -id: traefik -metric_id: traefik -backend_only: false -facets: - - facetType: range - groups: - - Measure - name: Duration - path: duration - source: log - type: double - unit: - family: time - name: nanosecond - - groups: - - Web Access - name: Method - path: http.method - source: log - - groups: - - Web Access - name: Referer - path: http.referer - source: log - - groups: - - Web Access - name: Status Code - path: http.status_code - source: log - - groups: - - Web Access - name: URL Host - path: http.url_details.host - source: log - - groups: - - Web Access - name: URL Path - path: http.url_details.path - source: log - - groups: - - Web Access - name: URL Port - path: http.url_details.port - source: log - - groups: - - Web Access - name: URL scheme - path: http.url_details.scheme - source: log - - groups: - - Web Access - name: Browser - path: http.useragent_details.browser.family - source: log - - groups: - - Web Access - name: Device - path: http.useragent_details.device.family - source: log - - groups: - - Web Access - name: OS - path: http.useragent_details.os.family - source: log - - groups: - - Web Access - name: Client IP - path: network.client.ip - source: log - - groups: - - Web Access - name: Client Port - path: network.client.port - source: log -pipeline: - type: pipeline - name: Traefik - enabled: true - filter: - query: source:traefik - processors: - - type: grok-parser - name: Parsing Traefik logs - enabled: true - source: message - samples: - - 10.32.0.1 - - [07/Dec/2018:06:07:03 +0000] "GET / HTTP/1.1" 302 5 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 132170 "entrypoint redirect for http" "/" 0ms - - time="2019-04-05T11:57:47Z" level=info msg="Skipping same configuration for provider consul_catalog" - grok: - supportRules: | - _duration %{number:duration:scale(1000000)} - _traefik_backend_url %{regex("[^\\\"“]*"):traefik.backend_url} - _traefik_name %{regex("[^\\\"]*"):traefik.name} - _total_request %{number:traefik.request_total} - _auth %{notSpace:http.auth:nullIf("-")} - _bytes_written %{integer:network.bytes_written} - _client_ip %{ipOrHost:network.client.ip} - _version HTTP\/%{regex("\\d+\\.\\d+"):http.version} - _url %{notSpace:http.url} - _ident %{notSpace:http.ident:nullIf("-")} - _user_agent %{regex("[^\\\"]*"):http.useragent} - _referer %{notSpace:http.referer} - _status_code %{integer:http.status_code} - _method %{word:http.method} - _date_access %{date("dd/MMM/yyyy:HH:mm:ss Z"):date_access} - matchRules: | - access.common %{_client_ip} %{_ident} %{_auth} \[%{_date_access}\] "(?>%{_method} |)%{_url}(?> %{_version}|)" %{_status_code} (?>%{_bytes_written}|-) "%{_referer}" "%{_user_agent}" %{_total_request} "?%{_traefik_name}"? "?%{_traefik_backend_url}["“]? %{_duration}ms.* - - keyvalue %{data::keyvalue} - - - type: message-remapper - name: Define `msg` as the official message of the log - enabled: true - sources: - - msg - - type: attribute-remapper - name: Map `RequestMethod` to `http.method` - enabled: true - sources: - - RequestMethod - target: http.method - preserveSource: false - overrideOnConflict: false - sourceType: attribute - targetType: attribute - - type: attribute-remapper - name: Map `Duration` to `duration` - enabled: true - sources: - - Duration - target: duration - preserveSource: false - overrideOnConflict: false - sourceType: attribute - targetType: attribute - - type: attribute-remapper - name: Map `ClientHost` to `network.client.ip` - enabled: true - sources: - - ClientHost - target: network.client.ip - preserveSource: false - overrideOnConflict: false - sourceType: attribute - targetType: attribute - - type: attribute-remapper - name: Map `ClientPort` to `network.client.port` - enabled: true - sources: - - ClientPort - target: network.client.port - preserveSource: false - overrideOnConflict: false - sourceType: attribute - targetType: attribute - - type: attribute-remapper - name: Map `OriginStatus`, `DownstreamStatus` to `http.status_code` - enabled: true - sources: - - OriginStatus - - DownstreamStatus - target: http.status_code - preserveSource: false - overrideOnConflict: false - sourceType: attribute - targetType: attribute - - type: attribute-remapper - name: Map `RequestContentSize` to `network.bytes_read` - enabled: true - sources: - - RequestContentSize - target: network.bytes_read - preserveSource: false - overrideOnConflict: false - sourceType: attribute - targetType: attribute - - type: attribute-remapper - name: Map `DownstreamContentSize` to `network.bytes_written` - enabled: true - sources: - - DownstreamContentSize - target: network.bytes_written - preserveSource: false - overrideOnConflict: false - sourceType: attribute - targetType: attribute - - type: url-parser - name: '' - enabled: true - sources: - - http.url - - RequestPath - target: http.url_details - - type: user-agent-parser - name: '' - enabled: true - sources: - - http.useragent - target: http.useragent_details - encoded: false - - type: date-remapper - name: Define `date_access` as the official date of the log - enabled: true - sources: - - date_access - - type: category-processor - name: Categorise status code - enabled: true - categories: - - filter: - query: '@http.status_code:[200 TO 299]' - name: OK - - filter: - query: '@http.status_code:[300 TO 399]' - name: notice - - filter: - query: '@http.status_code:[400 TO 499]' - name: warning - - filter: - query: '@http.status_code:[500 TO 599]' - name: error - target: http.status_category - - type: status-remapper - name: Define `http.status_category`, `level` as the official status of the log - enabled: true - sources: - - http.status_category - - level diff --git a/traefik/assets/logs/traefik_tests.yaml b/traefik/assets/logs/traefik_tests.yaml deleted file mode 100644 index 5df899627d..0000000000 --- a/traefik/assets/logs/traefik_tests.yaml +++ /dev/null @@ -1,245 +0,0 @@ -id: "traefik" -tests: - - - sample: "10.32.0.1 - - [07/Dec/2018:06:07:03 +0000] \"GET / HTTP/1.1\" 302 5 \"-\" \"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\" 132170 \"entrypoint redirect for http\" \"/“ 0ms" - result: - custom: - date_access: 1544162823000 - duration: 0.0 - http: - method: "GET" - referer: "-" - status_category: "notice" - status_code: 302 - url: "/" - url_details: - path: "/" - useragent: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" - useragent_details: - browser: - family: "Chrome" - major: "51" - minor: "0" - patch: "2704" - patch_minor: "103" - device: - category: "Desktop" - family: "Other" - os: - family: "Windows" - major: "10" - version: "1.1" - network: - bytes_written: 5 - client: - ip: "10.32.0.1" - traefik: - backend_url: "/" - name: "entrypoint redirect for http" - request_total: 132170.0 - message: "10.32.0.1 - - [07/Dec/2018:06:07:03 +0000] \"GET / HTTP/1.1\" 302 5 \"-\" \"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\" 132170 \"entrypoint redirect for http\" \"/“ 0ms" - status: "notice" - tags: - - "source:LOGS_SOURCE" - timestamp: 1544162823000 - - - sample: "10.32.0.1 - - [07/Dec/2018:04:36:29 +0000] \"GET / HTTP/1.1\" 302 5 \"-\" \"HTTP Banner Detection (https://security.ipip.net)\" 132167 \"entrypoint redirect for http\" \"/“ 0ms" - result: - custom: - date_access: 1544157389000 - duration: 0.0 - http: - method: "GET" - referer: "-" - status_category: "notice" - status_code: 302 - url: "/" - url_details: - path: "/" - useragent: "HTTP Banner Detection (https://security.ipip.net)" - useragent_details: - browser: - family: "Other" - device: - brand: "Generic" - category: "Other" - family: "Generic Feature Phone" - model: "Feature Phone" - os: - family: "Other" - version: "1.1" - network: - bytes_written: 5 - client: - ip: "10.32.0.1" - traefik: - backend_url: "/" - name: "entrypoint redirect for http" - request_total: 132167.0 - message: "10.32.0.1 - - [07/Dec/2018:04:36:29 +0000] \"GET / HTTP/1.1\" 302 5 \"-\" \"HTTP Banner Detection (https://security.ipip.net)\" 132167 \"entrypoint redirect for http\" \"/“ 0ms" - status: "notice" - tags: - - "source:LOGS_SOURCE" - timestamp: 1544157389000 - - - sample: "time=\"2019-04-05T11:57:47Z\" level=info msg=\"Skipping same configuration for provider consul_catalog\"" - result: - custom: - level: "info" - time: "2019-04-05T11:57:47Z" - message: "Skipping same configuration for provider consul_catalog" - status: "info" - tags: - - "source:LOGS_SOURCE" - timestamp: 1 - - - sample: |- - { - "RequestPath" : "https://mail.google.com/mail/u/0/#inbox", - "ClientAddr" : "180.150.154.44:5051", - "RequestHost" : "https://datadoghq.com", - "RequestMethod" : "GET", - "ClientPort" : "5051", - "RequestProtocol" : "1.1", - "BackendAddr" : "127.0.0.1:8088", - "OriginStatusLine" : "404 page not found", - "RequestCount" : 2, - "BackendName" : "unicorn-backend", - "OriginContentSize" : 257, - "OriginStatus" : 404, - "RequestContentSize" : 456, - "BackendURL" : { - "ForceQuery" : false, - "Host" : "127.0.0.1:8088" - }, - "RetryAttempts" : 2, - "ClientUsername" : "-", - "DownstreamStatus" : 404, - "RequestPort" : "6014", - "Duration" : 12345678, - "OriginDuration" : 1345642, - "RequestAddr" : "127.150.32.44:10514", - "ClientHost" : "180.150.154.44", - "RequestLine" : "GET https://mail.google.com/mail/u/0/#inbox HTTP/1.1", - "DownstreamStatusLine" : "404 page not found", - "DownstreamContentSize" : 203, - "Overhead" : 100, - "GzipRatio" : 5, - "FrontendName" : "this-is-my-frontend-name" - } - result: - custom: - BackendAddr: "127.0.0.1:8088" - BackendName: "unicorn-backend" - BackendURL: - ForceQuery: false - Host: "127.0.0.1:8088" - ClientAddr: "180.150.154.44:5051" - ClientUsername: "-" - DownstreamStatusLine: "404 page not found" - FrontendName: "this-is-my-frontend-name" - GzipRatio: 5 - OriginContentSize: 257 - OriginDuration: 1345642 - OriginStatusLine: "404 page not found" - Overhead: 100 - RequestAddr: "127.150.32.44:10514" - RequestCount: 2 - RequestHost: "https://datadoghq.com" - RequestLine: "GET https://mail.google.com/mail/u/0/#inbox HTTP/1.1" - RequestPath: "https://mail.google.com/mail/u/0/#inbox" - RequestPort: "6014" - RequestProtocol: "1.1" - RetryAttempts: 2 - duration: 12345678 - http: - method: "GET" - status_category: "warning" - status_code: 404 - url_details: - hash: "inbox" - host: "mail.google.com" - path: "/mail/u/0/" - scheme: "https" - network: - bytes_read: 456 - bytes_written: 203 - client: - ip: "180.150.154.44" - port: "5051" - message: |- - { - "RequestPath" : "https://mail.google.com/mail/u/0/#inbox", - "ClientAddr" : "180.150.154.44:5051", - "RequestHost" : "https://datadoghq.com", - "RequestMethod" : "GET", - "ClientPort" : "5051", - "RequestProtocol" : "1.1", - "BackendAddr" : "127.0.0.1:8088", - "OriginStatusLine" : "404 page not found", - "RequestCount" : 2, - "BackendName" : "unicorn-backend", - "OriginContentSize" : 257, - "OriginStatus" : 404, - "RequestContentSize" : 456, - "BackendURL" : { - "ForceQuery" : false, - "Host" : "127.0.0.1:8088" - }, - "RetryAttempts" : 2, - "ClientUsername" : "-", - "DownstreamStatus" : 404, - "RequestPort" : "6014", - "Duration" : 12345678, - "OriginDuration" : 1345642, - "RequestAddr" : "127.150.32.44:10514", - "ClientHost" : "180.150.154.44", - "RequestLine" : "GET https://mail.google.com/mail/u/0/#inbox HTTP/1.1", - "DownstreamStatusLine" : "404 page not found", - "DownstreamContentSize" : 203, - "Overhead" : 100, - "GzipRatio" : 5, - "FrontendName" : "this-is-my-frontend-name" - } - status: "warn" - tags: - - "source:LOGS_SOURCE" - timestamp: 1 - - - sample: "127.0.0.1 - - [07/Dec/2018:04:36:29 +0000] \"GET /ping HTTP/1.1\" 200 2 \"-\" \"-\" 1 - - 0ms" - result: - custom: - date_access: 1544157389000 - duration: 0.0 - http: - method: "GET" - referer: "-" - status_category: "OK" - status_code: 200 - url: "/ping" - url_details: - path: "/ping" - useragent: "-" - useragent_details: - browser: - family: "Other" - device: - category: "Other" - family: "Other" - os: - family: "Other" - version: "1.1" - network: - bytes_written: 2 - client: - ip: "127.0.0.1" - traefik: - backend_url: "-" - name: "-" - request_total: 1.0 - message: "127.0.0.1 - - [07/Dec/2018:04:36:29 +0000] \"GET /ping HTTP/1.1\" 200 2 \"-\" \"-\" 1 - - 0ms" - status: "ok" - tags: - - "source:LOGS_SOURCE" - timestamp: 1544157389000 - diff --git a/traefik/assets/service_checks.json b/traefik/assets/service_checks.json deleted file mode 100644 index f970b644ff..0000000000 --- a/traefik/assets/service_checks.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "agent_version": "5.5.0", - "integration": "Traefik", - "groups": [ - "host", - "check", - "service", - "traefik" - ], - "check": "traefik.check", - "statuses": [ - "ok", - "critical", - "unknown" - ], - "name": "Health check", - "description": "Returns ok if the Traefik is up, critical when down and unknown when unknown exception occurred." - } -] diff --git a/traefik/datadog_checks/__init__.py b/traefik/datadog_checks/__init__.py deleted file mode 100644 index fda0dcc702..0000000000 --- a/traefik/datadog_checks/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# (C) Datadog, Inc. 2018 -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) - -__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/traefik/datadog_checks/traefik/__about__.py b/traefik/datadog_checks/traefik/__about__.py deleted file mode 100644 index c551fe4899..0000000000 --- a/traefik/datadog_checks/traefik/__about__.py +++ /dev/null @@ -1,5 +0,0 @@ -# (C) Datadog, Inc. 2018 -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) - -__version__ = '1.1.0' diff --git a/traefik/datadog_checks/traefik/__init__.py b/traefik/datadog_checks/traefik/__init__.py deleted file mode 100644 index 719f39cb23..0000000000 --- a/traefik/datadog_checks/traefik/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# (C) Datadog, Inc. 2018 -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) - -from .__about__ import __version__ -from .traefik import TraefikCheck - -__all__ = ['__version__', 'TraefikCheck'] diff --git a/traefik/datadog_checks/traefik/data/conf.yaml.example b/traefik/datadog_checks/traefik/data/conf.yaml.example deleted file mode 100644 index 958af983f9..0000000000 --- a/traefik/datadog_checks/traefik/data/conf.yaml.example +++ /dev/null @@ -1,23 +0,0 @@ -init_config: - -instances: - - ## @param host - string - required - ## Traefik host endpoint to connect to. - # - - host: - - ## @param port - integer - optional - default: 8080 - ## Port to connect to when reaching to `host`. - # - # port: 8080 - - ## @param path - string - optional - default: /health - ## Traefik host endpoint path to gather data from. - # - # path: "/health" - - ## @param scheme - string - optional - default: http - ## Traefik host scheme to use when reaching `host`. - # - # scheme: "http" diff --git a/traefik/datadog_checks/traefik/traefik.py b/traefik/datadog_checks/traefik/traefik.py deleted file mode 100644 index 59acd86546..0000000000 --- a/traefik/datadog_checks/traefik/traefik.py +++ /dev/null @@ -1,59 +0,0 @@ -# (C) Datadog, Inc. 2018 -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) -from requests.exceptions import ConnectionError -from six import iteritems - -from datadog_checks.base import AgentCheck, ConfigurationError - - -class TraefikCheck(AgentCheck): - def check(self, instance): - host = instance.get('host') - port = instance.get('port', '8080') - path = instance.get('path', '/health') - scheme = instance.get('scheme', 'http') - - if not host: - self.warning('Configuration error, you must define `host`') - raise ConfigurationError('Configuration error, you must define `host`') - - try: - url = '{}://{}:{}{}'.format(scheme, host, port, path) - response = self.http.get(url) - response_status_code = response.status_code - - if response_status_code == 200: - self.service_check('traefik.health', self.OK) - - payload = response.json() - - if 'total_status_code_count' in payload: - status_code_counts = payload['total_status_code_count'] - - for status_code, count in iteritems(status_code_counts): - self.gauge('traefik.total_status_code_count', count, ['status_code:{}'.format(status_code)]) - - else: - self.log.debug('Field total_status_code_count not found in response.') - - if 'total_count' in payload: - self.gauge('traefik.total_count', payload['total_count']) - else: - self.log.debug('Field total_count not found in response.') - - if 'average_response_time_sec' in payload: - self.gauge('traefik.average_response_time_sec', payload['average_response_time_sec']) - else: - self.log.debug('Field average_response_time_sec not found in response.') - - else: - self.service_check( - 'traefik.health', self.CRITICAL, message='Traefik health check return code is not 200' - ) - - except ConnectionError: - self.service_check('traefik.health', self.CRITICAL, message='Traefik endpoint unreachable') - - except Exception as e: - self.service_check('traefik.health', self.UNKNOWN, message='UNKNOWN exception: {}'.format(e)) diff --git a/traefik/hatch.toml b/traefik/hatch.toml deleted file mode 100644 index e2b324f5c0..0000000000 --- a/traefik/hatch.toml +++ /dev/null @@ -1,13 +0,0 @@ -[env.collectors.datadog-checks] - -[[envs.default.matrix]] -python = ["2.7", "3.11"] -version = ["1.6", "1.7"] - -[envs.default.overrides] -matrix.version.env-vars = [ - { key = "TRAEFIK_VERSION", value = "v{matrix:version}" }, -] - -[envs.default] -e2e-env = false diff --git a/traefik/images/total_count_requests.png b/traefik/images/total_count_requests.png deleted file mode 100644 index 43cceb480fc413a2b206be332307b4d4ff7de618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46347 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

-RHqq_I$!HDMYb?AcsA#l><6Q!!H~7+U(1`mmryUBI7X*VwgI@zLyz%L5W+V z8bH;=*Q?uWHLJKhRChWT2@3=9+aq|m5o|+=1}oCLJyO*q>c4rvU!R?!3TCvPyq0uA z58)Eb)AJUf6&64{jC?!JS?rDI_?RzAX?m7E*zgHual+p5Sy@oUKAEPR5n=-)zM`->M!ud2Yk5M01PqMYvtC{? z?YxpU%%H00TS#Q;=d|iF3sureXQ{F*zMOJN@W4M^1zl6_y);77xlfLrrFB}JA(|m1 zEHPyYeXW|8a*pqTGU|x1&+s*681400u^$TY{UJ4bhTHbuJ*ApXz)S|}ob~sr>Z(uZ z`sz0}77wDAqPDgc>rUJqf2t6C*X&DYpUZ;+5ObZ3P=><><;L{T8wpu|F&J;s(HO$4 zCbYX|LvqE?Usq2ryzPQLV_9WTLGQg|7-bxbg;V&#tr&11&RG|O%aMQ`b;o0y;iU(& z%tpXnGe||uBih}!_m|5GpRt}Kf3L}yRLpqO_Z&U9-OO{y(N;q>4h=Iivv0a~iyp4U zf_%vF%=7)y2c=@R3bhQ0P{X(uHO$hUZQq&EOlesKqK0?GpFbE1Q-jDg;_D0=W)w5c zlRPqn;vFqK8xEhuT>kv-|bT{vT?)LGCQZ9!Fb zsm+JbW{~E#qVgT{p!$y?94i%QCpkf6)w4qhm@K_)i&1ZkU#ee#A6dy7K=bSlYS z!v6rBG_Jcr4vx_IvP!vA_DoL&Q1G_2=u&s{PD$lECka&B3Hf=gYM94AL?I3qS=eb9 zhWslfy|Azl4Zr>%g zmq4OLgHs*ZCy+HCq+a0SJc5(~0qs961an>o%GG11Jn`zEDL*2*CMSG?899jX_dzVb z6dEGm_z2%ZyZPrGtNvH|4bT6<>Av42X$5T~<=T>IDDbGJ>f%-NjKAFf6udIqr!}PS z!-bO|1)(V`xoECmdi00zM;`$>#_?i9HyDeUuY=$U)jjy{tV-n{BIf5mm}XGkBE`qjRmqg)u&7^IQQ;4P7wO)cP{47oucT+gDP1<+EQ zR>U<^Bpj<}hSX|ZyVp(u-`{I|Yk8LwMqyN^)p_H@XA8vn6(--CTwT4XJ+R7q%3*Vm zNEsQFy)axY%(^HoEgcHeIaJEGvsJ4u6)=%%;)890bLvj-Y1GC*fzB5^m26$F2QcmH zM~gg^Z$3NAE(QGApW=f|UqaeQQn-JX|2;_^&TT|0@JwCTheH=&PDllOk2@ZwBe3aJ zooZmcj%k8=aXn~l!AM80@5O*YC;6wKVAv1g_Is6g_mju^Ja(8tM=K!nmXyp@CMU;c zNXQJ^FS=~mE1geZVRu;2RVgsjNS+=uC|_>VVufx^spPi%h49fAO}@4MhlH7V#w}ty zYvue;dt2OaG4iMDOCJi6Ss!w)=612JId;mshX*7-({?`XF{WCc#hS2~%pcvbKgt%@ zN2Vt(6=;>ZG(uPDVw6UIn2Gq@Kfdr}9IDOB6524Vp*0kHTRVqt`#>`*tC>r3i`zhq z)65(9BN}|&WdhROWH39*sj2lY#9?(mKEl0T%EKw0A;z?{Yj9s)pI7AKdH)Gi9p7de zGLMa>SHCWXcR0VxjB#H5bvSfSNou;R>rD>B$RlMs!4HBT%Z8V82B8Ne7>3*_^HN{2 zsE?7^_;QnOdkfLeV~e$-pPoXN8XQu*BZ4QY#-5Cp|jh@odziQLUdj0DE z*WR_qGrj-+GW znyoPJA@#FX&^C}MRaH4Qh!cq&5aV}`mPNQMAy|cR+gAsNSGLj%+jxZhB+5BI06}b_ zYv_|GA(0AN=G*YDKFcHW#-KLNYB~UWn2XBCFj%E&^)k1?-(vt3cfae2DV3cjgha_$ zn``p5hUDtu*kZCC50S5zvxtvLud|8uV8bm44!6hbL|x!;>imR_mh7Df?$ssM8G5R>hg@oQqDVxj8z~|yPm7k zc%OeM1gjL>>(>WdVRTo)1AfT8$M3Olx)kKcOK2&Yh|Tdp1pK?m8BTB_#?=&(d~PM` z3M@j9i3A&sogj5)2thdO9f-tXDHd0Zq%C za4=lT0v0(W?-IGBv6eozGe|)Z`U=;J*+_@@gQ-0O3ob$ZBl4+xmqsQ^fy_@JNLd*h&5l=a>l3rk=`u=@g^IeO;+T<{TC7KSNGc~+P^R|$sVhp zhBW=G8R54I-<{TG?UnB{QA>N8B2$!45H?EdktmK1{N}eYA42yM615;Ji!^fMw34rs z+8w^EOr82(tm#biyuLaLUaN-#y77RbFlHn5Xn6CdBoTF0*hOt9N!o|xjP!MDzt3*j z|K2k`PcGnsq*~Z&lr<~@*aR5Jsp*qa`ZOj7J3X3Ed(ONe8OBs~Ug^D^=vPtx-0vG2 zHyk0h^rEO)OD#%0j7Ke(a)IsXXiYKPMWUGG``FiHWnsL~)cv_(Yvq<8D8(nh7xO}w zLB0Lk2gVSeQ(A<(YUehhO%n)RhD~o8g##;D3To)Uwmk9yjzhU*dUv{)ME`UnG9`)H zw~zfE_*Rq>6X&lUaxD`W>d^Z(53mw2eU)U%L_G6^(W;G(gv1ot5}w*HsznBoIirm! zA|x_5FI%qwj}*@qX@;a4p+$BImnf^hmq8hH=OP%uh(7puy%tYPZShNG%eKg7S(9`a znjNqT{2-v~m9k|*Jcj^vdcU)5GR$#jMp#v|JIsCGfirkhql+r() zRIE)!o=clw{CsY3|0VG>=e92k>Saq$TD6zmao>QwzMY3wlLQ_e$jsx#D*4s=Q$_*V zxX2uJ@5sY9xHr1w^k2s^8{z<=I_)y8lVP6%7M-yLxSR}>?JkHHMXbQTA# zd@ZYQI?>2XR{cebVD~Fy#z9cgWfs#L^8R3oW{`w9{?bFO=9;GH6DJzd;{`wZiec@JF{LoRFSW-1nMTMObac8#HNk54xL_&%tR zufByB_Ean{cZ6Nrtbw_@CkR_yNF)QdOONm!-X4}x6|IZGA;#l5nmx}qYlcofPP+qxn29tcJleE>`!!K2 zuwuOcrM_+E_wC1M6fCsA=7iK5*??-xy9qc~cnAuwNRood3gjX@yXG~(4nA*ng=cj7 z%JLG8#v_Dx#XiKJS_DQbS7G}m@wMum%L~Ks#b19z{DzM4L$l#gLP0z7+5HrU=b~5D z>|Ex?t}&BN#=sw3{%#UQO9IcSzpV%;2BTn*d6HpMc%gd_#zbP`5bD%LPGTGZ?it3dBm2~Cff zbqW|vV7{`Y@z&|rcn6P1$*Q5*)p!2j-8D%{MBT0%H2NPy<_=Ntzyftn+y#K3)T0kP zxbaAh2w=SmDZPi#1_j6CedX@$CpP$EY;|r(fOQrB@iF;UQ1~`h(b$2&g~K_$eSMDr z2c|&pLKxlzLGvT>x@@OHf&{;#>(2u@51JX8AhAQF8OIq^g&l=+dWW>Xu9V;{RAnA# zW*K2RabN}BU)r{Lb}mUT_hN^}Po59sL8XN9TwFeW!(G92oS@X_MynJmDR7{C>^|a& zo7H7WHh%j}p*UrYHE>BOTCK}QZJJ^|zocm#e3y;QMskoiOscW)^n!d(4C~QmA$O78 zoUQvl_B=H@1CZT2P(C>MjPfqz%)odvqc4W2n9|VQVujEIXTx(f#aW7kIhR~(VA(v91mN85_xS zJ4ol^KE(m+Lc%9ug-s6OKs2G~SB!uVihcmJqxAS{%fGQu1tNl?5 zimY)xs;u|QyDxFIP<*EXiX7?E-Dcf6M`_;y(QCSvXt4@Z+c#7EMx$g^(YAB-g$Z$! zOd(%cqeV3aq-%nbeyM+vXO*A}+?nw|`&DczP<#x|NtxJV3oiRBoogxsXi6_?uf51L z@+)h?v#+&u6OHdhcN9YWL@mA0>!2sW!}*5$NJZm8<<2thET8DXte6jj&?U=DS2^n1 zvDHmooaT9Y%o0HU?cK$ey(na*Wr4lI?kH@)s`I^tRvz4mAeLbG#5+(hbC@QYdE#fU z_lN0%6rILw6sPjoVn~il`At`}V7I~2FVAC+;DGf4n*2Hl)fAnWA+SAO51zB9as%-X zkx5RQ!HO|FmoiNESWfk;IBKxZAHG%&R(1p~QI&w@K||sVxvjMG$x{xN^Ty98TGe1| zx7&lvbh-Q0$ri{O72>I9zW6}?ZVm7i;?QeLf!#A~%Raw&-yNTd{I<@j zkHrH!F>3o0uygMv`P%e^Rp42WoVAuDSZV%sz~C7`rCGNanUFK+@$v0oAMqd>)qsn# z!L2xlgcpNUW*5+0l&5bEO{UUF);4miqJ$hys2i?#@b{pFQ303cHLno|{NjWTwF2F* zn*

P+bG==W-lkLh|OXVMEDn9SHQJtc)fYrMe8qfiEMAAGrYAc9LYherfA69r%^o zg?}kIT8vSMVq#P2=>>oyM|BjrIjCB*)fccwL0!CZj2!-r3=VM%*32HZem&9P5MSxFw06EO($MAQ9sf%6JaaIv4 zvZu)}e*_9pHw^YXC@%UM)Tll&;Z?u7GS%LgO&}!6q;GYuwia)BOJZhOuRg9_Dic1C z1*_oh<#i-i4Tw*?sNA2*Vb;7zU-t5?^px{>nau{EN3iD`nNX_A#_Fl#nH#sMHN}9C zTXv$ZK@6};F{kn@bvc!D$lR+#qc-FbuD@oFQ+M0uY_Ho$aJ1>XMQJ+8*|HtUAztKd zIYQmCMP!j@4vZD3uxh^YU0{6J^1{HY-x*HqF$?4<;E|t;h5C_ZLD<6}eG&swI*ta) zlRp{1H=C^QDx{gjzG1zmrPie)flY-y#a z^R?=ETFH@~P&ofW>D*Qp^AKNH-re-T)P^WB)R+C(<@InL2i1>UeYyCP`|!gRN?wZz ze@+X=7(xV=`~r=-?^j{aUMPZlMY7EA$vd52B{qY9)6{{+;%-T{l%_M~+NL+;`)w3S z^~Wa>kYqQa9XnGIsZ))ime#A*#_RXq^NH-SqoQSn19ppyOAAard_&^OT%}J%0#p82 zEIoLnyxyYUVK9FT9vE(xb43scgmVcvnQOv=eyt{CR00YSdxpJFP@xh0F*`DQpK(v_ zMq%Wys>jjw$o{%u1(nbQOh-P-xaMFY?6U0zTAEuz7=3U;NsJ7#E}wDlD25`W8;1p_om=a?!tCIG9n<76fx;xVr2FjO}Zdyu7*(VYwJhI0IEfiYM0w9Chz zFkRiDlC6(hOfZ0trc69DfO9e9?G3p^=Wd!+hVmo|hzIVPBsPLC4)m=&ICE-z>XonM z%*36x4v=2|<8Si(-$SK1i`GeN>loXb(SU%(Z!XkA-rJ z)BxZEe#M@@W}X%8g>4;DS6f5Z5)#9sq0pTGbS%)+!5sK&(iHdSZ3a1;qG`-ll0EZM z*5u5sw$1$uyJi%=&8ldA)je1iNB;v`K z9R8Y-O9^Y%Kqf?WErhmz>&-;4O8re(-~VcXy#ql6C-5)1(}6_!PL}b+_;^Ff0oZ^2 zVe#d)GIIJm@{GfQWBtGSp{zU7c+Kt#z4OdJkb^(Fnzt4_{KwjIy1oA0$F>>Jk+@-- zntuk5=$i?$;2Ah97LEMxJCOl``uUPVkHx=Rup_Wzyv-^@(gD&)>n-6O|$_t>rhKMr;- KwiVXcEB^sW{C5)o diff --git a/traefik/images/total_count_requests_status_code.png b/traefik/images/total_count_requests_status_code.png deleted file mode 100644 index 951c98b22ccf2022798faedc221cc9442af66bff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52685 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

{lHmeo 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 Vh(}qPa%aFlMLD&*C3j4N{vT2qYR>=w diff --git a/traefik/manifest.json b/traefik/manifest.json deleted file mode 100644 index dfd0fcc4b1..0000000000 --- a/traefik/manifest.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "manifest_version": "2.0.0", - "app_uuid": "3e412d36-f638-4cb0-9068-294aac7a84e2", - "app_id": "traefik", - "display_on_public_website": true, - "tile": { - "overview": "README.md#Overview", - "configuration": "README.md#Setup", - "support": "README.md#Support", - "changelog": "CHANGELOG.md", - "description": "collects traefik metrics", - "title": "Traefik", - "media": [], - "classifier_tags": [ - "Category::Cloud", - "Category::Log Collection", - "Supported OS::Linux", - "Supported OS::Windows", - "Supported OS::macOS" - ] - }, - "author": { - "support_email": "help@datadoghq.com", - "homepage": "https://github.com/DataDog/integrations-extras", - "sales_email": "help@datadoghq.com", - "name": "Community" - }, - "assets": { - "integration": { - "source_type_name": "Traefik", - "configuration": {}, - "events": { - "creates_events": false - }, - "metrics": { - "prefix": "traefik.", - "check": "traefik.total_status_code_count", - "metadata_path": "metadata.csv" - }, - "service_checks": { - "metadata_path": "assets/service_checks.json" - }, - "source_type_id": 10047, - "auto_install": true - } - } -} \ No newline at end of file diff --git a/traefik/metadata.csv b/traefik/metadata.csv deleted file mode 100644 index d6d8cf3a42..0000000000 --- a/traefik/metadata.csv +++ /dev/null @@ -1,4 +0,0 @@ -metric_name,metric_type,interval,unit_name,per_unit_name,description,orientation,integration,short_name,curated_metric -traefik.total_status_code_count,gauge,,,,total count for each returned status code,0,traefik,, -traefik.total_count,gauge,,,,count total number of requests,0,traefik,, -traefik.service.request.total,count,,,,total count of HTTP requests processed on a service,0,traefik,, diff --git a/traefik/pyproject.toml b/traefik/pyproject.toml deleted file mode 100644 index f3877e480b..0000000000 --- a/traefik/pyproject.toml +++ /dev/null @@ -1,61 +0,0 @@ -[build-system] -requires = [ - "hatchling>=0.12.0", - "setuptools<61", -] -build-backend = "hatchling.build" - -[project] -name = "datadog-traefik" -description = "The Traefik check" -readme = "README.md" -license = {text = "BSD-3-Clause"} -keywords = [ - "datadog", - "datadog agent", - "datadog check", - "traefik", -] -authors = [ - { email = "renaudhager@users.noreply.github.com" }, -] -classifiers = [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "Intended Audience :: System Administrators", - "License :: OSI Approved :: BSD License", - "Programming Language :: Python :: 2.7", - "Programming Language :: Python :: 3.11", - "Topic :: System :: Monitoring", - "Private :: Do Not Upload", -] -dependencies = [ - "datadog-checks-base>=4.2.0", -] -dynamic = [ - "version", -] - -[project.optional-dependencies] -deps = [] - -[project.urls] -Source = "https://github.com/DataDog/integrations-extras" - -[tool.hatch.version] -path = "datadog_checks/traefik/__about__.py" - -[tool.hatch.build.targets.sdist] -include = [ - "/datadog_checks", - "/tests", - "/manifest.json", -] - -[tool.hatch.build.targets.wheel] -include = [ - "/datadog_checks/traefik", -] -dev-mode-dirs = [ - ".", -] diff --git a/traefik/setup.py b/traefik/setup.py deleted file mode 100644 index e82c873e34..0000000000 --- a/traefik/setup.py +++ /dev/null @@ -1,75 +0,0 @@ -# (C) Datadog, Inc. 2018 -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) - -from codecs import open -from os import path - -from setuptools import setup - -HERE = path.abspath(path.dirname(__file__)) - -# Get version info -ABOUT = {} -with open(path.join(HERE, "datadog_checks", "traefik", "__about__.py")) as f: - exec(f.read(), ABOUT) - -# Get the long description from the README file -with open(path.join(HERE, 'README.md'), encoding='utf-8') as f: - long_description = f.read() - - -def get_dependencies(): - dep_file = path.join(HERE, 'requirements.in') - if not path.isfile(dep_file): - return [] - - with open(dep_file, encoding='utf-8') as f: - return f.readlines() - - -def parse_pyproject_array(name): - import os - import re - from ast import literal_eval - - pattern = r'^{} = (\[.*?\])$'.format(name) - - with open(os.path.join(HERE, 'pyproject.toml'), 'r', encoding='utf-8') as f: - # Windows \r\n prevents match - contents = '\n'.join(line.rstrip() for line in f.readlines()) - - array = re.search(pattern, contents, flags=re.MULTILINE | re.DOTALL).group(1) - return literal_eval(array) - - -CHECKS_BASE_REQ = parse_pyproject_array('dependencies')[0] - -setup( - name='datadog-traefik', - version=ABOUT["__version__"], - description='collects traefik metrics', - long_description=long_description, - keywords='datadog agent check', - url='https://github.com/DataDog/integrations-extras', - author='Renaud Hager', - author_email='paas@argos.co.uk', - license='BSD', - # See https://pypi.org/classifiers - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Developers', - 'Intended Audience :: System Administrators', - 'Topic :: System :: Monitoring', - 'License :: OSI Approved :: BSD License', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.7', - ], - # The package we're going to ship - packages=['datadog_checks.traefik'], - # Run-time dependencies - install_requires=[CHECKS_BASE_REQ], - extras_require={'deps': parse_pyproject_array('deps')}, - # Extra files to ship with the wheel - include_package_data=True, -) diff --git a/traefik/tests/__init__.py b/traefik/tests/__init__.py deleted file mode 100644 index a383179a00..0000000000 --- a/traefik/tests/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# (C) Datadog, Inc. 2018 -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) diff --git a/traefik/tests/common.py b/traefik/tests/common.py deleted file mode 100644 index d84bc60c56..0000000000 --- a/traefik/tests/common.py +++ /dev/null @@ -1,16 +0,0 @@ -# (C) Datadog, Inc. 2019 -# All rights reserved -# Licensed under a 3-clause BSD style license (see LICENSE) -import os - -from datadog_checks.dev import get_docker_hostname, get_here - -HERE = get_here() -DOCKER_COMPOSE_FILE = os.path.join(HERE, 'docker', 'docker-compose.yaml') -HOST = get_docker_hostname() -PORT = '8080' -SCHEME = 'http' - -INSTANCE = {'scheme': SCHEME, 'host': HOST, 'port': PORT} -INSTANCE_BAD = {'scheme': 'https', 'host': 'foobar', 'port': 9000} -INSTANCE_INVALID = {} diff --git a/traefik/tests/conftest.py b/traefik/tests/conftest.py deleted file mode 100644 index 167b88bb46..0000000000 --- a/traefik/tests/conftest.py +++ /dev/null @@ -1,35 +0,0 @@ -import pytest -import requests - -from datadog_checks.dev import WaitFor, docker_run - -from . import common - - -def ping_traefik(): - response = requests.get('{}://{}:{}/health'.format(common.SCHEME, common.HOST, common.PORT)) - response.raise_for_status() - - # Trigger a 404 - requests.get('http://{}:800'.format(common.HOST)) - - -@pytest.fixture(scope='session') -def dd_environment(): - with docker_run(common.DOCKER_COMPOSE_FILE, conditions=[WaitFor(ping_traefik)]): - yield common.INSTANCE - - -@pytest.fixture -def instance(): - return common.INSTANCE - - -@pytest.fixture -def instance_bad(): - return common.INSTANCE_BAD - - -@pytest.fixture -def instance_invalid(): - return common.INSTANCE_INVALID diff --git a/traefik/tests/docker/docker-compose.yaml b/traefik/tests/docker/docker-compose.yaml deleted file mode 100644 index 936767dd40..0000000000 --- a/traefik/tests/docker/docker-compose.yaml +++ /dev/null @@ -1,10 +0,0 @@ -version: '3' - -services: - traefik: - image: traefik:${TRAEFIK_VERSION} - ports: - - 800:80 - - 8080:8080 - volumes: - - ./traefik.toml:/etc/traefik/traefik.toml:ro diff --git a/traefik/tests/docker/traefik.toml b/traefik/tests/docker/traefik.toml deleted file mode 100644 index a1cebd9330..0000000000 --- a/traefik/tests/docker/traefik.toml +++ /dev/null @@ -1,25 +0,0 @@ - -logLevel = "DEBUG" - -[entryPoints] - [entryPoints.http] - address = ":80" - - # [entryPoints.dashboard] - # address = ":8080" - -# [traefikLog] -# format = "json" - -# API definition -[api] - - entryPoint = "traefik" - dashboard = true - debug = false - - [api.statistics] - recentErrors = 10 - - - diff --git a/traefik/tests/test_check.py b/traefik/tests/test_check.py deleted file mode 100644 index ebeab6760f..0000000000 --- a/traefik/tests/test_check.py +++ /dev/null @@ -1,29 +0,0 @@ -import pytest - -from datadog_checks.base import ConfigurationError -from datadog_checks.traefik import TraefikCheck - - -def test_config(instance_invalid): - c = TraefikCheck('traefik', {}, {}, None) - - with pytest.raises(ConfigurationError): - c.check(instance_invalid) - - -def test_bad_url(aggregator, instance_bad): - c = TraefikCheck('traefik', {}, {}, None) - c.check(instance_bad) - - aggregator.assert_service_check('traefik.health', TraefikCheck.CRITICAL) - - -@pytest.mark.integration -@pytest.mark.usefixtures('dd_environment') -def test_check(aggregator, instance): - c = TraefikCheck('traefik', {}, {}, None) - c.check(instance) - - aggregator.assert_metric('traefik.total_count', value=1) - aggregator.assert_metric('traefik.total_status_code_count', value=1, tags=['status_code:404']) - aggregator.assert_service_check('traefik.health', TraefikCheck.OK) From 9ec6a13755e646240ccc29b33f2d66366eec13fe Mon Sep 17 00:00:00 2001 From: Kyle-Neale Date: Thu, 6 Jun 2024 11:30:53 -0400 Subject: [PATCH 2/3] disable traefik From 02c3081f8e5e6ff0a8478322736dd777139b6ccc Mon Sep 17 00:00:00 2001 From: steveny91 Date: Mon, 1 Jul 2024 11:32:51 -0400 Subject: [PATCH 3/3] Empty commit