diff --git a/Pipfile b/Pipfile index ba35a7a9..d85d5c44 100644 --- a/Pipfile +++ b/Pipfile @@ -27,6 +27,8 @@ pillow = "~=8.0.1" filetype = "~=1.0.7" django-cors-headers = "~=3.6.0" whitenoise = "~=5.2.0" +sentry-sdk = "~=0.13.2" +elastic-apm = "~=5.9.0" [requires] python_version = "3.6" diff --git a/Pipfile.lock b/Pipfile.lock index b3be55fe..41575695 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "7fc488f538c0c753147e985d572d455aeb5065a06a842e6033b8c3fab039887d" + "sha256": "3da126bdd6f0aca99a85dd2d1ecd941350e017871fe3a4cfd28e35235e562e0e" }, "pipfile-spec": 6, "requires": { @@ -33,18 +33,18 @@ }, "boto3": { "hashes": [ - "sha256:b5052144034e490358c659d0e480c17a4e604fd3aee9a97ddfe6e361a245a4a5", - "sha256:efd6c96c98900e9fbf217f13cb58f59b793e51f69a1ce61817eefd31f17c6ef5" + "sha256:550a513315194292651bb6cc96e94185bfc4dc6b299c3cf1594882bdd16b3905", + "sha256:f8a2f0bf929af92c4d254d1e495f6642dd335818cc7172e1bdc3dfe28655fb94" ], "index": "pypi", - "version": "==1.16.55" + "version": "==1.16.59" }, "botocore": { "hashes": [ - "sha256:760d0c16c1474c2a46e3fa45e33ae7457b5cab7410737ab1692340ade764cc73", - "sha256:b34327d84b3bb5620fb54603677a9a973b167290c2c1e7ab69c4a46b201c6d46" + "sha256:33959aa19cb6d336c47495c871b00d8670de0023b53bbbbd25790ba0bc5cefe9", + "sha256:67d273b5dcc5033edb2def244ecab51ca24351becf5c1644de279e5653e4e932" ], - "version": "==1.19.55" + "version": "==1.19.59" }, "celery": { "hashes": [ @@ -210,8 +210,8 @@ }, "djangorestframework": { "hashes": [ - "sha256:0898182b4737a7b584a2c73735d89816343369f259fea932d90dc78e35d8ac33", - "sha256:0209bafcb7b5010fdfec784034f059d512256424de2a0f084cb82b096d6dd6a7" + "sha256:0209bafcb7b5010fdfec784034f059d512256424de2a0f084cb82b096d6dd6a7", + "sha256:0898182b4737a7b584a2c73735d89816343369f259fea932d90dc78e35d8ac33" ], "index": "pypi", "version": "==3.12.2" @@ -232,6 +232,41 @@ "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.14.1" }, + "elastic-apm": { + "hashes": [ + "sha256:02339fc2afa69f5fcb0090a0f6138a30e50fa1506f2b4f4dc9aa35533f663047", + "sha256:09e9a0be232ace95aa500189bbeaff1fff557b63970fe92bd9c0209c84870b15", + "sha256:0c14d3a1b94cb60db1fc5ea89729c1fa4f0a1b44be9aa1ebf402717687e814a4", + "sha256:1006d485c15df32331b161d46af30bfe7e37a9c12745a3065a57e711110690f4", + "sha256:20a5fc1d40dc8fc81b97a8ca737c631180ae8a5962cab7fac6abc09dd3e54c56", + "sha256:2204045fd334557a58c299ad3cc982b94f4e313358e9675809ab00571251f793", + "sha256:221ab6384312f07507b8adadad1e1c04e6f692c136ef2c155a0ac5b2794a12e5", + "sha256:2226a6cca396691da7df0b839150aa563f9dbdc09b9697c9f3bc3b915a6757cd", + "sha256:34d826a069f39ae29f788a7dad74d8bb7111e80819c2d2e30fc86a6774ed927d", + "sha256:38991415fe8405393eb7a5c1b008015ee6111e602df346ab3289867a318b884a", + "sha256:508b232b51113b485990f21bf9a531ba850af481963c1984019ec6ea1aa95ff8", + "sha256:58b8b5cc033298c057265d0ad8332526ad57f69f056b0794ed6faec2d8527919", + "sha256:6191080e30af147f1cc509c3d36eb38d46c07e570d401f6e173516934fa1d199", + "sha256:6a22d811c868f4be9446d942989df9df26d1fc9c2fe6116a41357c0ab2dca7c4", + "sha256:89a3ec089a9d24bfe909dc89736d880863e6eba929f176b9fc07e1150c30defd", + "sha256:8cd2382a038d2f90c3a6fc4eb78035e3d3f119c28c1c3b3ac6bb809723e00753", + "sha256:a23ac59e783b061945a4963658f51654d4783c2bbd122cb75c519b4fd097fe7b", + "sha256:a9d953e5ca7d2849e74ba8859c5539d7454ec6888791e2838c7a90644a11623c", + "sha256:aca065c8d6177a35362e640033c1583e518fca82fc191ce3606c30a365899917", + "sha256:b000b6c50dc630d1aa4ef14d40b2c7e63f1bcf991420ae19efad4d4b24541f27", + "sha256:b6eef9eae29427dcf4b1b2932674e2ded3d97cc0c62c45c0dbcd402da7f4d314", + "sha256:c5da673487ee9fd0c66c350396e3a1b9bc4149c504d2922fcf3f0a52ba68f980", + "sha256:d5003702369bf69416a89ba0c7cc1e0750457f1ed380467cbe536be4805c1ac5", + "sha256:d92c732add249f0310ebf6e76410d261c82dd11be07c524c41cb1e3b578227d3", + "sha256:eb558cc6890355a3b6b45ae0272dbde18c2ab56122d7d7cbf3549ddc414f2ffe", + "sha256:ec22756200b1fd12c6c79124f4623f6752810362a377c7ef4ea9d78b4890df8f", + "sha256:ef9fe604299e9ed591927392583abbe4d69ff4d677bbd948d474c4eb6fee79dc", + "sha256:f087952f5c4af262b2ab997240826ff33ed8464edb3a4a14756b25d69fac65d9", + "sha256:f4d915b48737938209ee54b1cdefcf6a911c53e01c80e24087fdcd6383e43ef1" + ], + "index": "pypi", + "version": "==5.9.0" + }, "filetype": { "hashes": [ "sha256:353369948bb1c09b8b3ea3d78390b5586e9399bff9aab894a1dff954e31a66f6", @@ -580,6 +615,14 @@ ], "version": "==0.3.4" }, + "sentry-sdk": { + "hashes": [ + "sha256:05285942901d38c7ce2498aba50d8e87b361fc603281a5902dda98f3f8c5e145", + "sha256:c6b919623e488134a728f16326c6f0bcdab7e3f59e7f4c472a90eea4d6d8fe82" + ], + "index": "pypi", + "version": "==0.13.5" + }, "six": { "hashes": [ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", @@ -671,58 +714,58 @@ }, "coverage": { "hashes": [ - "sha256:08b3ba72bd981531fd557f67beee376d6700fba183b167857038997ba30dd297", - "sha256:2757fa64e11ec12220968f65d086b7a29b6583d16e9a544c889b22ba98555ef1", - "sha256:3102bb2c206700a7d28181dbe04d66b30780cde1d1c02c5f3c165cf3d2489497", - "sha256:3498b27d8236057def41de3585f317abae235dd3a11d33e01736ffedb2ef8606", - "sha256:378ac77af41350a8c6b8801a66021b52da8a05fd77e578b7380e876c0ce4f528", - "sha256:38f16b1317b8dd82df67ed5daa5f5e7c959e46579840d77a67a4ceb9cef0a50b", - "sha256:3911c2ef96e5ddc748a3c8b4702c61986628bb719b8378bf1e4a6184bbd48fe4", - "sha256:3a3c3f8863255f3c31db3889f8055989527173ef6192a283eb6f4db3c579d830", - "sha256:3b14b1da110ea50c8bcbadc3b82c3933974dbeea1832e814aab93ca1163cd4c1", - "sha256:535dc1e6e68fad5355f9984d5637c33badbdc987b0c0d303ee95a6c979c9516f", - "sha256:6f61319e33222591f885c598e3e24f6a4be3533c1d70c19e0dc59e83a71ce27d", - "sha256:723d22d324e7997a651478e9c5a3120a0ecbc9a7e94071f7e1954562a8806cf3", - "sha256:76b2775dda7e78680d688daabcb485dc87cf5e3184a0b3e012e1d40e38527cc8", - "sha256:782a5c7df9f91979a7a21792e09b34a658058896628217ae6362088b123c8500", - "sha256:7e4d159021c2029b958b2363abec4a11db0ce8cd43abb0d9ce44284cb97217e7", - "sha256:8dacc4073c359f40fcf73aede8428c35f84639baad7e1b46fce5ab7a8a7be4bb", - "sha256:8f33d1156241c43755137288dea619105477961cfa7e47f48dbf96bc2c30720b", - "sha256:8ffd4b204d7de77b5dd558cdff986a8274796a1e57813ed005b33fd97e29f059", - "sha256:93a280c9eb736a0dcca19296f3c30c720cb41a71b1f9e617f341f0a8e791a69b", - "sha256:9a4f66259bdd6964d8cf26142733c81fb562252db74ea367d9beb4f815478e72", - "sha256:9a9d4ff06804920388aab69c5ea8a77525cf165356db70131616acd269e19b36", - "sha256:a2070c5affdb3a5e751f24208c5c4f3d5f008fa04d28731416e023c93b275277", - "sha256:a4857f7e2bc6921dbd487c5c88b84f5633de3e7d416c4dc0bb70256775551a6c", - "sha256:a607ae05b6c96057ba86c811d9c43423f35e03874ffb03fbdcd45e0637e8b631", - "sha256:a66ca3bdf21c653e47f726ca57f46ba7fc1f260ad99ba783acc3e58e3ebdb9ff", - "sha256:ab110c48bc3d97b4d19af41865e14531f300b482da21783fdaacd159251890e8", - "sha256:b239711e774c8eb910e9b1ac719f02f5ae4bf35fa0420f438cdc3a7e4e7dd6ec", - "sha256:be0416074d7f253865bb67630cf7210cbc14eb05f4099cc0f82430135aaa7a3b", - "sha256:c46643970dff9f5c976c6512fd35768c4a3819f01f61169d8cdac3f9290903b7", - "sha256:c5ec71fd4a43b6d84ddb88c1df94572479d9a26ef3f150cef3dacefecf888105", - "sha256:c6e5174f8ca585755988bc278c8bb5d02d9dc2e971591ef4a1baabdf2d99589b", - "sha256:c89b558f8a9a5a6f2cfc923c304d49f0ce629c3bd85cb442ca258ec20366394c", - "sha256:cc44e3545d908ecf3e5773266c487ad1877be718d9dc65fc7eb6e7d14960985b", - "sha256:cc6f8246e74dd210d7e2b56c76ceaba1cc52b025cd75dbe96eb48791e0250e98", - "sha256:cd556c79ad665faeae28020a0ab3bda6cd47d94bec48e36970719b0b86e4dcf4", - "sha256:ce6f3a147b4b1a8b09aae48517ae91139b1b010c5f36423fa2b866a8b23df879", - "sha256:ceb499d2b3d1d7b7ba23abe8bf26df5f06ba8c71127f188333dddcf356b4b63f", - "sha256:cef06fb382557f66d81d804230c11ab292d94b840b3cb7bf4450778377b592f4", - "sha256:e448f56cfeae7b1b3b5bcd99bb377cde7c4eb1970a525c770720a352bc4c8044", - "sha256:e52d3d95df81c8f6b2a1685aabffadf2d2d9ad97203a40f8d61e51b70f191e4e", - "sha256:ee2f1d1c223c3d2c24e3afbb2dd38be3f03b1a8d6a83ee3d9eb8c36a52bee899", - "sha256:f2c6888eada180814b8583c3e793f3f343a692fc802546eed45f40a001b1169f", - "sha256:f51dbba78d68a44e99d484ca8c8f604f17e957c1ca09c3ebc2c7e3bbd9ba0448", - "sha256:f54de00baf200b4539a5a092a759f000b5f45fd226d6d25a76b0dff71177a714", - "sha256:fa10fee7e32213f5c7b0d6428ea92e3a3fdd6d725590238a3f92c0de1c78b9d2", - "sha256:fabeeb121735d47d8eab8671b6b031ce08514c86b7ad8f7d5490a7b6dcd6267d", - "sha256:fac3c432851038b3e6afe086f777732bcf7f6ebbfd90951fa04ee53db6d0bcdd", - "sha256:fda29412a66099af6d6de0baa6bd7c52674de177ec2ad2630ca264142d69c6c7", - "sha256:ff1330e8bc996570221b450e2d539134baa9465f5cb98aff0e0f73f34172e0ae" + "sha256:03ed2a641e412e42cc35c244508cf186015c217f0e4d496bf6d7078ebe837ae7", + "sha256:04b14e45d6a8e159c9767ae57ecb34563ad93440fc1b26516a89ceb5b33c1ad5", + "sha256:0cdde51bfcf6b6bd862ee9be324521ec619b20590787d1655d005c3fb175005f", + "sha256:0f48fc7dc82ee14aeaedb986e175a429d24129b7eada1b7e94a864e4f0644dde", + "sha256:107d327071061fd4f4a2587d14c389a27e4e5c93c7cba5f1f59987181903902f", + "sha256:1375bb8b88cb050a2d4e0da901001347a44302aeadb8ceb4b6e5aa373b8ea68f", + "sha256:14a9f1887591684fb59fdba8feef7123a0da2424b0652e1b58dd5b9a7bb1188c", + "sha256:16baa799ec09cc0dcb43a10680573269d407c159325972dd7114ee7649e56c66", + "sha256:1b811662ecf72eb2d08872731636aee6559cae21862c36f74703be727b45df90", + "sha256:1ccae21a076d3d5f471700f6d30eb486da1626c380b23c70ae32ab823e453337", + "sha256:2f2cf7a42d4b7654c9a67b9d091ec24374f7c58794858bff632a2039cb15984d", + "sha256:322549b880b2d746a7672bf6ff9ed3f895e9c9f108b714e7360292aa5c5d7cf4", + "sha256:32ab83016c24c5cf3db2943286b85b0a172dae08c58d0f53875235219b676409", + "sha256:3fe50f1cac369b02d34ad904dfe0771acc483f82a1b54c5e93632916ba847b37", + "sha256:4a780807e80479f281d47ee4af2eb2df3e4ccf4723484f77da0bb49d027e40a1", + "sha256:4a8eb7785bd23565b542b01fb39115a975fefb4a82f23d407503eee2c0106247", + "sha256:5bee3970617b3d74759b2d2df2f6a327d372f9732f9ccbf03fa591b5f7581e39", + "sha256:60a3307a84ec60578accd35d7f0c71a3a971430ed7eca6567399d2b50ef37b8c", + "sha256:6625e52b6f346a283c3d563d1fd8bae8956daafc64bb5bbd2b8f8a07608e3994", + "sha256:66a5aae8233d766a877c5ef293ec5ab9520929c2578fd2069308a98b7374ea8c", + "sha256:68fb816a5dd901c6aff352ce49e2a0ffadacdf9b6fae282a69e7a16a02dad5fb", + "sha256:6b588b5cf51dc0fd1c9e19f622457cc74b7d26fe295432e434525f1c0fae02bc", + "sha256:6c4d7165a4e8f41eca6b990c12ee7f44fef3932fac48ca32cecb3a1b2223c21f", + "sha256:6d2e262e5e8da6fa56e774fb8e2643417351427604c2b177f8e8c5f75fc928ca", + "sha256:6d9c88b787638a451f41f97446a1c9fd416e669b4d9717ae4615bd29de1ac135", + "sha256:755c56beeacac6a24c8e1074f89f34f4373abce8b662470d3aa719ae304931f3", + "sha256:7e40d3f8eb472c1509b12ac2a7e24158ec352fc8567b77ab02c0db053927e339", + "sha256:812eaf4939ef2284d29653bcfee9665f11f013724f07258928f849a2306ea9f9", + "sha256:84df004223fd0550d0ea7a37882e5c889f3c6d45535c639ce9802293b39cd5c9", + "sha256:859f0add98707b182b4867359e12bde806b82483fb12a9ae868a77880fc3b7af", + "sha256:87c4b38288f71acd2106f5d94f575bc2136ea2887fdb5dfe18003c881fa6b370", + "sha256:89fc12c6371bf963809abc46cced4a01ca4f99cba17be5e7d416ed7ef1245d19", + "sha256:9564ac7eb1652c3701ac691ca72934dd3009997c81266807aef924012df2f4b3", + "sha256:9754a5c265f991317de2bac0c70a746efc2b695cf4d49f5d2cddeac36544fb44", + "sha256:a565f48c4aae72d1d3d3f8e8fb7218f5609c964e9c6f68604608e5958b9c60c3", + "sha256:a636160680c6e526b84f85d304e2f0bb4e94f8284dd765a1911de9a40450b10a", + "sha256:a839e25f07e428a87d17d857d9935dd743130e77ff46524abb992b962eb2076c", + "sha256:b62046592b44263fa7570f1117d372ae3f310222af1fc1407416f037fb3af21b", + "sha256:b7f7421841f8db443855d2854e25914a79a1ff48ae92f70d0a5c2f8907ab98c9", + "sha256:ba7ca81b6d60a9f7a0b4b4e175dcc38e8fef4992673d9d6e6879fd6de00dd9b8", + "sha256:bb32ca14b4d04e172c541c69eec5f385f9a075b38fb22d765d8b0ce3af3a0c22", + "sha256:c0ff1c1b4d13e2240821ef23c1efb1f009207cb3f56e16986f713c2b0e7cd37f", + "sha256:c669b440ce46ae3abe9b2d44a913b5fd86bb19eb14a8701e88e3918902ecd345", + "sha256:c67734cff78383a1f23ceba3b3239c7deefc62ac2b05fa6a47bcd565771e5880", + "sha256:c6809ebcbf6c1049002b9ac09c127ae43929042ec1f1dbd8bb1615f7cd9f70a0", + "sha256:cd601187476c6bed26a0398353212684c427e10a903aeafa6da40c63309d438b", + "sha256:ebfa374067af240d079ef97b8064478f3bf71038b78b017eb6ec93ede1b6bcec", + "sha256:fbb17c0d0822684b7d6c09915677a32319f16ff1115df5ec05bdcaaee40b35f3", + "sha256:fff1f3a586246110f34dc762098b5afd2de88de507559e63553d7da643053786" ], "index": "pypi", - "version": "==5.3.1" + "version": "==5.4" }, "dataclasses": { "hashes": [ diff --git a/README.md b/README.md index 7a8c47bd..f1bcff44 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ You can set environment variables in your OS, write on ```.env``` file or pass v | LANGUAGE_CODE | ```string``` | ```en-us``` | A string representing the language code for this installation.This should be in standard [language ID format](https://docs.djangoproject.com/en/2.0/topics/i18n/#term-language-code). | TIME_ZONE | ```string``` | ```UTC``` | A string representing the time zone for this installation. See the [list of time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). | STATIC_URL | ```string``` | ```/static/``` | URL to use when referring to static files located in ```STATIC_ROOT```. +| CSRF_COOKIE_DOMAIN | ```string``` | ```None``` | The domain to be used when setting the CSRF cookie. +| CSRF_COOKIE_SECURE | ```boolean``` | ```False``` | Whether to use a secure cookie for the CSRF cookie. | OIDC_RP_SERVER_URL | ```string``` | ```None``` | Open ID Connect Server URL, example: https://accounts.weni.ai/auth/. | OIDC_RP_REALM_NAME | ```string``` | ```None``` | Open ID Connect Realm Name. | OIDC_RP_CLIENT_ID | ```string``` | ```None``` | OpenID Connect client ID provided by your OP. @@ -44,6 +46,14 @@ You can set environment variables in your OS, write on ```.env``` file or pass v | SEND_EMAILS | ```boolean``` | ```False``` | Send emails flag. | INTELIGENCE_URL | ```string``` | ```https://bothub.it/``` | Specify the URL of the intelligence service. | FLOWS_URL | ```string``` | ```https://new.push.al/``` | Specify the URL of the flows service. +| USE_SENTRY | ```bool``` | ```False``` | Enable Support Sentry +| SENTRY_URL | ```string``` | ```None``` | URL Sentry +| APM_DISABLE_SEND | ```bool``` | ```False``` | Disable sending Elastic APM +| APM_SERVICE_DEBUG | ```bool``` | ```False``` | Enable APM debug mode +| APM_SERVICE_NAME | ```string``` | ```''``` | APM Service Name +| APM_SECRET_TOKEN | ```string``` | ```''``` | APM Secret Token +| APM_SERVER_URL | ```string``` | ```''``` | APM URL +| ENVIRONMENT | ```string``` | ```production``` | Specify the environment you are going to run, it is also used for sentry ## License diff --git a/weni/settings.py b/weni/settings.py index 6626cedb..f2f01ae8 100644 --- a/weni/settings.py +++ b/weni/settings.py @@ -14,11 +14,15 @@ import sys import environ +import sentry_sdk +from django.utils.log import DEFAULT_LOGGING +from sentry_sdk.integrations.django import DjangoIntegration environ.Env.read_env(env_file=(environ.Path(__file__) - 2)(".env")) env = environ.Env( # set casting, default value + ENVIRONMENT=(str, "production"), DEBUG=(bool, False), ALLOWED_HOSTS=(lambda v: [s.strip() for s in v.split(",")], "*"), LANGUAGE_CODE=(str, "en-us"), @@ -29,7 +33,7 @@ AWS_SECRET_ACCESS_KEY=(str, None), AWS_STORAGE_BUCKET_NAME=(str, None), AWS_S3_REGION_NAME=(str, None), - EMAIL_HOST=(lambda v: v or None, "*"), + EMAIL_HOST=(lambda v: v or None, None), DEFAULT_FROM_EMAIL=(str, "webmaster@localhost"), SERVER_EMAIL=(str, "root@localhost"), EMAIL_PORT=(int, 25), @@ -38,9 +42,18 @@ EMAIL_USE_SSL=(bool, False), EMAIL_USE_TLS=(bool, False), SEND_EMAILS=(bool, True), + CSRF_COOKIE_DOMAIN=(lambda v: v or None, None), + CSRF_COOKIE_SECURE=(bool, False), BASE_URL=(str, "https://api.weni.ai"), INTELIGENCE_URL=(str, "https://bothub.it/"), FLOWS_URL=(str, "https://new.push.al/"), + USE_SENTRY=(bool, False), + SENTRY_URL=(str, None), + APM_DISABLE_SEND=(bool, False), + APM_SERVICE_DEBUG=(bool, False), + APM_SERVICE_NAME=(str, ""), + APM_SECRET_TOKEN=(str, ""), + APM_SERVER_URL=(str, ""), ) # Build paths inside the project like this: os.path.join(BASE_DIR, ...) @@ -77,6 +90,7 @@ "drf_yasg2", "django_filters", "mozilla_django_oidc", + "elasticapm.contrib.django", "weni.authentication.apps.AuthenticationConfig", "weni.common", "django_celery_results", @@ -86,6 +100,8 @@ ] MIDDLEWARE = [ + "elasticapm.contrib.django.middleware.TracingMiddleware", + "elasticapm.contrib.django.middleware.Catch404Middleware", "django.middleware.security.SecurityMiddleware", "whitenoise.middleware.WhiteNoiseMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", @@ -111,6 +127,7 @@ "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", "django.template.context_processors.i18n", + "elasticapm.contrib.django.context_processors.rum_tracing", ] }, } @@ -172,6 +189,38 @@ STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage" +# Logging + +LOGGING = DEFAULT_LOGGING +LOGGING["handlers"]["elasticapm"] = { + "level": "WARNING", + "class": "elasticapm.contrib.django.handlers.LoggingHandler", +} +LOGGING["formatters"]["verbose"] = { + "format": "%(levelname)s %(asctime)s %(module)s " + "%(process)d %(thread)d %(message)s" +} +LOGGING["handlers"]["console"] = { + "level": "DEBUG", + "class": "logging.StreamHandler", + "formatter": "verbose", +} +LOGGING["loggers"]["django.db.backends"] = { + "level": "ERROR", + "handlers": ["console"], + "propagate": False, +} +LOGGING["loggers"]["sentry.errors"] = { + "level": "DEBUG", + "handlers": ["console"], + "propagate": False, +} +LOGGING["loggers"]["elasticapm.errors"] = { + "level": "ERROR", + "handlers": ["console"], + "propagate": False, +} + # rest framework REST_FRAMEWORK = { @@ -188,6 +237,45 @@ "rest_framework.authentication.TokenAuthentication" ) +# CSRF + +CSRF_COOKIE_DOMAIN = env.str("CSRF_COOKIE_DOMAIN") + +CSRF_COOKIE_SECURE = env.bool("CSRF_COOKIE_SECURE") + +# Sentry Environment + +USE_SENTRY = env.bool("USE_SENTRY") + + +# Sentry + +if USE_SENTRY: + sentry_sdk.init( + dsn=env.str("SENTRY_URL"), + integrations=[DjangoIntegration()], + environment=env.str("ENVIRONMENT"), + ) + +# Elastic Observability APM +ELASTIC_APM = { + "DISABLE_SEND": env.bool("APM_DISABLE_SEND"), + "DEBUG": env.bool("APM_SERVICE_DEBUG"), + "SERVICE_NAME": env.str("APM_SERVICE_NAME"), + "SECRET_TOKEN": env.str("APM_SECRET_TOKEN"), + "SERVER_URL": env.str("APM_SERVER_URL"), + "ENVIRONMENT": env.str("ENVIRONMENT"), + "DJANGO_TRANSACTION_NAME_FROM_ROUTE": True, + "PROCESSORS": ( + "elasticapm.processors.sanitize_stacktrace_locals", + "elasticapm.processors.sanitize_http_request_cookies", + "elasticapm.processors.sanitize_http_headers", + "elasticapm.processors.sanitize_http_wsgi_env", + "elasticapm.processors.sanitize_http_request_querystring", + "elasticapm.processors.sanitize_http_request_body", + ), +} + # mozilla-django-oidc OIDC_RP_SERVER_URL = env.str("OIDC_RP_SERVER_URL") OIDC_RP_REALM_NAME = env.str("OIDC_RP_REALM_NAME")