[{"data":1,"prerenderedAt":16460},["ShallowReactive",2],{"navigation":3,"/deployment/monitoring-and-logging":1016,"/deployment/monitoring-and-logging-surround":16455},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"id":1017,"title":767,"body":1018,"description":1028,"extension":16450,"links":16451,"meta":16452,"navigation":1074,"path":768,"seo":16453,"stem":769,"__hash__":16454},"docs/20.deployment/08.monitoring-and-logging.md",{"type":1019,"value":1020,"toc":16435},"minimark",[1021,1025,1029,1034,1039,2139,2143,4983,4987,6550,6554,6558,8644,8648,11822,11826,13956,13960,13964,16429,16432],[1022,1023,767],"h1",{"id":1024},"monitoring-and-logging",[1026,1027,1028],"p",{},"Comprehensive monitoring and logging are essential for maintaining healthy Django applications in production. This chapter covers application performance monitoring, error tracking, log aggregation, alerting systems, and observability best practices for Django applications.",[1030,1031,1033],"h2",{"id":1032},"application-performance-monitoring-apm","Application Performance Monitoring (APM)",[1035,1036,1038],"h3",{"id":1037},"django-performance-monitoring-setup","Django Performance Monitoring Setup",[1040,1041,1046],"pre",{"className":1042,"code":1043,"language":1044,"meta":1045,"style":1045},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# settings/monitoring.py\nimport os\n\n# Sentry for error tracking\nimport sentry_sdk\nfrom sentry_sdk.integrations.django import DjangoIntegration\nfrom sentry_sdk.integrations.celery import CeleryIntegration\nfrom sentry_sdk.integrations.redis import RedisIntegration\nfrom sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration\n\nsentry_sdk.init(\n    dsn=os.environ.get('SENTRY_DSN'),\n    integrations=[\n        DjangoIntegration(\n            transaction_style='url',\n            middleware_spans=True,\n            signals_spans=True,\n        ),\n        CeleryIntegration(monitor_beat_tasks=True),\n        RedisIntegration(),\n        SqlalchemyIntegration(),\n    ],\n    traces_sample_rate=0.1,  # 10% of transactions\n    send_default_pii=False,\n    environment=os.environ.get('ENVIRONMENT', 'production'),\n    release=os.environ.get('GIT_COMMIT', 'unknown'),\n    before_send=filter_sensitive_data,\n)\n\ndef filter_sensitive_data(event, hint):\n    \"\"\"Filter sensitive data from Sentry events\"\"\"\n    # Remove sensitive headers\n    if 'request' in event and 'headers' in event['request']:\n        sensitive_headers = ['authorization', 'cookie', 'x-api-key']\n        for header in sensitive_headers:\n            event['request']['headers'].pop(header, None)\n    \n    # Remove sensitive form data\n    if 'request' in event and 'data' in event['request']:\n        sensitive_fields = ['password', 'token', 'secret', 'key']\n        for field in sensitive_fields:\n            if field in event['request']['data']:\n                event['request']['data'][field] = '[Filtered]'\n    \n    return event\n\n# New Relic APM\nNEW_RELIC_CONFIG_FILE = os.path.join(BASE_DIR, 'newrelic.ini')\nNEW_RELIC_ENVIRONMENT = os.environ.get('ENVIRONMENT', 'production')\n\n# DataDog APM\nDATADOG_TRACE = {\n    'DEFAULT_SERVICE': 'django-app',\n    'TAGS': {\n        'env': os.environ.get('ENVIRONMENT', 'production'),\n        'version': os.environ.get('GIT_COMMIT', 'unknown'),\n    },\n}\n\n# Custom metrics collection\nMONITORING_ENABLED = True\nMETRICS_BACKEND = 'myproject.monitoring.backends.PrometheusBackend'\n","python","",[1047,1048,1049,1058,1069,1076,1082,1090,1116,1137,1158,1179,1184,1199,1239,1248,1256,1274,1288,1300,1306,1323,1332,1340,1346,1364,1377,1416,1454,1467,1473,1478,1503,1517,1523,1570,1609,1627,1668,1674,1680,1718,1764,1779,1809,1850,1855,1864,1869,1875,1914,1950,1955,1961,1972,1995,2009,2050,2090,2096,2102,2107,2113,2124],"code",{"__ignoreMap":1045},[1050,1051,1054],"span",{"class":1052,"line":1053},"line",1,[1050,1055,1057],{"class":1056},"s9Tkl","# settings/monitoring.py\n",[1050,1059,1061,1065],{"class":1052,"line":1060},2,[1050,1062,1064],{"class":1063},"siDh9","import",[1050,1066,1068],{"class":1067},"sftqT"," os\n",[1050,1070,1072],{"class":1052,"line":1071},3,[1050,1073,1075],{"emptyLinePlaceholder":1074},true,"\n",[1050,1077,1079],{"class":1052,"line":1078},4,[1050,1080,1081],{"class":1056},"# Sentry for error tracking\n",[1050,1083,1085,1087],{"class":1052,"line":1084},5,[1050,1086,1064],{"class":1063},[1050,1088,1089],{"class":1067}," sentry_sdk\n",[1050,1091,1093,1096,1099,1103,1106,1108,1111,1113],{"class":1052,"line":1092},6,[1050,1094,1095],{"class":1063},"from",[1050,1097,1098],{"class":1067}," sentry_sdk",[1050,1100,1102],{"class":1101},"soVBu",".",[1050,1104,1105],{"class":1067},"integrations",[1050,1107,1102],{"class":1101},[1050,1109,1110],{"class":1067},"django ",[1050,1112,1064],{"class":1063},[1050,1114,1115],{"class":1067}," DjangoIntegration\n",[1050,1117,1119,1121,1123,1125,1127,1129,1132,1134],{"class":1052,"line":1118},7,[1050,1120,1095],{"class":1063},[1050,1122,1098],{"class":1067},[1050,1124,1102],{"class":1101},[1050,1126,1105],{"class":1067},[1050,1128,1102],{"class":1101},[1050,1130,1131],{"class":1067},"celery ",[1050,1133,1064],{"class":1063},[1050,1135,1136],{"class":1067}," CeleryIntegration\n",[1050,1138,1140,1142,1144,1146,1148,1150,1153,1155],{"class":1052,"line":1139},8,[1050,1141,1095],{"class":1063},[1050,1143,1098],{"class":1067},[1050,1145,1102],{"class":1101},[1050,1147,1105],{"class":1067},[1050,1149,1102],{"class":1101},[1050,1151,1152],{"class":1067},"redis ",[1050,1154,1064],{"class":1063},[1050,1156,1157],{"class":1067}," RedisIntegration\n",[1050,1159,1161,1163,1165,1167,1169,1171,1174,1176],{"class":1052,"line":1160},9,[1050,1162,1095],{"class":1063},[1050,1164,1098],{"class":1067},[1050,1166,1102],{"class":1101},[1050,1168,1105],{"class":1067},[1050,1170,1102],{"class":1101},[1050,1172,1173],{"class":1067},"sqlalchemy ",[1050,1175,1064],{"class":1063},[1050,1177,1178],{"class":1067}," SqlalchemyIntegration\n",[1050,1180,1182],{"class":1052,"line":1181},10,[1050,1183,1075],{"emptyLinePlaceholder":1074},[1050,1185,1187,1190,1192,1196],{"class":1052,"line":1186},11,[1050,1188,1189],{"class":1067},"sentry_sdk",[1050,1191,1102],{"class":1101},[1050,1193,1195],{"class":1194},"siWMO","init",[1050,1197,1198],{"class":1101},"(\n",[1050,1200,1202,1206,1209,1212,1214,1218,1220,1223,1226,1230,1234,1236],{"class":1052,"line":1201},12,[1050,1203,1205],{"class":1204},"sqOPj","    dsn",[1050,1207,1208],{"class":1101},"=",[1050,1210,1211],{"class":1194},"os",[1050,1213,1102],{"class":1101},[1050,1215,1217],{"class":1216},"sBPpx","environ",[1050,1219,1102],{"class":1101},[1050,1221,1222],{"class":1194},"get",[1050,1224,1225],{"class":1101},"(",[1050,1227,1229],{"class":1228},"sbYkP","'",[1050,1231,1233],{"class":1232},"sTbE_","SENTRY_DSN",[1050,1235,1229],{"class":1228},[1050,1237,1238],{"class":1101},"),\n",[1050,1240,1242,1245],{"class":1052,"line":1241},13,[1050,1243,1244],{"class":1204},"    integrations",[1050,1246,1247],{"class":1101},"=[\n",[1050,1249,1251,1254],{"class":1052,"line":1250},14,[1050,1252,1253],{"class":1194},"        DjangoIntegration",[1050,1255,1198],{"class":1101},[1050,1257,1259,1262,1264,1266,1269,1271],{"class":1052,"line":1258},15,[1050,1260,1261],{"class":1204},"            transaction_style",[1050,1263,1208],{"class":1101},[1050,1265,1229],{"class":1228},[1050,1267,1268],{"class":1232},"url",[1050,1270,1229],{"class":1228},[1050,1272,1273],{"class":1101},",\n",[1050,1275,1277,1280,1282,1286],{"class":1052,"line":1276},16,[1050,1278,1279],{"class":1204},"            middleware_spans",[1050,1281,1208],{"class":1101},[1050,1283,1285],{"class":1284},"s8XtY","True",[1050,1287,1273],{"class":1101},[1050,1289,1291,1294,1296,1298],{"class":1052,"line":1290},17,[1050,1292,1293],{"class":1204},"            signals_spans",[1050,1295,1208],{"class":1101},[1050,1297,1285],{"class":1284},[1050,1299,1273],{"class":1101},[1050,1301,1303],{"class":1052,"line":1302},18,[1050,1304,1305],{"class":1101},"        ),\n",[1050,1307,1309,1312,1314,1317,1319,1321],{"class":1052,"line":1308},19,[1050,1310,1311],{"class":1194},"        CeleryIntegration",[1050,1313,1225],{"class":1101},[1050,1315,1316],{"class":1204},"monitor_beat_tasks",[1050,1318,1208],{"class":1101},[1050,1320,1285],{"class":1284},[1050,1322,1238],{"class":1101},[1050,1324,1326,1329],{"class":1052,"line":1325},20,[1050,1327,1328],{"class":1194},"        RedisIntegration",[1050,1330,1331],{"class":1101},"(),\n",[1050,1333,1335,1338],{"class":1052,"line":1334},21,[1050,1336,1337],{"class":1194},"        SqlalchemyIntegration",[1050,1339,1331],{"class":1101},[1050,1341,1343],{"class":1052,"line":1342},22,[1050,1344,1345],{"class":1101},"    ],\n",[1050,1347,1349,1352,1354,1358,1361],{"class":1052,"line":1348},23,[1050,1350,1351],{"class":1204},"    traces_sample_rate",[1050,1353,1208],{"class":1101},[1050,1355,1357],{"class":1356},"s7CZa","0.1",[1050,1359,1360],{"class":1101},",",[1050,1362,1363],{"class":1056},"  # 10% of transactions\n",[1050,1365,1367,1370,1372,1375],{"class":1052,"line":1366},24,[1050,1368,1369],{"class":1204},"    send_default_pii",[1050,1371,1208],{"class":1101},[1050,1373,1374],{"class":1284},"False",[1050,1376,1273],{"class":1101},[1050,1378,1380,1383,1385,1387,1389,1391,1393,1395,1397,1399,1402,1404,1406,1409,1412,1414],{"class":1052,"line":1379},25,[1050,1381,1382],{"class":1204},"    environment",[1050,1384,1208],{"class":1101},[1050,1386,1211],{"class":1194},[1050,1388,1102],{"class":1101},[1050,1390,1217],{"class":1216},[1050,1392,1102],{"class":1101},[1050,1394,1222],{"class":1194},[1050,1396,1225],{"class":1101},[1050,1398,1229],{"class":1228},[1050,1400,1401],{"class":1232},"ENVIRONMENT",[1050,1403,1229],{"class":1228},[1050,1405,1360],{"class":1101},[1050,1407,1408],{"class":1228}," '",[1050,1410,1411],{"class":1232},"production",[1050,1413,1229],{"class":1228},[1050,1415,1238],{"class":1101},[1050,1417,1419,1422,1424,1426,1428,1430,1432,1434,1436,1438,1441,1443,1445,1447,1450,1452],{"class":1052,"line":1418},26,[1050,1420,1421],{"class":1204},"    release",[1050,1423,1208],{"class":1101},[1050,1425,1211],{"class":1194},[1050,1427,1102],{"class":1101},[1050,1429,1217],{"class":1216},[1050,1431,1102],{"class":1101},[1050,1433,1222],{"class":1194},[1050,1435,1225],{"class":1101},[1050,1437,1229],{"class":1228},[1050,1439,1440],{"class":1232},"GIT_COMMIT",[1050,1442,1229],{"class":1228},[1050,1444,1360],{"class":1101},[1050,1446,1408],{"class":1228},[1050,1448,1449],{"class":1232},"unknown",[1050,1451,1229],{"class":1228},[1050,1453,1238],{"class":1101},[1050,1455,1457,1460,1462,1465],{"class":1052,"line":1456},27,[1050,1458,1459],{"class":1204},"    before_send",[1050,1461,1208],{"class":1101},[1050,1463,1464],{"class":1194},"filter_sensitive_data",[1050,1466,1273],{"class":1101},[1050,1468,1470],{"class":1052,"line":1469},28,[1050,1471,1472],{"class":1101},")\n",[1050,1474,1476],{"class":1052,"line":1475},29,[1050,1477,1075],{"emptyLinePlaceholder":1074},[1050,1479,1481,1485,1489,1491,1495,1497,1500],{"class":1052,"line":1480},30,[1050,1482,1484],{"class":1483},"s5Kfy","def",[1050,1486,1488],{"class":1487},"sljsM"," filter_sensitive_data",[1050,1490,1225],{"class":1101},[1050,1492,1494],{"class":1493},"sCyAa","event",[1050,1496,1360],{"class":1101},[1050,1498,1499],{"class":1493}," hint",[1050,1501,1502],{"class":1101},"):\n",[1050,1504,1506,1510,1514],{"class":1052,"line":1505},31,[1050,1507,1509],{"class":1508},"sm7ve","    \"\"\"",[1050,1511,1513],{"class":1512},"sVyVU","Filter sensitive data from Sentry events",[1050,1515,1516],{"class":1508},"\"\"\"\n",[1050,1518,1520],{"class":1052,"line":1519},32,[1050,1521,1522],{"class":1056},"    # Remove sensitive headers\n",[1050,1524,1526,1529,1531,1534,1536,1540,1543,1546,1548,1551,1553,1555,1558,1561,1563,1565,1567],{"class":1052,"line":1525},33,[1050,1527,1528],{"class":1063},"    if",[1050,1530,1408],{"class":1228},[1050,1532,1533],{"class":1232},"request",[1050,1535,1229],{"class":1228},[1050,1537,1539],{"class":1538},"sVsLi"," in",[1050,1541,1542],{"class":1067}," event ",[1050,1544,1545],{"class":1538},"and",[1050,1547,1408],{"class":1228},[1050,1549,1550],{"class":1232},"headers",[1050,1552,1229],{"class":1228},[1050,1554,1539],{"class":1538},[1050,1556,1557],{"class":1067}," event",[1050,1559,1560],{"class":1101},"[",[1050,1562,1229],{"class":1228},[1050,1564,1533],{"class":1232},[1050,1566,1229],{"class":1228},[1050,1568,1569],{"class":1101},"]:\n",[1050,1571,1573,1576,1578,1581,1583,1586,1588,1590,1592,1595,1597,1599,1601,1604,1606],{"class":1052,"line":1572},34,[1050,1574,1575],{"class":1067},"        sensitive_headers ",[1050,1577,1208],{"class":1101},[1050,1579,1580],{"class":1101}," [",[1050,1582,1229],{"class":1228},[1050,1584,1585],{"class":1232},"authorization",[1050,1587,1229],{"class":1228},[1050,1589,1360],{"class":1101},[1050,1591,1408],{"class":1228},[1050,1593,1594],{"class":1232},"cookie",[1050,1596,1229],{"class":1228},[1050,1598,1360],{"class":1101},[1050,1600,1408],{"class":1228},[1050,1602,1603],{"class":1232},"x-api-key",[1050,1605,1229],{"class":1228},[1050,1607,1608],{"class":1101},"]\n",[1050,1610,1612,1615,1618,1621,1624],{"class":1052,"line":1611},35,[1050,1613,1614],{"class":1063},"        for",[1050,1616,1617],{"class":1067}," header ",[1050,1619,1620],{"class":1063},"in",[1050,1622,1623],{"class":1067}," sensitive_headers",[1050,1625,1626],{"class":1101},":\n",[1050,1628,1630,1633,1635,1637,1639,1641,1644,1646,1648,1650,1653,1656,1658,1661,1663,1666],{"class":1052,"line":1629},36,[1050,1631,1632],{"class":1067},"            event",[1050,1634,1560],{"class":1101},[1050,1636,1229],{"class":1228},[1050,1638,1533],{"class":1232},[1050,1640,1229],{"class":1228},[1050,1642,1643],{"class":1101},"][",[1050,1645,1229],{"class":1228},[1050,1647,1550],{"class":1232},[1050,1649,1229],{"class":1228},[1050,1651,1652],{"class":1101},"].",[1050,1654,1655],{"class":1194},"pop",[1050,1657,1225],{"class":1101},[1050,1659,1660],{"class":1194},"header",[1050,1662,1360],{"class":1101},[1050,1664,1665],{"class":1284}," None",[1050,1667,1472],{"class":1101},[1050,1669,1671],{"class":1052,"line":1670},37,[1050,1672,1673],{"class":1067},"    \n",[1050,1675,1677],{"class":1052,"line":1676},38,[1050,1678,1679],{"class":1056},"    # Remove sensitive form data\n",[1050,1681,1683,1685,1687,1689,1691,1693,1695,1697,1699,1702,1704,1706,1708,1710,1712,1714,1716],{"class":1052,"line":1682},39,[1050,1684,1528],{"class":1063},[1050,1686,1408],{"class":1228},[1050,1688,1533],{"class":1232},[1050,1690,1229],{"class":1228},[1050,1692,1539],{"class":1538},[1050,1694,1542],{"class":1067},[1050,1696,1545],{"class":1538},[1050,1698,1408],{"class":1228},[1050,1700,1701],{"class":1232},"data",[1050,1703,1229],{"class":1228},[1050,1705,1539],{"class":1538},[1050,1707,1557],{"class":1067},[1050,1709,1560],{"class":1101},[1050,1711,1229],{"class":1228},[1050,1713,1533],{"class":1232},[1050,1715,1229],{"class":1228},[1050,1717,1569],{"class":1101},[1050,1719,1721,1724,1726,1728,1730,1733,1735,1737,1739,1742,1744,1746,1748,1751,1753,1755,1757,1760,1762],{"class":1052,"line":1720},40,[1050,1722,1723],{"class":1067},"        sensitive_fields ",[1050,1725,1208],{"class":1101},[1050,1727,1580],{"class":1101},[1050,1729,1229],{"class":1228},[1050,1731,1732],{"class":1232},"password",[1050,1734,1229],{"class":1228},[1050,1736,1360],{"class":1101},[1050,1738,1408],{"class":1228},[1050,1740,1741],{"class":1232},"token",[1050,1743,1229],{"class":1228},[1050,1745,1360],{"class":1101},[1050,1747,1408],{"class":1228},[1050,1749,1750],{"class":1232},"secret",[1050,1752,1229],{"class":1228},[1050,1754,1360],{"class":1101},[1050,1756,1408],{"class":1228},[1050,1758,1759],{"class":1232},"key",[1050,1761,1229],{"class":1228},[1050,1763,1608],{"class":1101},[1050,1765,1767,1769,1772,1774,1777],{"class":1052,"line":1766},41,[1050,1768,1614],{"class":1063},[1050,1770,1771],{"class":1067}," field ",[1050,1773,1620],{"class":1063},[1050,1775,1776],{"class":1067}," sensitive_fields",[1050,1778,1626],{"class":1101},[1050,1780,1782,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807],{"class":1052,"line":1781},42,[1050,1783,1784],{"class":1063},"            if",[1050,1786,1771],{"class":1067},[1050,1788,1620],{"class":1538},[1050,1790,1557],{"class":1067},[1050,1792,1560],{"class":1101},[1050,1794,1229],{"class":1228},[1050,1796,1533],{"class":1232},[1050,1798,1229],{"class":1228},[1050,1800,1643],{"class":1101},[1050,1802,1229],{"class":1228},[1050,1804,1701],{"class":1232},[1050,1806,1229],{"class":1228},[1050,1808,1569],{"class":1101},[1050,1810,1812,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1836,1839,1842,1844,1847],{"class":1052,"line":1811},43,[1050,1813,1814],{"class":1067},"                event",[1050,1816,1560],{"class":1101},[1050,1818,1229],{"class":1228},[1050,1820,1533],{"class":1232},[1050,1822,1229],{"class":1228},[1050,1824,1643],{"class":1101},[1050,1826,1229],{"class":1228},[1050,1828,1701],{"class":1232},[1050,1830,1229],{"class":1228},[1050,1832,1643],{"class":1101},[1050,1834,1835],{"class":1067},"field",[1050,1837,1838],{"class":1101},"]",[1050,1840,1841],{"class":1101}," =",[1050,1843,1408],{"class":1228},[1050,1845,1846],{"class":1232},"[Filtered]",[1050,1848,1849],{"class":1228},"'\n",[1050,1851,1853],{"class":1052,"line":1852},44,[1050,1854,1673],{"class":1067},[1050,1856,1858,1861],{"class":1052,"line":1857},45,[1050,1859,1860],{"class":1063},"    return",[1050,1862,1863],{"class":1067}," event\n",[1050,1865,1867],{"class":1052,"line":1866},46,[1050,1868,1075],{"emptyLinePlaceholder":1074},[1050,1870,1872],{"class":1052,"line":1871},47,[1050,1873,1874],{"class":1056},"# New Relic APM\n",[1050,1876,1878,1882,1884,1887,1889,1892,1894,1897,1899,1903,1905,1907,1910,1912],{"class":1052,"line":1877},48,[1050,1879,1881],{"class":1880},"se3Ec","NEW_RELIC_CONFIG_FILE",[1050,1883,1841],{"class":1101},[1050,1885,1886],{"class":1067}," os",[1050,1888,1102],{"class":1101},[1050,1890,1891],{"class":1216},"path",[1050,1893,1102],{"class":1101},[1050,1895,1896],{"class":1194},"join",[1050,1898,1225],{"class":1101},[1050,1900,1902],{"class":1901},"s6DHA","BASE_DIR",[1050,1904,1360],{"class":1101},[1050,1906,1408],{"class":1228},[1050,1908,1909],{"class":1232},"newrelic.ini",[1050,1911,1229],{"class":1228},[1050,1913,1472],{"class":1101},[1050,1915,1917,1920,1922,1924,1926,1928,1930,1932,1934,1936,1938,1940,1942,1944,1946,1948],{"class":1052,"line":1916},49,[1050,1918,1919],{"class":1880},"NEW_RELIC_ENVIRONMENT",[1050,1921,1841],{"class":1101},[1050,1923,1886],{"class":1067},[1050,1925,1102],{"class":1101},[1050,1927,1217],{"class":1216},[1050,1929,1102],{"class":1101},[1050,1931,1222],{"class":1194},[1050,1933,1225],{"class":1101},[1050,1935,1229],{"class":1228},[1050,1937,1401],{"class":1232},[1050,1939,1229],{"class":1228},[1050,1941,1360],{"class":1101},[1050,1943,1408],{"class":1228},[1050,1945,1411],{"class":1232},[1050,1947,1229],{"class":1228},[1050,1949,1472],{"class":1101},[1050,1951,1953],{"class":1052,"line":1952},50,[1050,1954,1075],{"emptyLinePlaceholder":1074},[1050,1956,1958],{"class":1052,"line":1957},51,[1050,1959,1960],{"class":1056},"# DataDog APM\n",[1050,1962,1964,1967,1969],{"class":1052,"line":1963},52,[1050,1965,1966],{"class":1880},"DATADOG_TRACE",[1050,1968,1841],{"class":1101},[1050,1970,1971],{"class":1101}," {\n",[1050,1973,1975,1978,1981,1983,1986,1988,1991,1993],{"class":1052,"line":1974},53,[1050,1976,1977],{"class":1228},"    '",[1050,1979,1980],{"class":1232},"DEFAULT_SERVICE",[1050,1982,1229],{"class":1228},[1050,1984,1985],{"class":1101},":",[1050,1987,1408],{"class":1228},[1050,1989,1990],{"class":1232},"django-app",[1050,1992,1229],{"class":1228},[1050,1994,1273],{"class":1101},[1050,1996,1998,2000,2003,2005,2007],{"class":1052,"line":1997},54,[1050,1999,1977],{"class":1228},[1050,2001,2002],{"class":1232},"TAGS",[1050,2004,1229],{"class":1228},[1050,2006,1985],{"class":1101},[1050,2008,1971],{"class":1101},[1050,2010,2012,2015,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048],{"class":1052,"line":2011},55,[1050,2013,2014],{"class":1228},"        '",[1050,2016,2017],{"class":1232},"env",[1050,2019,1229],{"class":1228},[1050,2021,1985],{"class":1101},[1050,2023,1886],{"class":1067},[1050,2025,1102],{"class":1101},[1050,2027,1217],{"class":1216},[1050,2029,1102],{"class":1101},[1050,2031,1222],{"class":1194},[1050,2033,1225],{"class":1101},[1050,2035,1229],{"class":1228},[1050,2037,1401],{"class":1232},[1050,2039,1229],{"class":1228},[1050,2041,1360],{"class":1101},[1050,2043,1408],{"class":1228},[1050,2045,1411],{"class":1232},[1050,2047,1229],{"class":1228},[1050,2049,1238],{"class":1101},[1050,2051,2053,2055,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088],{"class":1052,"line":2052},56,[1050,2054,2014],{"class":1228},[1050,2056,2057],{"class":1232},"version",[1050,2059,1229],{"class":1228},[1050,2061,1985],{"class":1101},[1050,2063,1886],{"class":1067},[1050,2065,1102],{"class":1101},[1050,2067,1217],{"class":1216},[1050,2069,1102],{"class":1101},[1050,2071,1222],{"class":1194},[1050,2073,1225],{"class":1101},[1050,2075,1229],{"class":1228},[1050,2077,1440],{"class":1232},[1050,2079,1229],{"class":1228},[1050,2081,1360],{"class":1101},[1050,2083,1408],{"class":1228},[1050,2085,1449],{"class":1232},[1050,2087,1229],{"class":1228},[1050,2089,1238],{"class":1101},[1050,2091,2093],{"class":1052,"line":2092},57,[1050,2094,2095],{"class":1101},"    },\n",[1050,2097,2099],{"class":1052,"line":2098},58,[1050,2100,2101],{"class":1101},"}\n",[1050,2103,2105],{"class":1052,"line":2104},59,[1050,2106,1075],{"emptyLinePlaceholder":1074},[1050,2108,2110],{"class":1052,"line":2109},60,[1050,2111,2112],{"class":1056},"# Custom metrics collection\n",[1050,2114,2116,2119,2121],{"class":1052,"line":2115},61,[1050,2117,2118],{"class":1880},"MONITORING_ENABLED",[1050,2120,1841],{"class":1101},[1050,2122,2123],{"class":1284}," True\n",[1050,2125,2127,2130,2132,2134,2137],{"class":1052,"line":2126},62,[1050,2128,2129],{"class":1880},"METRICS_BACKEND",[1050,2131,1841],{"class":1101},[1050,2133,1408],{"class":1228},[1050,2135,2136],{"class":1232},"myproject.monitoring.backends.PrometheusBackend",[1050,2138,1849],{"class":1228},[1035,2140,2142],{"id":2141},"custom-performance-monitoring","Custom Performance Monitoring",[1040,2144,2146],{"className":1042,"code":2145,"language":1044,"meta":1045,"style":1045},"# monitoring/performance.py\nimport time\nimport threading\nfrom collections import defaultdict, deque\nfrom django.db import connection\nfrom django.core.cache import cache\nfrom django.utils import timezone\nimport psutil\n\nclass PerformanceMonitor:\n    \"\"\"Custom performance monitoring for Django applications\"\"\"\n    \n    def __init__(self):\n        self.request_metrics = defaultdict(list)\n        self.database_metrics = deque(maxlen=1000)\n        self.cache_metrics = defaultdict(int)\n        self.error_metrics = defaultdict(int)\n        self.lock = threading.Lock()\n        self.start_time = time.time()\n    \n    def record_request(self, method, path, status_code, response_time, \n                      db_queries=0, cache_hits=0, cache_misses=0):\n        \"\"\"Record request performance metrics\"\"\"\n        with self.lock:\n            timestamp = time.time()\n            \n            metric = {\n                'timestamp': timestamp,\n                'method': method,\n                'path': path,\n                'status_code': status_code,\n                'response_time': response_time,\n                'db_queries': db_queries,\n                'cache_hits': cache_hits,\n                'cache_misses': cache_misses,\n            }\n            \n            self.request_metrics[path].append(metric)\n            \n            # Keep only last 100 requests per endpoint\n            if len(self.request_metrics[path]) > 100:\n                self.request_metrics[path].pop(0)\n            \n            # Track errors\n            if status_code >= 400:\n                self.error_metrics[status_code] += 1\n    \n    def record_database_query(self, query, execution_time, table=None):\n        \"\"\"Record database query metrics\"\"\"\n        with self.lock:\n            metric = {\n                'timestamp': time.time(),\n                'query': query[:200],  # Truncate long queries\n                'execution_time': execution_time,\n                'table': table,\n            }\n            self.database_metrics.append(metric)\n    \n    def get_performance_summary(self):\n        \"\"\"Get performance summary\"\"\"\n        with self.lock:\n            current_time = time.time()\n            uptime = current_time - self.start_time\n            \n            # Calculate request statistics\n            all_requests = []\n            for path_requests in self.request_metrics.values():\n                all_requests.extend(path_requests)\n            \n            if all_requests:\n                response_times = [r['response_time'] for r in all_requests]\n                avg_response_time = sum(response_times) / len(response_times)\n                p95_response_time = sorted(response_times)[int(len(response_times) * 0.95)]\n                p99_response_time = sorted(response_times)[int(len(response_times) * 0.99)]\n                \n                total_requests = len(all_requests)\n                error_count = sum(1 for r in all_requests if r['status_code'] >= 400)\n                error_rate = error_count / total_requests if total_requests > 0 else 0\n            else:\n                avg_response_time = p95_response_time = p99_response_time = 0\n                total_requests = error_count = error_rate = 0\n            \n            # Database statistics\n            if self.database_metrics:\n                db_times = [m['execution_time'] for m in self.database_metrics]\n                avg_db_time = sum(db_times) / len(db_times)\n                slow_queries = sum(1 for t in db_times if t > 1.0)  # > 1 second\n            else:\n                avg_db_time = slow_queries = 0\n            \n            # System metrics\n            cpu_percent = psutil.cpu_percent()\n            memory = psutil.virtual_memory()\n            disk = psutil.disk_usage('/')\n            \n            return {\n                'timestamp': current_time,\n                'uptime': uptime,\n                'requests': {\n                    'total': total_requests,\n                    'error_count': error_count,\n                    'error_rate': error_rate,\n                    'avg_response_time': avg_response_time,\n                    'p95_response_time': p95_response_time,\n                    'p99_response_time': p99_response_time,\n                },\n                'database': {\n                    'avg_query_time': avg_db_time,\n                    'slow_queries': slow_queries,\n                    'total_queries': len(self.database_metrics),\n                },\n                'system': {\n                    'cpu_percent': cpu_percent,\n                    'memory_percent': memory.percent,\n                    'memory_available': memory.available,\n                    'disk_percent': (disk.used / disk.total) * 100,\n                },\n                'errors': dict(self.error_metrics),\n            }\n    \n    def get_endpoint_metrics(self, path):\n        \"\"\"Get metrics for specific endpoint\"\"\"\n        with self.lock:\n            if path not in self.request_metrics:\n                return None\n            \n            requests = self.request_metrics[path]\n            if not requests:\n                return None\n            \n            response_times = [r['response_time'] for r in requests]\n            db_queries = [r['db_queries'] for r in requests]\n            \n            return {\n                'path': path,\n                'request_count': len(requests),\n                'avg_response_time': sum(response_times) / len(response_times),\n                'min_response_time': min(response_times),\n                'max_response_time': max(response_times),\n                'avg_db_queries': sum(db_queries) / len(db_queries),\n                'status_codes': defaultdict(int),\n            }\n\n# Global performance monitor\nperformance_monitor = PerformanceMonitor()\n\nclass PerformanceMiddleware:\n    \"\"\"Middleware to collect performance metrics\"\"\"\n    \n    def __init__(self, get_response):\n        self.get_response = get_response\n    \n    def __call__(self, request):\n        start_time = time.time()\n        \n        # Count initial database queries\n        initial_queries = len(connection.queries)\n        \n        # Count initial cache operations\n        initial_cache_hits = getattr(cache, '_cache_hits', 0)\n        initial_cache_misses = getattr(cache, '_cache_misses', 0)\n        \n        response = self.get_response(request)\n        \n        # Calculate metrics\n        response_time = time.time() - start_time\n        db_queries = len(connection.queries) - initial_queries\n        cache_hits = getattr(cache, '_cache_hits', 0) - initial_cache_hits\n        cache_misses = getattr(cache, '_cache_misses', 0) - initial_cache_misses\n        \n        # Record metrics\n        performance_monitor.record_request(\n            method=request.method,\n            path=request.path,\n            status_code=response.status_code,\n            response_time=response_time,\n            db_queries=db_queries,\n            cache_hits=cache_hits,\n            cache_misses=cache_misses,\n        )\n        \n        # Add performance headers\n        response['X-Response-Time'] = f'{response_time:.3f}s'\n        response['X-DB-Queries'] = str(db_queries)\n        \n        return response\n",[1047,2147,2148,2153,2160,2167,2184,2201,2222,2238,2245,2249,2260,2269,2273,2290,2312,2338,2358,2377,2399,2420,2424,2460,2490,2500,2514,2529,2534,2543,2560,2575,2589,2604,2619,2635,2650,2665,2670,2674,2699,2703,2708,2738,2761,2765,2770,2785,2805,2809,2842,2851,2863,2871,2889,2914,2929,2944,2948,2966,2970,2983,2992,3004,3019,3040,3045,3051,3062,3087,3105,3110,3120,3155,3185,3225,3260,3266,3283,3330,3363,3371,3390,3408,3413,3419,3432,3470,3497,3535,3542,3556,3561,3567,3585,3602,3627,3632,3640,3656,3673,3687,3705,3722,3739,3756,3773,3790,3796,3810,3827,3844,3868,3873,3887,3903,3925,3946,3986,3991,4016,4021,4026,4044,4054,4067,4088,4097,4102,4122,4135,4142,4147,4179,4211,4216,4223,4238,4258,4287,4308,4329,4359,4379,4384,4389,4395,4407,4412,4422,4432,4437,4455,4470,4475,4494,4510,4516,4522,4544,4549,4555,4586,4615,4620,4640,4645,4651,4674,4699,4732,4765,4770,4776,4789,4805,4821,4838,4850,4862,4874,4886,4892,4897,4903,4942,4969,4974],{"__ignoreMap":1045},[1050,2149,2150],{"class":1052,"line":1053},[1050,2151,2152],{"class":1056},"# monitoring/performance.py\n",[1050,2154,2155,2157],{"class":1052,"line":1060},[1050,2156,1064],{"class":1063},[1050,2158,2159],{"class":1067}," time\n",[1050,2161,2162,2164],{"class":1052,"line":1071},[1050,2163,1064],{"class":1063},[1050,2165,2166],{"class":1067}," threading\n",[1050,2168,2169,2171,2174,2176,2179,2181],{"class":1052,"line":1078},[1050,2170,1095],{"class":1063},[1050,2172,2173],{"class":1067}," collections ",[1050,2175,1064],{"class":1063},[1050,2177,2178],{"class":1067}," defaultdict",[1050,2180,1360],{"class":1101},[1050,2182,2183],{"class":1067}," deque\n",[1050,2185,2186,2188,2191,2193,2196,2198],{"class":1052,"line":1084},[1050,2187,1095],{"class":1063},[1050,2189,2190],{"class":1067}," django",[1050,2192,1102],{"class":1101},[1050,2194,2195],{"class":1067},"db ",[1050,2197,1064],{"class":1063},[1050,2199,2200],{"class":1067}," connection\n",[1050,2202,2203,2205,2207,2209,2212,2214,2217,2219],{"class":1052,"line":1092},[1050,2204,1095],{"class":1063},[1050,2206,2190],{"class":1067},[1050,2208,1102],{"class":1101},[1050,2210,2211],{"class":1067},"core",[1050,2213,1102],{"class":1101},[1050,2215,2216],{"class":1067},"cache ",[1050,2218,1064],{"class":1063},[1050,2220,2221],{"class":1067}," cache\n",[1050,2223,2224,2226,2228,2230,2233,2235],{"class":1052,"line":1118},[1050,2225,1095],{"class":1063},[1050,2227,2190],{"class":1067},[1050,2229,1102],{"class":1101},[1050,2231,2232],{"class":1067},"utils ",[1050,2234,1064],{"class":1063},[1050,2236,2237],{"class":1067}," timezone\n",[1050,2239,2240,2242],{"class":1052,"line":1139},[1050,2241,1064],{"class":1063},[1050,2243,2244],{"class":1067}," psutil\n",[1050,2246,2247],{"class":1052,"line":1160},[1050,2248,1075],{"emptyLinePlaceholder":1074},[1050,2250,2251,2254,2258],{"class":1052,"line":1181},[1050,2252,2253],{"class":1483},"class",[1050,2255,2257],{"class":2256},"sD-vU"," PerformanceMonitor",[1050,2259,1626],{"class":1101},[1050,2261,2262,2264,2267],{"class":1052,"line":1186},[1050,2263,1509],{"class":1508},[1050,2265,2266],{"class":1512},"Custom performance monitoring for Django applications",[1050,2268,1516],{"class":1508},[1050,2270,2271],{"class":1052,"line":1201},[1050,2272,1673],{"class":1067},[1050,2274,2275,2278,2282,2284,2288],{"class":1052,"line":1241},[1050,2276,2277],{"class":1483},"    def",[1050,2279,2281],{"class":2280},"sJdAF"," __init__",[1050,2283,1225],{"class":1101},[1050,2285,2287],{"class":2286},"sRjD_","self",[1050,2289,1502],{"class":1101},[1050,2291,2292,2295,2297,2300,2302,2304,2306,2310],{"class":1052,"line":1250},[1050,2293,2294],{"class":1880},"        self",[1050,2296,1102],{"class":1101},[1050,2298,2299],{"class":1216},"request_metrics",[1050,2301,1841],{"class":1101},[1050,2303,2178],{"class":1194},[1050,2305,1225],{"class":1101},[1050,2307,2309],{"class":2308},"sa2tF","list",[1050,2311,1472],{"class":1101},[1050,2313,2314,2316,2318,2321,2323,2326,2328,2331,2333,2336],{"class":1052,"line":1258},[1050,2315,2294],{"class":1880},[1050,2317,1102],{"class":1101},[1050,2319,2320],{"class":1216},"database_metrics",[1050,2322,1841],{"class":1101},[1050,2324,2325],{"class":1194}," deque",[1050,2327,1225],{"class":1101},[1050,2329,2330],{"class":1204},"maxlen",[1050,2332,1208],{"class":1101},[1050,2334,2335],{"class":1356},"1000",[1050,2337,1472],{"class":1101},[1050,2339,2340,2342,2344,2347,2349,2351,2353,2356],{"class":1052,"line":1276},[1050,2341,2294],{"class":1880},[1050,2343,1102],{"class":1101},[1050,2345,2346],{"class":1216},"cache_metrics",[1050,2348,1841],{"class":1101},[1050,2350,2178],{"class":1194},[1050,2352,1225],{"class":1101},[1050,2354,2355],{"class":2308},"int",[1050,2357,1472],{"class":1101},[1050,2359,2360,2362,2364,2367,2369,2371,2373,2375],{"class":1052,"line":1290},[1050,2361,2294],{"class":1880},[1050,2363,1102],{"class":1101},[1050,2365,2366],{"class":1216},"error_metrics",[1050,2368,1841],{"class":1101},[1050,2370,2178],{"class":1194},[1050,2372,1225],{"class":1101},[1050,2374,2355],{"class":2308},[1050,2376,1472],{"class":1101},[1050,2378,2379,2381,2383,2386,2388,2391,2393,2396],{"class":1052,"line":1302},[1050,2380,2294],{"class":1880},[1050,2382,1102],{"class":1101},[1050,2384,2385],{"class":1216},"lock",[1050,2387,1841],{"class":1101},[1050,2389,2390],{"class":1067}," threading",[1050,2392,1102],{"class":1101},[1050,2394,2395],{"class":1194},"Lock",[1050,2397,2398],{"class":1101},"()\n",[1050,2400,2401,2403,2405,2408,2410,2413,2415,2418],{"class":1052,"line":1308},[1050,2402,2294],{"class":1880},[1050,2404,1102],{"class":1101},[1050,2406,2407],{"class":1216},"start_time",[1050,2409,1841],{"class":1101},[1050,2411,2412],{"class":1067}," time",[1050,2414,1102],{"class":1101},[1050,2416,2417],{"class":1194},"time",[1050,2419,2398],{"class":1101},[1050,2421,2422],{"class":1052,"line":1325},[1050,2423,1673],{"class":1067},[1050,2425,2426,2428,2431,2433,2435,2437,2440,2442,2445,2447,2450,2452,2455,2457],{"class":1052,"line":1334},[1050,2427,2277],{"class":1483},[1050,2429,2430],{"class":1487}," record_request",[1050,2432,1225],{"class":1101},[1050,2434,2287],{"class":2286},[1050,2436,1360],{"class":1101},[1050,2438,2439],{"class":1493}," method",[1050,2441,1360],{"class":1101},[1050,2443,2444],{"class":1493}," path",[1050,2446,1360],{"class":1101},[1050,2448,2449],{"class":1493}," status_code",[1050,2451,1360],{"class":1101},[1050,2453,2454],{"class":1493}," response_time",[1050,2456,1360],{"class":1101},[1050,2458,2459],{"class":1067}," \n",[1050,2461,2462,2465,2467,2470,2472,2475,2477,2479,2481,2484,2486,2488],{"class":1052,"line":1342},[1050,2463,2464],{"class":1493},"                      db_queries",[1050,2466,1208],{"class":1538},[1050,2468,2469],{"class":1356},"0",[1050,2471,1360],{"class":1101},[1050,2473,2474],{"class":1493}," cache_hits",[1050,2476,1208],{"class":1538},[1050,2478,2469],{"class":1356},[1050,2480,1360],{"class":1101},[1050,2482,2483],{"class":1493}," cache_misses",[1050,2485,1208],{"class":1538},[1050,2487,2469],{"class":1356},[1050,2489,1502],{"class":1101},[1050,2491,2492,2495,2498],{"class":1052,"line":1348},[1050,2493,2494],{"class":1508},"        \"\"\"",[1050,2496,2497],{"class":1512},"Record request performance metrics",[1050,2499,1516],{"class":1508},[1050,2501,2502,2505,2508,2510,2512],{"class":1052,"line":1366},[1050,2503,2504],{"class":1063},"        with",[1050,2506,2507],{"class":1880}," self",[1050,2509,1102],{"class":1101},[1050,2511,2385],{"class":1216},[1050,2513,1626],{"class":1101},[1050,2515,2516,2519,2521,2523,2525,2527],{"class":1052,"line":1379},[1050,2517,2518],{"class":1067},"            timestamp ",[1050,2520,1208],{"class":1101},[1050,2522,2412],{"class":1067},[1050,2524,1102],{"class":1101},[1050,2526,2417],{"class":1194},[1050,2528,2398],{"class":1101},[1050,2530,2531],{"class":1052,"line":1418},[1050,2532,2533],{"class":1067},"            \n",[1050,2535,2536,2539,2541],{"class":1052,"line":1456},[1050,2537,2538],{"class":1067},"            metric ",[1050,2540,1208],{"class":1101},[1050,2542,1971],{"class":1101},[1050,2544,2545,2548,2551,2553,2555,2558],{"class":1052,"line":1469},[1050,2546,2547],{"class":1228},"                '",[1050,2549,2550],{"class":1232},"timestamp",[1050,2552,1229],{"class":1228},[1050,2554,1985],{"class":1101},[1050,2556,2557],{"class":1067}," timestamp",[1050,2559,1273],{"class":1101},[1050,2561,2562,2564,2567,2569,2571,2573],{"class":1052,"line":1475},[1050,2563,2547],{"class":1228},[1050,2565,2566],{"class":1232},"method",[1050,2568,1229],{"class":1228},[1050,2570,1985],{"class":1101},[1050,2572,2439],{"class":1067},[1050,2574,1273],{"class":1101},[1050,2576,2577,2579,2581,2583,2585,2587],{"class":1052,"line":1480},[1050,2578,2547],{"class":1228},[1050,2580,1891],{"class":1232},[1050,2582,1229],{"class":1228},[1050,2584,1985],{"class":1101},[1050,2586,2444],{"class":1067},[1050,2588,1273],{"class":1101},[1050,2590,2591,2593,2596,2598,2600,2602],{"class":1052,"line":1505},[1050,2592,2547],{"class":1228},[1050,2594,2595],{"class":1232},"status_code",[1050,2597,1229],{"class":1228},[1050,2599,1985],{"class":1101},[1050,2601,2449],{"class":1067},[1050,2603,1273],{"class":1101},[1050,2605,2606,2608,2611,2613,2615,2617],{"class":1052,"line":1519},[1050,2607,2547],{"class":1228},[1050,2609,2610],{"class":1232},"response_time",[1050,2612,1229],{"class":1228},[1050,2614,1985],{"class":1101},[1050,2616,2454],{"class":1067},[1050,2618,1273],{"class":1101},[1050,2620,2621,2623,2626,2628,2630,2633],{"class":1052,"line":1525},[1050,2622,2547],{"class":1228},[1050,2624,2625],{"class":1232},"db_queries",[1050,2627,1229],{"class":1228},[1050,2629,1985],{"class":1101},[1050,2631,2632],{"class":1067}," db_queries",[1050,2634,1273],{"class":1101},[1050,2636,2637,2639,2642,2644,2646,2648],{"class":1052,"line":1572},[1050,2638,2547],{"class":1228},[1050,2640,2641],{"class":1232},"cache_hits",[1050,2643,1229],{"class":1228},[1050,2645,1985],{"class":1101},[1050,2647,2474],{"class":1067},[1050,2649,1273],{"class":1101},[1050,2651,2652,2654,2657,2659,2661,2663],{"class":1052,"line":1611},[1050,2653,2547],{"class":1228},[1050,2655,2656],{"class":1232},"cache_misses",[1050,2658,1229],{"class":1228},[1050,2660,1985],{"class":1101},[1050,2662,2483],{"class":1067},[1050,2664,1273],{"class":1101},[1050,2666,2667],{"class":1052,"line":1629},[1050,2668,2669],{"class":1101},"            }\n",[1050,2671,2672],{"class":1052,"line":1670},[1050,2673,2533],{"class":1067},[1050,2675,2676,2679,2681,2683,2685,2687,2689,2692,2694,2697],{"class":1052,"line":1676},[1050,2677,2678],{"class":1880},"            self",[1050,2680,1102],{"class":1101},[1050,2682,2299],{"class":1216},[1050,2684,1560],{"class":1101},[1050,2686,1891],{"class":1216},[1050,2688,1652],{"class":1101},[1050,2690,2691],{"class":1194},"append",[1050,2693,1225],{"class":1101},[1050,2695,2696],{"class":1194},"metric",[1050,2698,1472],{"class":1101},[1050,2700,2701],{"class":1052,"line":1682},[1050,2702,2533],{"class":1067},[1050,2704,2705],{"class":1052,"line":1720},[1050,2706,2707],{"class":1056},"            # Keep only last 100 requests per endpoint\n",[1050,2709,2710,2712,2715,2717,2719,2721,2723,2725,2727,2730,2733,2736],{"class":1052,"line":1766},[1050,2711,1784],{"class":1063},[1050,2713,2714],{"class":2280}," len",[1050,2716,1225],{"class":1101},[1050,2718,2287],{"class":1880},[1050,2720,1102],{"class":1101},[1050,2722,2299],{"class":1216},[1050,2724,1560],{"class":1101},[1050,2726,1891],{"class":1216},[1050,2728,2729],{"class":1101},"])",[1050,2731,2732],{"class":1538}," >",[1050,2734,2735],{"class":1356}," 100",[1050,2737,1626],{"class":1101},[1050,2739,2740,2743,2745,2747,2749,2751,2753,2755,2757,2759],{"class":1052,"line":1781},[1050,2741,2742],{"class":1880},"                self",[1050,2744,1102],{"class":1101},[1050,2746,2299],{"class":1216},[1050,2748,1560],{"class":1101},[1050,2750,1891],{"class":1216},[1050,2752,1652],{"class":1101},[1050,2754,1655],{"class":1194},[1050,2756,1225],{"class":1101},[1050,2758,2469],{"class":1356},[1050,2760,1472],{"class":1101},[1050,2762,2763],{"class":1052,"line":1811},[1050,2764,2533],{"class":1067},[1050,2766,2767],{"class":1052,"line":1852},[1050,2768,2769],{"class":1056},"            # Track errors\n",[1050,2771,2772,2774,2777,2780,2783],{"class":1052,"line":1857},[1050,2773,1784],{"class":1063},[1050,2775,2776],{"class":1067}," status_code ",[1050,2778,2779],{"class":1538},">=",[1050,2781,2782],{"class":1356}," 400",[1050,2784,1626],{"class":1101},[1050,2786,2787,2789,2791,2793,2795,2797,2799,2802],{"class":1052,"line":1866},[1050,2788,2742],{"class":1880},[1050,2790,1102],{"class":1101},[1050,2792,2366],{"class":1216},[1050,2794,1560],{"class":1101},[1050,2796,2595],{"class":1216},[1050,2798,1838],{"class":1101},[1050,2800,2801],{"class":1101}," +=",[1050,2803,2804],{"class":1356}," 1\n",[1050,2806,2807],{"class":1052,"line":1871},[1050,2808,1673],{"class":1067},[1050,2810,2811,2813,2816,2818,2820,2822,2825,2827,2830,2832,2835,2837,2840],{"class":1052,"line":1877},[1050,2812,2277],{"class":1483},[1050,2814,2815],{"class":1487}," record_database_query",[1050,2817,1225],{"class":1101},[1050,2819,2287],{"class":2286},[1050,2821,1360],{"class":1101},[1050,2823,2824],{"class":1493}," query",[1050,2826,1360],{"class":1101},[1050,2828,2829],{"class":1493}," execution_time",[1050,2831,1360],{"class":1101},[1050,2833,2834],{"class":1493}," table",[1050,2836,1208],{"class":1538},[1050,2838,2839],{"class":1284},"None",[1050,2841,1502],{"class":1101},[1050,2843,2844,2846,2849],{"class":1052,"line":1916},[1050,2845,2494],{"class":1508},[1050,2847,2848],{"class":1512},"Record database query metrics",[1050,2850,1516],{"class":1508},[1050,2852,2853,2855,2857,2859,2861],{"class":1052,"line":1952},[1050,2854,2504],{"class":1063},[1050,2856,2507],{"class":1880},[1050,2858,1102],{"class":1101},[1050,2860,2385],{"class":1216},[1050,2862,1626],{"class":1101},[1050,2864,2865,2867,2869],{"class":1052,"line":1957},[1050,2866,2538],{"class":1067},[1050,2868,1208],{"class":1101},[1050,2870,1971],{"class":1101},[1050,2872,2873,2875,2877,2879,2881,2883,2885,2887],{"class":1052,"line":1963},[1050,2874,2547],{"class":1228},[1050,2876,2550],{"class":1232},[1050,2878,1229],{"class":1228},[1050,2880,1985],{"class":1101},[1050,2882,2412],{"class":1067},[1050,2884,1102],{"class":1101},[1050,2886,2417],{"class":1194},[1050,2888,1331],{"class":1101},[1050,2890,2891,2893,2896,2898,2900,2902,2905,2908,2911],{"class":1052,"line":1974},[1050,2892,2547],{"class":1228},[1050,2894,2895],{"class":1232},"query",[1050,2897,1229],{"class":1228},[1050,2899,1985],{"class":1101},[1050,2901,2824],{"class":1067},[1050,2903,2904],{"class":1101},"[:",[1050,2906,2907],{"class":1356},"200",[1050,2909,2910],{"class":1101},"],",[1050,2912,2913],{"class":1056},"  # Truncate long queries\n",[1050,2915,2916,2918,2921,2923,2925,2927],{"class":1052,"line":1997},[1050,2917,2547],{"class":1228},[1050,2919,2920],{"class":1232},"execution_time",[1050,2922,1229],{"class":1228},[1050,2924,1985],{"class":1101},[1050,2926,2829],{"class":1067},[1050,2928,1273],{"class":1101},[1050,2930,2931,2933,2936,2938,2940,2942],{"class":1052,"line":2011},[1050,2932,2547],{"class":1228},[1050,2934,2935],{"class":1232},"table",[1050,2937,1229],{"class":1228},[1050,2939,1985],{"class":1101},[1050,2941,2834],{"class":1067},[1050,2943,1273],{"class":1101},[1050,2945,2946],{"class":1052,"line":2052},[1050,2947,2669],{"class":1101},[1050,2949,2950,2952,2954,2956,2958,2960,2962,2964],{"class":1052,"line":2092},[1050,2951,2678],{"class":1880},[1050,2953,1102],{"class":1101},[1050,2955,2320],{"class":1216},[1050,2957,1102],{"class":1101},[1050,2959,2691],{"class":1194},[1050,2961,1225],{"class":1101},[1050,2963,2696],{"class":1194},[1050,2965,1472],{"class":1101},[1050,2967,2968],{"class":1052,"line":2098},[1050,2969,1673],{"class":1067},[1050,2971,2972,2974,2977,2979,2981],{"class":1052,"line":2104},[1050,2973,2277],{"class":1483},[1050,2975,2976],{"class":1487}," get_performance_summary",[1050,2978,1225],{"class":1101},[1050,2980,2287],{"class":2286},[1050,2982,1502],{"class":1101},[1050,2984,2985,2987,2990],{"class":1052,"line":2109},[1050,2986,2494],{"class":1508},[1050,2988,2989],{"class":1512},"Get performance summary",[1050,2991,1516],{"class":1508},[1050,2993,2994,2996,2998,3000,3002],{"class":1052,"line":2115},[1050,2995,2504],{"class":1063},[1050,2997,2507],{"class":1880},[1050,2999,1102],{"class":1101},[1050,3001,2385],{"class":1216},[1050,3003,1626],{"class":1101},[1050,3005,3006,3009,3011,3013,3015,3017],{"class":1052,"line":2126},[1050,3007,3008],{"class":1067},"            current_time ",[1050,3010,1208],{"class":1101},[1050,3012,2412],{"class":1067},[1050,3014,1102],{"class":1101},[1050,3016,2417],{"class":1194},[1050,3018,2398],{"class":1101},[1050,3020,3022,3025,3027,3030,3033,3035,3037],{"class":1052,"line":3021},63,[1050,3023,3024],{"class":1067},"            uptime ",[1050,3026,1208],{"class":1101},[1050,3028,3029],{"class":1067}," current_time ",[1050,3031,3032],{"class":1538},"-",[1050,3034,2507],{"class":1880},[1050,3036,1102],{"class":1101},[1050,3038,3039],{"class":1216},"start_time\n",[1050,3041,3043],{"class":1052,"line":3042},64,[1050,3044,2533],{"class":1067},[1050,3046,3048],{"class":1052,"line":3047},65,[1050,3049,3050],{"class":1056},"            # Calculate request statistics\n",[1050,3052,3054,3057,3059],{"class":1052,"line":3053},66,[1050,3055,3056],{"class":1067},"            all_requests ",[1050,3058,1208],{"class":1101},[1050,3060,3061],{"class":1101}," []\n",[1050,3063,3065,3068,3071,3073,3075,3077,3079,3081,3084],{"class":1052,"line":3064},67,[1050,3066,3067],{"class":1063},"            for",[1050,3069,3070],{"class":1067}," path_requests ",[1050,3072,1620],{"class":1063},[1050,3074,2507],{"class":1880},[1050,3076,1102],{"class":1101},[1050,3078,2299],{"class":1216},[1050,3080,1102],{"class":1101},[1050,3082,3083],{"class":1194},"values",[1050,3085,3086],{"class":1101},"():\n",[1050,3088,3090,3093,3095,3098,3100,3103],{"class":1052,"line":3089},68,[1050,3091,3092],{"class":1067},"                all_requests",[1050,3094,1102],{"class":1101},[1050,3096,3097],{"class":1194},"extend",[1050,3099,1225],{"class":1101},[1050,3101,3102],{"class":1194},"path_requests",[1050,3104,1472],{"class":1101},[1050,3106,3108],{"class":1052,"line":3107},69,[1050,3109,2533],{"class":1067},[1050,3111,3113,3115,3118],{"class":1052,"line":3112},70,[1050,3114,1784],{"class":1063},[1050,3116,3117],{"class":1067}," all_requests",[1050,3119,1626],{"class":1101},[1050,3121,3123,3126,3128,3130,3133,3135,3137,3139,3141,3143,3146,3149,3151,3153],{"class":1052,"line":3122},71,[1050,3124,3125],{"class":1067},"                response_times ",[1050,3127,1208],{"class":1101},[1050,3129,1580],{"class":1101},[1050,3131,3132],{"class":1067},"r",[1050,3134,1560],{"class":1101},[1050,3136,1229],{"class":1228},[1050,3138,2610],{"class":1232},[1050,3140,1229],{"class":1228},[1050,3142,1838],{"class":1101},[1050,3144,3145],{"class":1063}," for",[1050,3147,3148],{"class":1067}," r ",[1050,3150,1620],{"class":1063},[1050,3152,3117],{"class":1067},[1050,3154,1608],{"class":1101},[1050,3156,3158,3161,3163,3166,3168,3171,3174,3177,3179,3181,3183],{"class":1052,"line":3157},72,[1050,3159,3160],{"class":1067},"                avg_response_time ",[1050,3162,1208],{"class":1101},[1050,3164,3165],{"class":2280}," sum",[1050,3167,1225],{"class":1101},[1050,3169,3170],{"class":1194},"response_times",[1050,3172,3173],{"class":1101},")",[1050,3175,3176],{"class":1538}," /",[1050,3178,2714],{"class":2280},[1050,3180,1225],{"class":1101},[1050,3182,3170],{"class":1194},[1050,3184,1472],{"class":1101},[1050,3186,3188,3191,3193,3196,3198,3200,3203,3205,3207,3210,3212,3214,3216,3219,3222],{"class":1052,"line":3187},73,[1050,3189,3190],{"class":1067},"                p95_response_time ",[1050,3192,1208],{"class":1101},[1050,3194,3195],{"class":2280}," sorted",[1050,3197,1225],{"class":1101},[1050,3199,3170],{"class":1194},[1050,3201,3202],{"class":1101},")[",[1050,3204,2355],{"class":2308},[1050,3206,1225],{"class":1101},[1050,3208,3209],{"class":2280},"len",[1050,3211,1225],{"class":1101},[1050,3213,3170],{"class":1194},[1050,3215,3173],{"class":1101},[1050,3217,3218],{"class":1538}," *",[1050,3220,3221],{"class":1356}," 0.95",[1050,3223,3224],{"class":1101},")]\n",[1050,3226,3228,3231,3233,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3258],{"class":1052,"line":3227},74,[1050,3229,3230],{"class":1067},"                p99_response_time ",[1050,3232,1208],{"class":1101},[1050,3234,3195],{"class":2280},[1050,3236,1225],{"class":1101},[1050,3238,3170],{"class":1194},[1050,3240,3202],{"class":1101},[1050,3242,2355],{"class":2308},[1050,3244,1225],{"class":1101},[1050,3246,3209],{"class":2280},[1050,3248,1225],{"class":1101},[1050,3250,3170],{"class":1194},[1050,3252,3173],{"class":1101},[1050,3254,3218],{"class":1538},[1050,3256,3257],{"class":1356}," 0.99",[1050,3259,3224],{"class":1101},[1050,3261,3263],{"class":1052,"line":3262},75,[1050,3264,3265],{"class":1067},"                \n",[1050,3267,3269,3272,3274,3276,3278,3281],{"class":1052,"line":3268},76,[1050,3270,3271],{"class":1067},"                total_requests ",[1050,3273,1208],{"class":1101},[1050,3275,2714],{"class":2280},[1050,3277,1225],{"class":1101},[1050,3279,3280],{"class":1194},"all_requests",[1050,3282,1472],{"class":1101},[1050,3284,3286,3289,3291,3293,3295,3298,3300,3302,3304,3307,3310,3313,3315,3317,3319,3321,3323,3326,3328],{"class":1052,"line":3285},77,[1050,3287,3288],{"class":1067},"                error_count ",[1050,3290,1208],{"class":1101},[1050,3292,3165],{"class":2280},[1050,3294,1225],{"class":1101},[1050,3296,3297],{"class":1356},"1",[1050,3299,3145],{"class":1063},[1050,3301,3148],{"class":1194},[1050,3303,1620],{"class":1063},[1050,3305,3306],{"class":1194}," all_requests ",[1050,3308,3309],{"class":1063},"if",[1050,3311,3312],{"class":1194}," r",[1050,3314,1560],{"class":1101},[1050,3316,1229],{"class":1228},[1050,3318,2595],{"class":1232},[1050,3320,1229],{"class":1228},[1050,3322,1838],{"class":1101},[1050,3324,3325],{"class":1538}," >=",[1050,3327,2782],{"class":1356},[1050,3329,1472],{"class":1101},[1050,3331,3333,3336,3338,3341,3344,3347,3349,3351,3354,3357,3360],{"class":1052,"line":3332},78,[1050,3334,3335],{"class":1067},"                error_rate ",[1050,3337,1208],{"class":1101},[1050,3339,3340],{"class":1067}," error_count ",[1050,3342,3343],{"class":1538},"/",[1050,3345,3346],{"class":1067}," total_requests ",[1050,3348,3309],{"class":1063},[1050,3350,3346],{"class":1067},[1050,3352,3353],{"class":1538},">",[1050,3355,3356],{"class":1356}," 0",[1050,3358,3359],{"class":1063}," else",[1050,3361,3362],{"class":1356}," 0\n",[1050,3364,3366,3369],{"class":1052,"line":3365},79,[1050,3367,3368],{"class":1063},"            else",[1050,3370,1626],{"class":1101},[1050,3372,3374,3376,3378,3381,3383,3386,3388],{"class":1052,"line":3373},80,[1050,3375,3160],{"class":1067},[1050,3377,1208],{"class":1101},[1050,3379,3380],{"class":1067}," p95_response_time ",[1050,3382,1208],{"class":1101},[1050,3384,3385],{"class":1067}," p99_response_time ",[1050,3387,1208],{"class":1101},[1050,3389,3362],{"class":1356},[1050,3391,3393,3395,3397,3399,3401,3404,3406],{"class":1052,"line":3392},81,[1050,3394,3271],{"class":1067},[1050,3396,1208],{"class":1101},[1050,3398,3340],{"class":1067},[1050,3400,1208],{"class":1101},[1050,3402,3403],{"class":1067}," error_rate ",[1050,3405,1208],{"class":1101},[1050,3407,3362],{"class":1356},[1050,3409,3411],{"class":1052,"line":3410},82,[1050,3412,2533],{"class":1067},[1050,3414,3416],{"class":1052,"line":3415},83,[1050,3417,3418],{"class":1056},"            # Database statistics\n",[1050,3420,3422,3424,3426,3428,3430],{"class":1052,"line":3421},84,[1050,3423,1784],{"class":1063},[1050,3425,2507],{"class":1880},[1050,3427,1102],{"class":1101},[1050,3429,2320],{"class":1216},[1050,3431,1626],{"class":1101},[1050,3433,3435,3438,3440,3442,3445,3447,3449,3451,3453,3455,3457,3460,3462,3464,3466,3468],{"class":1052,"line":3434},85,[1050,3436,3437],{"class":1067},"                db_times ",[1050,3439,1208],{"class":1101},[1050,3441,1580],{"class":1101},[1050,3443,3444],{"class":1067},"m",[1050,3446,1560],{"class":1101},[1050,3448,1229],{"class":1228},[1050,3450,2920],{"class":1232},[1050,3452,1229],{"class":1228},[1050,3454,1838],{"class":1101},[1050,3456,3145],{"class":1063},[1050,3458,3459],{"class":1067}," m ",[1050,3461,1620],{"class":1063},[1050,3463,2507],{"class":1880},[1050,3465,1102],{"class":1101},[1050,3467,2320],{"class":1216},[1050,3469,1608],{"class":1101},[1050,3471,3473,3476,3478,3480,3482,3485,3487,3489,3491,3493,3495],{"class":1052,"line":3472},86,[1050,3474,3475],{"class":1067},"                avg_db_time ",[1050,3477,1208],{"class":1101},[1050,3479,3165],{"class":2280},[1050,3481,1225],{"class":1101},[1050,3483,3484],{"class":1194},"db_times",[1050,3486,3173],{"class":1101},[1050,3488,3176],{"class":1538},[1050,3490,2714],{"class":2280},[1050,3492,1225],{"class":1101},[1050,3494,3484],{"class":1194},[1050,3496,1472],{"class":1101},[1050,3498,3500,3503,3505,3507,3509,3511,3513,3516,3518,3521,3523,3525,3527,3530,3532],{"class":1052,"line":3499},87,[1050,3501,3502],{"class":1067},"                slow_queries ",[1050,3504,1208],{"class":1101},[1050,3506,3165],{"class":2280},[1050,3508,1225],{"class":1101},[1050,3510,3297],{"class":1356},[1050,3512,3145],{"class":1063},[1050,3514,3515],{"class":1194}," t ",[1050,3517,1620],{"class":1063},[1050,3519,3520],{"class":1194}," db_times ",[1050,3522,3309],{"class":1063},[1050,3524,3515],{"class":1194},[1050,3526,3353],{"class":1538},[1050,3528,3529],{"class":1356}," 1.0",[1050,3531,3173],{"class":1101},[1050,3533,3534],{"class":1056},"  # > 1 second\n",[1050,3536,3538,3540],{"class":1052,"line":3537},88,[1050,3539,3368],{"class":1063},[1050,3541,1626],{"class":1101},[1050,3543,3545,3547,3549,3552,3554],{"class":1052,"line":3544},89,[1050,3546,3475],{"class":1067},[1050,3548,1208],{"class":1101},[1050,3550,3551],{"class":1067}," slow_queries ",[1050,3553,1208],{"class":1101},[1050,3555,3362],{"class":1356},[1050,3557,3559],{"class":1052,"line":3558},90,[1050,3560,2533],{"class":1067},[1050,3562,3564],{"class":1052,"line":3563},91,[1050,3565,3566],{"class":1056},"            # System metrics\n",[1050,3568,3570,3573,3575,3578,3580,3583],{"class":1052,"line":3569},92,[1050,3571,3572],{"class":1067},"            cpu_percent ",[1050,3574,1208],{"class":1101},[1050,3576,3577],{"class":1067}," psutil",[1050,3579,1102],{"class":1101},[1050,3581,3582],{"class":1194},"cpu_percent",[1050,3584,2398],{"class":1101},[1050,3586,3588,3591,3593,3595,3597,3600],{"class":1052,"line":3587},93,[1050,3589,3590],{"class":1067},"            memory ",[1050,3592,1208],{"class":1101},[1050,3594,3577],{"class":1067},[1050,3596,1102],{"class":1101},[1050,3598,3599],{"class":1194},"virtual_memory",[1050,3601,2398],{"class":1101},[1050,3603,3605,3608,3610,3612,3614,3617,3619,3621,3623,3625],{"class":1052,"line":3604},94,[1050,3606,3607],{"class":1067},"            disk ",[1050,3609,1208],{"class":1101},[1050,3611,3577],{"class":1067},[1050,3613,1102],{"class":1101},[1050,3615,3616],{"class":1194},"disk_usage",[1050,3618,1225],{"class":1101},[1050,3620,1229],{"class":1228},[1050,3622,3343],{"class":1232},[1050,3624,1229],{"class":1228},[1050,3626,1472],{"class":1101},[1050,3628,3630],{"class":1052,"line":3629},95,[1050,3631,2533],{"class":1067},[1050,3633,3635,3638],{"class":1052,"line":3634},96,[1050,3636,3637],{"class":1063},"            return",[1050,3639,1971],{"class":1101},[1050,3641,3643,3645,3647,3649,3651,3654],{"class":1052,"line":3642},97,[1050,3644,2547],{"class":1228},[1050,3646,2550],{"class":1232},[1050,3648,1229],{"class":1228},[1050,3650,1985],{"class":1101},[1050,3652,3653],{"class":1067}," current_time",[1050,3655,1273],{"class":1101},[1050,3657,3659,3661,3664,3666,3668,3671],{"class":1052,"line":3658},98,[1050,3660,2547],{"class":1228},[1050,3662,3663],{"class":1232},"uptime",[1050,3665,1229],{"class":1228},[1050,3667,1985],{"class":1101},[1050,3669,3670],{"class":1067}," uptime",[1050,3672,1273],{"class":1101},[1050,3674,3676,3678,3681,3683,3685],{"class":1052,"line":3675},99,[1050,3677,2547],{"class":1228},[1050,3679,3680],{"class":1232},"requests",[1050,3682,1229],{"class":1228},[1050,3684,1985],{"class":1101},[1050,3686,1971],{"class":1101},[1050,3688,3690,3693,3696,3698,3700,3703],{"class":1052,"line":3689},100,[1050,3691,3692],{"class":1228},"                    '",[1050,3694,3695],{"class":1232},"total",[1050,3697,1229],{"class":1228},[1050,3699,1985],{"class":1101},[1050,3701,3702],{"class":1067}," total_requests",[1050,3704,1273],{"class":1101},[1050,3706,3708,3710,3713,3715,3717,3720],{"class":1052,"line":3707},101,[1050,3709,3692],{"class":1228},[1050,3711,3712],{"class":1232},"error_count",[1050,3714,1229],{"class":1228},[1050,3716,1985],{"class":1101},[1050,3718,3719],{"class":1067}," error_count",[1050,3721,1273],{"class":1101},[1050,3723,3725,3727,3730,3732,3734,3737],{"class":1052,"line":3724},102,[1050,3726,3692],{"class":1228},[1050,3728,3729],{"class":1232},"error_rate",[1050,3731,1229],{"class":1228},[1050,3733,1985],{"class":1101},[1050,3735,3736],{"class":1067}," error_rate",[1050,3738,1273],{"class":1101},[1050,3740,3742,3744,3747,3749,3751,3754],{"class":1052,"line":3741},103,[1050,3743,3692],{"class":1228},[1050,3745,3746],{"class":1232},"avg_response_time",[1050,3748,1229],{"class":1228},[1050,3750,1985],{"class":1101},[1050,3752,3753],{"class":1067}," avg_response_time",[1050,3755,1273],{"class":1101},[1050,3757,3759,3761,3764,3766,3768,3771],{"class":1052,"line":3758},104,[1050,3760,3692],{"class":1228},[1050,3762,3763],{"class":1232},"p95_response_time",[1050,3765,1229],{"class":1228},[1050,3767,1985],{"class":1101},[1050,3769,3770],{"class":1067}," p95_response_time",[1050,3772,1273],{"class":1101},[1050,3774,3776,3778,3781,3783,3785,3788],{"class":1052,"line":3775},105,[1050,3777,3692],{"class":1228},[1050,3779,3780],{"class":1232},"p99_response_time",[1050,3782,1229],{"class":1228},[1050,3784,1985],{"class":1101},[1050,3786,3787],{"class":1067}," p99_response_time",[1050,3789,1273],{"class":1101},[1050,3791,3793],{"class":1052,"line":3792},106,[1050,3794,3795],{"class":1101},"                },\n",[1050,3797,3799,3801,3804,3806,3808],{"class":1052,"line":3798},107,[1050,3800,2547],{"class":1228},[1050,3802,3803],{"class":1232},"database",[1050,3805,1229],{"class":1228},[1050,3807,1985],{"class":1101},[1050,3809,1971],{"class":1101},[1050,3811,3813,3815,3818,3820,3822,3825],{"class":1052,"line":3812},108,[1050,3814,3692],{"class":1228},[1050,3816,3817],{"class":1232},"avg_query_time",[1050,3819,1229],{"class":1228},[1050,3821,1985],{"class":1101},[1050,3823,3824],{"class":1067}," avg_db_time",[1050,3826,1273],{"class":1101},[1050,3828,3830,3832,3835,3837,3839,3842],{"class":1052,"line":3829},109,[1050,3831,3692],{"class":1228},[1050,3833,3834],{"class":1232},"slow_queries",[1050,3836,1229],{"class":1228},[1050,3838,1985],{"class":1101},[1050,3840,3841],{"class":1067}," slow_queries",[1050,3843,1273],{"class":1101},[1050,3845,3847,3849,3852,3854,3856,3858,3860,3862,3864,3866],{"class":1052,"line":3846},110,[1050,3848,3692],{"class":1228},[1050,3850,3851],{"class":1232},"total_queries",[1050,3853,1229],{"class":1228},[1050,3855,1985],{"class":1101},[1050,3857,2714],{"class":2280},[1050,3859,1225],{"class":1101},[1050,3861,2287],{"class":1880},[1050,3863,1102],{"class":1101},[1050,3865,2320],{"class":1216},[1050,3867,1238],{"class":1101},[1050,3869,3871],{"class":1052,"line":3870},111,[1050,3872,3795],{"class":1101},[1050,3874,3876,3878,3881,3883,3885],{"class":1052,"line":3875},112,[1050,3877,2547],{"class":1228},[1050,3879,3880],{"class":1232},"system",[1050,3882,1229],{"class":1228},[1050,3884,1985],{"class":1101},[1050,3886,1971],{"class":1101},[1050,3888,3890,3892,3894,3896,3898,3901],{"class":1052,"line":3889},113,[1050,3891,3692],{"class":1228},[1050,3893,3582],{"class":1232},[1050,3895,1229],{"class":1228},[1050,3897,1985],{"class":1101},[1050,3899,3900],{"class":1067}," cpu_percent",[1050,3902,1273],{"class":1101},[1050,3904,3906,3908,3911,3913,3915,3918,3920,3923],{"class":1052,"line":3905},114,[1050,3907,3692],{"class":1228},[1050,3909,3910],{"class":1232},"memory_percent",[1050,3912,1229],{"class":1228},[1050,3914,1985],{"class":1101},[1050,3916,3917],{"class":1067}," memory",[1050,3919,1102],{"class":1101},[1050,3921,3922],{"class":1216},"percent",[1050,3924,1273],{"class":1101},[1050,3926,3928,3930,3933,3935,3937,3939,3941,3944],{"class":1052,"line":3927},115,[1050,3929,3692],{"class":1228},[1050,3931,3932],{"class":1232},"memory_available",[1050,3934,1229],{"class":1228},[1050,3936,1985],{"class":1101},[1050,3938,3917],{"class":1067},[1050,3940,1102],{"class":1101},[1050,3942,3943],{"class":1216},"available",[1050,3945,1273],{"class":1101},[1050,3947,3949,3951,3954,3956,3958,3961,3964,3966,3969,3971,3974,3976,3978,3980,3982,3984],{"class":1052,"line":3948},116,[1050,3950,3692],{"class":1228},[1050,3952,3953],{"class":1232},"disk_percent",[1050,3955,1229],{"class":1228},[1050,3957,1985],{"class":1101},[1050,3959,3960],{"class":1101}," (",[1050,3962,3963],{"class":1067},"disk",[1050,3965,1102],{"class":1101},[1050,3967,3968],{"class":1216},"used",[1050,3970,3176],{"class":1538},[1050,3972,3973],{"class":1067}," disk",[1050,3975,1102],{"class":1101},[1050,3977,3695],{"class":1216},[1050,3979,3173],{"class":1101},[1050,3981,3218],{"class":1538},[1050,3983,2735],{"class":1356},[1050,3985,1273],{"class":1101},[1050,3987,3989],{"class":1052,"line":3988},117,[1050,3990,3795],{"class":1101},[1050,3992,3994,3996,3999,4001,4003,4006,4008,4010,4012,4014],{"class":1052,"line":3993},118,[1050,3995,2547],{"class":1228},[1050,3997,3998],{"class":1232},"errors",[1050,4000,1229],{"class":1228},[1050,4002,1985],{"class":1101},[1050,4004,4005],{"class":2308}," dict",[1050,4007,1225],{"class":1101},[1050,4009,2287],{"class":1880},[1050,4011,1102],{"class":1101},[1050,4013,2366],{"class":1216},[1050,4015,1238],{"class":1101},[1050,4017,4019],{"class":1052,"line":4018},119,[1050,4020,2669],{"class":1101},[1050,4022,4024],{"class":1052,"line":4023},120,[1050,4025,1673],{"class":1067},[1050,4027,4029,4031,4034,4036,4038,4040,4042],{"class":1052,"line":4028},121,[1050,4030,2277],{"class":1483},[1050,4032,4033],{"class":1487}," get_endpoint_metrics",[1050,4035,1225],{"class":1101},[1050,4037,2287],{"class":2286},[1050,4039,1360],{"class":1101},[1050,4041,2444],{"class":1493},[1050,4043,1502],{"class":1101},[1050,4045,4047,4049,4052],{"class":1052,"line":4046},122,[1050,4048,2494],{"class":1508},[1050,4050,4051],{"class":1512},"Get metrics for specific endpoint",[1050,4053,1516],{"class":1508},[1050,4055,4057,4059,4061,4063,4065],{"class":1052,"line":4056},123,[1050,4058,2504],{"class":1063},[1050,4060,2507],{"class":1880},[1050,4062,1102],{"class":1101},[1050,4064,2385],{"class":1216},[1050,4066,1626],{"class":1101},[1050,4068,4070,4072,4075,4078,4080,4082,4084,4086],{"class":1052,"line":4069},124,[1050,4071,1784],{"class":1063},[1050,4073,4074],{"class":1067}," path ",[1050,4076,4077],{"class":1538},"not",[1050,4079,1539],{"class":1538},[1050,4081,2507],{"class":1880},[1050,4083,1102],{"class":1101},[1050,4085,2299],{"class":1216},[1050,4087,1626],{"class":1101},[1050,4089,4091,4094],{"class":1052,"line":4090},125,[1050,4092,4093],{"class":1063},"                return",[1050,4095,4096],{"class":1284}," None\n",[1050,4098,4100],{"class":1052,"line":4099},126,[1050,4101,2533],{"class":1067},[1050,4103,4105,4108,4110,4112,4114,4116,4118,4120],{"class":1052,"line":4104},127,[1050,4106,4107],{"class":1067},"            requests ",[1050,4109,1208],{"class":1101},[1050,4111,2507],{"class":1880},[1050,4113,1102],{"class":1101},[1050,4115,2299],{"class":1216},[1050,4117,1560],{"class":1101},[1050,4119,1891],{"class":1216},[1050,4121,1608],{"class":1101},[1050,4123,4125,4127,4130,4133],{"class":1052,"line":4124},128,[1050,4126,1784],{"class":1063},[1050,4128,4129],{"class":1538}," not",[1050,4131,4132],{"class":1067}," requests",[1050,4134,1626],{"class":1101},[1050,4136,4138,4140],{"class":1052,"line":4137},129,[1050,4139,4093],{"class":1063},[1050,4141,4096],{"class":1284},[1050,4143,4145],{"class":1052,"line":4144},130,[1050,4146,2533],{"class":1067},[1050,4148,4150,4153,4155,4157,4159,4161,4163,4165,4167,4169,4171,4173,4175,4177],{"class":1052,"line":4149},131,[1050,4151,4152],{"class":1067},"            response_times ",[1050,4154,1208],{"class":1101},[1050,4156,1580],{"class":1101},[1050,4158,3132],{"class":1067},[1050,4160,1560],{"class":1101},[1050,4162,1229],{"class":1228},[1050,4164,2610],{"class":1232},[1050,4166,1229],{"class":1228},[1050,4168,1838],{"class":1101},[1050,4170,3145],{"class":1063},[1050,4172,3148],{"class":1067},[1050,4174,1620],{"class":1063},[1050,4176,4132],{"class":1067},[1050,4178,1608],{"class":1101},[1050,4180,4182,4185,4187,4189,4191,4193,4195,4197,4199,4201,4203,4205,4207,4209],{"class":1052,"line":4181},132,[1050,4183,4184],{"class":1067},"            db_queries ",[1050,4186,1208],{"class":1101},[1050,4188,1580],{"class":1101},[1050,4190,3132],{"class":1067},[1050,4192,1560],{"class":1101},[1050,4194,1229],{"class":1228},[1050,4196,2625],{"class":1232},[1050,4198,1229],{"class":1228},[1050,4200,1838],{"class":1101},[1050,4202,3145],{"class":1063},[1050,4204,3148],{"class":1067},[1050,4206,1620],{"class":1063},[1050,4208,4132],{"class":1067},[1050,4210,1608],{"class":1101},[1050,4212,4214],{"class":1052,"line":4213},133,[1050,4215,2533],{"class":1067},[1050,4217,4219,4221],{"class":1052,"line":4218},134,[1050,4220,3637],{"class":1063},[1050,4222,1971],{"class":1101},[1050,4224,4226,4228,4230,4232,4234,4236],{"class":1052,"line":4225},135,[1050,4227,2547],{"class":1228},[1050,4229,1891],{"class":1232},[1050,4231,1229],{"class":1228},[1050,4233,1985],{"class":1101},[1050,4235,2444],{"class":1067},[1050,4237,1273],{"class":1101},[1050,4239,4241,4243,4246,4248,4250,4252,4254,4256],{"class":1052,"line":4240},136,[1050,4242,2547],{"class":1228},[1050,4244,4245],{"class":1232},"request_count",[1050,4247,1229],{"class":1228},[1050,4249,1985],{"class":1101},[1050,4251,2714],{"class":2280},[1050,4253,1225],{"class":1101},[1050,4255,3680],{"class":1194},[1050,4257,1238],{"class":1101},[1050,4259,4261,4263,4265,4267,4269,4271,4273,4275,4277,4279,4281,4283,4285],{"class":1052,"line":4260},137,[1050,4262,2547],{"class":1228},[1050,4264,3746],{"class":1232},[1050,4266,1229],{"class":1228},[1050,4268,1985],{"class":1101},[1050,4270,3165],{"class":2280},[1050,4272,1225],{"class":1101},[1050,4274,3170],{"class":1194},[1050,4276,3173],{"class":1101},[1050,4278,3176],{"class":1538},[1050,4280,2714],{"class":2280},[1050,4282,1225],{"class":1101},[1050,4284,3170],{"class":1194},[1050,4286,1238],{"class":1101},[1050,4288,4290,4292,4295,4297,4299,4302,4304,4306],{"class":1052,"line":4289},138,[1050,4291,2547],{"class":1228},[1050,4293,4294],{"class":1232},"min_response_time",[1050,4296,1229],{"class":1228},[1050,4298,1985],{"class":1101},[1050,4300,4301],{"class":2280}," min",[1050,4303,1225],{"class":1101},[1050,4305,3170],{"class":1194},[1050,4307,1238],{"class":1101},[1050,4309,4311,4313,4316,4318,4320,4323,4325,4327],{"class":1052,"line":4310},139,[1050,4312,2547],{"class":1228},[1050,4314,4315],{"class":1232},"max_response_time",[1050,4317,1229],{"class":1228},[1050,4319,1985],{"class":1101},[1050,4321,4322],{"class":2280}," max",[1050,4324,1225],{"class":1101},[1050,4326,3170],{"class":1194},[1050,4328,1238],{"class":1101},[1050,4330,4332,4334,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357],{"class":1052,"line":4331},140,[1050,4333,2547],{"class":1228},[1050,4335,4336],{"class":1232},"avg_db_queries",[1050,4338,1229],{"class":1228},[1050,4340,1985],{"class":1101},[1050,4342,3165],{"class":2280},[1050,4344,1225],{"class":1101},[1050,4346,2625],{"class":1194},[1050,4348,3173],{"class":1101},[1050,4350,3176],{"class":1538},[1050,4352,2714],{"class":2280},[1050,4354,1225],{"class":1101},[1050,4356,2625],{"class":1194},[1050,4358,1238],{"class":1101},[1050,4360,4362,4364,4367,4369,4371,4373,4375,4377],{"class":1052,"line":4361},141,[1050,4363,2547],{"class":1228},[1050,4365,4366],{"class":1232},"status_codes",[1050,4368,1229],{"class":1228},[1050,4370,1985],{"class":1101},[1050,4372,2178],{"class":1194},[1050,4374,1225],{"class":1101},[1050,4376,2355],{"class":2308},[1050,4378,1238],{"class":1101},[1050,4380,4382],{"class":1052,"line":4381},142,[1050,4383,2669],{"class":1101},[1050,4385,4387],{"class":1052,"line":4386},143,[1050,4388,1075],{"emptyLinePlaceholder":1074},[1050,4390,4392],{"class":1052,"line":4391},144,[1050,4393,4394],{"class":1056},"# Global performance monitor\n",[1050,4396,4398,4401,4403,4405],{"class":1052,"line":4397},145,[1050,4399,4400],{"class":1067},"performance_monitor ",[1050,4402,1208],{"class":1101},[1050,4404,2257],{"class":1194},[1050,4406,2398],{"class":1101},[1050,4408,4410],{"class":1052,"line":4409},146,[1050,4411,1075],{"emptyLinePlaceholder":1074},[1050,4413,4415,4417,4420],{"class":1052,"line":4414},147,[1050,4416,2253],{"class":1483},[1050,4418,4419],{"class":2256}," PerformanceMiddleware",[1050,4421,1626],{"class":1101},[1050,4423,4425,4427,4430],{"class":1052,"line":4424},148,[1050,4426,1509],{"class":1508},[1050,4428,4429],{"class":1512},"Middleware to collect performance metrics",[1050,4431,1516],{"class":1508},[1050,4433,4435],{"class":1052,"line":4434},149,[1050,4436,1673],{"class":1067},[1050,4438,4440,4442,4444,4446,4448,4450,4453],{"class":1052,"line":4439},150,[1050,4441,2277],{"class":1483},[1050,4443,2281],{"class":2280},[1050,4445,1225],{"class":1101},[1050,4447,2287],{"class":2286},[1050,4449,1360],{"class":1101},[1050,4451,4452],{"class":1493}," get_response",[1050,4454,1502],{"class":1101},[1050,4456,4458,4460,4462,4465,4467],{"class":1052,"line":4457},151,[1050,4459,2294],{"class":1880},[1050,4461,1102],{"class":1101},[1050,4463,4464],{"class":1216},"get_response",[1050,4466,1841],{"class":1101},[1050,4468,4469],{"class":1067}," get_response\n",[1050,4471,4473],{"class":1052,"line":4472},152,[1050,4474,1673],{"class":1067},[1050,4476,4478,4480,4483,4485,4487,4489,4492],{"class":1052,"line":4477},153,[1050,4479,2277],{"class":1483},[1050,4481,4482],{"class":2280}," __call__",[1050,4484,1225],{"class":1101},[1050,4486,2287],{"class":2286},[1050,4488,1360],{"class":1101},[1050,4490,4491],{"class":1493}," request",[1050,4493,1502],{"class":1101},[1050,4495,4497,4500,4502,4504,4506,4508],{"class":1052,"line":4496},154,[1050,4498,4499],{"class":1067},"        start_time ",[1050,4501,1208],{"class":1101},[1050,4503,2412],{"class":1067},[1050,4505,1102],{"class":1101},[1050,4507,2417],{"class":1194},[1050,4509,2398],{"class":1101},[1050,4511,4513],{"class":1052,"line":4512},155,[1050,4514,4515],{"class":1067},"        \n",[1050,4517,4519],{"class":1052,"line":4518},156,[1050,4520,4521],{"class":1056},"        # Count initial database queries\n",[1050,4523,4525,4528,4530,4532,4534,4537,4539,4542],{"class":1052,"line":4524},157,[1050,4526,4527],{"class":1067},"        initial_queries ",[1050,4529,1208],{"class":1101},[1050,4531,2714],{"class":2280},[1050,4533,1225],{"class":1101},[1050,4535,4536],{"class":1194},"connection",[1050,4538,1102],{"class":1101},[1050,4540,4541],{"class":1216},"queries",[1050,4543,1472],{"class":1101},[1050,4545,4547],{"class":1052,"line":4546},158,[1050,4548,4515],{"class":1067},[1050,4550,4552],{"class":1052,"line":4551},159,[1050,4553,4554],{"class":1056},"        # Count initial cache operations\n",[1050,4556,4558,4561,4563,4566,4568,4571,4573,4575,4578,4580,4582,4584],{"class":1052,"line":4557},160,[1050,4559,4560],{"class":1067},"        initial_cache_hits ",[1050,4562,1208],{"class":1101},[1050,4564,4565],{"class":2280}," getattr",[1050,4567,1225],{"class":1101},[1050,4569,4570],{"class":1194},"cache",[1050,4572,1360],{"class":1101},[1050,4574,1408],{"class":1228},[1050,4576,4577],{"class":1232},"_cache_hits",[1050,4579,1229],{"class":1228},[1050,4581,1360],{"class":1101},[1050,4583,3356],{"class":1356},[1050,4585,1472],{"class":1101},[1050,4587,4589,4592,4594,4596,4598,4600,4602,4604,4607,4609,4611,4613],{"class":1052,"line":4588},161,[1050,4590,4591],{"class":1067},"        initial_cache_misses ",[1050,4593,1208],{"class":1101},[1050,4595,4565],{"class":2280},[1050,4597,1225],{"class":1101},[1050,4599,4570],{"class":1194},[1050,4601,1360],{"class":1101},[1050,4603,1408],{"class":1228},[1050,4605,4606],{"class":1232},"_cache_misses",[1050,4608,1229],{"class":1228},[1050,4610,1360],{"class":1101},[1050,4612,3356],{"class":1356},[1050,4614,1472],{"class":1101},[1050,4616,4618],{"class":1052,"line":4617},162,[1050,4619,4515],{"class":1067},[1050,4621,4623,4626,4628,4630,4632,4634,4636,4638],{"class":1052,"line":4622},163,[1050,4624,4625],{"class":1067},"        response ",[1050,4627,1208],{"class":1101},[1050,4629,2507],{"class":1880},[1050,4631,1102],{"class":1101},[1050,4633,4464],{"class":1194},[1050,4635,1225],{"class":1101},[1050,4637,1533],{"class":1194},[1050,4639,1472],{"class":1101},[1050,4641,4643],{"class":1052,"line":4642},164,[1050,4644,4515],{"class":1067},[1050,4646,4648],{"class":1052,"line":4647},165,[1050,4649,4650],{"class":1056},"        # Calculate metrics\n",[1050,4652,4654,4657,4659,4661,4663,4665,4668,4671],{"class":1052,"line":4653},166,[1050,4655,4656],{"class":1067},"        response_time ",[1050,4658,1208],{"class":1101},[1050,4660,2412],{"class":1067},[1050,4662,1102],{"class":1101},[1050,4664,2417],{"class":1194},[1050,4666,4667],{"class":1101},"()",[1050,4669,4670],{"class":1538}," -",[1050,4672,4673],{"class":1067}," start_time\n",[1050,4675,4677,4680,4682,4684,4686,4688,4690,4692,4694,4696],{"class":1052,"line":4676},167,[1050,4678,4679],{"class":1067},"        db_queries ",[1050,4681,1208],{"class":1101},[1050,4683,2714],{"class":2280},[1050,4685,1225],{"class":1101},[1050,4687,4536],{"class":1194},[1050,4689,1102],{"class":1101},[1050,4691,4541],{"class":1216},[1050,4693,3173],{"class":1101},[1050,4695,4670],{"class":1538},[1050,4697,4698],{"class":1067}," initial_queries\n",[1050,4700,4702,4705,4707,4709,4711,4713,4715,4717,4719,4721,4723,4725,4727,4729],{"class":1052,"line":4701},168,[1050,4703,4704],{"class":1067},"        cache_hits ",[1050,4706,1208],{"class":1101},[1050,4708,4565],{"class":2280},[1050,4710,1225],{"class":1101},[1050,4712,4570],{"class":1194},[1050,4714,1360],{"class":1101},[1050,4716,1408],{"class":1228},[1050,4718,4577],{"class":1232},[1050,4720,1229],{"class":1228},[1050,4722,1360],{"class":1101},[1050,4724,3356],{"class":1356},[1050,4726,3173],{"class":1101},[1050,4728,4670],{"class":1538},[1050,4730,4731],{"class":1067}," initial_cache_hits\n",[1050,4733,4735,4738,4740,4742,4744,4746,4748,4750,4752,4754,4756,4758,4760,4762],{"class":1052,"line":4734},169,[1050,4736,4737],{"class":1067},"        cache_misses ",[1050,4739,1208],{"class":1101},[1050,4741,4565],{"class":2280},[1050,4743,1225],{"class":1101},[1050,4745,4570],{"class":1194},[1050,4747,1360],{"class":1101},[1050,4749,1408],{"class":1228},[1050,4751,4606],{"class":1232},[1050,4753,1229],{"class":1228},[1050,4755,1360],{"class":1101},[1050,4757,3356],{"class":1356},[1050,4759,3173],{"class":1101},[1050,4761,4670],{"class":1538},[1050,4763,4764],{"class":1067}," initial_cache_misses\n",[1050,4766,4768],{"class":1052,"line":4767},170,[1050,4769,4515],{"class":1067},[1050,4771,4773],{"class":1052,"line":4772},171,[1050,4774,4775],{"class":1056},"        # Record metrics\n",[1050,4777,4779,4782,4784,4787],{"class":1052,"line":4778},172,[1050,4780,4781],{"class":1067},"        performance_monitor",[1050,4783,1102],{"class":1101},[1050,4785,4786],{"class":1194},"record_request",[1050,4788,1198],{"class":1101},[1050,4790,4792,4795,4797,4799,4801,4803],{"class":1052,"line":4791},173,[1050,4793,4794],{"class":1204},"            method",[1050,4796,1208],{"class":1101},[1050,4798,1533],{"class":1194},[1050,4800,1102],{"class":1101},[1050,4802,2566],{"class":1216},[1050,4804,1273],{"class":1101},[1050,4806,4808,4811,4813,4815,4817,4819],{"class":1052,"line":4807},174,[1050,4809,4810],{"class":1204},"            path",[1050,4812,1208],{"class":1101},[1050,4814,1533],{"class":1194},[1050,4816,1102],{"class":1101},[1050,4818,1891],{"class":1216},[1050,4820,1273],{"class":1101},[1050,4822,4824,4827,4829,4832,4834,4836],{"class":1052,"line":4823},175,[1050,4825,4826],{"class":1204},"            status_code",[1050,4828,1208],{"class":1101},[1050,4830,4831],{"class":1194},"response",[1050,4833,1102],{"class":1101},[1050,4835,2595],{"class":1216},[1050,4837,1273],{"class":1101},[1050,4839,4841,4844,4846,4848],{"class":1052,"line":4840},176,[1050,4842,4843],{"class":1204},"            response_time",[1050,4845,1208],{"class":1101},[1050,4847,2610],{"class":1194},[1050,4849,1273],{"class":1101},[1050,4851,4853,4856,4858,4860],{"class":1052,"line":4852},177,[1050,4854,4855],{"class":1204},"            db_queries",[1050,4857,1208],{"class":1101},[1050,4859,2625],{"class":1194},[1050,4861,1273],{"class":1101},[1050,4863,4865,4868,4870,4872],{"class":1052,"line":4864},178,[1050,4866,4867],{"class":1204},"            cache_hits",[1050,4869,1208],{"class":1101},[1050,4871,2641],{"class":1194},[1050,4873,1273],{"class":1101},[1050,4875,4877,4880,4882,4884],{"class":1052,"line":4876},179,[1050,4878,4879],{"class":1204},"            cache_misses",[1050,4881,1208],{"class":1101},[1050,4883,2656],{"class":1194},[1050,4885,1273],{"class":1101},[1050,4887,4889],{"class":1052,"line":4888},180,[1050,4890,4891],{"class":1101},"        )\n",[1050,4893,4895],{"class":1052,"line":4894},181,[1050,4896,4515],{"class":1067},[1050,4898,4900],{"class":1052,"line":4899},182,[1050,4901,4902],{"class":1056},"        # Add performance headers\n",[1050,4904,4906,4909,4911,4913,4916,4918,4920,4922,4925,4927,4931,4933,4936,4939],{"class":1052,"line":4905},183,[1050,4907,4908],{"class":1067},"        response",[1050,4910,1560],{"class":1101},[1050,4912,1229],{"class":1228},[1050,4914,4915],{"class":1232},"X-Response-Time",[1050,4917,1229],{"class":1228},[1050,4919,1838],{"class":1101},[1050,4921,1841],{"class":1101},[1050,4923,4924],{"class":1483}," f",[1050,4926,1229],{"class":1232},[1050,4928,4930],{"class":4929},"s3h35","{",[1050,4932,2610],{"class":1067},[1050,4934,4935],{"class":1483},":.3f",[1050,4937,4938],{"class":4929},"}",[1050,4940,4941],{"class":1232},"s'\n",[1050,4943,4945,4947,4949,4951,4954,4956,4958,4960,4963,4965,4967],{"class":1052,"line":4944},184,[1050,4946,4908],{"class":1067},[1050,4948,1560],{"class":1101},[1050,4950,1229],{"class":1228},[1050,4952,4953],{"class":1232},"X-DB-Queries",[1050,4955,1229],{"class":1228},[1050,4957,1838],{"class":1101},[1050,4959,1841],{"class":1101},[1050,4961,4962],{"class":2308}," str",[1050,4964,1225],{"class":1101},[1050,4966,2625],{"class":1194},[1050,4968,1472],{"class":1101},[1050,4970,4972],{"class":1052,"line":4971},185,[1050,4973,4515],{"class":1067},[1050,4975,4977,4980],{"class":1052,"line":4976},186,[1050,4978,4979],{"class":1063},"        return",[1050,4981,4982],{"class":1067}," response\n",[1035,4984,4986],{"id":4985},"prometheus-metrics-integration","Prometheus Metrics Integration",[1040,4988,4990],{"className":1042,"code":4989,"language":1044,"meta":1045,"style":1045},"# monitoring/prometheus.py\nfrom prometheus_client import Counter, Histogram, Gauge, generate_latest\nfrom django.http import HttpResponse\nimport time\n\n# Prometheus metrics\nREQUEST_COUNT = Counter(\n    'django_requests_total',\n    'Total Django requests',\n    ['method', 'endpoint', 'status']\n)\n\nREQUEST_DURATION = Histogram(\n    'django_request_duration_seconds',\n    'Django request duration',\n    ['method', 'endpoint']\n)\n\nDATABASE_QUERIES = Histogram(\n    'django_database_queries_total',\n    'Number of database queries per request',\n    ['endpoint']\n)\n\nACTIVE_USERS = Gauge(\n    'django_active_users',\n    'Number of active users'\n)\n\nCACHE_OPERATIONS = Counter(\n    'django_cache_operations_total',\n    'Cache operations',\n    ['operation', 'result']\n)\n\nERROR_COUNT = Counter(\n    'django_errors_total',\n    'Total errors',\n    ['error_type', 'endpoint']\n)\n\nclass PrometheusMiddleware:\n    \"\"\"Middleware to collect Prometheus metrics\"\"\"\n    \n    def __init__(self, get_response):\n        self.get_response = get_response\n    \n    def __call__(self, request):\n        start_time = time.time()\n        \n        # Count initial database queries\n        from django.db import connection\n        initial_queries = len(connection.queries)\n        \n        try:\n            response = self.get_response(request)\n            \n            # Record metrics\n            REQUEST_COUNT.labels(\n                method=request.method,\n                endpoint=request.resolver_match.url_name if request.resolver_match else 'unknown',\n                status=response.status_code\n            ).inc()\n            \n            REQUEST_DURATION.labels(\n                method=request.method,\n                endpoint=request.resolver_match.url_name if request.resolver_match else 'unknown'\n            ).observe(time.time() - start_time)\n            \n            DATABASE_QUERIES.labels(\n                endpoint=request.resolver_match.url_name if request.resolver_match else 'unknown'\n            ).observe(len(connection.queries) - initial_queries)\n            \n            return response\n            \n        except Exception as e:\n            ERROR_COUNT.labels(\n                error_type=type(e).__name__,\n                endpoint=request.resolver_match.url_name if request.resolver_match else 'unknown'\n            ).inc()\n            raise\n\ndef metrics_view(request):\n    \"\"\"Prometheus metrics endpoint\"\"\"\n    return HttpResponse(generate_latest(), content_type='text/plain')\n\n# Custom metrics collector\nclass DjangoMetricsCollector:\n    \"\"\"Collect Django-specific metrics for Prometheus\"\"\"\n    \n    def __init__(self):\n        self.user_gauge = Gauge('django_active_sessions', 'Active user sessions')\n        self.model_counts = {}\n    \n    def collect_user_metrics(self):\n        \"\"\"Collect user-related metrics\"\"\"\n        from django.contrib.sessions.models import Session\n        from django.utils import timezone\n        \n        active_sessions = Session.objects.filter(\n            expire_date__gte=timezone.now()\n        ).count()\n        \n        self.user_gauge.set(active_sessions)\n    \n    def collect_model_metrics(self):\n        \"\"\"Collect model count metrics\"\"\"\n        from django.apps import apps\n        \n        for model in apps.get_models():\n            model_name = f\"{model._meta.app_label}_{model._meta.model_name}\"\n            \n            if model_name not in self.model_counts:\n                self.model_counts[model_name] = Gauge(\n                    f'django_model_count_{model_name}',\n                    f'Count of {model_name} objects'\n                )\n            \n            try:\n                count = model.objects.count()\n                self.model_counts[model_name].set(count)\n            except Exception:\n                pass  # Skip models that can't be counted\n    \n    def collect_all_metrics(self):\n        \"\"\"Collect all custom metrics\"\"\"\n        self.collect_user_metrics()\n        self.collect_model_metrics()\n\n# Initialize metrics collector\nmetrics_collector = DjangoMetricsCollector()\n",[1047,4991,4992,4997,5024,5040,5046,5050,5055,5066,5077,5088,5119,5123,5127,5138,5149,5160,5180,5184,5188,5199,5210,5221,5233,5237,5241,5252,5263,5272,5276,5280,5291,5302,5313,5335,5339,5343,5354,5365,5376,5397,5401,5405,5414,5423,5427,5443,5455,5459,5475,5489,5493,5497,5512,5530,5534,5541,5560,5564,5569,5581,5596,5634,5648,5658,5662,5673,5687,5719,5743,5747,5758,5790,5817,5821,5827,5831,5847,5858,5882,5914,5922,5927,5931,5944,5953,5982,5986,5991,6000,6009,6013,6025,6058,6072,6076,6089,6098,6124,6138,6142,6164,6181,6191,6195,6215,6219,6232,6241,6257,6261,6280,6330,6334,6353,6373,6391,6407,6412,6416,6423,6443,6465,6474,6482,6486,6499,6508,6519,6530,6534,6539],{"__ignoreMap":1045},[1050,4993,4994],{"class":1052,"line":1053},[1050,4995,4996],{"class":1056},"# monitoring/prometheus.py\n",[1050,4998,4999,5001,5004,5006,5009,5011,5014,5016,5019,5021],{"class":1052,"line":1060},[1050,5000,1095],{"class":1063},[1050,5002,5003],{"class":1067}," prometheus_client ",[1050,5005,1064],{"class":1063},[1050,5007,5008],{"class":1067}," Counter",[1050,5010,1360],{"class":1101},[1050,5012,5013],{"class":1067}," Histogram",[1050,5015,1360],{"class":1101},[1050,5017,5018],{"class":1067}," Gauge",[1050,5020,1360],{"class":1101},[1050,5022,5023],{"class":1067}," generate_latest\n",[1050,5025,5026,5028,5030,5032,5035,5037],{"class":1052,"line":1071},[1050,5027,1095],{"class":1063},[1050,5029,2190],{"class":1067},[1050,5031,1102],{"class":1101},[1050,5033,5034],{"class":1067},"http ",[1050,5036,1064],{"class":1063},[1050,5038,5039],{"class":1067}," HttpResponse\n",[1050,5041,5042,5044],{"class":1052,"line":1078},[1050,5043,1064],{"class":1063},[1050,5045,2159],{"class":1067},[1050,5047,5048],{"class":1052,"line":1084},[1050,5049,1075],{"emptyLinePlaceholder":1074},[1050,5051,5052],{"class":1052,"line":1092},[1050,5053,5054],{"class":1056},"# Prometheus metrics\n",[1050,5056,5057,5060,5062,5064],{"class":1052,"line":1118},[1050,5058,5059],{"class":1880},"REQUEST_COUNT",[1050,5061,1841],{"class":1101},[1050,5063,5008],{"class":1194},[1050,5065,1198],{"class":1101},[1050,5067,5068,5070,5073,5075],{"class":1052,"line":1139},[1050,5069,1977],{"class":1228},[1050,5071,5072],{"class":1232},"django_requests_total",[1050,5074,1229],{"class":1228},[1050,5076,1273],{"class":1101},[1050,5078,5079,5081,5084,5086],{"class":1052,"line":1160},[1050,5080,1977],{"class":1228},[1050,5082,5083],{"class":1232},"Total Django requests",[1050,5085,1229],{"class":1228},[1050,5087,1273],{"class":1101},[1050,5089,5090,5093,5095,5097,5099,5101,5103,5106,5108,5110,5112,5115,5117],{"class":1052,"line":1181},[1050,5091,5092],{"class":1101},"    [",[1050,5094,1229],{"class":1228},[1050,5096,2566],{"class":1232},[1050,5098,1229],{"class":1228},[1050,5100,1360],{"class":1101},[1050,5102,1408],{"class":1228},[1050,5104,5105],{"class":1232},"endpoint",[1050,5107,1229],{"class":1228},[1050,5109,1360],{"class":1101},[1050,5111,1408],{"class":1228},[1050,5113,5114],{"class":1232},"status",[1050,5116,1229],{"class":1228},[1050,5118,1608],{"class":1101},[1050,5120,5121],{"class":1052,"line":1186},[1050,5122,1472],{"class":1101},[1050,5124,5125],{"class":1052,"line":1201},[1050,5126,1075],{"emptyLinePlaceholder":1074},[1050,5128,5129,5132,5134,5136],{"class":1052,"line":1241},[1050,5130,5131],{"class":1880},"REQUEST_DURATION",[1050,5133,1841],{"class":1101},[1050,5135,5013],{"class":1194},[1050,5137,1198],{"class":1101},[1050,5139,5140,5142,5145,5147],{"class":1052,"line":1250},[1050,5141,1977],{"class":1228},[1050,5143,5144],{"class":1232},"django_request_duration_seconds",[1050,5146,1229],{"class":1228},[1050,5148,1273],{"class":1101},[1050,5150,5151,5153,5156,5158],{"class":1052,"line":1258},[1050,5152,1977],{"class":1228},[1050,5154,5155],{"class":1232},"Django request duration",[1050,5157,1229],{"class":1228},[1050,5159,1273],{"class":1101},[1050,5161,5162,5164,5166,5168,5170,5172,5174,5176,5178],{"class":1052,"line":1276},[1050,5163,5092],{"class":1101},[1050,5165,1229],{"class":1228},[1050,5167,2566],{"class":1232},[1050,5169,1229],{"class":1228},[1050,5171,1360],{"class":1101},[1050,5173,1408],{"class":1228},[1050,5175,5105],{"class":1232},[1050,5177,1229],{"class":1228},[1050,5179,1608],{"class":1101},[1050,5181,5182],{"class":1052,"line":1290},[1050,5183,1472],{"class":1101},[1050,5185,5186],{"class":1052,"line":1302},[1050,5187,1075],{"emptyLinePlaceholder":1074},[1050,5189,5190,5193,5195,5197],{"class":1052,"line":1308},[1050,5191,5192],{"class":1880},"DATABASE_QUERIES",[1050,5194,1841],{"class":1101},[1050,5196,5013],{"class":1194},[1050,5198,1198],{"class":1101},[1050,5200,5201,5203,5206,5208],{"class":1052,"line":1325},[1050,5202,1977],{"class":1228},[1050,5204,5205],{"class":1232},"django_database_queries_total",[1050,5207,1229],{"class":1228},[1050,5209,1273],{"class":1101},[1050,5211,5212,5214,5217,5219],{"class":1052,"line":1334},[1050,5213,1977],{"class":1228},[1050,5215,5216],{"class":1232},"Number of database queries per request",[1050,5218,1229],{"class":1228},[1050,5220,1273],{"class":1101},[1050,5222,5223,5225,5227,5229,5231],{"class":1052,"line":1342},[1050,5224,5092],{"class":1101},[1050,5226,1229],{"class":1228},[1050,5228,5105],{"class":1232},[1050,5230,1229],{"class":1228},[1050,5232,1608],{"class":1101},[1050,5234,5235],{"class":1052,"line":1348},[1050,5236,1472],{"class":1101},[1050,5238,5239],{"class":1052,"line":1366},[1050,5240,1075],{"emptyLinePlaceholder":1074},[1050,5242,5243,5246,5248,5250],{"class":1052,"line":1379},[1050,5244,5245],{"class":1880},"ACTIVE_USERS",[1050,5247,1841],{"class":1101},[1050,5249,5018],{"class":1194},[1050,5251,1198],{"class":1101},[1050,5253,5254,5256,5259,5261],{"class":1052,"line":1418},[1050,5255,1977],{"class":1228},[1050,5257,5258],{"class":1232},"django_active_users",[1050,5260,1229],{"class":1228},[1050,5262,1273],{"class":1101},[1050,5264,5265,5267,5270],{"class":1052,"line":1456},[1050,5266,1977],{"class":1228},[1050,5268,5269],{"class":1232},"Number of active users",[1050,5271,1849],{"class":1228},[1050,5273,5274],{"class":1052,"line":1469},[1050,5275,1472],{"class":1101},[1050,5277,5278],{"class":1052,"line":1475},[1050,5279,1075],{"emptyLinePlaceholder":1074},[1050,5281,5282,5285,5287,5289],{"class":1052,"line":1480},[1050,5283,5284],{"class":1880},"CACHE_OPERATIONS",[1050,5286,1841],{"class":1101},[1050,5288,5008],{"class":1194},[1050,5290,1198],{"class":1101},[1050,5292,5293,5295,5298,5300],{"class":1052,"line":1505},[1050,5294,1977],{"class":1228},[1050,5296,5297],{"class":1232},"django_cache_operations_total",[1050,5299,1229],{"class":1228},[1050,5301,1273],{"class":1101},[1050,5303,5304,5306,5309,5311],{"class":1052,"line":1519},[1050,5305,1977],{"class":1228},[1050,5307,5308],{"class":1232},"Cache operations",[1050,5310,1229],{"class":1228},[1050,5312,1273],{"class":1101},[1050,5314,5315,5317,5319,5322,5324,5326,5328,5331,5333],{"class":1052,"line":1525},[1050,5316,5092],{"class":1101},[1050,5318,1229],{"class":1228},[1050,5320,5321],{"class":1232},"operation",[1050,5323,1229],{"class":1228},[1050,5325,1360],{"class":1101},[1050,5327,1408],{"class":1228},[1050,5329,5330],{"class":1232},"result",[1050,5332,1229],{"class":1228},[1050,5334,1608],{"class":1101},[1050,5336,5337],{"class":1052,"line":1572},[1050,5338,1472],{"class":1101},[1050,5340,5341],{"class":1052,"line":1611},[1050,5342,1075],{"emptyLinePlaceholder":1074},[1050,5344,5345,5348,5350,5352],{"class":1052,"line":1629},[1050,5346,5347],{"class":1880},"ERROR_COUNT",[1050,5349,1841],{"class":1101},[1050,5351,5008],{"class":1194},[1050,5353,1198],{"class":1101},[1050,5355,5356,5358,5361,5363],{"class":1052,"line":1670},[1050,5357,1977],{"class":1228},[1050,5359,5360],{"class":1232},"django_errors_total",[1050,5362,1229],{"class":1228},[1050,5364,1273],{"class":1101},[1050,5366,5367,5369,5372,5374],{"class":1052,"line":1676},[1050,5368,1977],{"class":1228},[1050,5370,5371],{"class":1232},"Total errors",[1050,5373,1229],{"class":1228},[1050,5375,1273],{"class":1101},[1050,5377,5378,5380,5382,5385,5387,5389,5391,5393,5395],{"class":1052,"line":1682},[1050,5379,5092],{"class":1101},[1050,5381,1229],{"class":1228},[1050,5383,5384],{"class":1232},"error_type",[1050,5386,1229],{"class":1228},[1050,5388,1360],{"class":1101},[1050,5390,1408],{"class":1228},[1050,5392,5105],{"class":1232},[1050,5394,1229],{"class":1228},[1050,5396,1608],{"class":1101},[1050,5398,5399],{"class":1052,"line":1720},[1050,5400,1472],{"class":1101},[1050,5402,5403],{"class":1052,"line":1766},[1050,5404,1075],{"emptyLinePlaceholder":1074},[1050,5406,5407,5409,5412],{"class":1052,"line":1781},[1050,5408,2253],{"class":1483},[1050,5410,5411],{"class":2256}," PrometheusMiddleware",[1050,5413,1626],{"class":1101},[1050,5415,5416,5418,5421],{"class":1052,"line":1811},[1050,5417,1509],{"class":1508},[1050,5419,5420],{"class":1512},"Middleware to collect Prometheus metrics",[1050,5422,1516],{"class":1508},[1050,5424,5425],{"class":1052,"line":1852},[1050,5426,1673],{"class":1067},[1050,5428,5429,5431,5433,5435,5437,5439,5441],{"class":1052,"line":1857},[1050,5430,2277],{"class":1483},[1050,5432,2281],{"class":2280},[1050,5434,1225],{"class":1101},[1050,5436,2287],{"class":2286},[1050,5438,1360],{"class":1101},[1050,5440,4452],{"class":1493},[1050,5442,1502],{"class":1101},[1050,5444,5445,5447,5449,5451,5453],{"class":1052,"line":1866},[1050,5446,2294],{"class":1880},[1050,5448,1102],{"class":1101},[1050,5450,4464],{"class":1216},[1050,5452,1841],{"class":1101},[1050,5454,4469],{"class":1067},[1050,5456,5457],{"class":1052,"line":1871},[1050,5458,1673],{"class":1067},[1050,5460,5461,5463,5465,5467,5469,5471,5473],{"class":1052,"line":1877},[1050,5462,2277],{"class":1483},[1050,5464,4482],{"class":2280},[1050,5466,1225],{"class":1101},[1050,5468,2287],{"class":2286},[1050,5470,1360],{"class":1101},[1050,5472,4491],{"class":1493},[1050,5474,1502],{"class":1101},[1050,5476,5477,5479,5481,5483,5485,5487],{"class":1052,"line":1916},[1050,5478,4499],{"class":1067},[1050,5480,1208],{"class":1101},[1050,5482,2412],{"class":1067},[1050,5484,1102],{"class":1101},[1050,5486,2417],{"class":1194},[1050,5488,2398],{"class":1101},[1050,5490,5491],{"class":1052,"line":1952},[1050,5492,4515],{"class":1067},[1050,5494,5495],{"class":1052,"line":1957},[1050,5496,4521],{"class":1056},[1050,5498,5499,5502,5504,5506,5508,5510],{"class":1052,"line":1963},[1050,5500,5501],{"class":1063},"        from",[1050,5503,2190],{"class":1067},[1050,5505,1102],{"class":1101},[1050,5507,2195],{"class":1067},[1050,5509,1064],{"class":1063},[1050,5511,2200],{"class":1067},[1050,5513,5514,5516,5518,5520,5522,5524,5526,5528],{"class":1052,"line":1974},[1050,5515,4527],{"class":1067},[1050,5517,1208],{"class":1101},[1050,5519,2714],{"class":2280},[1050,5521,1225],{"class":1101},[1050,5523,4536],{"class":1194},[1050,5525,1102],{"class":1101},[1050,5527,4541],{"class":1216},[1050,5529,1472],{"class":1101},[1050,5531,5532],{"class":1052,"line":1997},[1050,5533,4515],{"class":1067},[1050,5535,5536,5539],{"class":1052,"line":2011},[1050,5537,5538],{"class":1063},"        try",[1050,5540,1626],{"class":1101},[1050,5542,5543,5546,5548,5550,5552,5554,5556,5558],{"class":1052,"line":2052},[1050,5544,5545],{"class":1067},"            response ",[1050,5547,1208],{"class":1101},[1050,5549,2507],{"class":1880},[1050,5551,1102],{"class":1101},[1050,5553,4464],{"class":1194},[1050,5555,1225],{"class":1101},[1050,5557,1533],{"class":1194},[1050,5559,1472],{"class":1101},[1050,5561,5562],{"class":1052,"line":2092},[1050,5563,2533],{"class":1067},[1050,5565,5566],{"class":1052,"line":2098},[1050,5567,5568],{"class":1056},"            # Record metrics\n",[1050,5570,5571,5574,5576,5579],{"class":1052,"line":2104},[1050,5572,5573],{"class":1880},"            REQUEST_COUNT",[1050,5575,1102],{"class":1101},[1050,5577,5578],{"class":1194},"labels",[1050,5580,1198],{"class":1101},[1050,5582,5583,5586,5588,5590,5592,5594],{"class":1052,"line":2109},[1050,5584,5585],{"class":1204},"                method",[1050,5587,1208],{"class":1101},[1050,5589,1533],{"class":1194},[1050,5591,1102],{"class":1101},[1050,5593,2566],{"class":1216},[1050,5595,1273],{"class":1101},[1050,5597,5598,5601,5603,5605,5607,5610,5612,5615,5618,5620,5622,5624,5626,5628,5630,5632],{"class":1052,"line":2115},[1050,5599,5600],{"class":1204},"                endpoint",[1050,5602,1208],{"class":1101},[1050,5604,1533],{"class":1194},[1050,5606,1102],{"class":1101},[1050,5608,5609],{"class":1216},"resolver_match",[1050,5611,1102],{"class":1101},[1050,5613,5614],{"class":1216},"url_name",[1050,5616,5617],{"class":1063}," if",[1050,5619,4491],{"class":1194},[1050,5621,1102],{"class":1101},[1050,5623,5609],{"class":1216},[1050,5625,3359],{"class":1063},[1050,5627,1408],{"class":1228},[1050,5629,1449],{"class":1232},[1050,5631,1229],{"class":1228},[1050,5633,1273],{"class":1101},[1050,5635,5636,5639,5641,5643,5645],{"class":1052,"line":2126},[1050,5637,5638],{"class":1204},"                status",[1050,5640,1208],{"class":1101},[1050,5642,4831],{"class":1194},[1050,5644,1102],{"class":1101},[1050,5646,5647],{"class":1216},"status_code\n",[1050,5649,5650,5653,5656],{"class":1052,"line":3021},[1050,5651,5652],{"class":1101},"            ).",[1050,5654,5655],{"class":1194},"inc",[1050,5657,2398],{"class":1101},[1050,5659,5660],{"class":1052,"line":3042},[1050,5661,2533],{"class":1067},[1050,5663,5664,5667,5669,5671],{"class":1052,"line":3047},[1050,5665,5666],{"class":1880},"            REQUEST_DURATION",[1050,5668,1102],{"class":1101},[1050,5670,5578],{"class":1194},[1050,5672,1198],{"class":1101},[1050,5674,5675,5677,5679,5681,5683,5685],{"class":1052,"line":3053},[1050,5676,5585],{"class":1204},[1050,5678,1208],{"class":1101},[1050,5680,1533],{"class":1194},[1050,5682,1102],{"class":1101},[1050,5684,2566],{"class":1216},[1050,5686,1273],{"class":1101},[1050,5688,5689,5691,5693,5695,5697,5699,5701,5703,5705,5707,5709,5711,5713,5715,5717],{"class":1052,"line":3064},[1050,5690,5600],{"class":1204},[1050,5692,1208],{"class":1101},[1050,5694,1533],{"class":1194},[1050,5696,1102],{"class":1101},[1050,5698,5609],{"class":1216},[1050,5700,1102],{"class":1101},[1050,5702,5614],{"class":1216},[1050,5704,5617],{"class":1063},[1050,5706,4491],{"class":1194},[1050,5708,1102],{"class":1101},[1050,5710,5609],{"class":1216},[1050,5712,3359],{"class":1063},[1050,5714,1408],{"class":1228},[1050,5716,1449],{"class":1232},[1050,5718,1849],{"class":1228},[1050,5720,5721,5723,5726,5728,5730,5732,5734,5736,5738,5741],{"class":1052,"line":3089},[1050,5722,5652],{"class":1101},[1050,5724,5725],{"class":1194},"observe",[1050,5727,1225],{"class":1101},[1050,5729,2417],{"class":1194},[1050,5731,1102],{"class":1101},[1050,5733,2417],{"class":1194},[1050,5735,4667],{"class":1101},[1050,5737,4670],{"class":1538},[1050,5739,5740],{"class":1194}," start_time",[1050,5742,1472],{"class":1101},[1050,5744,5745],{"class":1052,"line":3107},[1050,5746,2533],{"class":1067},[1050,5748,5749,5752,5754,5756],{"class":1052,"line":3112},[1050,5750,5751],{"class":1880},"            DATABASE_QUERIES",[1050,5753,1102],{"class":1101},[1050,5755,5578],{"class":1194},[1050,5757,1198],{"class":1101},[1050,5759,5760,5762,5764,5766,5768,5770,5772,5774,5776,5778,5780,5782,5784,5786,5788],{"class":1052,"line":3122},[1050,5761,5600],{"class":1204},[1050,5763,1208],{"class":1101},[1050,5765,1533],{"class":1194},[1050,5767,1102],{"class":1101},[1050,5769,5609],{"class":1216},[1050,5771,1102],{"class":1101},[1050,5773,5614],{"class":1216},[1050,5775,5617],{"class":1063},[1050,5777,4491],{"class":1194},[1050,5779,1102],{"class":1101},[1050,5781,5609],{"class":1216},[1050,5783,3359],{"class":1063},[1050,5785,1408],{"class":1228},[1050,5787,1449],{"class":1232},[1050,5789,1849],{"class":1228},[1050,5791,5792,5794,5796,5798,5800,5802,5804,5806,5808,5810,5812,5815],{"class":1052,"line":3157},[1050,5793,5652],{"class":1101},[1050,5795,5725],{"class":1194},[1050,5797,1225],{"class":1101},[1050,5799,3209],{"class":2280},[1050,5801,1225],{"class":1101},[1050,5803,4536],{"class":1194},[1050,5805,1102],{"class":1101},[1050,5807,4541],{"class":1216},[1050,5809,3173],{"class":1101},[1050,5811,4670],{"class":1538},[1050,5813,5814],{"class":1194}," initial_queries",[1050,5816,1472],{"class":1101},[1050,5818,5819],{"class":1052,"line":3187},[1050,5820,2533],{"class":1067},[1050,5822,5823,5825],{"class":1052,"line":3227},[1050,5824,3637],{"class":1063},[1050,5826,4982],{"class":1067},[1050,5828,5829],{"class":1052,"line":3262},[1050,5830,2533],{"class":1067},[1050,5832,5833,5836,5839,5842,5845],{"class":1052,"line":3268},[1050,5834,5835],{"class":1063},"        except",[1050,5837,5838],{"class":2308}," Exception",[1050,5840,5841],{"class":1063}," as",[1050,5843,5844],{"class":1067}," e",[1050,5846,1626],{"class":1101},[1050,5848,5849,5852,5854,5856],{"class":1052,"line":3285},[1050,5850,5851],{"class":1880},"            ERROR_COUNT",[1050,5853,1102],{"class":1101},[1050,5855,5578],{"class":1194},[1050,5857,1198],{"class":1101},[1050,5859,5860,5863,5865,5868,5870,5873,5876,5880],{"class":1052,"line":3332},[1050,5861,5862],{"class":1204},"                error_type",[1050,5864,1208],{"class":1101},[1050,5866,5867],{"class":2308},"type",[1050,5869,1225],{"class":1101},[1050,5871,5872],{"class":1194},"e",[1050,5874,5875],{"class":1101},").",[1050,5877,5879],{"class":5878},"s131V","__name__",[1050,5881,1273],{"class":1101},[1050,5883,5884,5886,5888,5890,5892,5894,5896,5898,5900,5902,5904,5906,5908,5910,5912],{"class":1052,"line":3365},[1050,5885,5600],{"class":1204},[1050,5887,1208],{"class":1101},[1050,5889,1533],{"class":1194},[1050,5891,1102],{"class":1101},[1050,5893,5609],{"class":1216},[1050,5895,1102],{"class":1101},[1050,5897,5614],{"class":1216},[1050,5899,5617],{"class":1063},[1050,5901,4491],{"class":1194},[1050,5903,1102],{"class":1101},[1050,5905,5609],{"class":1216},[1050,5907,3359],{"class":1063},[1050,5909,1408],{"class":1228},[1050,5911,1449],{"class":1232},[1050,5913,1849],{"class":1228},[1050,5915,5916,5918,5920],{"class":1052,"line":3373},[1050,5917,5652],{"class":1101},[1050,5919,5655],{"class":1194},[1050,5921,2398],{"class":1101},[1050,5923,5924],{"class":1052,"line":3392},[1050,5925,5926],{"class":1063},"            raise\n",[1050,5928,5929],{"class":1052,"line":3410},[1050,5930,1075],{"emptyLinePlaceholder":1074},[1050,5932,5933,5935,5938,5940,5942],{"class":1052,"line":3415},[1050,5934,1484],{"class":1483},[1050,5936,5937],{"class":1487}," metrics_view",[1050,5939,1225],{"class":1101},[1050,5941,1533],{"class":1493},[1050,5943,1502],{"class":1101},[1050,5945,5946,5948,5951],{"class":1052,"line":3421},[1050,5947,1509],{"class":1508},[1050,5949,5950],{"class":1512},"Prometheus metrics endpoint",[1050,5952,1516],{"class":1508},[1050,5954,5955,5957,5960,5962,5965,5968,5971,5973,5975,5978,5980],{"class":1052,"line":3434},[1050,5956,1860],{"class":1063},[1050,5958,5959],{"class":1194}," HttpResponse",[1050,5961,1225],{"class":1101},[1050,5963,5964],{"class":1194},"generate_latest",[1050,5966,5967],{"class":1101},"(),",[1050,5969,5970],{"class":1204}," content_type",[1050,5972,1208],{"class":1101},[1050,5974,1229],{"class":1228},[1050,5976,5977],{"class":1232},"text/plain",[1050,5979,1229],{"class":1228},[1050,5981,1472],{"class":1101},[1050,5983,5984],{"class":1052,"line":3472},[1050,5985,1075],{"emptyLinePlaceholder":1074},[1050,5987,5988],{"class":1052,"line":3499},[1050,5989,5990],{"class":1056},"# Custom metrics collector\n",[1050,5992,5993,5995,5998],{"class":1052,"line":3537},[1050,5994,2253],{"class":1483},[1050,5996,5997],{"class":2256}," DjangoMetricsCollector",[1050,5999,1626],{"class":1101},[1050,6001,6002,6004,6007],{"class":1052,"line":3544},[1050,6003,1509],{"class":1508},[1050,6005,6006],{"class":1512},"Collect Django-specific metrics for Prometheus",[1050,6008,1516],{"class":1508},[1050,6010,6011],{"class":1052,"line":3558},[1050,6012,1673],{"class":1067},[1050,6014,6015,6017,6019,6021,6023],{"class":1052,"line":3563},[1050,6016,2277],{"class":1483},[1050,6018,2281],{"class":2280},[1050,6020,1225],{"class":1101},[1050,6022,2287],{"class":2286},[1050,6024,1502],{"class":1101},[1050,6026,6027,6029,6031,6034,6036,6038,6040,6042,6045,6047,6049,6051,6054,6056],{"class":1052,"line":3569},[1050,6028,2294],{"class":1880},[1050,6030,1102],{"class":1101},[1050,6032,6033],{"class":1216},"user_gauge",[1050,6035,1841],{"class":1101},[1050,6037,5018],{"class":1194},[1050,6039,1225],{"class":1101},[1050,6041,1229],{"class":1228},[1050,6043,6044],{"class":1232},"django_active_sessions",[1050,6046,1229],{"class":1228},[1050,6048,1360],{"class":1101},[1050,6050,1408],{"class":1228},[1050,6052,6053],{"class":1232},"Active user sessions",[1050,6055,1229],{"class":1228},[1050,6057,1472],{"class":1101},[1050,6059,6060,6062,6064,6067,6069],{"class":1052,"line":3587},[1050,6061,2294],{"class":1880},[1050,6063,1102],{"class":1101},[1050,6065,6066],{"class":1216},"model_counts",[1050,6068,1841],{"class":1101},[1050,6070,6071],{"class":1101}," {}\n",[1050,6073,6074],{"class":1052,"line":3604},[1050,6075,1673],{"class":1067},[1050,6077,6078,6080,6083,6085,6087],{"class":1052,"line":3629},[1050,6079,2277],{"class":1483},[1050,6081,6082],{"class":1487}," collect_user_metrics",[1050,6084,1225],{"class":1101},[1050,6086,2287],{"class":2286},[1050,6088,1502],{"class":1101},[1050,6090,6091,6093,6096],{"class":1052,"line":3634},[1050,6092,2494],{"class":1508},[1050,6094,6095],{"class":1512},"Collect user-related metrics",[1050,6097,1516],{"class":1508},[1050,6099,6100,6102,6104,6106,6109,6111,6114,6116,6119,6121],{"class":1052,"line":3642},[1050,6101,5501],{"class":1063},[1050,6103,2190],{"class":1067},[1050,6105,1102],{"class":1101},[1050,6107,6108],{"class":1067},"contrib",[1050,6110,1102],{"class":1101},[1050,6112,6113],{"class":1067},"sessions",[1050,6115,1102],{"class":1101},[1050,6117,6118],{"class":1067},"models ",[1050,6120,1064],{"class":1063},[1050,6122,6123],{"class":1067}," Session\n",[1050,6125,6126,6128,6130,6132,6134,6136],{"class":1052,"line":3658},[1050,6127,5501],{"class":1063},[1050,6129,2190],{"class":1067},[1050,6131,1102],{"class":1101},[1050,6133,2232],{"class":1067},[1050,6135,1064],{"class":1063},[1050,6137,2237],{"class":1067},[1050,6139,6140],{"class":1052,"line":3675},[1050,6141,4515],{"class":1067},[1050,6143,6144,6147,6149,6152,6154,6157,6159,6162],{"class":1052,"line":3689},[1050,6145,6146],{"class":1067},"        active_sessions ",[1050,6148,1208],{"class":1101},[1050,6150,6151],{"class":1067}," Session",[1050,6153,1102],{"class":1101},[1050,6155,6156],{"class":1216},"objects",[1050,6158,1102],{"class":1101},[1050,6160,6161],{"class":1194},"filter",[1050,6163,1198],{"class":1101},[1050,6165,6166,6169,6171,6174,6176,6179],{"class":1052,"line":3707},[1050,6167,6168],{"class":1204},"            expire_date__gte",[1050,6170,1208],{"class":1101},[1050,6172,6173],{"class":1194},"timezone",[1050,6175,1102],{"class":1101},[1050,6177,6178],{"class":1194},"now",[1050,6180,2398],{"class":1101},[1050,6182,6183,6186,6189],{"class":1052,"line":3724},[1050,6184,6185],{"class":1101},"        ).",[1050,6187,6188],{"class":1194},"count",[1050,6190,2398],{"class":1101},[1050,6192,6193],{"class":1052,"line":3741},[1050,6194,4515],{"class":1067},[1050,6196,6197,6199,6201,6203,6205,6208,6210,6213],{"class":1052,"line":3758},[1050,6198,2294],{"class":1880},[1050,6200,1102],{"class":1101},[1050,6202,6033],{"class":1216},[1050,6204,1102],{"class":1101},[1050,6206,6207],{"class":1194},"set",[1050,6209,1225],{"class":1101},[1050,6211,6212],{"class":1194},"active_sessions",[1050,6214,1472],{"class":1101},[1050,6216,6217],{"class":1052,"line":3775},[1050,6218,1673],{"class":1067},[1050,6220,6221,6223,6226,6228,6230],{"class":1052,"line":3792},[1050,6222,2277],{"class":1483},[1050,6224,6225],{"class":1487}," collect_model_metrics",[1050,6227,1225],{"class":1101},[1050,6229,2287],{"class":2286},[1050,6231,1502],{"class":1101},[1050,6233,6234,6236,6239],{"class":1052,"line":3798},[1050,6235,2494],{"class":1508},[1050,6237,6238],{"class":1512},"Collect model count metrics",[1050,6240,1516],{"class":1508},[1050,6242,6243,6245,6247,6249,6252,6254],{"class":1052,"line":3812},[1050,6244,5501],{"class":1063},[1050,6246,2190],{"class":1067},[1050,6248,1102],{"class":1101},[1050,6250,6251],{"class":1067},"apps ",[1050,6253,1064],{"class":1063},[1050,6255,6256],{"class":1067}," apps\n",[1050,6258,6259],{"class":1052,"line":3829},[1050,6260,4515],{"class":1067},[1050,6262,6263,6265,6268,6270,6273,6275,6278],{"class":1052,"line":3846},[1050,6264,1614],{"class":1063},[1050,6266,6267],{"class":1067}," model ",[1050,6269,1620],{"class":1063},[1050,6271,6272],{"class":1067}," apps",[1050,6274,1102],{"class":1101},[1050,6276,6277],{"class":1194},"get_models",[1050,6279,3086],{"class":1101},[1050,6281,6282,6285,6287,6289,6292,6294,6297,6299,6302,6304,6307,6309,6312,6314,6316,6318,6320,6322,6325,6327],{"class":1052,"line":3870},[1050,6283,6284],{"class":1067},"            model_name ",[1050,6286,1208],{"class":1101},[1050,6288,4924],{"class":1483},[1050,6290,6291],{"class":1232},"\"",[1050,6293,4930],{"class":4929},[1050,6295,6296],{"class":1067},"model",[1050,6298,1102],{"class":1101},[1050,6300,6301],{"class":1216},"_meta",[1050,6303,1102],{"class":1101},[1050,6305,6306],{"class":1216},"app_label",[1050,6308,4938],{"class":4929},[1050,6310,6311],{"class":1232},"_",[1050,6313,4930],{"class":4929},[1050,6315,6296],{"class":1067},[1050,6317,1102],{"class":1101},[1050,6319,6301],{"class":1216},[1050,6321,1102],{"class":1101},[1050,6323,6324],{"class":1216},"model_name",[1050,6326,4938],{"class":4929},[1050,6328,6329],{"class":1232},"\"\n",[1050,6331,6332],{"class":1052,"line":3875},[1050,6333,2533],{"class":1067},[1050,6335,6336,6338,6341,6343,6345,6347,6349,6351],{"class":1052,"line":3889},[1050,6337,1784],{"class":1063},[1050,6339,6340],{"class":1067}," model_name ",[1050,6342,4077],{"class":1538},[1050,6344,1539],{"class":1538},[1050,6346,2507],{"class":1880},[1050,6348,1102],{"class":1101},[1050,6350,6066],{"class":1216},[1050,6352,1626],{"class":1101},[1050,6354,6355,6357,6359,6361,6363,6365,6367,6369,6371],{"class":1052,"line":3905},[1050,6356,2742],{"class":1880},[1050,6358,1102],{"class":1101},[1050,6360,6066],{"class":1216},[1050,6362,1560],{"class":1101},[1050,6364,6324],{"class":1216},[1050,6366,1838],{"class":1101},[1050,6368,1841],{"class":1101},[1050,6370,5018],{"class":1194},[1050,6372,1198],{"class":1101},[1050,6374,6375,6378,6381,6383,6385,6387,6389],{"class":1052,"line":3927},[1050,6376,6377],{"class":1483},"                    f",[1050,6379,6380],{"class":1232},"'django_model_count_",[1050,6382,4930],{"class":4929},[1050,6384,6324],{"class":1194},[1050,6386,4938],{"class":4929},[1050,6388,1229],{"class":1232},[1050,6390,1273],{"class":1101},[1050,6392,6393,6395,6398,6400,6402,6404],{"class":1052,"line":3948},[1050,6394,6377],{"class":1483},[1050,6396,6397],{"class":1232},"'Count of ",[1050,6399,4930],{"class":4929},[1050,6401,6324],{"class":1194},[1050,6403,4938],{"class":4929},[1050,6405,6406],{"class":1232}," objects'\n",[1050,6408,6409],{"class":1052,"line":3988},[1050,6410,6411],{"class":1101},"                )\n",[1050,6413,6414],{"class":1052,"line":3993},[1050,6415,2533],{"class":1067},[1050,6417,6418,6421],{"class":1052,"line":4018},[1050,6419,6420],{"class":1063},"            try",[1050,6422,1626],{"class":1101},[1050,6424,6425,6428,6430,6433,6435,6437,6439,6441],{"class":1052,"line":4023},[1050,6426,6427],{"class":1067},"                count ",[1050,6429,1208],{"class":1101},[1050,6431,6432],{"class":1067}," model",[1050,6434,1102],{"class":1101},[1050,6436,6156],{"class":1216},[1050,6438,1102],{"class":1101},[1050,6440,6188],{"class":1194},[1050,6442,2398],{"class":1101},[1050,6444,6445,6447,6449,6451,6453,6455,6457,6459,6461,6463],{"class":1052,"line":4028},[1050,6446,2742],{"class":1880},[1050,6448,1102],{"class":1101},[1050,6450,6066],{"class":1216},[1050,6452,1560],{"class":1101},[1050,6454,6324],{"class":1216},[1050,6456,1652],{"class":1101},[1050,6458,6207],{"class":1194},[1050,6460,1225],{"class":1101},[1050,6462,6188],{"class":1194},[1050,6464,1472],{"class":1101},[1050,6466,6467,6470,6472],{"class":1052,"line":4046},[1050,6468,6469],{"class":1063},"            except",[1050,6471,5838],{"class":2308},[1050,6473,1626],{"class":1101},[1050,6475,6476,6479],{"class":1052,"line":4056},[1050,6477,6478],{"class":1063},"                pass",[1050,6480,6481],{"class":1056},"  # Skip models that can't be counted\n",[1050,6483,6484],{"class":1052,"line":4069},[1050,6485,1673],{"class":1067},[1050,6487,6488,6490,6493,6495,6497],{"class":1052,"line":4090},[1050,6489,2277],{"class":1483},[1050,6491,6492],{"class":1487}," collect_all_metrics",[1050,6494,1225],{"class":1101},[1050,6496,2287],{"class":2286},[1050,6498,1502],{"class":1101},[1050,6500,6501,6503,6506],{"class":1052,"line":4099},[1050,6502,2494],{"class":1508},[1050,6504,6505],{"class":1512},"Collect all custom metrics",[1050,6507,1516],{"class":1508},[1050,6509,6510,6512,6514,6517],{"class":1052,"line":4104},[1050,6511,2294],{"class":1880},[1050,6513,1102],{"class":1101},[1050,6515,6516],{"class":1194},"collect_user_metrics",[1050,6518,2398],{"class":1101},[1050,6520,6521,6523,6525,6528],{"class":1052,"line":4124},[1050,6522,2294],{"class":1880},[1050,6524,1102],{"class":1101},[1050,6526,6527],{"class":1194},"collect_model_metrics",[1050,6529,2398],{"class":1101},[1050,6531,6532],{"class":1052,"line":4137},[1050,6533,1075],{"emptyLinePlaceholder":1074},[1050,6535,6536],{"class":1052,"line":4144},[1050,6537,6538],{"class":1056},"# Initialize metrics collector\n",[1050,6540,6541,6544,6546,6548],{"class":1052,"line":4149},[1050,6542,6543],{"class":1067},"metrics_collector ",[1050,6545,1208],{"class":1101},[1050,6547,5997],{"class":1194},[1050,6549,2398],{"class":1101},[1030,6551,6553],{"id":6552},"structured-logging","Structured Logging",[1035,6555,6557],{"id":6556},"advanced-logging-configuration","Advanced Logging Configuration",[1040,6559,6561],{"className":1042,"code":6560,"language":1044,"meta":1045,"style":1045},"# settings/logging.py\nimport os\nimport logging.config\n\n# Structured logging configuration\nLOGGING = {\n    'version': 1,\n    'disable_existing_loggers': False,\n    'formatters': {\n        'verbose': {\n            'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',\n            'style': '{',\n        },\n        'json': {\n            '()': 'myproject.logging.formatters.JSONFormatter',\n        },\n        'structured': {\n            '()': 'myproject.logging.formatters.StructuredFormatter',\n        },\n    },\n    'filters': {\n        'require_debug_false': {\n            '()': 'django.utils.log.RequireDebugFalse',\n        },\n        'require_debug_true': {\n            '()': 'django.utils.log.RequireDebugTrue',\n        },\n        'sensitive_data_filter': {\n            '()': 'myproject.logging.filters.SensitiveDataFilter',\n        },\n    },\n    'handlers': {\n        'console': {\n            'level': 'INFO',\n            'class': 'logging.StreamHandler',\n            'formatter': 'json',\n            'filters': ['sensitive_data_filter'],\n        },\n        'file': {\n            'level': 'INFO',\n            'class': 'logging.handlers.RotatingFileHandler',\n            'filename': '/var/log/django/django.log',\n            'maxBytes': 1024*1024*15,  # 15MB\n            'backupCount': 10,\n            'formatter': 'json',\n            'filters': ['sensitive_data_filter'],\n        },\n        'error_file': {\n            'level': 'ERROR',\n            'class': 'logging.handlers.RotatingFileHandler',\n            'filename': '/var/log/django/error.log',\n            'maxBytes': 1024*1024*15,  # 15MB\n            'backupCount': 10,\n            'formatter': 'json',\n            'filters': ['sensitive_data_filter'],\n        },\n        'security_file': {\n            'level': 'INFO',\n            'class': 'logging.handlers.RotatingFileHandler',\n            'filename': '/var/log/django/security.log',\n            'maxBytes': 1024*1024*15,  # 15MB\n            'backupCount': 10,\n            'formatter': 'json',\n        },\n        'performance_file': {\n            'level': 'INFO',\n            'class': 'logging.handlers.RotatingFileHandler',\n            'filename': '/var/log/django/performance.log',\n            'maxBytes': 1024*1024*15,  # 15MB\n            'backupCount': 10,\n            'formatter': 'json',\n        },\n        'elasticsearch': {\n            'level': 'INFO',\n            'class': 'myproject.logging.handlers.ElasticsearchHandler',\n            'formatter': 'json',\n            'index': 'django-logs',\n        },\n        'syslog': {\n            'level': 'INFO',\n            'class': 'logging.handlers.SysLogHandler',\n            'address': '/dev/log',\n            'formatter': 'structured',\n        },\n    },\n    'root': {\n        'handlers': ['console', 'file'],\n        'level': 'INFO',\n    },\n    'loggers': {\n        'django': {\n            'handlers': ['console', 'file'],\n            'level': 'INFO',\n            'propagate': False,\n        },\n        'django.request': {\n            'handlers': ['error_file', 'elasticsearch'],\n            'level': 'ERROR',\n            'propagate': False,\n        },\n        'django.security': {\n            'handlers': ['security_file', 'elasticsearch'],\n            'level': 'INFO',\n            'propagate': False,\n        },\n        'myproject.performance': {\n            'handlers': ['performance_file'],\n            'level': 'INFO',\n            'propagate': False,\n        },\n        'myproject.business': {\n            'handlers': ['file', 'elasticsearch'],\n            'level': 'INFO',\n            'propagate': False,\n        },\n        'celery': {\n            'handlers': ['file'],\n            'level': 'INFO',\n            'propagate': False,\n        },\n    },\n}\n\n# Environment-specific logging\nif os.environ.get('ENVIRONMENT') == 'development':\n    LOGGING['handlers']['console']['level'] = 'DEBUG'\n    LOGGING['loggers']['django']['level'] = 'DEBUG'\nelif os.environ.get('ENVIRONMENT') == 'production':\n    # Add CloudWatch logging in production\n    LOGGING['handlers']['cloudwatch'] = {\n        'level': 'INFO',\n        'class': 'watchtower.CloudWatchLogsHandler',\n        'log_group': 'django-app',\n        'stream_name': 'production',\n        'formatter': 'json',\n    }\n    LOGGING['root']['handlers'].append('cloudwatch')\n",[1047,6562,6563,6568,6574,6586,6590,6595,6604,6619,6635,6648,6661,6706,6725,6730,6743,6762,6766,6779,6798,6802,6806,6819,6832,6851,6855,6868,6887,6891,6904,6923,6927,6931,6944,6957,6977,6996,7015,7036,7040,7053,7071,7090,7110,7140,7156,7174,7194,7198,7211,7230,7248,7267,7291,7305,7323,7343,7347,7360,7378,7396,7415,7439,7453,7471,7475,7488,7506,7524,7543,7567,7581,7599,7603,7616,7634,7653,7671,7691,7695,7708,7726,7745,7765,7783,7787,7791,7804,7832,7850,7854,7867,7880,7908,7926,7941,7945,7958,7986,8004,8018,8022,8035,8063,8081,8095,8099,8112,8132,8150,8164,8168,8181,8209,8227,8241,8245,8258,8278,8296,8310,8314,8318,8322,8326,8331,8367,8407,8445,8480,8485,8512,8530,8549,8568,8587,8605,8610],{"__ignoreMap":1045},[1050,6564,6565],{"class":1052,"line":1053},[1050,6566,6567],{"class":1056},"# settings/logging.py\n",[1050,6569,6570,6572],{"class":1052,"line":1060},[1050,6571,1064],{"class":1063},[1050,6573,1068],{"class":1067},[1050,6575,6576,6578,6581,6583],{"class":1052,"line":1071},[1050,6577,1064],{"class":1063},[1050,6579,6580],{"class":1067}," logging",[1050,6582,1102],{"class":1101},[1050,6584,6585],{"class":1216},"config\n",[1050,6587,6588],{"class":1052,"line":1078},[1050,6589,1075],{"emptyLinePlaceholder":1074},[1050,6591,6592],{"class":1052,"line":1084},[1050,6593,6594],{"class":1056},"# Structured logging configuration\n",[1050,6596,6597,6600,6602],{"class":1052,"line":1092},[1050,6598,6599],{"class":1880},"LOGGING",[1050,6601,1841],{"class":1101},[1050,6603,1971],{"class":1101},[1050,6605,6606,6608,6610,6612,6614,6617],{"class":1052,"line":1118},[1050,6607,1977],{"class":1228},[1050,6609,2057],{"class":1232},[1050,6611,1229],{"class":1228},[1050,6613,1985],{"class":1101},[1050,6615,6616],{"class":1356}," 1",[1050,6618,1273],{"class":1101},[1050,6620,6621,6623,6626,6628,6630,6633],{"class":1052,"line":1139},[1050,6622,1977],{"class":1228},[1050,6624,6625],{"class":1232},"disable_existing_loggers",[1050,6627,1229],{"class":1228},[1050,6629,1985],{"class":1101},[1050,6631,6632],{"class":1284}," False",[1050,6634,1273],{"class":1101},[1050,6636,6637,6639,6642,6644,6646],{"class":1052,"line":1160},[1050,6638,1977],{"class":1228},[1050,6640,6641],{"class":1232},"formatters",[1050,6643,1229],{"class":1228},[1050,6645,1985],{"class":1101},[1050,6647,1971],{"class":1101},[1050,6649,6650,6652,6655,6657,6659],{"class":1052,"line":1181},[1050,6651,2014],{"class":1228},[1050,6653,6654],{"class":1232},"verbose",[1050,6656,1229],{"class":1228},[1050,6658,1985],{"class":1101},[1050,6660,1971],{"class":1101},[1050,6662,6663,6666,6669,6671,6673,6675,6678,6681,6684,6687,6690,6692,6695,6697,6699,6702,6704],{"class":1052,"line":1186},[1050,6664,6665],{"class":1228},"            '",[1050,6667,6668],{"class":1232},"format",[1050,6670,1229],{"class":1228},[1050,6672,1985],{"class":1101},[1050,6674,1408],{"class":1228},[1050,6676,6677],{"class":4929},"{levelname}",[1050,6679,6680],{"class":4929}," {asctime}",[1050,6682,6683],{"class":4929}," {module}",[1050,6685,6686],{"class":4929}," {process",[1050,6688,6689],{"class":1483},":d",[1050,6691,4938],{"class":4929},[1050,6693,6694],{"class":4929}," {thread",[1050,6696,6689],{"class":1483},[1050,6698,4938],{"class":4929},[1050,6700,6701],{"class":4929}," {message}",[1050,6703,1229],{"class":1228},[1050,6705,1273],{"class":1101},[1050,6707,6708,6710,6713,6715,6717,6719,6721,6723],{"class":1052,"line":1201},[1050,6709,6665],{"class":1228},[1050,6711,6712],{"class":1232},"style",[1050,6714,1229],{"class":1228},[1050,6716,1985],{"class":1101},[1050,6718,1408],{"class":1228},[1050,6720,4930],{"class":1232},[1050,6722,1229],{"class":1228},[1050,6724,1273],{"class":1101},[1050,6726,6727],{"class":1052,"line":1241},[1050,6728,6729],{"class":1101},"        },\n",[1050,6731,6732,6734,6737,6739,6741],{"class":1052,"line":1250},[1050,6733,2014],{"class":1228},[1050,6735,6736],{"class":1232},"json",[1050,6738,1229],{"class":1228},[1050,6740,1985],{"class":1101},[1050,6742,1971],{"class":1101},[1050,6744,6745,6747,6749,6751,6753,6755,6758,6760],{"class":1052,"line":1258},[1050,6746,6665],{"class":1228},[1050,6748,4667],{"class":1232},[1050,6750,1229],{"class":1228},[1050,6752,1985],{"class":1101},[1050,6754,1408],{"class":1228},[1050,6756,6757],{"class":1232},"myproject.logging.formatters.JSONFormatter",[1050,6759,1229],{"class":1228},[1050,6761,1273],{"class":1101},[1050,6763,6764],{"class":1052,"line":1276},[1050,6765,6729],{"class":1101},[1050,6767,6768,6770,6773,6775,6777],{"class":1052,"line":1290},[1050,6769,2014],{"class":1228},[1050,6771,6772],{"class":1232},"structured",[1050,6774,1229],{"class":1228},[1050,6776,1985],{"class":1101},[1050,6778,1971],{"class":1101},[1050,6780,6781,6783,6785,6787,6789,6791,6794,6796],{"class":1052,"line":1302},[1050,6782,6665],{"class":1228},[1050,6784,4667],{"class":1232},[1050,6786,1229],{"class":1228},[1050,6788,1985],{"class":1101},[1050,6790,1408],{"class":1228},[1050,6792,6793],{"class":1232},"myproject.logging.formatters.StructuredFormatter",[1050,6795,1229],{"class":1228},[1050,6797,1273],{"class":1101},[1050,6799,6800],{"class":1052,"line":1308},[1050,6801,6729],{"class":1101},[1050,6803,6804],{"class":1052,"line":1325},[1050,6805,2095],{"class":1101},[1050,6807,6808,6810,6813,6815,6817],{"class":1052,"line":1334},[1050,6809,1977],{"class":1228},[1050,6811,6812],{"class":1232},"filters",[1050,6814,1229],{"class":1228},[1050,6816,1985],{"class":1101},[1050,6818,1971],{"class":1101},[1050,6820,6821,6823,6826,6828,6830],{"class":1052,"line":1342},[1050,6822,2014],{"class":1228},[1050,6824,6825],{"class":1232},"require_debug_false",[1050,6827,1229],{"class":1228},[1050,6829,1985],{"class":1101},[1050,6831,1971],{"class":1101},[1050,6833,6834,6836,6838,6840,6842,6844,6847,6849],{"class":1052,"line":1348},[1050,6835,6665],{"class":1228},[1050,6837,4667],{"class":1232},[1050,6839,1229],{"class":1228},[1050,6841,1985],{"class":1101},[1050,6843,1408],{"class":1228},[1050,6845,6846],{"class":1232},"django.utils.log.RequireDebugFalse",[1050,6848,1229],{"class":1228},[1050,6850,1273],{"class":1101},[1050,6852,6853],{"class":1052,"line":1366},[1050,6854,6729],{"class":1101},[1050,6856,6857,6859,6862,6864,6866],{"class":1052,"line":1379},[1050,6858,2014],{"class":1228},[1050,6860,6861],{"class":1232},"require_debug_true",[1050,6863,1229],{"class":1228},[1050,6865,1985],{"class":1101},[1050,6867,1971],{"class":1101},[1050,6869,6870,6872,6874,6876,6878,6880,6883,6885],{"class":1052,"line":1418},[1050,6871,6665],{"class":1228},[1050,6873,4667],{"class":1232},[1050,6875,1229],{"class":1228},[1050,6877,1985],{"class":1101},[1050,6879,1408],{"class":1228},[1050,6881,6882],{"class":1232},"django.utils.log.RequireDebugTrue",[1050,6884,1229],{"class":1228},[1050,6886,1273],{"class":1101},[1050,6888,6889],{"class":1052,"line":1456},[1050,6890,6729],{"class":1101},[1050,6892,6893,6895,6898,6900,6902],{"class":1052,"line":1469},[1050,6894,2014],{"class":1228},[1050,6896,6897],{"class":1232},"sensitive_data_filter",[1050,6899,1229],{"class":1228},[1050,6901,1985],{"class":1101},[1050,6903,1971],{"class":1101},[1050,6905,6906,6908,6910,6912,6914,6916,6919,6921],{"class":1052,"line":1475},[1050,6907,6665],{"class":1228},[1050,6909,4667],{"class":1232},[1050,6911,1229],{"class":1228},[1050,6913,1985],{"class":1101},[1050,6915,1408],{"class":1228},[1050,6917,6918],{"class":1232},"myproject.logging.filters.SensitiveDataFilter",[1050,6920,1229],{"class":1228},[1050,6922,1273],{"class":1101},[1050,6924,6925],{"class":1052,"line":1480},[1050,6926,6729],{"class":1101},[1050,6928,6929],{"class":1052,"line":1505},[1050,6930,2095],{"class":1101},[1050,6932,6933,6935,6938,6940,6942],{"class":1052,"line":1519},[1050,6934,1977],{"class":1228},[1050,6936,6937],{"class":1232},"handlers",[1050,6939,1229],{"class":1228},[1050,6941,1985],{"class":1101},[1050,6943,1971],{"class":1101},[1050,6945,6946,6948,6951,6953,6955],{"class":1052,"line":1525},[1050,6947,2014],{"class":1228},[1050,6949,6950],{"class":1232},"console",[1050,6952,1229],{"class":1228},[1050,6954,1985],{"class":1101},[1050,6956,1971],{"class":1101},[1050,6958,6959,6961,6964,6966,6968,6970,6973,6975],{"class":1052,"line":1572},[1050,6960,6665],{"class":1228},[1050,6962,6963],{"class":1232},"level",[1050,6965,1229],{"class":1228},[1050,6967,1985],{"class":1101},[1050,6969,1408],{"class":1228},[1050,6971,6972],{"class":1232},"INFO",[1050,6974,1229],{"class":1228},[1050,6976,1273],{"class":1101},[1050,6978,6979,6981,6983,6985,6987,6989,6992,6994],{"class":1052,"line":1611},[1050,6980,6665],{"class":1228},[1050,6982,2253],{"class":1232},[1050,6984,1229],{"class":1228},[1050,6986,1985],{"class":1101},[1050,6988,1408],{"class":1228},[1050,6990,6991],{"class":1232},"logging.StreamHandler",[1050,6993,1229],{"class":1228},[1050,6995,1273],{"class":1101},[1050,6997,6998,7000,7003,7005,7007,7009,7011,7013],{"class":1052,"line":1629},[1050,6999,6665],{"class":1228},[1050,7001,7002],{"class":1232},"formatter",[1050,7004,1229],{"class":1228},[1050,7006,1985],{"class":1101},[1050,7008,1408],{"class":1228},[1050,7010,6736],{"class":1232},[1050,7012,1229],{"class":1228},[1050,7014,1273],{"class":1101},[1050,7016,7017,7019,7021,7023,7025,7027,7029,7031,7033],{"class":1052,"line":1670},[1050,7018,6665],{"class":1228},[1050,7020,6812],{"class":1232},[1050,7022,1229],{"class":1228},[1050,7024,1985],{"class":1101},[1050,7026,1580],{"class":1101},[1050,7028,1229],{"class":1228},[1050,7030,6897],{"class":1232},[1050,7032,1229],{"class":1228},[1050,7034,7035],{"class":1101},"],\n",[1050,7037,7038],{"class":1052,"line":1676},[1050,7039,6729],{"class":1101},[1050,7041,7042,7044,7047,7049,7051],{"class":1052,"line":1682},[1050,7043,2014],{"class":1228},[1050,7045,7046],{"class":1232},"file",[1050,7048,1229],{"class":1228},[1050,7050,1985],{"class":1101},[1050,7052,1971],{"class":1101},[1050,7054,7055,7057,7059,7061,7063,7065,7067,7069],{"class":1052,"line":1720},[1050,7056,6665],{"class":1228},[1050,7058,6963],{"class":1232},[1050,7060,1229],{"class":1228},[1050,7062,1985],{"class":1101},[1050,7064,1408],{"class":1228},[1050,7066,6972],{"class":1232},[1050,7068,1229],{"class":1228},[1050,7070,1273],{"class":1101},[1050,7072,7073,7075,7077,7079,7081,7083,7086,7088],{"class":1052,"line":1766},[1050,7074,6665],{"class":1228},[1050,7076,2253],{"class":1232},[1050,7078,1229],{"class":1228},[1050,7080,1985],{"class":1101},[1050,7082,1408],{"class":1228},[1050,7084,7085],{"class":1232},"logging.handlers.RotatingFileHandler",[1050,7087,1229],{"class":1228},[1050,7089,1273],{"class":1101},[1050,7091,7092,7094,7097,7099,7101,7103,7106,7108],{"class":1052,"line":1781},[1050,7093,6665],{"class":1228},[1050,7095,7096],{"class":1232},"filename",[1050,7098,1229],{"class":1228},[1050,7100,1985],{"class":1101},[1050,7102,1408],{"class":1228},[1050,7104,7105],{"class":1232},"/var/log/django/django.log",[1050,7107,1229],{"class":1228},[1050,7109,1273],{"class":1101},[1050,7111,7112,7114,7117,7119,7121,7124,7127,7130,7132,7135,7137],{"class":1052,"line":1811},[1050,7113,6665],{"class":1228},[1050,7115,7116],{"class":1232},"maxBytes",[1050,7118,1229],{"class":1228},[1050,7120,1985],{"class":1101},[1050,7122,7123],{"class":1356}," 1024",[1050,7125,7126],{"class":1538},"*",[1050,7128,7129],{"class":1356},"1024",[1050,7131,7126],{"class":1538},[1050,7133,7134],{"class":1356},"15",[1050,7136,1360],{"class":1101},[1050,7138,7139],{"class":1056},"  # 15MB\n",[1050,7141,7142,7144,7147,7149,7151,7154],{"class":1052,"line":1852},[1050,7143,6665],{"class":1228},[1050,7145,7146],{"class":1232},"backupCount",[1050,7148,1229],{"class":1228},[1050,7150,1985],{"class":1101},[1050,7152,7153],{"class":1356}," 10",[1050,7155,1273],{"class":1101},[1050,7157,7158,7160,7162,7164,7166,7168,7170,7172],{"class":1052,"line":1857},[1050,7159,6665],{"class":1228},[1050,7161,7002],{"class":1232},[1050,7163,1229],{"class":1228},[1050,7165,1985],{"class":1101},[1050,7167,1408],{"class":1228},[1050,7169,6736],{"class":1232},[1050,7171,1229],{"class":1228},[1050,7173,1273],{"class":1101},[1050,7175,7176,7178,7180,7182,7184,7186,7188,7190,7192],{"class":1052,"line":1866},[1050,7177,6665],{"class":1228},[1050,7179,6812],{"class":1232},[1050,7181,1229],{"class":1228},[1050,7183,1985],{"class":1101},[1050,7185,1580],{"class":1101},[1050,7187,1229],{"class":1228},[1050,7189,6897],{"class":1232},[1050,7191,1229],{"class":1228},[1050,7193,7035],{"class":1101},[1050,7195,7196],{"class":1052,"line":1871},[1050,7197,6729],{"class":1101},[1050,7199,7200,7202,7205,7207,7209],{"class":1052,"line":1877},[1050,7201,2014],{"class":1228},[1050,7203,7204],{"class":1232},"error_file",[1050,7206,1229],{"class":1228},[1050,7208,1985],{"class":1101},[1050,7210,1971],{"class":1101},[1050,7212,7213,7215,7217,7219,7221,7223,7226,7228],{"class":1052,"line":1916},[1050,7214,6665],{"class":1228},[1050,7216,6963],{"class":1232},[1050,7218,1229],{"class":1228},[1050,7220,1985],{"class":1101},[1050,7222,1408],{"class":1228},[1050,7224,7225],{"class":1232},"ERROR",[1050,7227,1229],{"class":1228},[1050,7229,1273],{"class":1101},[1050,7231,7232,7234,7236,7238,7240,7242,7244,7246],{"class":1052,"line":1952},[1050,7233,6665],{"class":1228},[1050,7235,2253],{"class":1232},[1050,7237,1229],{"class":1228},[1050,7239,1985],{"class":1101},[1050,7241,1408],{"class":1228},[1050,7243,7085],{"class":1232},[1050,7245,1229],{"class":1228},[1050,7247,1273],{"class":1101},[1050,7249,7250,7252,7254,7256,7258,7260,7263,7265],{"class":1052,"line":1957},[1050,7251,6665],{"class":1228},[1050,7253,7096],{"class":1232},[1050,7255,1229],{"class":1228},[1050,7257,1985],{"class":1101},[1050,7259,1408],{"class":1228},[1050,7261,7262],{"class":1232},"/var/log/django/error.log",[1050,7264,1229],{"class":1228},[1050,7266,1273],{"class":1101},[1050,7268,7269,7271,7273,7275,7277,7279,7281,7283,7285,7287,7289],{"class":1052,"line":1963},[1050,7270,6665],{"class":1228},[1050,7272,7116],{"class":1232},[1050,7274,1229],{"class":1228},[1050,7276,1985],{"class":1101},[1050,7278,7123],{"class":1356},[1050,7280,7126],{"class":1538},[1050,7282,7129],{"class":1356},[1050,7284,7126],{"class":1538},[1050,7286,7134],{"class":1356},[1050,7288,1360],{"class":1101},[1050,7290,7139],{"class":1056},[1050,7292,7293,7295,7297,7299,7301,7303],{"class":1052,"line":1974},[1050,7294,6665],{"class":1228},[1050,7296,7146],{"class":1232},[1050,7298,1229],{"class":1228},[1050,7300,1985],{"class":1101},[1050,7302,7153],{"class":1356},[1050,7304,1273],{"class":1101},[1050,7306,7307,7309,7311,7313,7315,7317,7319,7321],{"class":1052,"line":1997},[1050,7308,6665],{"class":1228},[1050,7310,7002],{"class":1232},[1050,7312,1229],{"class":1228},[1050,7314,1985],{"class":1101},[1050,7316,1408],{"class":1228},[1050,7318,6736],{"class":1232},[1050,7320,1229],{"class":1228},[1050,7322,1273],{"class":1101},[1050,7324,7325,7327,7329,7331,7333,7335,7337,7339,7341],{"class":1052,"line":2011},[1050,7326,6665],{"class":1228},[1050,7328,6812],{"class":1232},[1050,7330,1229],{"class":1228},[1050,7332,1985],{"class":1101},[1050,7334,1580],{"class":1101},[1050,7336,1229],{"class":1228},[1050,7338,6897],{"class":1232},[1050,7340,1229],{"class":1228},[1050,7342,7035],{"class":1101},[1050,7344,7345],{"class":1052,"line":2052},[1050,7346,6729],{"class":1101},[1050,7348,7349,7351,7354,7356,7358],{"class":1052,"line":2092},[1050,7350,2014],{"class":1228},[1050,7352,7353],{"class":1232},"security_file",[1050,7355,1229],{"class":1228},[1050,7357,1985],{"class":1101},[1050,7359,1971],{"class":1101},[1050,7361,7362,7364,7366,7368,7370,7372,7374,7376],{"class":1052,"line":2098},[1050,7363,6665],{"class":1228},[1050,7365,6963],{"class":1232},[1050,7367,1229],{"class":1228},[1050,7369,1985],{"class":1101},[1050,7371,1408],{"class":1228},[1050,7373,6972],{"class":1232},[1050,7375,1229],{"class":1228},[1050,7377,1273],{"class":1101},[1050,7379,7380,7382,7384,7386,7388,7390,7392,7394],{"class":1052,"line":2104},[1050,7381,6665],{"class":1228},[1050,7383,2253],{"class":1232},[1050,7385,1229],{"class":1228},[1050,7387,1985],{"class":1101},[1050,7389,1408],{"class":1228},[1050,7391,7085],{"class":1232},[1050,7393,1229],{"class":1228},[1050,7395,1273],{"class":1101},[1050,7397,7398,7400,7402,7404,7406,7408,7411,7413],{"class":1052,"line":2109},[1050,7399,6665],{"class":1228},[1050,7401,7096],{"class":1232},[1050,7403,1229],{"class":1228},[1050,7405,1985],{"class":1101},[1050,7407,1408],{"class":1228},[1050,7409,7410],{"class":1232},"/var/log/django/security.log",[1050,7412,1229],{"class":1228},[1050,7414,1273],{"class":1101},[1050,7416,7417,7419,7421,7423,7425,7427,7429,7431,7433,7435,7437],{"class":1052,"line":2115},[1050,7418,6665],{"class":1228},[1050,7420,7116],{"class":1232},[1050,7422,1229],{"class":1228},[1050,7424,1985],{"class":1101},[1050,7426,7123],{"class":1356},[1050,7428,7126],{"class":1538},[1050,7430,7129],{"class":1356},[1050,7432,7126],{"class":1538},[1050,7434,7134],{"class":1356},[1050,7436,1360],{"class":1101},[1050,7438,7139],{"class":1056},[1050,7440,7441,7443,7445,7447,7449,7451],{"class":1052,"line":2126},[1050,7442,6665],{"class":1228},[1050,7444,7146],{"class":1232},[1050,7446,1229],{"class":1228},[1050,7448,1985],{"class":1101},[1050,7450,7153],{"class":1356},[1050,7452,1273],{"class":1101},[1050,7454,7455,7457,7459,7461,7463,7465,7467,7469],{"class":1052,"line":3021},[1050,7456,6665],{"class":1228},[1050,7458,7002],{"class":1232},[1050,7460,1229],{"class":1228},[1050,7462,1985],{"class":1101},[1050,7464,1408],{"class":1228},[1050,7466,6736],{"class":1232},[1050,7468,1229],{"class":1228},[1050,7470,1273],{"class":1101},[1050,7472,7473],{"class":1052,"line":3042},[1050,7474,6729],{"class":1101},[1050,7476,7477,7479,7482,7484,7486],{"class":1052,"line":3047},[1050,7478,2014],{"class":1228},[1050,7480,7481],{"class":1232},"performance_file",[1050,7483,1229],{"class":1228},[1050,7485,1985],{"class":1101},[1050,7487,1971],{"class":1101},[1050,7489,7490,7492,7494,7496,7498,7500,7502,7504],{"class":1052,"line":3053},[1050,7491,6665],{"class":1228},[1050,7493,6963],{"class":1232},[1050,7495,1229],{"class":1228},[1050,7497,1985],{"class":1101},[1050,7499,1408],{"class":1228},[1050,7501,6972],{"class":1232},[1050,7503,1229],{"class":1228},[1050,7505,1273],{"class":1101},[1050,7507,7508,7510,7512,7514,7516,7518,7520,7522],{"class":1052,"line":3064},[1050,7509,6665],{"class":1228},[1050,7511,2253],{"class":1232},[1050,7513,1229],{"class":1228},[1050,7515,1985],{"class":1101},[1050,7517,1408],{"class":1228},[1050,7519,7085],{"class":1232},[1050,7521,1229],{"class":1228},[1050,7523,1273],{"class":1101},[1050,7525,7526,7528,7530,7532,7534,7536,7539,7541],{"class":1052,"line":3089},[1050,7527,6665],{"class":1228},[1050,7529,7096],{"class":1232},[1050,7531,1229],{"class":1228},[1050,7533,1985],{"class":1101},[1050,7535,1408],{"class":1228},[1050,7537,7538],{"class":1232},"/var/log/django/performance.log",[1050,7540,1229],{"class":1228},[1050,7542,1273],{"class":1101},[1050,7544,7545,7547,7549,7551,7553,7555,7557,7559,7561,7563,7565],{"class":1052,"line":3107},[1050,7546,6665],{"class":1228},[1050,7548,7116],{"class":1232},[1050,7550,1229],{"class":1228},[1050,7552,1985],{"class":1101},[1050,7554,7123],{"class":1356},[1050,7556,7126],{"class":1538},[1050,7558,7129],{"class":1356},[1050,7560,7126],{"class":1538},[1050,7562,7134],{"class":1356},[1050,7564,1360],{"class":1101},[1050,7566,7139],{"class":1056},[1050,7568,7569,7571,7573,7575,7577,7579],{"class":1052,"line":3112},[1050,7570,6665],{"class":1228},[1050,7572,7146],{"class":1232},[1050,7574,1229],{"class":1228},[1050,7576,1985],{"class":1101},[1050,7578,7153],{"class":1356},[1050,7580,1273],{"class":1101},[1050,7582,7583,7585,7587,7589,7591,7593,7595,7597],{"class":1052,"line":3122},[1050,7584,6665],{"class":1228},[1050,7586,7002],{"class":1232},[1050,7588,1229],{"class":1228},[1050,7590,1985],{"class":1101},[1050,7592,1408],{"class":1228},[1050,7594,6736],{"class":1232},[1050,7596,1229],{"class":1228},[1050,7598,1273],{"class":1101},[1050,7600,7601],{"class":1052,"line":3157},[1050,7602,6729],{"class":1101},[1050,7604,7605,7607,7610,7612,7614],{"class":1052,"line":3187},[1050,7606,2014],{"class":1228},[1050,7608,7609],{"class":1232},"elasticsearch",[1050,7611,1229],{"class":1228},[1050,7613,1985],{"class":1101},[1050,7615,1971],{"class":1101},[1050,7617,7618,7620,7622,7624,7626,7628,7630,7632],{"class":1052,"line":3227},[1050,7619,6665],{"class":1228},[1050,7621,6963],{"class":1232},[1050,7623,1229],{"class":1228},[1050,7625,1985],{"class":1101},[1050,7627,1408],{"class":1228},[1050,7629,6972],{"class":1232},[1050,7631,1229],{"class":1228},[1050,7633,1273],{"class":1101},[1050,7635,7636,7638,7640,7642,7644,7646,7649,7651],{"class":1052,"line":3262},[1050,7637,6665],{"class":1228},[1050,7639,2253],{"class":1232},[1050,7641,1229],{"class":1228},[1050,7643,1985],{"class":1101},[1050,7645,1408],{"class":1228},[1050,7647,7648],{"class":1232},"myproject.logging.handlers.ElasticsearchHandler",[1050,7650,1229],{"class":1228},[1050,7652,1273],{"class":1101},[1050,7654,7655,7657,7659,7661,7663,7665,7667,7669],{"class":1052,"line":3268},[1050,7656,6665],{"class":1228},[1050,7658,7002],{"class":1232},[1050,7660,1229],{"class":1228},[1050,7662,1985],{"class":1101},[1050,7664,1408],{"class":1228},[1050,7666,6736],{"class":1232},[1050,7668,1229],{"class":1228},[1050,7670,1273],{"class":1101},[1050,7672,7673,7675,7678,7680,7682,7684,7687,7689],{"class":1052,"line":3285},[1050,7674,6665],{"class":1228},[1050,7676,7677],{"class":1232},"index",[1050,7679,1229],{"class":1228},[1050,7681,1985],{"class":1101},[1050,7683,1408],{"class":1228},[1050,7685,7686],{"class":1232},"django-logs",[1050,7688,1229],{"class":1228},[1050,7690,1273],{"class":1101},[1050,7692,7693],{"class":1052,"line":3332},[1050,7694,6729],{"class":1101},[1050,7696,7697,7699,7702,7704,7706],{"class":1052,"line":3365},[1050,7698,2014],{"class":1228},[1050,7700,7701],{"class":1232},"syslog",[1050,7703,1229],{"class":1228},[1050,7705,1985],{"class":1101},[1050,7707,1971],{"class":1101},[1050,7709,7710,7712,7714,7716,7718,7720,7722,7724],{"class":1052,"line":3373},[1050,7711,6665],{"class":1228},[1050,7713,6963],{"class":1232},[1050,7715,1229],{"class":1228},[1050,7717,1985],{"class":1101},[1050,7719,1408],{"class":1228},[1050,7721,6972],{"class":1232},[1050,7723,1229],{"class":1228},[1050,7725,1273],{"class":1101},[1050,7727,7728,7730,7732,7734,7736,7738,7741,7743],{"class":1052,"line":3392},[1050,7729,6665],{"class":1228},[1050,7731,2253],{"class":1232},[1050,7733,1229],{"class":1228},[1050,7735,1985],{"class":1101},[1050,7737,1408],{"class":1228},[1050,7739,7740],{"class":1232},"logging.handlers.SysLogHandler",[1050,7742,1229],{"class":1228},[1050,7744,1273],{"class":1101},[1050,7746,7747,7749,7752,7754,7756,7758,7761,7763],{"class":1052,"line":3410},[1050,7748,6665],{"class":1228},[1050,7750,7751],{"class":1232},"address",[1050,7753,1229],{"class":1228},[1050,7755,1985],{"class":1101},[1050,7757,1408],{"class":1228},[1050,7759,7760],{"class":1232},"/dev/log",[1050,7762,1229],{"class":1228},[1050,7764,1273],{"class":1101},[1050,7766,7767,7769,7771,7773,7775,7777,7779,7781],{"class":1052,"line":3415},[1050,7768,6665],{"class":1228},[1050,7770,7002],{"class":1232},[1050,7772,1229],{"class":1228},[1050,7774,1985],{"class":1101},[1050,7776,1408],{"class":1228},[1050,7778,6772],{"class":1232},[1050,7780,1229],{"class":1228},[1050,7782,1273],{"class":1101},[1050,7784,7785],{"class":1052,"line":3421},[1050,7786,6729],{"class":1101},[1050,7788,7789],{"class":1052,"line":3434},[1050,7790,2095],{"class":1101},[1050,7792,7793,7795,7798,7800,7802],{"class":1052,"line":3472},[1050,7794,1977],{"class":1228},[1050,7796,7797],{"class":1232},"root",[1050,7799,1229],{"class":1228},[1050,7801,1985],{"class":1101},[1050,7803,1971],{"class":1101},[1050,7805,7806,7808,7810,7812,7814,7816,7818,7820,7822,7824,7826,7828,7830],{"class":1052,"line":3499},[1050,7807,2014],{"class":1228},[1050,7809,6937],{"class":1232},[1050,7811,1229],{"class":1228},[1050,7813,1985],{"class":1101},[1050,7815,1580],{"class":1101},[1050,7817,1229],{"class":1228},[1050,7819,6950],{"class":1232},[1050,7821,1229],{"class":1228},[1050,7823,1360],{"class":1101},[1050,7825,1408],{"class":1228},[1050,7827,7046],{"class":1232},[1050,7829,1229],{"class":1228},[1050,7831,7035],{"class":1101},[1050,7833,7834,7836,7838,7840,7842,7844,7846,7848],{"class":1052,"line":3537},[1050,7835,2014],{"class":1228},[1050,7837,6963],{"class":1232},[1050,7839,1229],{"class":1228},[1050,7841,1985],{"class":1101},[1050,7843,1408],{"class":1228},[1050,7845,6972],{"class":1232},[1050,7847,1229],{"class":1228},[1050,7849,1273],{"class":1101},[1050,7851,7852],{"class":1052,"line":3544},[1050,7853,2095],{"class":1101},[1050,7855,7856,7858,7861,7863,7865],{"class":1052,"line":3558},[1050,7857,1977],{"class":1228},[1050,7859,7860],{"class":1232},"loggers",[1050,7862,1229],{"class":1228},[1050,7864,1985],{"class":1101},[1050,7866,1971],{"class":1101},[1050,7868,7869,7871,7874,7876,7878],{"class":1052,"line":3563},[1050,7870,2014],{"class":1228},[1050,7872,7873],{"class":1232},"django",[1050,7875,1229],{"class":1228},[1050,7877,1985],{"class":1101},[1050,7879,1971],{"class":1101},[1050,7881,7882,7884,7886,7888,7890,7892,7894,7896,7898,7900,7902,7904,7906],{"class":1052,"line":3569},[1050,7883,6665],{"class":1228},[1050,7885,6937],{"class":1232},[1050,7887,1229],{"class":1228},[1050,7889,1985],{"class":1101},[1050,7891,1580],{"class":1101},[1050,7893,1229],{"class":1228},[1050,7895,6950],{"class":1232},[1050,7897,1229],{"class":1228},[1050,7899,1360],{"class":1101},[1050,7901,1408],{"class":1228},[1050,7903,7046],{"class":1232},[1050,7905,1229],{"class":1228},[1050,7907,7035],{"class":1101},[1050,7909,7910,7912,7914,7916,7918,7920,7922,7924],{"class":1052,"line":3587},[1050,7911,6665],{"class":1228},[1050,7913,6963],{"class":1232},[1050,7915,1229],{"class":1228},[1050,7917,1985],{"class":1101},[1050,7919,1408],{"class":1228},[1050,7921,6972],{"class":1232},[1050,7923,1229],{"class":1228},[1050,7925,1273],{"class":1101},[1050,7927,7928,7930,7933,7935,7937,7939],{"class":1052,"line":3604},[1050,7929,6665],{"class":1228},[1050,7931,7932],{"class":1232},"propagate",[1050,7934,1229],{"class":1228},[1050,7936,1985],{"class":1101},[1050,7938,6632],{"class":1284},[1050,7940,1273],{"class":1101},[1050,7942,7943],{"class":1052,"line":3629},[1050,7944,6729],{"class":1101},[1050,7946,7947,7949,7952,7954,7956],{"class":1052,"line":3634},[1050,7948,2014],{"class":1228},[1050,7950,7951],{"class":1232},"django.request",[1050,7953,1229],{"class":1228},[1050,7955,1985],{"class":1101},[1050,7957,1971],{"class":1101},[1050,7959,7960,7962,7964,7966,7968,7970,7972,7974,7976,7978,7980,7982,7984],{"class":1052,"line":3642},[1050,7961,6665],{"class":1228},[1050,7963,6937],{"class":1232},[1050,7965,1229],{"class":1228},[1050,7967,1985],{"class":1101},[1050,7969,1580],{"class":1101},[1050,7971,1229],{"class":1228},[1050,7973,7204],{"class":1232},[1050,7975,1229],{"class":1228},[1050,7977,1360],{"class":1101},[1050,7979,1408],{"class":1228},[1050,7981,7609],{"class":1232},[1050,7983,1229],{"class":1228},[1050,7985,7035],{"class":1101},[1050,7987,7988,7990,7992,7994,7996,7998,8000,8002],{"class":1052,"line":3658},[1050,7989,6665],{"class":1228},[1050,7991,6963],{"class":1232},[1050,7993,1229],{"class":1228},[1050,7995,1985],{"class":1101},[1050,7997,1408],{"class":1228},[1050,7999,7225],{"class":1232},[1050,8001,1229],{"class":1228},[1050,8003,1273],{"class":1101},[1050,8005,8006,8008,8010,8012,8014,8016],{"class":1052,"line":3675},[1050,8007,6665],{"class":1228},[1050,8009,7932],{"class":1232},[1050,8011,1229],{"class":1228},[1050,8013,1985],{"class":1101},[1050,8015,6632],{"class":1284},[1050,8017,1273],{"class":1101},[1050,8019,8020],{"class":1052,"line":3689},[1050,8021,6729],{"class":1101},[1050,8023,8024,8026,8029,8031,8033],{"class":1052,"line":3707},[1050,8025,2014],{"class":1228},[1050,8027,8028],{"class":1232},"django.security",[1050,8030,1229],{"class":1228},[1050,8032,1985],{"class":1101},[1050,8034,1971],{"class":1101},[1050,8036,8037,8039,8041,8043,8045,8047,8049,8051,8053,8055,8057,8059,8061],{"class":1052,"line":3724},[1050,8038,6665],{"class":1228},[1050,8040,6937],{"class":1232},[1050,8042,1229],{"class":1228},[1050,8044,1985],{"class":1101},[1050,8046,1580],{"class":1101},[1050,8048,1229],{"class":1228},[1050,8050,7353],{"class":1232},[1050,8052,1229],{"class":1228},[1050,8054,1360],{"class":1101},[1050,8056,1408],{"class":1228},[1050,8058,7609],{"class":1232},[1050,8060,1229],{"class":1228},[1050,8062,7035],{"class":1101},[1050,8064,8065,8067,8069,8071,8073,8075,8077,8079],{"class":1052,"line":3741},[1050,8066,6665],{"class":1228},[1050,8068,6963],{"class":1232},[1050,8070,1229],{"class":1228},[1050,8072,1985],{"class":1101},[1050,8074,1408],{"class":1228},[1050,8076,6972],{"class":1232},[1050,8078,1229],{"class":1228},[1050,8080,1273],{"class":1101},[1050,8082,8083,8085,8087,8089,8091,8093],{"class":1052,"line":3758},[1050,8084,6665],{"class":1228},[1050,8086,7932],{"class":1232},[1050,8088,1229],{"class":1228},[1050,8090,1985],{"class":1101},[1050,8092,6632],{"class":1284},[1050,8094,1273],{"class":1101},[1050,8096,8097],{"class":1052,"line":3775},[1050,8098,6729],{"class":1101},[1050,8100,8101,8103,8106,8108,8110],{"class":1052,"line":3792},[1050,8102,2014],{"class":1228},[1050,8104,8105],{"class":1232},"myproject.performance",[1050,8107,1229],{"class":1228},[1050,8109,1985],{"class":1101},[1050,8111,1971],{"class":1101},[1050,8113,8114,8116,8118,8120,8122,8124,8126,8128,8130],{"class":1052,"line":3798},[1050,8115,6665],{"class":1228},[1050,8117,6937],{"class":1232},[1050,8119,1229],{"class":1228},[1050,8121,1985],{"class":1101},[1050,8123,1580],{"class":1101},[1050,8125,1229],{"class":1228},[1050,8127,7481],{"class":1232},[1050,8129,1229],{"class":1228},[1050,8131,7035],{"class":1101},[1050,8133,8134,8136,8138,8140,8142,8144,8146,8148],{"class":1052,"line":3812},[1050,8135,6665],{"class":1228},[1050,8137,6963],{"class":1232},[1050,8139,1229],{"class":1228},[1050,8141,1985],{"class":1101},[1050,8143,1408],{"class":1228},[1050,8145,6972],{"class":1232},[1050,8147,1229],{"class":1228},[1050,8149,1273],{"class":1101},[1050,8151,8152,8154,8156,8158,8160,8162],{"class":1052,"line":3829},[1050,8153,6665],{"class":1228},[1050,8155,7932],{"class":1232},[1050,8157,1229],{"class":1228},[1050,8159,1985],{"class":1101},[1050,8161,6632],{"class":1284},[1050,8163,1273],{"class":1101},[1050,8165,8166],{"class":1052,"line":3846},[1050,8167,6729],{"class":1101},[1050,8169,8170,8172,8175,8177,8179],{"class":1052,"line":3870},[1050,8171,2014],{"class":1228},[1050,8173,8174],{"class":1232},"myproject.business",[1050,8176,1229],{"class":1228},[1050,8178,1985],{"class":1101},[1050,8180,1971],{"class":1101},[1050,8182,8183,8185,8187,8189,8191,8193,8195,8197,8199,8201,8203,8205,8207],{"class":1052,"line":3875},[1050,8184,6665],{"class":1228},[1050,8186,6937],{"class":1232},[1050,8188,1229],{"class":1228},[1050,8190,1985],{"class":1101},[1050,8192,1580],{"class":1101},[1050,8194,1229],{"class":1228},[1050,8196,7046],{"class":1232},[1050,8198,1229],{"class":1228},[1050,8200,1360],{"class":1101},[1050,8202,1408],{"class":1228},[1050,8204,7609],{"class":1232},[1050,8206,1229],{"class":1228},[1050,8208,7035],{"class":1101},[1050,8210,8211,8213,8215,8217,8219,8221,8223,8225],{"class":1052,"line":3889},[1050,8212,6665],{"class":1228},[1050,8214,6963],{"class":1232},[1050,8216,1229],{"class":1228},[1050,8218,1985],{"class":1101},[1050,8220,1408],{"class":1228},[1050,8222,6972],{"class":1232},[1050,8224,1229],{"class":1228},[1050,8226,1273],{"class":1101},[1050,8228,8229,8231,8233,8235,8237,8239],{"class":1052,"line":3905},[1050,8230,6665],{"class":1228},[1050,8232,7932],{"class":1232},[1050,8234,1229],{"class":1228},[1050,8236,1985],{"class":1101},[1050,8238,6632],{"class":1284},[1050,8240,1273],{"class":1101},[1050,8242,8243],{"class":1052,"line":3927},[1050,8244,6729],{"class":1101},[1050,8246,8247,8249,8252,8254,8256],{"class":1052,"line":3948},[1050,8248,2014],{"class":1228},[1050,8250,8251],{"class":1232},"celery",[1050,8253,1229],{"class":1228},[1050,8255,1985],{"class":1101},[1050,8257,1971],{"class":1101},[1050,8259,8260,8262,8264,8266,8268,8270,8272,8274,8276],{"class":1052,"line":3988},[1050,8261,6665],{"class":1228},[1050,8263,6937],{"class":1232},[1050,8265,1229],{"class":1228},[1050,8267,1985],{"class":1101},[1050,8269,1580],{"class":1101},[1050,8271,1229],{"class":1228},[1050,8273,7046],{"class":1232},[1050,8275,1229],{"class":1228},[1050,8277,7035],{"class":1101},[1050,8279,8280,8282,8284,8286,8288,8290,8292,8294],{"class":1052,"line":3993},[1050,8281,6665],{"class":1228},[1050,8283,6963],{"class":1232},[1050,8285,1229],{"class":1228},[1050,8287,1985],{"class":1101},[1050,8289,1408],{"class":1228},[1050,8291,6972],{"class":1232},[1050,8293,1229],{"class":1228},[1050,8295,1273],{"class":1101},[1050,8297,8298,8300,8302,8304,8306,8308],{"class":1052,"line":4018},[1050,8299,6665],{"class":1228},[1050,8301,7932],{"class":1232},[1050,8303,1229],{"class":1228},[1050,8305,1985],{"class":1101},[1050,8307,6632],{"class":1284},[1050,8309,1273],{"class":1101},[1050,8311,8312],{"class":1052,"line":4023},[1050,8313,6729],{"class":1101},[1050,8315,8316],{"class":1052,"line":4028},[1050,8317,2095],{"class":1101},[1050,8319,8320],{"class":1052,"line":4046},[1050,8321,2101],{"class":1101},[1050,8323,8324],{"class":1052,"line":4056},[1050,8325,1075],{"emptyLinePlaceholder":1074},[1050,8327,8328],{"class":1052,"line":4069},[1050,8329,8330],{"class":1056},"# Environment-specific logging\n",[1050,8332,8333,8335,8337,8339,8341,8343,8345,8347,8349,8351,8353,8355,8358,8360,8363,8365],{"class":1052,"line":4090},[1050,8334,3309],{"class":1063},[1050,8336,1886],{"class":1067},[1050,8338,1102],{"class":1101},[1050,8340,1217],{"class":1216},[1050,8342,1102],{"class":1101},[1050,8344,1222],{"class":1194},[1050,8346,1225],{"class":1101},[1050,8348,1229],{"class":1228},[1050,8350,1401],{"class":1232},[1050,8352,1229],{"class":1228},[1050,8354,3173],{"class":1101},[1050,8356,8357],{"class":1538}," ==",[1050,8359,1408],{"class":1228},[1050,8361,8362],{"class":1232},"development",[1050,8364,1229],{"class":1228},[1050,8366,1626],{"class":1101},[1050,8368,8369,8372,8374,8376,8378,8380,8382,8384,8386,8388,8390,8392,8394,8396,8398,8400,8402,8405],{"class":1052,"line":4099},[1050,8370,8371],{"class":1880},"    LOGGING",[1050,8373,1560],{"class":1101},[1050,8375,1229],{"class":1228},[1050,8377,6937],{"class":1232},[1050,8379,1229],{"class":1228},[1050,8381,1643],{"class":1101},[1050,8383,1229],{"class":1228},[1050,8385,6950],{"class":1232},[1050,8387,1229],{"class":1228},[1050,8389,1643],{"class":1101},[1050,8391,1229],{"class":1228},[1050,8393,6963],{"class":1232},[1050,8395,1229],{"class":1228},[1050,8397,1838],{"class":1101},[1050,8399,1841],{"class":1101},[1050,8401,1408],{"class":1228},[1050,8403,8404],{"class":1232},"DEBUG",[1050,8406,1849],{"class":1228},[1050,8408,8409,8411,8413,8415,8417,8419,8421,8423,8425,8427,8429,8431,8433,8435,8437,8439,8441,8443],{"class":1052,"line":4104},[1050,8410,8371],{"class":1880},[1050,8412,1560],{"class":1101},[1050,8414,1229],{"class":1228},[1050,8416,7860],{"class":1232},[1050,8418,1229],{"class":1228},[1050,8420,1643],{"class":1101},[1050,8422,1229],{"class":1228},[1050,8424,7873],{"class":1232},[1050,8426,1229],{"class":1228},[1050,8428,1643],{"class":1101},[1050,8430,1229],{"class":1228},[1050,8432,6963],{"class":1232},[1050,8434,1229],{"class":1228},[1050,8436,1838],{"class":1101},[1050,8438,1841],{"class":1101},[1050,8440,1408],{"class":1228},[1050,8442,8404],{"class":1232},[1050,8444,1849],{"class":1228},[1050,8446,8447,8450,8452,8454,8456,8458,8460,8462,8464,8466,8468,8470,8472,8474,8476,8478],{"class":1052,"line":4124},[1050,8448,8449],{"class":1063},"elif",[1050,8451,1886],{"class":1067},[1050,8453,1102],{"class":1101},[1050,8455,1217],{"class":1216},[1050,8457,1102],{"class":1101},[1050,8459,1222],{"class":1194},[1050,8461,1225],{"class":1101},[1050,8463,1229],{"class":1228},[1050,8465,1401],{"class":1232},[1050,8467,1229],{"class":1228},[1050,8469,3173],{"class":1101},[1050,8471,8357],{"class":1538},[1050,8473,1408],{"class":1228},[1050,8475,1411],{"class":1232},[1050,8477,1229],{"class":1228},[1050,8479,1626],{"class":1101},[1050,8481,8482],{"class":1052,"line":4137},[1050,8483,8484],{"class":1056},"    # Add CloudWatch logging in production\n",[1050,8486,8487,8489,8491,8493,8495,8497,8499,8501,8504,8506,8508,8510],{"class":1052,"line":4144},[1050,8488,8371],{"class":1880},[1050,8490,1560],{"class":1101},[1050,8492,1229],{"class":1228},[1050,8494,6937],{"class":1232},[1050,8496,1229],{"class":1228},[1050,8498,1643],{"class":1101},[1050,8500,1229],{"class":1228},[1050,8502,8503],{"class":1232},"cloudwatch",[1050,8505,1229],{"class":1228},[1050,8507,1838],{"class":1101},[1050,8509,1841],{"class":1101},[1050,8511,1971],{"class":1101},[1050,8513,8514,8516,8518,8520,8522,8524,8526,8528],{"class":1052,"line":4149},[1050,8515,2014],{"class":1228},[1050,8517,6963],{"class":1232},[1050,8519,1229],{"class":1228},[1050,8521,1985],{"class":1101},[1050,8523,1408],{"class":1228},[1050,8525,6972],{"class":1232},[1050,8527,1229],{"class":1228},[1050,8529,1273],{"class":1101},[1050,8531,8532,8534,8536,8538,8540,8542,8545,8547],{"class":1052,"line":4181},[1050,8533,2014],{"class":1228},[1050,8535,2253],{"class":1232},[1050,8537,1229],{"class":1228},[1050,8539,1985],{"class":1101},[1050,8541,1408],{"class":1228},[1050,8543,8544],{"class":1232},"watchtower.CloudWatchLogsHandler",[1050,8546,1229],{"class":1228},[1050,8548,1273],{"class":1101},[1050,8550,8551,8553,8556,8558,8560,8562,8564,8566],{"class":1052,"line":4213},[1050,8552,2014],{"class":1228},[1050,8554,8555],{"class":1232},"log_group",[1050,8557,1229],{"class":1228},[1050,8559,1985],{"class":1101},[1050,8561,1408],{"class":1228},[1050,8563,1990],{"class":1232},[1050,8565,1229],{"class":1228},[1050,8567,1273],{"class":1101},[1050,8569,8570,8572,8575,8577,8579,8581,8583,8585],{"class":1052,"line":4218},[1050,8571,2014],{"class":1228},[1050,8573,8574],{"class":1232},"stream_name",[1050,8576,1229],{"class":1228},[1050,8578,1985],{"class":1101},[1050,8580,1408],{"class":1228},[1050,8582,1411],{"class":1232},[1050,8584,1229],{"class":1228},[1050,8586,1273],{"class":1101},[1050,8588,8589,8591,8593,8595,8597,8599,8601,8603],{"class":1052,"line":4225},[1050,8590,2014],{"class":1228},[1050,8592,7002],{"class":1232},[1050,8594,1229],{"class":1228},[1050,8596,1985],{"class":1101},[1050,8598,1408],{"class":1228},[1050,8600,6736],{"class":1232},[1050,8602,1229],{"class":1228},[1050,8604,1273],{"class":1101},[1050,8606,8607],{"class":1052,"line":4240},[1050,8608,8609],{"class":1101},"    }\n",[1050,8611,8612,8614,8616,8618,8620,8622,8624,8626,8628,8630,8632,8634,8636,8638,8640,8642],{"class":1052,"line":4260},[1050,8613,8371],{"class":1880},[1050,8615,1560],{"class":1101},[1050,8617,1229],{"class":1228},[1050,8619,7797],{"class":1232},[1050,8621,1229],{"class":1228},[1050,8623,1643],{"class":1101},[1050,8625,1229],{"class":1228},[1050,8627,6937],{"class":1232},[1050,8629,1229],{"class":1228},[1050,8631,1652],{"class":1101},[1050,8633,2691],{"class":1194},[1050,8635,1225],{"class":1101},[1050,8637,1229],{"class":1228},[1050,8639,8503],{"class":1232},[1050,8641,1229],{"class":1228},[1050,8643,1472],{"class":1101},[1035,8645,8647],{"id":8646},"custom-logging-components","Custom Logging Components",[1040,8649,8651],{"className":1042,"code":8650,"language":1044,"meta":1045,"style":1045},"# logging/formatters.py\nimport json\nimport logging\nimport traceback\nfrom datetime import datetime\nfrom django.utils import timezone\n\nclass JSONFormatter(logging.Formatter):\n    \"\"\"JSON formatter for structured logging\"\"\"\n    \n    def format(self, record):\n        log_entry = {\n            'timestamp': timezone.now().isoformat(),\n            'level': record.levelname,\n            'logger': record.name,\n            'message': record.getMessage(),\n            'module': record.module,\n            'function': record.funcName,\n            'line': record.lineno,\n            'process': record.process,\n            'thread': record.thread,\n        }\n        \n        # Add exception info if present\n        if record.exc_info:\n            log_entry['exception'] = {\n                'type': record.exc_info[0].__name__,\n                'message': str(record.exc_info[1]),\n                'traceback': traceback.format_exception(*record.exc_info),\n            }\n        \n        # Add extra fields from the log record\n        extra_fields = {}\n        for key, value in record.__dict__.items():\n            if key not in ['name', 'msg', 'args', 'levelname', 'levelno', \n                          'pathname', 'filename', 'module', 'lineno', \n                          'funcName', 'created', 'msecs', 'relativeCreated', \n                          'thread', 'threadName', 'processName', 'process',\n                          'getMessage', 'exc_info', 'exc_text', 'stack_info']:\n                extra_fields[key] = value\n        \n        if extra_fields:\n            log_entry['extra'] = extra_fields\n        \n        return json.dumps(log_entry, default=str)\n\nclass StructuredFormatter(logging.Formatter):\n    \"\"\"Structured formatter for syslog\"\"\"\n    \n    def format(self, record):\n        structured_data = []\n        \n        # Add Django-specific structured data\n        if hasattr(record, 'request'):\n            request = record.request\n            structured_data.append(\n                f'[request@django method=\"{request.method}\" '\n                f'path=\"{request.path}\" user=\"{getattr(request, \"user\", \"anonymous\")}\"]'\n            )\n        \n        if hasattr(record, 'response_time'):\n            structured_data.append(\n                f'[performance@django response_time=\"{record.response_time}\"]'\n            )\n        \n        structured_part = ''.join(structured_data)\n        base_message = super().format(record)\n        \n        return f'{base_message} {structured_part}'\n\n# logging/filters.py\nimport re\n\nclass SensitiveDataFilter(logging.Filter):\n    \"\"\"Filter sensitive data from log records\"\"\"\n    \n    SENSITIVE_PATTERNS = [\n        (re.compile(r'password[\"\\']?\\s*[:=]\\s*[\"\\']?([^\"\\'&\\s]+)', re.IGNORECASE), 'password'),\n        (re.compile(r'token[\"\\']?\\s*[:=]\\s*[\"\\']?([^\"\\'&\\s]+)', re.IGNORECASE), 'token'),\n        (re.compile(r'key[\"\\']?\\s*[:=]\\s*[\"\\']?([^\"\\'&\\s]+)', re.IGNORECASE), 'key'),\n        (re.compile(r'secret[\"\\']?\\s*[:=]\\s*[\"\\']?([^\"\\'&\\s]+)', re.IGNORECASE), 'secret'),\n        (re.compile(r'authorization:\\s*([^\\s]+)', re.IGNORECASE), 'authorization'),\n        (re.compile(r'(\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4})'), 'credit_card'),\n        (re.compile(r'(\\d{3}-\\d{2}-\\d{4})'), 'ssn'),\n    ]\n    \n    def filter(self, record):\n        \"\"\"Filter sensitive data from log record\"\"\"\n        if hasattr(record, 'msg'):\n            message = str(record.msg)\n            for pattern, replacement in self.SENSITIVE_PATTERNS:\n                message = pattern.sub(f'[FILTERED_{replacement.upper()}]', message)\n            record.msg = message\n        \n        # Filter extra fields\n        for key, value in record.__dict__.items():\n            if isinstance(value, str):\n                for pattern, replacement in self.SENSITIVE_PATTERNS:\n                    if pattern.search(value):\n                        setattr(record, key, f'[FILTERED_{replacement.upper()}]')\n        \n        return True\n\n# logging/handlers.py\nimport json\nimport requests\nfrom logging import Handler\nfrom elasticsearch import Elasticsearch\n\nclass ElasticsearchHandler(Handler):\n    \"\"\"Custom handler for Elasticsearch logging\"\"\"\n    \n    def __init__(self, index='django-logs', doc_type='log'):\n        super().__init__()\n        self.es = Elasticsearch([\n            {'host': 'localhost', 'port': 9200}\n        ])\n        self.index = index\n        self.doc_type = doc_type\n    \n    def emit(self, record):\n        \"\"\"Emit log record to Elasticsearch\"\"\"\n        try:\n            log_entry = json.loads(self.format(record))\n            self.es.index(\n                index=f\"{self.index}-{record.created:%Y.%m.%d}\",\n                doc_type=self.doc_type,\n                body=log_entry\n            )\n        except Exception:\n            self.handleError(record)\n\nclass SlackHandler(Handler):\n    \"\"\"Custom handler for Slack notifications\"\"\"\n    \n    def __init__(self, webhook_url, channel='#alerts'):\n        super().__init__()\n        self.webhook_url = webhook_url\n        self.channel = channel\n    \n    def emit(self, record):\n        \"\"\"Send log record to Slack\"\"\"\n        if record.levelno \u003C logging.ERROR:\n            return\n        \n        try:\n            message = {\n                'channel': self.channel,\n                'username': 'Django Logger',\n                'text': f'*{record.levelname}*: {record.getMessage()}',\n                'attachments': [\n                    {\n                        'color': 'danger' if record.levelno >= logging.ERROR else 'warning',\n                        'fields': [\n                            {'title': 'Module', 'value': record.module, 'short': True},\n                            {'title': 'Function', 'value': record.funcName, 'short': True},\n                            {'title': 'Line', 'value': str(record.lineno), 'short': True},\n                            {'title': 'Time', 'value': record.asctime, 'short': True},\n                        ]\n                    }\n                ]\n            }\n            \n            if record.exc_info:\n                message['attachments'][0]['fields'].append({\n                    'title': 'Exception',\n                    'value': f'```{self.format(record)}```',\n                    'short': False\n                })\n            \n            requests.post(self.webhook_url, json=message, timeout=5)\n        except Exception:\n            self.handleError(record)\n",[1047,8652,8653,8658,8665,8672,8679,8691,8705,8709,8729,8738,8742,8760,8769,8794,8813,8833,8853,8872,8892,8911,8930,8949,8954,8958,8963,8977,8997,9023,9051,9082,9086,9090,9095,9104,9132,9190,9228,9267,9303,9339,9355,9359,9368,9388,9392,9421,9425,9442,9451,9455,9471,9480,9484,9489,9510,9524,9535,9556,9611,9616,9620,9640,9650,9669,9673,9677,9698,9718,9722,9747,9751,9756,9763,9767,9785,9794,9798,9808,9920,10012,10104,10196,10253,10334,10385,10390,10394,10411,10420,10440,10459,10482,10528,10542,10546,10551,10575,10593,10614,10632,10667,10671,10677,10681,10686,10692,10699,10711,10723,10727,10741,10750,10754,10793,10805,10822,10859,10864,10877,10891,10895,10912,10921,10927,10956,10970,11028,11043,11053,11057,11065,11080,11084,11097,11106,11110,11141,11151,11165,11179,11183,11199,11208,11229,11234,11238,11244,11252,11270,11290,11335,11348,11353,11399,11412,11466,11515,11568,11618,11623,11628,11633,11637,11641,11653,11685,11704,11740,11753,11758,11762,11800,11808],{"__ignoreMap":1045},[1050,8654,8655],{"class":1052,"line":1053},[1050,8656,8657],{"class":1056},"# logging/formatters.py\n",[1050,8659,8660,8662],{"class":1052,"line":1060},[1050,8661,1064],{"class":1063},[1050,8663,8664],{"class":1067}," json\n",[1050,8666,8667,8669],{"class":1052,"line":1071},[1050,8668,1064],{"class":1063},[1050,8670,8671],{"class":1067}," logging\n",[1050,8673,8674,8676],{"class":1052,"line":1078},[1050,8675,1064],{"class":1063},[1050,8677,8678],{"class":1067}," traceback\n",[1050,8680,8681,8683,8686,8688],{"class":1052,"line":1084},[1050,8682,1095],{"class":1063},[1050,8684,8685],{"class":1067}," datetime ",[1050,8687,1064],{"class":1063},[1050,8689,8690],{"class":1067}," datetime\n",[1050,8692,8693,8695,8697,8699,8701,8703],{"class":1052,"line":1092},[1050,8694,1095],{"class":1063},[1050,8696,2190],{"class":1067},[1050,8698,1102],{"class":1101},[1050,8700,2232],{"class":1067},[1050,8702,1064],{"class":1063},[1050,8704,2237],{"class":1067},[1050,8706,8707],{"class":1052,"line":1118},[1050,8708,1075],{"emptyLinePlaceholder":1074},[1050,8710,8711,8713,8716,8718,8722,8724,8727],{"class":1052,"line":1139},[1050,8712,2253],{"class":1483},[1050,8714,8715],{"class":2256}," JSONFormatter",[1050,8717,1225],{"class":1101},[1050,8719,8721],{"class":8720},"sYn-s","logging",[1050,8723,1102],{"class":1101},[1050,8725,8726],{"class":8720},"Formatter",[1050,8728,1502],{"class":1101},[1050,8730,8731,8733,8736],{"class":1052,"line":1160},[1050,8732,1509],{"class":1508},[1050,8734,8735],{"class":1512},"JSON formatter for structured logging",[1050,8737,1516],{"class":1508},[1050,8739,8740],{"class":1052,"line":1181},[1050,8741,1673],{"class":1067},[1050,8743,8744,8746,8749,8751,8753,8755,8758],{"class":1052,"line":1186},[1050,8745,2277],{"class":1483},[1050,8747,8748],{"class":2280}," format",[1050,8750,1225],{"class":1101},[1050,8752,2287],{"class":2286},[1050,8754,1360],{"class":1101},[1050,8756,8757],{"class":1493}," record",[1050,8759,1502],{"class":1101},[1050,8761,8762,8765,8767],{"class":1052,"line":1201},[1050,8763,8764],{"class":1067},"        log_entry ",[1050,8766,1208],{"class":1101},[1050,8768,1971],{"class":1101},[1050,8770,8771,8773,8775,8777,8779,8782,8784,8786,8789,8792],{"class":1052,"line":1241},[1050,8772,6665],{"class":1228},[1050,8774,2550],{"class":1232},[1050,8776,1229],{"class":1228},[1050,8778,1985],{"class":1101},[1050,8780,8781],{"class":1067}," timezone",[1050,8783,1102],{"class":1101},[1050,8785,6178],{"class":1194},[1050,8787,8788],{"class":1101},"().",[1050,8790,8791],{"class":1194},"isoformat",[1050,8793,1331],{"class":1101},[1050,8795,8796,8798,8800,8802,8804,8806,8808,8811],{"class":1052,"line":1250},[1050,8797,6665],{"class":1228},[1050,8799,6963],{"class":1232},[1050,8801,1229],{"class":1228},[1050,8803,1985],{"class":1101},[1050,8805,8757],{"class":1067},[1050,8807,1102],{"class":1101},[1050,8809,8810],{"class":1216},"levelname",[1050,8812,1273],{"class":1101},[1050,8814,8815,8817,8820,8822,8824,8826,8828,8831],{"class":1052,"line":1258},[1050,8816,6665],{"class":1228},[1050,8818,8819],{"class":1232},"logger",[1050,8821,1229],{"class":1228},[1050,8823,1985],{"class":1101},[1050,8825,8757],{"class":1067},[1050,8827,1102],{"class":1101},[1050,8829,8830],{"class":1216},"name",[1050,8832,1273],{"class":1101},[1050,8834,8835,8837,8840,8842,8844,8846,8848,8851],{"class":1052,"line":1276},[1050,8836,6665],{"class":1228},[1050,8838,8839],{"class":1232},"message",[1050,8841,1229],{"class":1228},[1050,8843,1985],{"class":1101},[1050,8845,8757],{"class":1067},[1050,8847,1102],{"class":1101},[1050,8849,8850],{"class":1194},"getMessage",[1050,8852,1331],{"class":1101},[1050,8854,8855,8857,8860,8862,8864,8866,8868,8870],{"class":1052,"line":1290},[1050,8856,6665],{"class":1228},[1050,8858,8859],{"class":1232},"module",[1050,8861,1229],{"class":1228},[1050,8863,1985],{"class":1101},[1050,8865,8757],{"class":1067},[1050,8867,1102],{"class":1101},[1050,8869,8859],{"class":1216},[1050,8871,1273],{"class":1101},[1050,8873,8874,8876,8879,8881,8883,8885,8887,8890],{"class":1052,"line":1302},[1050,8875,6665],{"class":1228},[1050,8877,8878],{"class":1232},"function",[1050,8880,1229],{"class":1228},[1050,8882,1985],{"class":1101},[1050,8884,8757],{"class":1067},[1050,8886,1102],{"class":1101},[1050,8888,8889],{"class":1216},"funcName",[1050,8891,1273],{"class":1101},[1050,8893,8894,8896,8898,8900,8902,8904,8906,8909],{"class":1052,"line":1308},[1050,8895,6665],{"class":1228},[1050,8897,1052],{"class":1232},[1050,8899,1229],{"class":1228},[1050,8901,1985],{"class":1101},[1050,8903,8757],{"class":1067},[1050,8905,1102],{"class":1101},[1050,8907,8908],{"class":1216},"lineno",[1050,8910,1273],{"class":1101},[1050,8912,8913,8915,8918,8920,8922,8924,8926,8928],{"class":1052,"line":1325},[1050,8914,6665],{"class":1228},[1050,8916,8917],{"class":1232},"process",[1050,8919,1229],{"class":1228},[1050,8921,1985],{"class":1101},[1050,8923,8757],{"class":1067},[1050,8925,1102],{"class":1101},[1050,8927,8917],{"class":1216},[1050,8929,1273],{"class":1101},[1050,8931,8932,8934,8937,8939,8941,8943,8945,8947],{"class":1052,"line":1334},[1050,8933,6665],{"class":1228},[1050,8935,8936],{"class":1232},"thread",[1050,8938,1229],{"class":1228},[1050,8940,1985],{"class":1101},[1050,8942,8757],{"class":1067},[1050,8944,1102],{"class":1101},[1050,8946,8936],{"class":1216},[1050,8948,1273],{"class":1101},[1050,8950,8951],{"class":1052,"line":1342},[1050,8952,8953],{"class":1101},"        }\n",[1050,8955,8956],{"class":1052,"line":1348},[1050,8957,4515],{"class":1067},[1050,8959,8960],{"class":1052,"line":1366},[1050,8961,8962],{"class":1056},"        # Add exception info if present\n",[1050,8964,8965,8968,8970,8972,8975],{"class":1052,"line":1379},[1050,8966,8967],{"class":1063},"        if",[1050,8969,8757],{"class":1067},[1050,8971,1102],{"class":1101},[1050,8973,8974],{"class":1216},"exc_info",[1050,8976,1626],{"class":1101},[1050,8978,8979,8982,8984,8986,8989,8991,8993,8995],{"class":1052,"line":1418},[1050,8980,8981],{"class":1067},"            log_entry",[1050,8983,1560],{"class":1101},[1050,8985,1229],{"class":1228},[1050,8987,8988],{"class":1232},"exception",[1050,8990,1229],{"class":1228},[1050,8992,1838],{"class":1101},[1050,8994,1841],{"class":1101},[1050,8996,1971],{"class":1101},[1050,8998,8999,9001,9003,9005,9007,9009,9011,9013,9015,9017,9019,9021],{"class":1052,"line":1456},[1050,9000,2547],{"class":1228},[1050,9002,5867],{"class":1232},[1050,9004,1229],{"class":1228},[1050,9006,1985],{"class":1101},[1050,9008,8757],{"class":1067},[1050,9010,1102],{"class":1101},[1050,9012,8974],{"class":1216},[1050,9014,1560],{"class":1101},[1050,9016,2469],{"class":1356},[1050,9018,1652],{"class":1101},[1050,9020,5879],{"class":5878},[1050,9022,1273],{"class":1101},[1050,9024,9025,9027,9029,9031,9033,9035,9037,9040,9042,9044,9046,9048],{"class":1052,"line":1469},[1050,9026,2547],{"class":1228},[1050,9028,8839],{"class":1232},[1050,9030,1229],{"class":1228},[1050,9032,1985],{"class":1101},[1050,9034,4962],{"class":2308},[1050,9036,1225],{"class":1101},[1050,9038,9039],{"class":1194},"record",[1050,9041,1102],{"class":1101},[1050,9043,8974],{"class":1216},[1050,9045,1560],{"class":1101},[1050,9047,3297],{"class":1356},[1050,9049,9050],{"class":1101},"]),\n",[1050,9052,9053,9055,9058,9060,9062,9065,9067,9070,9072,9074,9076,9078,9080],{"class":1052,"line":1475},[1050,9054,2547],{"class":1228},[1050,9056,9057],{"class":1232},"traceback",[1050,9059,1229],{"class":1228},[1050,9061,1985],{"class":1101},[1050,9063,9064],{"class":1067}," traceback",[1050,9066,1102],{"class":1101},[1050,9068,9069],{"class":1194},"format_exception",[1050,9071,1225],{"class":1101},[1050,9073,7126],{"class":1538},[1050,9075,9039],{"class":1194},[1050,9077,1102],{"class":1101},[1050,9079,8974],{"class":1216},[1050,9081,1238],{"class":1101},[1050,9083,9084],{"class":1052,"line":1480},[1050,9085,2669],{"class":1101},[1050,9087,9088],{"class":1052,"line":1505},[1050,9089,4515],{"class":1067},[1050,9091,9092],{"class":1052,"line":1519},[1050,9093,9094],{"class":1056},"        # Add extra fields from the log record\n",[1050,9096,9097,9100,9102],{"class":1052,"line":1525},[1050,9098,9099],{"class":1067},"        extra_fields ",[1050,9101,1208],{"class":1101},[1050,9103,6071],{"class":1101},[1050,9105,9106,9108,9111,9113,9116,9118,9120,9122,9125,9127,9130],{"class":1052,"line":1572},[1050,9107,1614],{"class":1063},[1050,9109,9110],{"class":1067}," key",[1050,9112,1360],{"class":1101},[1050,9114,9115],{"class":1067}," value ",[1050,9117,1620],{"class":1063},[1050,9119,8757],{"class":1067},[1050,9121,1102],{"class":1101},[1050,9123,9124],{"class":5878},"__dict__",[1050,9126,1102],{"class":1101},[1050,9128,9129],{"class":1194},"items",[1050,9131,3086],{"class":1101},[1050,9133,9134,9136,9139,9141,9143,9145,9147,9149,9151,9153,9155,9158,9160,9162,9164,9167,9169,9171,9173,9175,9177,9179,9181,9184,9186,9188],{"class":1052,"line":1611},[1050,9135,1784],{"class":1063},[1050,9137,9138],{"class":1067}," key ",[1050,9140,4077],{"class":1538},[1050,9142,1539],{"class":1538},[1050,9144,1580],{"class":1101},[1050,9146,1229],{"class":1228},[1050,9148,8830],{"class":1232},[1050,9150,1229],{"class":1228},[1050,9152,1360],{"class":1101},[1050,9154,1408],{"class":1228},[1050,9156,9157],{"class":1232},"msg",[1050,9159,1229],{"class":1228},[1050,9161,1360],{"class":1101},[1050,9163,1408],{"class":1228},[1050,9165,9166],{"class":1232},"args",[1050,9168,1229],{"class":1228},[1050,9170,1360],{"class":1101},[1050,9172,1408],{"class":1228},[1050,9174,8810],{"class":1232},[1050,9176,1229],{"class":1228},[1050,9178,1360],{"class":1101},[1050,9180,1408],{"class":1228},[1050,9182,9183],{"class":1232},"levelno",[1050,9185,1229],{"class":1228},[1050,9187,1360],{"class":1101},[1050,9189,2459],{"class":1067},[1050,9191,9192,9195,9198,9200,9202,9204,9206,9208,9210,9212,9214,9216,9218,9220,9222,9224,9226],{"class":1052,"line":1629},[1050,9193,9194],{"class":1228},"                          '",[1050,9196,9197],{"class":1232},"pathname",[1050,9199,1229],{"class":1228},[1050,9201,1360],{"class":1101},[1050,9203,1408],{"class":1228},[1050,9205,7096],{"class":1232},[1050,9207,1229],{"class":1228},[1050,9209,1360],{"class":1101},[1050,9211,1408],{"class":1228},[1050,9213,8859],{"class":1232},[1050,9215,1229],{"class":1228},[1050,9217,1360],{"class":1101},[1050,9219,1408],{"class":1228},[1050,9221,8908],{"class":1232},[1050,9223,1229],{"class":1228},[1050,9225,1360],{"class":1101},[1050,9227,2459],{"class":1067},[1050,9229,9230,9232,9234,9236,9238,9240,9243,9245,9247,9249,9252,9254,9256,9258,9261,9263,9265],{"class":1052,"line":1670},[1050,9231,9194],{"class":1228},[1050,9233,8889],{"class":1232},[1050,9235,1229],{"class":1228},[1050,9237,1360],{"class":1101},[1050,9239,1408],{"class":1228},[1050,9241,9242],{"class":1232},"created",[1050,9244,1229],{"class":1228},[1050,9246,1360],{"class":1101},[1050,9248,1408],{"class":1228},[1050,9250,9251],{"class":1232},"msecs",[1050,9253,1229],{"class":1228},[1050,9255,1360],{"class":1101},[1050,9257,1408],{"class":1228},[1050,9259,9260],{"class":1232},"relativeCreated",[1050,9262,1229],{"class":1228},[1050,9264,1360],{"class":1101},[1050,9266,2459],{"class":1067},[1050,9268,9269,9271,9273,9275,9277,9279,9282,9284,9286,9288,9291,9293,9295,9297,9299,9301],{"class":1052,"line":1676},[1050,9270,9194],{"class":1228},[1050,9272,8936],{"class":1232},[1050,9274,1229],{"class":1228},[1050,9276,1360],{"class":1101},[1050,9278,1408],{"class":1228},[1050,9280,9281],{"class":1232},"threadName",[1050,9283,1229],{"class":1228},[1050,9285,1360],{"class":1101},[1050,9287,1408],{"class":1228},[1050,9289,9290],{"class":1232},"processName",[1050,9292,1229],{"class":1228},[1050,9294,1360],{"class":1101},[1050,9296,1408],{"class":1228},[1050,9298,8917],{"class":1232},[1050,9300,1229],{"class":1228},[1050,9302,1273],{"class":1101},[1050,9304,9305,9307,9309,9311,9313,9315,9317,9319,9321,9323,9326,9328,9330,9332,9335,9337],{"class":1052,"line":1682},[1050,9306,9194],{"class":1228},[1050,9308,8850],{"class":1232},[1050,9310,1229],{"class":1228},[1050,9312,1360],{"class":1101},[1050,9314,1408],{"class":1228},[1050,9316,8974],{"class":1232},[1050,9318,1229],{"class":1228},[1050,9320,1360],{"class":1101},[1050,9322,1408],{"class":1228},[1050,9324,9325],{"class":1232},"exc_text",[1050,9327,1229],{"class":1228},[1050,9329,1360],{"class":1101},[1050,9331,1408],{"class":1228},[1050,9333,9334],{"class":1232},"stack_info",[1050,9336,1229],{"class":1228},[1050,9338,1569],{"class":1101},[1050,9340,9341,9344,9346,9348,9350,9352],{"class":1052,"line":1720},[1050,9342,9343],{"class":1067},"                extra_fields",[1050,9345,1560],{"class":1101},[1050,9347,1759],{"class":1067},[1050,9349,1838],{"class":1101},[1050,9351,1841],{"class":1101},[1050,9353,9354],{"class":1067}," value\n",[1050,9356,9357],{"class":1052,"line":1766},[1050,9358,4515],{"class":1067},[1050,9360,9361,9363,9366],{"class":1052,"line":1781},[1050,9362,8967],{"class":1063},[1050,9364,9365],{"class":1067}," extra_fields",[1050,9367,1626],{"class":1101},[1050,9369,9370,9372,9374,9376,9379,9381,9383,9385],{"class":1052,"line":1811},[1050,9371,8981],{"class":1067},[1050,9373,1560],{"class":1101},[1050,9375,1229],{"class":1228},[1050,9377,9378],{"class":1232},"extra",[1050,9380,1229],{"class":1228},[1050,9382,1838],{"class":1101},[1050,9384,1841],{"class":1101},[1050,9386,9387],{"class":1067}," extra_fields\n",[1050,9389,9390],{"class":1052,"line":1852},[1050,9391,4515],{"class":1067},[1050,9393,9394,9396,9399,9401,9404,9406,9409,9411,9414,9416,9419],{"class":1052,"line":1857},[1050,9395,4979],{"class":1063},[1050,9397,9398],{"class":1067}," json",[1050,9400,1102],{"class":1101},[1050,9402,9403],{"class":1194},"dumps",[1050,9405,1225],{"class":1101},[1050,9407,9408],{"class":1194},"log_entry",[1050,9410,1360],{"class":1101},[1050,9412,9413],{"class":1204}," default",[1050,9415,1208],{"class":1101},[1050,9417,9418],{"class":2308},"str",[1050,9420,1472],{"class":1101},[1050,9422,9423],{"class":1052,"line":1866},[1050,9424,1075],{"emptyLinePlaceholder":1074},[1050,9426,9427,9429,9432,9434,9436,9438,9440],{"class":1052,"line":1871},[1050,9428,2253],{"class":1483},[1050,9430,9431],{"class":2256}," StructuredFormatter",[1050,9433,1225],{"class":1101},[1050,9435,8721],{"class":8720},[1050,9437,1102],{"class":1101},[1050,9439,8726],{"class":8720},[1050,9441,1502],{"class":1101},[1050,9443,9444,9446,9449],{"class":1052,"line":1877},[1050,9445,1509],{"class":1508},[1050,9447,9448],{"class":1512},"Structured formatter for syslog",[1050,9450,1516],{"class":1508},[1050,9452,9453],{"class":1052,"line":1916},[1050,9454,1673],{"class":1067},[1050,9456,9457,9459,9461,9463,9465,9467,9469],{"class":1052,"line":1952},[1050,9458,2277],{"class":1483},[1050,9460,8748],{"class":2280},[1050,9462,1225],{"class":1101},[1050,9464,2287],{"class":2286},[1050,9466,1360],{"class":1101},[1050,9468,8757],{"class":1493},[1050,9470,1502],{"class":1101},[1050,9472,9473,9476,9478],{"class":1052,"line":1957},[1050,9474,9475],{"class":1067},"        structured_data ",[1050,9477,1208],{"class":1101},[1050,9479,3061],{"class":1101},[1050,9481,9482],{"class":1052,"line":1963},[1050,9483,4515],{"class":1067},[1050,9485,9486],{"class":1052,"line":1974},[1050,9487,9488],{"class":1056},"        # Add Django-specific structured data\n",[1050,9490,9491,9493,9496,9498,9500,9502,9504,9506,9508],{"class":1052,"line":1997},[1050,9492,8967],{"class":1063},[1050,9494,9495],{"class":2280}," hasattr",[1050,9497,1225],{"class":1101},[1050,9499,9039],{"class":1194},[1050,9501,1360],{"class":1101},[1050,9503,1408],{"class":1228},[1050,9505,1533],{"class":1232},[1050,9507,1229],{"class":1228},[1050,9509,1502],{"class":1101},[1050,9511,9512,9515,9517,9519,9521],{"class":1052,"line":2011},[1050,9513,9514],{"class":1067},"            request ",[1050,9516,1208],{"class":1101},[1050,9518,8757],{"class":1067},[1050,9520,1102],{"class":1101},[1050,9522,9523],{"class":1216},"request\n",[1050,9525,9526,9529,9531,9533],{"class":1052,"line":2052},[1050,9527,9528],{"class":1067},"            structured_data",[1050,9530,1102],{"class":1101},[1050,9532,2691],{"class":1194},[1050,9534,1198],{"class":1101},[1050,9536,9537,9540,9543,9545,9547,9549,9551,9553],{"class":1052,"line":2092},[1050,9538,9539],{"class":1483},"                f",[1050,9541,9542],{"class":1232},"'[request@django method=\"",[1050,9544,4930],{"class":4929},[1050,9546,1533],{"class":1194},[1050,9548,1102],{"class":1101},[1050,9550,2566],{"class":1216},[1050,9552,4938],{"class":4929},[1050,9554,9555],{"class":1232},"\" '\n",[1050,9557,9558,9560,9563,9565,9567,9569,9571,9573,9576,9578,9581,9583,9585,9587,9590,9593,9595,9597,9599,9602,9604,9606,9608],{"class":1052,"line":2098},[1050,9559,9539],{"class":1483},[1050,9561,9562],{"class":1232},"'path=\"",[1050,9564,4930],{"class":4929},[1050,9566,1533],{"class":1194},[1050,9568,1102],{"class":1101},[1050,9570,1891],{"class":1216},[1050,9572,4938],{"class":4929},[1050,9574,9575],{"class":1232},"\" user=\"",[1050,9577,4930],{"class":4929},[1050,9579,9580],{"class":2280},"getattr",[1050,9582,1225],{"class":1101},[1050,9584,1533],{"class":1194},[1050,9586,1360],{"class":1101},[1050,9588,9589],{"class":1228}," \"",[1050,9591,9592],{"class":1232},"user",[1050,9594,6291],{"class":1228},[1050,9596,1360],{"class":1101},[1050,9598,9589],{"class":1228},[1050,9600,9601],{"class":1232},"anonymous",[1050,9603,6291],{"class":1228},[1050,9605,3173],{"class":1101},[1050,9607,4938],{"class":4929},[1050,9609,9610],{"class":1232},"\"]'\n",[1050,9612,9613],{"class":1052,"line":2104},[1050,9614,9615],{"class":1101},"            )\n",[1050,9617,9618],{"class":1052,"line":2109},[1050,9619,4515],{"class":1067},[1050,9621,9622,9624,9626,9628,9630,9632,9634,9636,9638],{"class":1052,"line":2115},[1050,9623,8967],{"class":1063},[1050,9625,9495],{"class":2280},[1050,9627,1225],{"class":1101},[1050,9629,9039],{"class":1194},[1050,9631,1360],{"class":1101},[1050,9633,1408],{"class":1228},[1050,9635,2610],{"class":1232},[1050,9637,1229],{"class":1228},[1050,9639,1502],{"class":1101},[1050,9641,9642,9644,9646,9648],{"class":1052,"line":2126},[1050,9643,9528],{"class":1067},[1050,9645,1102],{"class":1101},[1050,9647,2691],{"class":1194},[1050,9649,1198],{"class":1101},[1050,9651,9652,9654,9657,9659,9661,9663,9665,9667],{"class":1052,"line":3021},[1050,9653,9539],{"class":1483},[1050,9655,9656],{"class":1232},"'[performance@django response_time=\"",[1050,9658,4930],{"class":4929},[1050,9660,9039],{"class":1194},[1050,9662,1102],{"class":1101},[1050,9664,2610],{"class":1216},[1050,9666,4938],{"class":4929},[1050,9668,9610],{"class":1232},[1050,9670,9671],{"class":1052,"line":3042},[1050,9672,9615],{"class":1101},[1050,9674,9675],{"class":1052,"line":3047},[1050,9676,4515],{"class":1067},[1050,9678,9679,9682,9684,9687,9689,9691,9693,9696],{"class":1052,"line":3053},[1050,9680,9681],{"class":1067},"        structured_part ",[1050,9683,1208],{"class":1101},[1050,9685,9686],{"class":1228}," ''",[1050,9688,1102],{"class":1101},[1050,9690,1896],{"class":1194},[1050,9692,1225],{"class":1101},[1050,9694,9695],{"class":1194},"structured_data",[1050,9697,1472],{"class":1101},[1050,9699,9700,9703,9705,9708,9710,9712,9714,9716],{"class":1052,"line":3064},[1050,9701,9702],{"class":1067},"        base_message ",[1050,9704,1208],{"class":1101},[1050,9706,9707],{"class":2308}," super",[1050,9709,8788],{"class":1101},[1050,9711,6668],{"class":1194},[1050,9713,1225],{"class":1101},[1050,9715,9039],{"class":1194},[1050,9717,1472],{"class":1101},[1050,9719,9720],{"class":1052,"line":3089},[1050,9721,4515],{"class":1067},[1050,9723,9724,9726,9728,9730,9732,9735,9737,9740,9743,9745],{"class":1052,"line":3107},[1050,9725,4979],{"class":1063},[1050,9727,4924],{"class":1483},[1050,9729,1229],{"class":1232},[1050,9731,4930],{"class":4929},[1050,9733,9734],{"class":1067},"base_message",[1050,9736,4938],{"class":4929},[1050,9738,9739],{"class":4929}," {",[1050,9741,9742],{"class":1067},"structured_part",[1050,9744,4938],{"class":4929},[1050,9746,1849],{"class":1232},[1050,9748,9749],{"class":1052,"line":3112},[1050,9750,1075],{"emptyLinePlaceholder":1074},[1050,9752,9753],{"class":1052,"line":3122},[1050,9754,9755],{"class":1056},"# logging/filters.py\n",[1050,9757,9758,9760],{"class":1052,"line":3157},[1050,9759,1064],{"class":1063},[1050,9761,9762],{"class":1067}," re\n",[1050,9764,9765],{"class":1052,"line":3187},[1050,9766,1075],{"emptyLinePlaceholder":1074},[1050,9768,9769,9771,9774,9776,9778,9780,9783],{"class":1052,"line":3227},[1050,9770,2253],{"class":1483},[1050,9772,9773],{"class":2256}," SensitiveDataFilter",[1050,9775,1225],{"class":1101},[1050,9777,8721],{"class":8720},[1050,9779,1102],{"class":1101},[1050,9781,9782],{"class":8720},"Filter",[1050,9784,1502],{"class":1101},[1050,9786,9787,9789,9792],{"class":1052,"line":3262},[1050,9788,1509],{"class":1508},[1050,9790,9791],{"class":1512},"Filter sensitive data from log records",[1050,9793,1516],{"class":1508},[1050,9795,9796],{"class":1052,"line":3268},[1050,9797,1673],{"class":1067},[1050,9799,9800,9803,9805],{"class":1052,"line":3285},[1050,9801,9802],{"class":1880},"    SENSITIVE_PATTERNS",[1050,9804,1841],{"class":1101},[1050,9806,9807],{"class":1101}," [\n",[1050,9809,9810,9813,9816,9818,9821,9823,9825,9827,9830,9833,9836,9840,9842,9846,9850,9852,9854,9857,9859,9861,9863,9865,9867,9869,9871,9873,9875,9877,9880,9882,9884,9887,9889,9891,9894,9896,9898,9900,9903,9905,9909,9912,9914,9916,9918],{"class":1052,"line":3332},[1050,9811,9812],{"class":1101},"        (",[1050,9814,9815],{"class":1067},"re",[1050,9817,1102],{"class":1101},[1050,9819,9820],{"class":1194},"compile",[1050,9822,1225],{"class":1101},[1050,9824,3132],{"class":1483},[1050,9826,1229],{"class":1228},[1050,9828,1732],{"class":9829},"s27EL",[1050,9831,1560],{"class":9832},"sETVe",[1050,9834,6291],{"class":9835},"sz9Cv",[1050,9837,9839],{"class":9838},"sk0MF","\\'",[1050,9841,1838],{"class":9832},[1050,9843,9845],{"class":9844},"sGuSu","?",[1050,9847,9849],{"class":9848},"sRJPX","\\s",[1050,9851,7126],{"class":9844},[1050,9853,1560],{"class":9832},[1050,9855,9856],{"class":9835},":=",[1050,9858,1838],{"class":9832},[1050,9860,9849],{"class":9848},[1050,9862,7126],{"class":9844},[1050,9864,1560],{"class":9832},[1050,9866,6291],{"class":9835},[1050,9868,9839],{"class":9838},[1050,9870,1838],{"class":9832},[1050,9872,9845],{"class":9844},[1050,9874,1225],{"class":1101},[1050,9876,1560],{"class":9832},[1050,9878,9879],{"class":1538},"^",[1050,9881,6291],{"class":9835},[1050,9883,9839],{"class":9838},[1050,9885,9886],{"class":9835},"&",[1050,9888,9849],{"class":9848},[1050,9890,1838],{"class":9832},[1050,9892,9893],{"class":9844},"+",[1050,9895,3173],{"class":1101},[1050,9897,1229],{"class":1228},[1050,9899,1360],{"class":1101},[1050,9901,9902],{"class":1194}," re",[1050,9904,1102],{"class":1101},[1050,9906,9908],{"class":9907},"sFGJz","IGNORECASE",[1050,9910,9911],{"class":1101},"),",[1050,9913,1408],{"class":1228},[1050,9915,1732],{"class":1232},[1050,9917,1229],{"class":1228},[1050,9919,1238],{"class":1101},[1050,9921,9922,9924,9926,9928,9930,9932,9934,9936,9938,9940,9942,9944,9946,9948,9950,9952,9954,9956,9958,9960,9962,9964,9966,9968,9970,9972,9974,9976,9978,9980,9982,9984,9986,9988,9990,9992,9994,9996,9998,10000,10002,10004,10006,10008,10010],{"class":1052,"line":3365},[1050,9923,9812],{"class":1101},[1050,9925,9815],{"class":1067},[1050,9927,1102],{"class":1101},[1050,9929,9820],{"class":1194},[1050,9931,1225],{"class":1101},[1050,9933,3132],{"class":1483},[1050,9935,1229],{"class":1228},[1050,9937,1741],{"class":9829},[1050,9939,1560],{"class":9832},[1050,9941,6291],{"class":9835},[1050,9943,9839],{"class":9838},[1050,9945,1838],{"class":9832},[1050,9947,9845],{"class":9844},[1050,9949,9849],{"class":9848},[1050,9951,7126],{"class":9844},[1050,9953,1560],{"class":9832},[1050,9955,9856],{"class":9835},[1050,9957,1838],{"class":9832},[1050,9959,9849],{"class":9848},[1050,9961,7126],{"class":9844},[1050,9963,1560],{"class":9832},[1050,9965,6291],{"class":9835},[1050,9967,9839],{"class":9838},[1050,9969,1838],{"class":9832},[1050,9971,9845],{"class":9844},[1050,9973,1225],{"class":1101},[1050,9975,1560],{"class":9832},[1050,9977,9879],{"class":1538},[1050,9979,6291],{"class":9835},[1050,9981,9839],{"class":9838},[1050,9983,9886],{"class":9835},[1050,9985,9849],{"class":9848},[1050,9987,1838],{"class":9832},[1050,9989,9893],{"class":9844},[1050,9991,3173],{"class":1101},[1050,9993,1229],{"class":1228},[1050,9995,1360],{"class":1101},[1050,9997,9902],{"class":1194},[1050,9999,1102],{"class":1101},[1050,10001,9908],{"class":9907},[1050,10003,9911],{"class":1101},[1050,10005,1408],{"class":1228},[1050,10007,1741],{"class":1232},[1050,10009,1229],{"class":1228},[1050,10011,1238],{"class":1101},[1050,10013,10014,10016,10018,10020,10022,10024,10026,10028,10030,10032,10034,10036,10038,10040,10042,10044,10046,10048,10050,10052,10054,10056,10058,10060,10062,10064,10066,10068,10070,10072,10074,10076,10078,10080,10082,10084,10086,10088,10090,10092,10094,10096,10098,10100,10102],{"class":1052,"line":3373},[1050,10015,9812],{"class":1101},[1050,10017,9815],{"class":1067},[1050,10019,1102],{"class":1101},[1050,10021,9820],{"class":1194},[1050,10023,1225],{"class":1101},[1050,10025,3132],{"class":1483},[1050,10027,1229],{"class":1228},[1050,10029,1759],{"class":9829},[1050,10031,1560],{"class":9832},[1050,10033,6291],{"class":9835},[1050,10035,9839],{"class":9838},[1050,10037,1838],{"class":9832},[1050,10039,9845],{"class":9844},[1050,10041,9849],{"class":9848},[1050,10043,7126],{"class":9844},[1050,10045,1560],{"class":9832},[1050,10047,9856],{"class":9835},[1050,10049,1838],{"class":9832},[1050,10051,9849],{"class":9848},[1050,10053,7126],{"class":9844},[1050,10055,1560],{"class":9832},[1050,10057,6291],{"class":9835},[1050,10059,9839],{"class":9838},[1050,10061,1838],{"class":9832},[1050,10063,9845],{"class":9844},[1050,10065,1225],{"class":1101},[1050,10067,1560],{"class":9832},[1050,10069,9879],{"class":1538},[1050,10071,6291],{"class":9835},[1050,10073,9839],{"class":9838},[1050,10075,9886],{"class":9835},[1050,10077,9849],{"class":9848},[1050,10079,1838],{"class":9832},[1050,10081,9893],{"class":9844},[1050,10083,3173],{"class":1101},[1050,10085,1229],{"class":1228},[1050,10087,1360],{"class":1101},[1050,10089,9902],{"class":1194},[1050,10091,1102],{"class":1101},[1050,10093,9908],{"class":9907},[1050,10095,9911],{"class":1101},[1050,10097,1408],{"class":1228},[1050,10099,1759],{"class":1232},[1050,10101,1229],{"class":1228},[1050,10103,1238],{"class":1101},[1050,10105,10106,10108,10110,10112,10114,10116,10118,10120,10122,10124,10126,10128,10130,10132,10134,10136,10138,10140,10142,10144,10146,10148,10150,10152,10154,10156,10158,10160,10162,10164,10166,10168,10170,10172,10174,10176,10178,10180,10182,10184,10186,10188,10190,10192,10194],{"class":1052,"line":3392},[1050,10107,9812],{"class":1101},[1050,10109,9815],{"class":1067},[1050,10111,1102],{"class":1101},[1050,10113,9820],{"class":1194},[1050,10115,1225],{"class":1101},[1050,10117,3132],{"class":1483},[1050,10119,1229],{"class":1228},[1050,10121,1750],{"class":9829},[1050,10123,1560],{"class":9832},[1050,10125,6291],{"class":9835},[1050,10127,9839],{"class":9838},[1050,10129,1838],{"class":9832},[1050,10131,9845],{"class":9844},[1050,10133,9849],{"class":9848},[1050,10135,7126],{"class":9844},[1050,10137,1560],{"class":9832},[1050,10139,9856],{"class":9835},[1050,10141,1838],{"class":9832},[1050,10143,9849],{"class":9848},[1050,10145,7126],{"class":9844},[1050,10147,1560],{"class":9832},[1050,10149,6291],{"class":9835},[1050,10151,9839],{"class":9838},[1050,10153,1838],{"class":9832},[1050,10155,9845],{"class":9844},[1050,10157,1225],{"class":1101},[1050,10159,1560],{"class":9832},[1050,10161,9879],{"class":1538},[1050,10163,6291],{"class":9835},[1050,10165,9839],{"class":9838},[1050,10167,9886],{"class":9835},[1050,10169,9849],{"class":9848},[1050,10171,1838],{"class":9832},[1050,10173,9893],{"class":9844},[1050,10175,3173],{"class":1101},[1050,10177,1229],{"class":1228},[1050,10179,1360],{"class":1101},[1050,10181,9902],{"class":1194},[1050,10183,1102],{"class":1101},[1050,10185,9908],{"class":9907},[1050,10187,9911],{"class":1101},[1050,10189,1408],{"class":1228},[1050,10191,1750],{"class":1232},[1050,10193,1229],{"class":1228},[1050,10195,1238],{"class":1101},[1050,10197,10198,10200,10202,10204,10206,10208,10210,10212,10215,10217,10219,10221,10223,10225,10227,10229,10231,10233,10235,10237,10239,10241,10243,10245,10247,10249,10251],{"class":1052,"line":3410},[1050,10199,9812],{"class":1101},[1050,10201,9815],{"class":1067},[1050,10203,1102],{"class":1101},[1050,10205,9820],{"class":1194},[1050,10207,1225],{"class":1101},[1050,10209,3132],{"class":1483},[1050,10211,1229],{"class":1228},[1050,10213,10214],{"class":9829},"authorization:",[1050,10216,9849],{"class":9848},[1050,10218,7126],{"class":9844},[1050,10220,1225],{"class":1101},[1050,10222,1560],{"class":9832},[1050,10224,9879],{"class":1538},[1050,10226,9849],{"class":9848},[1050,10228,1838],{"class":9832},[1050,10230,9893],{"class":9844},[1050,10232,3173],{"class":1101},[1050,10234,1229],{"class":1228},[1050,10236,1360],{"class":1101},[1050,10238,9902],{"class":1194},[1050,10240,1102],{"class":1101},[1050,10242,9908],{"class":9907},[1050,10244,9911],{"class":1101},[1050,10246,1408],{"class":1228},[1050,10248,1585],{"class":1232},[1050,10250,1229],{"class":1228},[1050,10252,1238],{"class":1101},[1050,10254,10255,10257,10259,10261,10263,10265,10267,10269,10271,10274,10277,10279,10281,10283,10285,10287,10289,10291,10293,10295,10297,10299,10301,10303,10305,10307,10309,10311,10313,10315,10317,10319,10321,10323,10325,10327,10330,10332],{"class":1052,"line":3415},[1050,10256,9812],{"class":1101},[1050,10258,9815],{"class":1067},[1050,10260,1102],{"class":1101},[1050,10262,9820],{"class":1194},[1050,10264,1225],{"class":1101},[1050,10266,3132],{"class":1483},[1050,10268,1229],{"class":1228},[1050,10270,1225],{"class":1101},[1050,10272,10273],{"class":9848},"\\d",[1050,10275,10276],{"class":9844},"{4}",[1050,10278,1560],{"class":9832},[1050,10280,3032],{"class":9835},[1050,10282,9849],{"class":9848},[1050,10284,1838],{"class":9832},[1050,10286,9845],{"class":9844},[1050,10288,10273],{"class":9848},[1050,10290,10276],{"class":9844},[1050,10292,1560],{"class":9832},[1050,10294,3032],{"class":9835},[1050,10296,9849],{"class":9848},[1050,10298,1838],{"class":9832},[1050,10300,9845],{"class":9844},[1050,10302,10273],{"class":9848},[1050,10304,10276],{"class":9844},[1050,10306,1560],{"class":9832},[1050,10308,3032],{"class":9835},[1050,10310,9849],{"class":9848},[1050,10312,1838],{"class":9832},[1050,10314,9845],{"class":9844},[1050,10316,10273],{"class":9848},[1050,10318,10276],{"class":9844},[1050,10320,3173],{"class":1101},[1050,10322,1229],{"class":1228},[1050,10324,9911],{"class":1101},[1050,10326,1408],{"class":1228},[1050,10328,10329],{"class":1232},"credit_card",[1050,10331,1229],{"class":1228},[1050,10333,1238],{"class":1101},[1050,10335,10336,10338,10340,10342,10344,10346,10348,10350,10352,10354,10357,10359,10361,10364,10366,10368,10370,10372,10374,10376,10378,10381,10383],{"class":1052,"line":3421},[1050,10337,9812],{"class":1101},[1050,10339,9815],{"class":1067},[1050,10341,1102],{"class":1101},[1050,10343,9820],{"class":1194},[1050,10345,1225],{"class":1101},[1050,10347,3132],{"class":1483},[1050,10349,1229],{"class":1228},[1050,10351,1225],{"class":1101},[1050,10353,10273],{"class":9848},[1050,10355,10356],{"class":9844},"{3}",[1050,10358,3032],{"class":9829},[1050,10360,10273],{"class":9848},[1050,10362,10363],{"class":9844},"{2}",[1050,10365,3032],{"class":9829},[1050,10367,10273],{"class":9848},[1050,10369,10276],{"class":9844},[1050,10371,3173],{"class":1101},[1050,10373,1229],{"class":1228},[1050,10375,9911],{"class":1101},[1050,10377,1408],{"class":1228},[1050,10379,10380],{"class":1232},"ssn",[1050,10382,1229],{"class":1228},[1050,10384,1238],{"class":1101},[1050,10386,10387],{"class":1052,"line":3434},[1050,10388,10389],{"class":1101},"    ]\n",[1050,10391,10392],{"class":1052,"line":3472},[1050,10393,1673],{"class":1067},[1050,10395,10396,10398,10401,10403,10405,10407,10409],{"class":1052,"line":3499},[1050,10397,2277],{"class":1483},[1050,10399,10400],{"class":2280}," filter",[1050,10402,1225],{"class":1101},[1050,10404,2287],{"class":2286},[1050,10406,1360],{"class":1101},[1050,10408,8757],{"class":1493},[1050,10410,1502],{"class":1101},[1050,10412,10413,10415,10418],{"class":1052,"line":3537},[1050,10414,2494],{"class":1508},[1050,10416,10417],{"class":1512},"Filter sensitive data from log record",[1050,10419,1516],{"class":1508},[1050,10421,10422,10424,10426,10428,10430,10432,10434,10436,10438],{"class":1052,"line":3544},[1050,10423,8967],{"class":1063},[1050,10425,9495],{"class":2280},[1050,10427,1225],{"class":1101},[1050,10429,9039],{"class":1194},[1050,10431,1360],{"class":1101},[1050,10433,1408],{"class":1228},[1050,10435,9157],{"class":1232},[1050,10437,1229],{"class":1228},[1050,10439,1502],{"class":1101},[1050,10441,10442,10445,10447,10449,10451,10453,10455,10457],{"class":1052,"line":3558},[1050,10443,10444],{"class":1067},"            message ",[1050,10446,1208],{"class":1101},[1050,10448,4962],{"class":2308},[1050,10450,1225],{"class":1101},[1050,10452,9039],{"class":1194},[1050,10454,1102],{"class":1101},[1050,10456,9157],{"class":1216},[1050,10458,1472],{"class":1101},[1050,10460,10461,10463,10466,10468,10471,10473,10475,10477,10480],{"class":1052,"line":3563},[1050,10462,3067],{"class":1063},[1050,10464,10465],{"class":1067}," pattern",[1050,10467,1360],{"class":1101},[1050,10469,10470],{"class":1067}," replacement ",[1050,10472,1620],{"class":1063},[1050,10474,2507],{"class":1880},[1050,10476,1102],{"class":1101},[1050,10478,10479],{"class":9907},"SENSITIVE_PATTERNS",[1050,10481,1626],{"class":1101},[1050,10483,10484,10487,10489,10491,10493,10496,10498,10501,10504,10506,10509,10511,10514,10516,10518,10521,10523,10526],{"class":1052,"line":3569},[1050,10485,10486],{"class":1067},"                message ",[1050,10488,1208],{"class":1101},[1050,10490,10465],{"class":1067},[1050,10492,1102],{"class":1101},[1050,10494,10495],{"class":1194},"sub",[1050,10497,1225],{"class":1101},[1050,10499,10500],{"class":1483},"f",[1050,10502,10503],{"class":1232},"'[FILTERED_",[1050,10505,4930],{"class":4929},[1050,10507,10508],{"class":1194},"replacement",[1050,10510,1102],{"class":1101},[1050,10512,10513],{"class":1194},"upper",[1050,10515,4667],{"class":1101},[1050,10517,4938],{"class":4929},[1050,10519,10520],{"class":1232},"]'",[1050,10522,1360],{"class":1101},[1050,10524,10525],{"class":1194}," message",[1050,10527,1472],{"class":1101},[1050,10529,10530,10533,10535,10537,10539],{"class":1052,"line":3587},[1050,10531,10532],{"class":1067},"            record",[1050,10534,1102],{"class":1101},[1050,10536,9157],{"class":1216},[1050,10538,1841],{"class":1101},[1050,10540,10541],{"class":1067}," message\n",[1050,10543,10544],{"class":1052,"line":3604},[1050,10545,4515],{"class":1067},[1050,10547,10548],{"class":1052,"line":3629},[1050,10549,10550],{"class":1056},"        # Filter extra fields\n",[1050,10552,10553,10555,10557,10559,10561,10563,10565,10567,10569,10571,10573],{"class":1052,"line":3634},[1050,10554,1614],{"class":1063},[1050,10556,9110],{"class":1067},[1050,10558,1360],{"class":1101},[1050,10560,9115],{"class":1067},[1050,10562,1620],{"class":1063},[1050,10564,8757],{"class":1067},[1050,10566,1102],{"class":1101},[1050,10568,9124],{"class":5878},[1050,10570,1102],{"class":1101},[1050,10572,9129],{"class":1194},[1050,10574,3086],{"class":1101},[1050,10576,10577,10579,10582,10584,10587,10589,10591],{"class":1052,"line":3642},[1050,10578,1784],{"class":1063},[1050,10580,10581],{"class":2280}," isinstance",[1050,10583,1225],{"class":1101},[1050,10585,10586],{"class":1194},"value",[1050,10588,1360],{"class":1101},[1050,10590,4962],{"class":2308},[1050,10592,1502],{"class":1101},[1050,10594,10595,10598,10600,10602,10604,10606,10608,10610,10612],{"class":1052,"line":3658},[1050,10596,10597],{"class":1063},"                for",[1050,10599,10465],{"class":1067},[1050,10601,1360],{"class":1101},[1050,10603,10470],{"class":1067},[1050,10605,1620],{"class":1063},[1050,10607,2507],{"class":1880},[1050,10609,1102],{"class":1101},[1050,10611,10479],{"class":9907},[1050,10613,1626],{"class":1101},[1050,10615,10616,10619,10621,10623,10626,10628,10630],{"class":1052,"line":3675},[1050,10617,10618],{"class":1063},"                    if",[1050,10620,10465],{"class":1067},[1050,10622,1102],{"class":1101},[1050,10624,10625],{"class":1194},"search",[1050,10627,1225],{"class":1101},[1050,10629,10586],{"class":1194},[1050,10631,1502],{"class":1101},[1050,10633,10634,10637,10639,10641,10643,10645,10647,10649,10651,10653,10655,10657,10659,10661,10663,10665],{"class":1052,"line":3689},[1050,10635,10636],{"class":2280},"                        setattr",[1050,10638,1225],{"class":1101},[1050,10640,9039],{"class":1194},[1050,10642,1360],{"class":1101},[1050,10644,9110],{"class":1194},[1050,10646,1360],{"class":1101},[1050,10648,4924],{"class":1483},[1050,10650,10503],{"class":1232},[1050,10652,4930],{"class":4929},[1050,10654,10508],{"class":1194},[1050,10656,1102],{"class":1101},[1050,10658,10513],{"class":1194},[1050,10660,4667],{"class":1101},[1050,10662,4938],{"class":4929},[1050,10664,10520],{"class":1232},[1050,10666,1472],{"class":1101},[1050,10668,10669],{"class":1052,"line":3707},[1050,10670,4515],{"class":1067},[1050,10672,10673,10675],{"class":1052,"line":3724},[1050,10674,4979],{"class":1063},[1050,10676,2123],{"class":1284},[1050,10678,10679],{"class":1052,"line":3741},[1050,10680,1075],{"emptyLinePlaceholder":1074},[1050,10682,10683],{"class":1052,"line":3758},[1050,10684,10685],{"class":1056},"# logging/handlers.py\n",[1050,10687,10688,10690],{"class":1052,"line":3775},[1050,10689,1064],{"class":1063},[1050,10691,8664],{"class":1067},[1050,10693,10694,10696],{"class":1052,"line":3792},[1050,10695,1064],{"class":1063},[1050,10697,10698],{"class":1067}," requests\n",[1050,10700,10701,10703,10706,10708],{"class":1052,"line":3798},[1050,10702,1095],{"class":1063},[1050,10704,10705],{"class":1067}," logging ",[1050,10707,1064],{"class":1063},[1050,10709,10710],{"class":1067}," Handler\n",[1050,10712,10713,10715,10718,10720],{"class":1052,"line":3812},[1050,10714,1095],{"class":1063},[1050,10716,10717],{"class":1067}," elasticsearch ",[1050,10719,1064],{"class":1063},[1050,10721,10722],{"class":1067}," Elasticsearch\n",[1050,10724,10725],{"class":1052,"line":3829},[1050,10726,1075],{"emptyLinePlaceholder":1074},[1050,10728,10729,10731,10734,10736,10739],{"class":1052,"line":3846},[1050,10730,2253],{"class":1483},[1050,10732,10733],{"class":2256}," ElasticsearchHandler",[1050,10735,1225],{"class":1101},[1050,10737,10738],{"class":8720},"Handler",[1050,10740,1502],{"class":1101},[1050,10742,10743,10745,10748],{"class":1052,"line":3870},[1050,10744,1509],{"class":1508},[1050,10746,10747],{"class":1512},"Custom handler for Elasticsearch logging",[1050,10749,1516],{"class":1508},[1050,10751,10752],{"class":1052,"line":3875},[1050,10753,1673],{"class":1067},[1050,10755,10756,10758,10760,10762,10764,10766,10769,10771,10773,10775,10777,10779,10782,10784,10786,10789,10791],{"class":1052,"line":3889},[1050,10757,2277],{"class":1483},[1050,10759,2281],{"class":2280},[1050,10761,1225],{"class":1101},[1050,10763,2287],{"class":2286},[1050,10765,1360],{"class":1101},[1050,10767,10768],{"class":1493}," index",[1050,10770,1208],{"class":1538},[1050,10772,1229],{"class":1228},[1050,10774,7686],{"class":1232},[1050,10776,1229],{"class":1228},[1050,10778,1360],{"class":1101},[1050,10780,10781],{"class":1493}," doc_type",[1050,10783,1208],{"class":1538},[1050,10785,1229],{"class":1228},[1050,10787,10788],{"class":1232},"log",[1050,10790,1229],{"class":1228},[1050,10792,1502],{"class":1101},[1050,10794,10795,10798,10800,10803],{"class":1052,"line":3905},[1050,10796,10797],{"class":2308},"        super",[1050,10799,8788],{"class":1101},[1050,10801,10802],{"class":2280},"__init__",[1050,10804,2398],{"class":1101},[1050,10806,10807,10809,10811,10814,10816,10819],{"class":1052,"line":3927},[1050,10808,2294],{"class":1880},[1050,10810,1102],{"class":1101},[1050,10812,10813],{"class":1216},"es",[1050,10815,1841],{"class":1101},[1050,10817,10818],{"class":1194}," Elasticsearch",[1050,10820,10821],{"class":1101},"([\n",[1050,10823,10824,10827,10829,10832,10834,10836,10838,10841,10843,10845,10847,10850,10852,10854,10857],{"class":1052,"line":3948},[1050,10825,10826],{"class":1101},"            {",[1050,10828,1229],{"class":1228},[1050,10830,10831],{"class":1232},"host",[1050,10833,1229],{"class":1228},[1050,10835,1985],{"class":1101},[1050,10837,1408],{"class":1228},[1050,10839,10840],{"class":1232},"localhost",[1050,10842,1229],{"class":1228},[1050,10844,1360],{"class":1101},[1050,10846,1408],{"class":1228},[1050,10848,10849],{"class":1232},"port",[1050,10851,1229],{"class":1228},[1050,10853,1985],{"class":1101},[1050,10855,10856],{"class":1356}," 9200",[1050,10858,2101],{"class":1101},[1050,10860,10861],{"class":1052,"line":3988},[1050,10862,10863],{"class":1101},"        ])\n",[1050,10865,10866,10868,10870,10872,10874],{"class":1052,"line":3993},[1050,10867,2294],{"class":1880},[1050,10869,1102],{"class":1101},[1050,10871,7677],{"class":1216},[1050,10873,1841],{"class":1101},[1050,10875,10876],{"class":1067}," index\n",[1050,10878,10879,10881,10883,10886,10888],{"class":1052,"line":4018},[1050,10880,2294],{"class":1880},[1050,10882,1102],{"class":1101},[1050,10884,10885],{"class":1216},"doc_type",[1050,10887,1841],{"class":1101},[1050,10889,10890],{"class":1067}," doc_type\n",[1050,10892,10893],{"class":1052,"line":4023},[1050,10894,1673],{"class":1067},[1050,10896,10897,10899,10902,10904,10906,10908,10910],{"class":1052,"line":4028},[1050,10898,2277],{"class":1483},[1050,10900,10901],{"class":1487}," emit",[1050,10903,1225],{"class":1101},[1050,10905,2287],{"class":2286},[1050,10907,1360],{"class":1101},[1050,10909,8757],{"class":1493},[1050,10911,1502],{"class":1101},[1050,10913,10914,10916,10919],{"class":1052,"line":4046},[1050,10915,2494],{"class":1508},[1050,10917,10918],{"class":1512},"Emit log record to Elasticsearch",[1050,10920,1516],{"class":1508},[1050,10922,10923,10925],{"class":1052,"line":4056},[1050,10924,5538],{"class":1063},[1050,10926,1626],{"class":1101},[1050,10928,10929,10932,10934,10936,10938,10941,10943,10945,10947,10949,10951,10953],{"class":1052,"line":4069},[1050,10930,10931],{"class":1067},"            log_entry ",[1050,10933,1208],{"class":1101},[1050,10935,9398],{"class":1067},[1050,10937,1102],{"class":1101},[1050,10939,10940],{"class":1194},"loads",[1050,10942,1225],{"class":1101},[1050,10944,2287],{"class":1880},[1050,10946,1102],{"class":1101},[1050,10948,6668],{"class":1194},[1050,10950,1225],{"class":1101},[1050,10952,9039],{"class":1194},[1050,10954,10955],{"class":1101},"))\n",[1050,10957,10958,10960,10962,10964,10966,10968],{"class":1052,"line":4090},[1050,10959,2678],{"class":1880},[1050,10961,1102],{"class":1101},[1050,10963,10813],{"class":1216},[1050,10965,1102],{"class":1101},[1050,10967,7677],{"class":1194},[1050,10969,1198],{"class":1101},[1050,10971,10972,10975,10977,10979,10981,10983,10985,10987,10989,10991,10993,10995,10997,10999,11001,11003,11006,11009,11011,11013,11015,11017,11019,11022,11024,11026],{"class":1052,"line":4099},[1050,10973,10974],{"class":1204},"                index",[1050,10976,1208],{"class":1101},[1050,10978,10500],{"class":1483},[1050,10980,6291],{"class":1232},[1050,10982,4930],{"class":4929},[1050,10984,2287],{"class":1880},[1050,10986,1102],{"class":1101},[1050,10988,7677],{"class":1216},[1050,10990,4938],{"class":4929},[1050,10992,3032],{"class":1232},[1050,10994,4930],{"class":4929},[1050,10996,9039],{"class":1194},[1050,10998,1102],{"class":1101},[1050,11000,9242],{"class":1216},[1050,11002,1985],{"class":1101},[1050,11004,11005],{"class":1538},"%",[1050,11007,11008],{"class":1194},"Y",[1050,11010,1102],{"class":1101},[1050,11012,11005],{"class":1538},[1050,11014,3444],{"class":1194},[1050,11016,1102],{"class":1101},[1050,11018,11005],{"class":1538},[1050,11020,11021],{"class":1194},"d",[1050,11023,4938],{"class":4929},[1050,11025,6291],{"class":1232},[1050,11027,1273],{"class":1101},[1050,11029,11030,11033,11035,11037,11039,11041],{"class":1052,"line":4104},[1050,11031,11032],{"class":1204},"                doc_type",[1050,11034,1208],{"class":1101},[1050,11036,2287],{"class":1880},[1050,11038,1102],{"class":1101},[1050,11040,10885],{"class":1216},[1050,11042,1273],{"class":1101},[1050,11044,11045,11048,11050],{"class":1052,"line":4124},[1050,11046,11047],{"class":1204},"                body",[1050,11049,1208],{"class":1101},[1050,11051,11052],{"class":1194},"log_entry\n",[1050,11054,11055],{"class":1052,"line":4137},[1050,11056,9615],{"class":1101},[1050,11058,11059,11061,11063],{"class":1052,"line":4144},[1050,11060,5835],{"class":1063},[1050,11062,5838],{"class":2308},[1050,11064,1626],{"class":1101},[1050,11066,11067,11069,11071,11074,11076,11078],{"class":1052,"line":4149},[1050,11068,2678],{"class":1880},[1050,11070,1102],{"class":1101},[1050,11072,11073],{"class":1194},"handleError",[1050,11075,1225],{"class":1101},[1050,11077,9039],{"class":1194},[1050,11079,1472],{"class":1101},[1050,11081,11082],{"class":1052,"line":4181},[1050,11083,1075],{"emptyLinePlaceholder":1074},[1050,11085,11086,11088,11091,11093,11095],{"class":1052,"line":4213},[1050,11087,2253],{"class":1483},[1050,11089,11090],{"class":2256}," SlackHandler",[1050,11092,1225],{"class":1101},[1050,11094,10738],{"class":8720},[1050,11096,1502],{"class":1101},[1050,11098,11099,11101,11104],{"class":1052,"line":4218},[1050,11100,1509],{"class":1508},[1050,11102,11103],{"class":1512},"Custom handler for Slack notifications",[1050,11105,1516],{"class":1508},[1050,11107,11108],{"class":1052,"line":4225},[1050,11109,1673],{"class":1067},[1050,11111,11112,11114,11116,11118,11120,11122,11125,11127,11130,11132,11134,11137,11139],{"class":1052,"line":4240},[1050,11113,2277],{"class":1483},[1050,11115,2281],{"class":2280},[1050,11117,1225],{"class":1101},[1050,11119,2287],{"class":2286},[1050,11121,1360],{"class":1101},[1050,11123,11124],{"class":1493}," webhook_url",[1050,11126,1360],{"class":1101},[1050,11128,11129],{"class":1493}," channel",[1050,11131,1208],{"class":1538},[1050,11133,1229],{"class":1228},[1050,11135,11136],{"class":1232},"#alerts",[1050,11138,1229],{"class":1228},[1050,11140,1502],{"class":1101},[1050,11142,11143,11145,11147,11149],{"class":1052,"line":4260},[1050,11144,10797],{"class":2308},[1050,11146,8788],{"class":1101},[1050,11148,10802],{"class":2280},[1050,11150,2398],{"class":1101},[1050,11152,11153,11155,11157,11160,11162],{"class":1052,"line":4289},[1050,11154,2294],{"class":1880},[1050,11156,1102],{"class":1101},[1050,11158,11159],{"class":1216},"webhook_url",[1050,11161,1841],{"class":1101},[1050,11163,11164],{"class":1067}," webhook_url\n",[1050,11166,11167,11169,11171,11174,11176],{"class":1052,"line":4310},[1050,11168,2294],{"class":1880},[1050,11170,1102],{"class":1101},[1050,11172,11173],{"class":1216},"channel",[1050,11175,1841],{"class":1101},[1050,11177,11178],{"class":1067}," channel\n",[1050,11180,11181],{"class":1052,"line":4331},[1050,11182,1673],{"class":1067},[1050,11184,11185,11187,11189,11191,11193,11195,11197],{"class":1052,"line":4361},[1050,11186,2277],{"class":1483},[1050,11188,10901],{"class":1487},[1050,11190,1225],{"class":1101},[1050,11192,2287],{"class":2286},[1050,11194,1360],{"class":1101},[1050,11196,8757],{"class":1493},[1050,11198,1502],{"class":1101},[1050,11200,11201,11203,11206],{"class":1052,"line":4381},[1050,11202,2494],{"class":1508},[1050,11204,11205],{"class":1512},"Send log record to Slack",[1050,11207,1516],{"class":1508},[1050,11209,11210,11212,11214,11216,11218,11221,11223,11225,11227],{"class":1052,"line":4386},[1050,11211,8967],{"class":1063},[1050,11213,8757],{"class":1067},[1050,11215,1102],{"class":1101},[1050,11217,9183],{"class":1216},[1050,11219,11220],{"class":1538}," \u003C",[1050,11222,6580],{"class":1067},[1050,11224,1102],{"class":1101},[1050,11226,7225],{"class":9907},[1050,11228,1626],{"class":1101},[1050,11230,11231],{"class":1052,"line":4391},[1050,11232,11233],{"class":1063},"            return\n",[1050,11235,11236],{"class":1052,"line":4397},[1050,11237,4515],{"class":1067},[1050,11239,11240,11242],{"class":1052,"line":4409},[1050,11241,5538],{"class":1063},[1050,11243,1626],{"class":1101},[1050,11245,11246,11248,11250],{"class":1052,"line":4414},[1050,11247,10444],{"class":1067},[1050,11249,1208],{"class":1101},[1050,11251,1971],{"class":1101},[1050,11253,11254,11256,11258,11260,11262,11264,11266,11268],{"class":1052,"line":4424},[1050,11255,2547],{"class":1228},[1050,11257,11173],{"class":1232},[1050,11259,1229],{"class":1228},[1050,11261,1985],{"class":1101},[1050,11263,2507],{"class":1880},[1050,11265,1102],{"class":1101},[1050,11267,11173],{"class":1216},[1050,11269,1273],{"class":1101},[1050,11271,11272,11274,11277,11279,11281,11283,11286,11288],{"class":1052,"line":4434},[1050,11273,2547],{"class":1228},[1050,11275,11276],{"class":1232},"username",[1050,11278,1229],{"class":1228},[1050,11280,1985],{"class":1101},[1050,11282,1408],{"class":1228},[1050,11284,11285],{"class":1232},"Django Logger",[1050,11287,1229],{"class":1228},[1050,11289,1273],{"class":1101},[1050,11291,11292,11294,11297,11299,11301,11303,11306,11308,11310,11312,11314,11316,11319,11321,11323,11325,11327,11329,11331,11333],{"class":1052,"line":4439},[1050,11293,2547],{"class":1228},[1050,11295,11296],{"class":1232},"text",[1050,11298,1229],{"class":1228},[1050,11300,1985],{"class":1101},[1050,11302,4924],{"class":1483},[1050,11304,11305],{"class":1232},"'*",[1050,11307,4930],{"class":4929},[1050,11309,9039],{"class":1067},[1050,11311,1102],{"class":1101},[1050,11313,8810],{"class":1216},[1050,11315,4938],{"class":4929},[1050,11317,11318],{"class":1232},"*: ",[1050,11320,4930],{"class":4929},[1050,11322,9039],{"class":1067},[1050,11324,1102],{"class":1101},[1050,11326,8850],{"class":1194},[1050,11328,4667],{"class":1101},[1050,11330,4938],{"class":4929},[1050,11332,1229],{"class":1232},[1050,11334,1273],{"class":1101},[1050,11336,11337,11339,11342,11344,11346],{"class":1052,"line":4457},[1050,11338,2547],{"class":1228},[1050,11340,11341],{"class":1232},"attachments",[1050,11343,1229],{"class":1228},[1050,11345,1985],{"class":1101},[1050,11347,9807],{"class":1101},[1050,11349,11350],{"class":1052,"line":4472},[1050,11351,11352],{"class":1101},"                    {\n",[1050,11354,11355,11358,11361,11363,11365,11367,11370,11372,11374,11376,11378,11380,11382,11384,11386,11388,11390,11392,11395,11397],{"class":1052,"line":4477},[1050,11356,11357],{"class":1228},"                        '",[1050,11359,11360],{"class":1232},"color",[1050,11362,1229],{"class":1228},[1050,11364,1985],{"class":1101},[1050,11366,1408],{"class":1228},[1050,11368,11369],{"class":1232},"danger",[1050,11371,1229],{"class":1228},[1050,11373,5617],{"class":1063},[1050,11375,8757],{"class":1067},[1050,11377,1102],{"class":1101},[1050,11379,9183],{"class":1216},[1050,11381,3325],{"class":1538},[1050,11383,6580],{"class":1067},[1050,11385,1102],{"class":1101},[1050,11387,7225],{"class":9907},[1050,11389,3359],{"class":1063},[1050,11391,1408],{"class":1228},[1050,11393,11394],{"class":1232},"warning",[1050,11396,1229],{"class":1228},[1050,11398,1273],{"class":1101},[1050,11400,11401,11403,11406,11408,11410],{"class":1052,"line":4496},[1050,11402,11357],{"class":1228},[1050,11404,11405],{"class":1232},"fields",[1050,11407,1229],{"class":1228},[1050,11409,1985],{"class":1101},[1050,11411,9807],{"class":1101},[1050,11413,11414,11417,11419,11422,11424,11426,11428,11431,11433,11435,11437,11439,11441,11443,11445,11447,11449,11451,11453,11456,11458,11460,11463],{"class":1052,"line":4512},[1050,11415,11416],{"class":1101},"                            {",[1050,11418,1229],{"class":1228},[1050,11420,11421],{"class":1232},"title",[1050,11423,1229],{"class":1228},[1050,11425,1985],{"class":1101},[1050,11427,1408],{"class":1228},[1050,11429,11430],{"class":1232},"Module",[1050,11432,1229],{"class":1228},[1050,11434,1360],{"class":1101},[1050,11436,1408],{"class":1228},[1050,11438,10586],{"class":1232},[1050,11440,1229],{"class":1228},[1050,11442,1985],{"class":1101},[1050,11444,8757],{"class":1067},[1050,11446,1102],{"class":1101},[1050,11448,8859],{"class":1216},[1050,11450,1360],{"class":1101},[1050,11452,1408],{"class":1228},[1050,11454,11455],{"class":1232},"short",[1050,11457,1229],{"class":1228},[1050,11459,1985],{"class":1101},[1050,11461,11462],{"class":1284}," True",[1050,11464,11465],{"class":1101},"},\n",[1050,11467,11468,11470,11472,11474,11476,11478,11480,11483,11485,11487,11489,11491,11493,11495,11497,11499,11501,11503,11505,11507,11509,11511,11513],{"class":1052,"line":4518},[1050,11469,11416],{"class":1101},[1050,11471,1229],{"class":1228},[1050,11473,11421],{"class":1232},[1050,11475,1229],{"class":1228},[1050,11477,1985],{"class":1101},[1050,11479,1408],{"class":1228},[1050,11481,11482],{"class":1232},"Function",[1050,11484,1229],{"class":1228},[1050,11486,1360],{"class":1101},[1050,11488,1408],{"class":1228},[1050,11490,10586],{"class":1232},[1050,11492,1229],{"class":1228},[1050,11494,1985],{"class":1101},[1050,11496,8757],{"class":1067},[1050,11498,1102],{"class":1101},[1050,11500,8889],{"class":1216},[1050,11502,1360],{"class":1101},[1050,11504,1408],{"class":1228},[1050,11506,11455],{"class":1232},[1050,11508,1229],{"class":1228},[1050,11510,1985],{"class":1101},[1050,11512,11462],{"class":1284},[1050,11514,11465],{"class":1101},[1050,11516,11517,11519,11521,11523,11525,11527,11529,11532,11534,11536,11538,11540,11542,11544,11546,11548,11550,11552,11554,11556,11558,11560,11562,11564,11566],{"class":1052,"line":4524},[1050,11518,11416],{"class":1101},[1050,11520,1229],{"class":1228},[1050,11522,11421],{"class":1232},[1050,11524,1229],{"class":1228},[1050,11526,1985],{"class":1101},[1050,11528,1408],{"class":1228},[1050,11530,11531],{"class":1232},"Line",[1050,11533,1229],{"class":1228},[1050,11535,1360],{"class":1101},[1050,11537,1408],{"class":1228},[1050,11539,10586],{"class":1232},[1050,11541,1229],{"class":1228},[1050,11543,1985],{"class":1101},[1050,11545,4962],{"class":2308},[1050,11547,1225],{"class":1101},[1050,11549,9039],{"class":1194},[1050,11551,1102],{"class":1101},[1050,11553,8908],{"class":1216},[1050,11555,9911],{"class":1101},[1050,11557,1408],{"class":1228},[1050,11559,11455],{"class":1232},[1050,11561,1229],{"class":1228},[1050,11563,1985],{"class":1101},[1050,11565,11462],{"class":1284},[1050,11567,11465],{"class":1101},[1050,11569,11570,11572,11574,11576,11578,11580,11582,11585,11587,11589,11591,11593,11595,11597,11599,11601,11604,11606,11608,11610,11612,11614,11616],{"class":1052,"line":4546},[1050,11571,11416],{"class":1101},[1050,11573,1229],{"class":1228},[1050,11575,11421],{"class":1232},[1050,11577,1229],{"class":1228},[1050,11579,1985],{"class":1101},[1050,11581,1408],{"class":1228},[1050,11583,11584],{"class":1232},"Time",[1050,11586,1229],{"class":1228},[1050,11588,1360],{"class":1101},[1050,11590,1408],{"class":1228},[1050,11592,10586],{"class":1232},[1050,11594,1229],{"class":1228},[1050,11596,1985],{"class":1101},[1050,11598,8757],{"class":1067},[1050,11600,1102],{"class":1101},[1050,11602,11603],{"class":1216},"asctime",[1050,11605,1360],{"class":1101},[1050,11607,1408],{"class":1228},[1050,11609,11455],{"class":1232},[1050,11611,1229],{"class":1228},[1050,11613,1985],{"class":1101},[1050,11615,11462],{"class":1284},[1050,11617,11465],{"class":1101},[1050,11619,11620],{"class":1052,"line":4551},[1050,11621,11622],{"class":1101},"                        ]\n",[1050,11624,11625],{"class":1052,"line":4557},[1050,11626,11627],{"class":1101},"                    }\n",[1050,11629,11630],{"class":1052,"line":4588},[1050,11631,11632],{"class":1101},"                ]\n",[1050,11634,11635],{"class":1052,"line":4617},[1050,11636,2669],{"class":1101},[1050,11638,11639],{"class":1052,"line":4622},[1050,11640,2533],{"class":1067},[1050,11642,11643,11645,11647,11649,11651],{"class":1052,"line":4642},[1050,11644,1784],{"class":1063},[1050,11646,8757],{"class":1067},[1050,11648,1102],{"class":1101},[1050,11650,8974],{"class":1216},[1050,11652,1626],{"class":1101},[1050,11654,11655,11658,11660,11662,11664,11666,11668,11670,11672,11674,11676,11678,11680,11682],{"class":1052,"line":4647},[1050,11656,11657],{"class":1067},"                message",[1050,11659,1560],{"class":1101},[1050,11661,1229],{"class":1228},[1050,11663,11341],{"class":1232},[1050,11665,1229],{"class":1228},[1050,11667,1643],{"class":1101},[1050,11669,2469],{"class":1356},[1050,11671,1643],{"class":1101},[1050,11673,1229],{"class":1228},[1050,11675,11405],{"class":1232},[1050,11677,1229],{"class":1228},[1050,11679,1652],{"class":1101},[1050,11681,2691],{"class":1194},[1050,11683,11684],{"class":1101},"({\n",[1050,11686,11687,11689,11691,11693,11695,11697,11700,11702],{"class":1052,"line":4653},[1050,11688,3692],{"class":1228},[1050,11690,11421],{"class":1232},[1050,11692,1229],{"class":1228},[1050,11694,1985],{"class":1101},[1050,11696,1408],{"class":1228},[1050,11698,11699],{"class":1232},"Exception",[1050,11701,1229],{"class":1228},[1050,11703,1273],{"class":1101},[1050,11705,11706,11708,11710,11712,11714,11716,11719,11721,11723,11725,11727,11729,11731,11733,11735,11738],{"class":1052,"line":4676},[1050,11707,3692],{"class":1228},[1050,11709,10586],{"class":1232},[1050,11711,1229],{"class":1228},[1050,11713,1985],{"class":1101},[1050,11715,4924],{"class":1483},[1050,11717,11718],{"class":1232},"'```",[1050,11720,4930],{"class":4929},[1050,11722,2287],{"class":1880},[1050,11724,1102],{"class":1101},[1050,11726,6668],{"class":1194},[1050,11728,1225],{"class":1101},[1050,11730,9039],{"class":1194},[1050,11732,3173],{"class":1101},[1050,11734,4938],{"class":4929},[1050,11736,11737],{"class":1232},"```'",[1050,11739,1273],{"class":1101},[1050,11741,11742,11744,11746,11748,11750],{"class":1052,"line":4701},[1050,11743,3692],{"class":1228},[1050,11745,11455],{"class":1232},[1050,11747,1229],{"class":1228},[1050,11749,1985],{"class":1101},[1050,11751,11752],{"class":1284}," False\n",[1050,11754,11755],{"class":1052,"line":4734},[1050,11756,11757],{"class":1101},"                })\n",[1050,11759,11760],{"class":1052,"line":4767},[1050,11761,2533],{"class":1067},[1050,11763,11764,11767,11769,11772,11774,11776,11778,11780,11782,11784,11786,11788,11790,11793,11795,11798],{"class":1052,"line":4772},[1050,11765,11766],{"class":1067},"            requests",[1050,11768,1102],{"class":1101},[1050,11770,11771],{"class":1194},"post",[1050,11773,1225],{"class":1101},[1050,11775,2287],{"class":1880},[1050,11777,1102],{"class":1101},[1050,11779,11159],{"class":1216},[1050,11781,1360],{"class":1101},[1050,11783,9398],{"class":1204},[1050,11785,1208],{"class":1101},[1050,11787,8839],{"class":1194},[1050,11789,1360],{"class":1101},[1050,11791,11792],{"class":1204}," timeout",[1050,11794,1208],{"class":1101},[1050,11796,11797],{"class":1356},"5",[1050,11799,1472],{"class":1101},[1050,11801,11802,11804,11806],{"class":1052,"line":4778},[1050,11803,5835],{"class":1063},[1050,11805,5838],{"class":2308},[1050,11807,1626],{"class":1101},[1050,11809,11810,11812,11814,11816,11818,11820],{"class":1052,"line":4791},[1050,11811,2678],{"class":1880},[1050,11813,1102],{"class":1101},[1050,11815,11073],{"class":1194},[1050,11817,1225],{"class":1101},[1050,11819,9039],{"class":1194},[1050,11821,1472],{"class":1101},[1035,11823,11825],{"id":11824},"business-logic-logging","Business Logic Logging",[1040,11827,11829],{"className":1042,"code":11828,"language":1044,"meta":1045,"style":1045},"# logging/business.py\nimport logging\nfrom functools import wraps\nfrom django.utils import timezone\n\n# Business logic logger\nbusiness_logger = logging.getLogger('myproject.business')\n\ndef log_business_event(event_type, **kwargs):\n    \"\"\"Log business events with structured data\"\"\"\n    business_logger.info(\n        f\"Business event: {event_type}\",\n        extra={\n            'event_type': event_type,\n            'timestamp': timezone.now().isoformat(),\n            **kwargs\n        }\n    )\n\ndef log_user_action(action, user, **kwargs):\n    \"\"\"Log user actions\"\"\"\n    business_logger.info(\n        f\"User action: {action}\",\n        extra={\n            'action': action,\n            'user_id': user.id if user.is_authenticated else None,\n            'username': user.username if user.is_authenticated else 'anonymous',\n            'timestamp': timezone.now().isoformat(),\n            **kwargs\n        }\n    )\n\ndef log_performance_issue(operation, duration, threshold=1.0, **kwargs):\n    \"\"\"Log performance issues\"\"\"\n    if duration > threshold:\n        performance_logger = logging.getLogger('myproject.performance')\n        performance_logger.warning(\n            f\"Slow operation: {operation}\",\n            extra={\n                'operation': operation,\n                'duration': duration,\n                'threshold': threshold,\n                'timestamp': timezone.now().isoformat(),\n                **kwargs\n            }\n        )\n\n# Decorators for automatic logging\ndef log_function_call(logger=None, level=logging.INFO):\n    \"\"\"Decorator to log function calls\"\"\"\n    def decorator(func):\n        @wraps(func)\n        def wrapper(*args, **kwargs):\n            func_logger = logger or logging.getLogger(func.__module__)\n            \n            func_logger.log(\n                level,\n                f\"Calling {func.__name__}\",\n                extra={\n                    'function': func.__name__,\n                    'module': func.__module__,\n                    'args_count': len(args),\n                    'kwargs_keys': list(kwargs.keys()),\n                }\n            )\n            \n            try:\n                result = func(*args, **kwargs)\n                func_logger.log(\n                    level,\n                    f\"Completed {func.__name__}\",\n                    extra={\n                        'function': func.__name__,\n                        'module': func.__module__,\n                        'success': True,\n                    }\n                )\n                return result\n            except Exception as e:\n                func_logger.error(\n                    f\"Error in {func.__name__}: {str(e)}\",\n                    extra={\n                        'function': func.__name__,\n                        'module': func.__module__,\n                        'error': str(e),\n                        'error_type': type(e).__name__,\n                    },\n                    exc_info=True\n                )\n                raise\n        \n        return wrapper\n    return decorator\n\ndef log_model_changes(model_class):\n    \"\"\"Decorator to log model changes\"\"\"\n    def decorator(func):\n        @wraps(func)\n        def wrapper(self, *args, **kwargs):\n            if hasattr(self, 'pk') and self.pk:\n                # Update operation\n                old_values = {}\n                for field in self._meta.fields:\n                    old_values[field.name] = getattr(self, field.name)\n                \n                result = func(self, *args, **kwargs)\n                \n                # Log changes\n                changes = {}\n                for field in self._meta.fields:\n                    old_value = old_values.get(field.name)\n                    new_value = getattr(self, field.name)\n                    if old_value != new_value:\n                        changes[field.name] = {\n                            'old': old_value,\n                            'new': new_value\n                        }\n                \n                if changes:\n                    business_logger.info(\n                        f\"Model updated: {model_class.__name__}\",\n                        extra={\n                            'model': model_class.__name__,\n                            'pk': self.pk,\n                            'changes': changes,\n                            'operation': 'update',\n                        }\n                    )\n            else:\n                # Create operation\n                result = func(self, *args, **kwargs)\n                business_logger.info(\n                    f\"Model created: {model_class.__name__}\",\n                    extra={\n                        'model': model_class.__name__,\n                        'pk': self.pk,\n                        'operation': 'create',\n                    }\n                )\n            \n            return result\n        \n        return wrapper\n    return decorator\n\n# Usage examples\n@log_function_call()\ndef process_payment(user, amount):\n    \"\"\"Process payment with automatic logging\"\"\"\n    log_business_event(\n        'payment_initiated',\n        user_id=user.id,\n        amount=amount,\n        currency='USD'\n    )\n    \n    # Payment processing logic here\n    \n    log_business_event(\n        'payment_completed',\n        user_id=user.id,\n        amount=amount,\n        currency='USD'\n    )\n\nclass Order(models.Model):\n    # Model fields here\n    \n    @log_model_changes(model_class=lambda: Order)\n    def save(self, *args, **kwargs):\n        super().save(*args, **kwargs)\n",[1047,11830,11831,11836,11842,11854,11868,11872,11877,11901,11905,11927,11936,11948,11966,11974,11989,12011,12019,12023,12028,12032,12057,12066,12076,12093,12099,12114,12147,12181,12203,12209,12213,12217,12221,12255,12264,12277,12300,12311,12329,12336,12351,12366,12381,12403,12410,12414,12418,12422,12427,12457,12466,12480,12494,12516,12546,12550,12561,12568,12589,12596,12615,12633,12652,12678,12683,12687,12691,12697,12720,12731,12738,12759,12766,12784,12802,12817,12821,12825,12832,12844,12855,12891,12897,12915,12933,12951,12974,12979,12989,12993,12998,13002,13009,13016,13020,13034,13043,13055,13067,13091,13123,13128,13137,13157,13191,13195,13221,13225,13230,13239,13259,13283,13306,13321,13340,13357,13371,13376,13380,13390,13401,13423,13430,13449,13467,13482,13501,13505,13510,13516,13521,13547,13558,13579,13585,13603,13621,13640,13644,13648,13652,13658,13662,13668,13674,13678,13683,13693,13711,13720,13727,13738,13753,13765,13779,13783,13787,13792,13796,13802,13813,13827,13837,13849,13853,13857,13876,13881,13885,13908,13933],{"__ignoreMap":1045},[1050,11832,11833],{"class":1052,"line":1053},[1050,11834,11835],{"class":1056},"# logging/business.py\n",[1050,11837,11838,11840],{"class":1052,"line":1060},[1050,11839,1064],{"class":1063},[1050,11841,8671],{"class":1067},[1050,11843,11844,11846,11849,11851],{"class":1052,"line":1071},[1050,11845,1095],{"class":1063},[1050,11847,11848],{"class":1067}," functools ",[1050,11850,1064],{"class":1063},[1050,11852,11853],{"class":1067}," wraps\n",[1050,11855,11856,11858,11860,11862,11864,11866],{"class":1052,"line":1078},[1050,11857,1095],{"class":1063},[1050,11859,2190],{"class":1067},[1050,11861,1102],{"class":1101},[1050,11863,2232],{"class":1067},[1050,11865,1064],{"class":1063},[1050,11867,2237],{"class":1067},[1050,11869,11870],{"class":1052,"line":1084},[1050,11871,1075],{"emptyLinePlaceholder":1074},[1050,11873,11874],{"class":1052,"line":1092},[1050,11875,11876],{"class":1056},"# Business logic logger\n",[1050,11878,11879,11882,11884,11886,11888,11891,11893,11895,11897,11899],{"class":1052,"line":1118},[1050,11880,11881],{"class":1067},"business_logger ",[1050,11883,1208],{"class":1101},[1050,11885,6580],{"class":1067},[1050,11887,1102],{"class":1101},[1050,11889,11890],{"class":1194},"getLogger",[1050,11892,1225],{"class":1101},[1050,11894,1229],{"class":1228},[1050,11896,8174],{"class":1232},[1050,11898,1229],{"class":1228},[1050,11900,1472],{"class":1101},[1050,11902,11903],{"class":1052,"line":1139},[1050,11904,1075],{"emptyLinePlaceholder":1074},[1050,11906,11907,11909,11912,11914,11917,11919,11922,11925],{"class":1052,"line":1160},[1050,11908,1484],{"class":1483},[1050,11910,11911],{"class":1487}," log_business_event",[1050,11913,1225],{"class":1101},[1050,11915,11916],{"class":1493},"event_type",[1050,11918,1360],{"class":1101},[1050,11920,11921],{"class":1538}," **",[1050,11923,11924],{"class":1493},"kwargs",[1050,11926,1502],{"class":1101},[1050,11928,11929,11931,11934],{"class":1052,"line":1181},[1050,11930,1509],{"class":1508},[1050,11932,11933],{"class":1512},"Log business events with structured data",[1050,11935,1516],{"class":1508},[1050,11937,11938,11941,11943,11946],{"class":1052,"line":1186},[1050,11939,11940],{"class":1067},"    business_logger",[1050,11942,1102],{"class":1101},[1050,11944,11945],{"class":1194},"info",[1050,11947,1198],{"class":1101},[1050,11949,11950,11953,11956,11958,11960,11962,11964],{"class":1052,"line":1201},[1050,11951,11952],{"class":1483},"        f",[1050,11954,11955],{"class":1232},"\"Business event: ",[1050,11957,4930],{"class":4929},[1050,11959,11916],{"class":1194},[1050,11961,4938],{"class":4929},[1050,11963,6291],{"class":1232},[1050,11965,1273],{"class":1101},[1050,11967,11968,11971],{"class":1052,"line":1241},[1050,11969,11970],{"class":1204},"        extra",[1050,11972,11973],{"class":1101},"={\n",[1050,11975,11976,11978,11980,11982,11984,11987],{"class":1052,"line":1250},[1050,11977,6665],{"class":1228},[1050,11979,11916],{"class":1232},[1050,11981,1229],{"class":1228},[1050,11983,1985],{"class":1101},[1050,11985,11986],{"class":1194}," event_type",[1050,11988,1273],{"class":1101},[1050,11990,11991,11993,11995,11997,11999,12001,12003,12005,12007,12009],{"class":1052,"line":1258},[1050,11992,6665],{"class":1228},[1050,11994,2550],{"class":1232},[1050,11996,1229],{"class":1228},[1050,11998,1985],{"class":1101},[1050,12000,8781],{"class":1194},[1050,12002,1102],{"class":1101},[1050,12004,6178],{"class":1194},[1050,12006,8788],{"class":1101},[1050,12008,8791],{"class":1194},[1050,12010,1331],{"class":1101},[1050,12012,12013,12016],{"class":1052,"line":1276},[1050,12014,12015],{"class":1538},"            **",[1050,12017,12018],{"class":1194},"kwargs\n",[1050,12020,12021],{"class":1052,"line":1290},[1050,12022,8953],{"class":1101},[1050,12024,12025],{"class":1052,"line":1302},[1050,12026,12027],{"class":1101},"    )\n",[1050,12029,12030],{"class":1052,"line":1308},[1050,12031,1075],{"emptyLinePlaceholder":1074},[1050,12033,12034,12036,12039,12041,12044,12046,12049,12051,12053,12055],{"class":1052,"line":1325},[1050,12035,1484],{"class":1483},[1050,12037,12038],{"class":1487}," log_user_action",[1050,12040,1225],{"class":1101},[1050,12042,12043],{"class":1493},"action",[1050,12045,1360],{"class":1101},[1050,12047,12048],{"class":1493}," user",[1050,12050,1360],{"class":1101},[1050,12052,11921],{"class":1538},[1050,12054,11924],{"class":1493},[1050,12056,1502],{"class":1101},[1050,12058,12059,12061,12064],{"class":1052,"line":1334},[1050,12060,1509],{"class":1508},[1050,12062,12063],{"class":1512},"Log user actions",[1050,12065,1516],{"class":1508},[1050,12067,12068,12070,12072,12074],{"class":1052,"line":1342},[1050,12069,11940],{"class":1067},[1050,12071,1102],{"class":1101},[1050,12073,11945],{"class":1194},[1050,12075,1198],{"class":1101},[1050,12077,12078,12080,12083,12085,12087,12089,12091],{"class":1052,"line":1348},[1050,12079,11952],{"class":1483},[1050,12081,12082],{"class":1232},"\"User action: ",[1050,12084,4930],{"class":4929},[1050,12086,12043],{"class":1194},[1050,12088,4938],{"class":4929},[1050,12090,6291],{"class":1232},[1050,12092,1273],{"class":1101},[1050,12094,12095,12097],{"class":1052,"line":1366},[1050,12096,11970],{"class":1204},[1050,12098,11973],{"class":1101},[1050,12100,12101,12103,12105,12107,12109,12112],{"class":1052,"line":1379},[1050,12102,6665],{"class":1228},[1050,12104,12043],{"class":1232},[1050,12106,1229],{"class":1228},[1050,12108,1985],{"class":1101},[1050,12110,12111],{"class":1194}," action",[1050,12113,1273],{"class":1101},[1050,12115,12116,12118,12121,12123,12125,12127,12129,12132,12134,12136,12138,12141,12143,12145],{"class":1052,"line":1418},[1050,12117,6665],{"class":1228},[1050,12119,12120],{"class":1232},"user_id",[1050,12122,1229],{"class":1228},[1050,12124,1985],{"class":1101},[1050,12126,12048],{"class":1194},[1050,12128,1102],{"class":1101},[1050,12130,12131],{"class":1216},"id",[1050,12133,5617],{"class":1063},[1050,12135,12048],{"class":1194},[1050,12137,1102],{"class":1101},[1050,12139,12140],{"class":1216},"is_authenticated",[1050,12142,3359],{"class":1063},[1050,12144,1665],{"class":1284},[1050,12146,1273],{"class":1101},[1050,12148,12149,12151,12153,12155,12157,12159,12161,12163,12165,12167,12169,12171,12173,12175,12177,12179],{"class":1052,"line":1456},[1050,12150,6665],{"class":1228},[1050,12152,11276],{"class":1232},[1050,12154,1229],{"class":1228},[1050,12156,1985],{"class":1101},[1050,12158,12048],{"class":1194},[1050,12160,1102],{"class":1101},[1050,12162,11276],{"class":1216},[1050,12164,5617],{"class":1063},[1050,12166,12048],{"class":1194},[1050,12168,1102],{"class":1101},[1050,12170,12140],{"class":1216},[1050,12172,3359],{"class":1063},[1050,12174,1408],{"class":1228},[1050,12176,9601],{"class":1232},[1050,12178,1229],{"class":1228},[1050,12180,1273],{"class":1101},[1050,12182,12183,12185,12187,12189,12191,12193,12195,12197,12199,12201],{"class":1052,"line":1469},[1050,12184,6665],{"class":1228},[1050,12186,2550],{"class":1232},[1050,12188,1229],{"class":1228},[1050,12190,1985],{"class":1101},[1050,12192,8781],{"class":1194},[1050,12194,1102],{"class":1101},[1050,12196,6178],{"class":1194},[1050,12198,8788],{"class":1101},[1050,12200,8791],{"class":1194},[1050,12202,1331],{"class":1101},[1050,12204,12205,12207],{"class":1052,"line":1475},[1050,12206,12015],{"class":1538},[1050,12208,12018],{"class":1194},[1050,12210,12211],{"class":1052,"line":1480},[1050,12212,8953],{"class":1101},[1050,12214,12215],{"class":1052,"line":1505},[1050,12216,12027],{"class":1101},[1050,12218,12219],{"class":1052,"line":1519},[1050,12220,1075],{"emptyLinePlaceholder":1074},[1050,12222,12223,12225,12228,12230,12232,12234,12237,12239,12242,12244,12247,12249,12251,12253],{"class":1052,"line":1525},[1050,12224,1484],{"class":1483},[1050,12226,12227],{"class":1487}," log_performance_issue",[1050,12229,1225],{"class":1101},[1050,12231,5321],{"class":1493},[1050,12233,1360],{"class":1101},[1050,12235,12236],{"class":1493}," duration",[1050,12238,1360],{"class":1101},[1050,12240,12241],{"class":1493}," threshold",[1050,12243,1208],{"class":1538},[1050,12245,12246],{"class":1356},"1.0",[1050,12248,1360],{"class":1101},[1050,12250,11921],{"class":1538},[1050,12252,11924],{"class":1493},[1050,12254,1502],{"class":1101},[1050,12256,12257,12259,12262],{"class":1052,"line":1572},[1050,12258,1509],{"class":1508},[1050,12260,12261],{"class":1512},"Log performance issues",[1050,12263,1516],{"class":1508},[1050,12265,12266,12268,12271,12273,12275],{"class":1052,"line":1611},[1050,12267,1528],{"class":1063},[1050,12269,12270],{"class":1067}," duration ",[1050,12272,3353],{"class":1538},[1050,12274,12241],{"class":1067},[1050,12276,1626],{"class":1101},[1050,12278,12279,12282,12284,12286,12288,12290,12292,12294,12296,12298],{"class":1052,"line":1629},[1050,12280,12281],{"class":1067},"        performance_logger ",[1050,12283,1208],{"class":1101},[1050,12285,6580],{"class":1067},[1050,12287,1102],{"class":1101},[1050,12289,11890],{"class":1194},[1050,12291,1225],{"class":1101},[1050,12293,1229],{"class":1228},[1050,12295,8105],{"class":1232},[1050,12297,1229],{"class":1228},[1050,12299,1472],{"class":1101},[1050,12301,12302,12305,12307,12309],{"class":1052,"line":1670},[1050,12303,12304],{"class":1067},"        performance_logger",[1050,12306,1102],{"class":1101},[1050,12308,11394],{"class":1194},[1050,12310,1198],{"class":1101},[1050,12312,12313,12316,12319,12321,12323,12325,12327],{"class":1052,"line":1676},[1050,12314,12315],{"class":1483},"            f",[1050,12317,12318],{"class":1232},"\"Slow operation: ",[1050,12320,4930],{"class":4929},[1050,12322,5321],{"class":1194},[1050,12324,4938],{"class":4929},[1050,12326,6291],{"class":1232},[1050,12328,1273],{"class":1101},[1050,12330,12331,12334],{"class":1052,"line":1682},[1050,12332,12333],{"class":1204},"            extra",[1050,12335,11973],{"class":1101},[1050,12337,12338,12340,12342,12344,12346,12349],{"class":1052,"line":1720},[1050,12339,2547],{"class":1228},[1050,12341,5321],{"class":1232},[1050,12343,1229],{"class":1228},[1050,12345,1985],{"class":1101},[1050,12347,12348],{"class":1194}," operation",[1050,12350,1273],{"class":1101},[1050,12352,12353,12355,12358,12360,12362,12364],{"class":1052,"line":1766},[1050,12354,2547],{"class":1228},[1050,12356,12357],{"class":1232},"duration",[1050,12359,1229],{"class":1228},[1050,12361,1985],{"class":1101},[1050,12363,12236],{"class":1194},[1050,12365,1273],{"class":1101},[1050,12367,12368,12370,12373,12375,12377,12379],{"class":1052,"line":1781},[1050,12369,2547],{"class":1228},[1050,12371,12372],{"class":1232},"threshold",[1050,12374,1229],{"class":1228},[1050,12376,1985],{"class":1101},[1050,12378,12241],{"class":1194},[1050,12380,1273],{"class":1101},[1050,12382,12383,12385,12387,12389,12391,12393,12395,12397,12399,12401],{"class":1052,"line":1811},[1050,12384,2547],{"class":1228},[1050,12386,2550],{"class":1232},[1050,12388,1229],{"class":1228},[1050,12390,1985],{"class":1101},[1050,12392,8781],{"class":1194},[1050,12394,1102],{"class":1101},[1050,12396,6178],{"class":1194},[1050,12398,8788],{"class":1101},[1050,12400,8791],{"class":1194},[1050,12402,1331],{"class":1101},[1050,12404,12405,12408],{"class":1052,"line":1852},[1050,12406,12407],{"class":1538},"                **",[1050,12409,12018],{"class":1194},[1050,12411,12412],{"class":1052,"line":1857},[1050,12413,2669],{"class":1101},[1050,12415,12416],{"class":1052,"line":1866},[1050,12417,4891],{"class":1101},[1050,12419,12420],{"class":1052,"line":1871},[1050,12421,1075],{"emptyLinePlaceholder":1074},[1050,12423,12424],{"class":1052,"line":1877},[1050,12425,12426],{"class":1056},"# Decorators for automatic logging\n",[1050,12428,12429,12431,12434,12436,12438,12440,12442,12444,12447,12449,12451,12453,12455],{"class":1052,"line":1916},[1050,12430,1484],{"class":1483},[1050,12432,12433],{"class":1487}," log_function_call",[1050,12435,1225],{"class":1101},[1050,12437,8819],{"class":1493},[1050,12439,1208],{"class":1538},[1050,12441,2839],{"class":1284},[1050,12443,1360],{"class":1101},[1050,12445,12446],{"class":1493}," level",[1050,12448,1208],{"class":1538},[1050,12450,8721],{"class":1067},[1050,12452,1102],{"class":1101},[1050,12454,6972],{"class":9907},[1050,12456,1502],{"class":1101},[1050,12458,12459,12461,12464],{"class":1052,"line":1952},[1050,12460,1509],{"class":1508},[1050,12462,12463],{"class":1512},"Decorator to log function calls",[1050,12465,1516],{"class":1508},[1050,12467,12468,12470,12473,12475,12478],{"class":1052,"line":1957},[1050,12469,2277],{"class":1483},[1050,12471,12472],{"class":1487}," decorator",[1050,12474,1225],{"class":1101},[1050,12476,12477],{"class":1493},"func",[1050,12479,1502],{"class":1101},[1050,12481,12482,12485,12488,12490,12492],{"class":1052,"line":1963},[1050,12483,12484],{"class":1101},"        @",[1050,12486,12487],{"class":1487},"wraps",[1050,12489,1225],{"class":1101},[1050,12491,12477],{"class":1194},[1050,12493,1472],{"class":1101},[1050,12495,12496,12499,12502,12504,12506,12508,12510,12512,12514],{"class":1052,"line":1974},[1050,12497,12498],{"class":1483},"        def",[1050,12500,12501],{"class":1487}," wrapper",[1050,12503,1225],{"class":1101},[1050,12505,7126],{"class":1538},[1050,12507,9166],{"class":1493},[1050,12509,1360],{"class":1101},[1050,12511,11921],{"class":1538},[1050,12513,11924],{"class":1493},[1050,12515,1502],{"class":1101},[1050,12517,12518,12521,12523,12526,12529,12531,12533,12535,12537,12539,12541,12544],{"class":1052,"line":1997},[1050,12519,12520],{"class":1067},"            func_logger ",[1050,12522,1208],{"class":1101},[1050,12524,12525],{"class":1067}," logger ",[1050,12527,12528],{"class":1538},"or",[1050,12530,6580],{"class":1067},[1050,12532,1102],{"class":1101},[1050,12534,11890],{"class":1194},[1050,12536,1225],{"class":1101},[1050,12538,12477],{"class":1194},[1050,12540,1102],{"class":1101},[1050,12542,12543],{"class":5878},"__module__",[1050,12545,1472],{"class":1101},[1050,12547,12548],{"class":1052,"line":2011},[1050,12549,2533],{"class":1067},[1050,12551,12552,12555,12557,12559],{"class":1052,"line":2052},[1050,12553,12554],{"class":1067},"            func_logger",[1050,12556,1102],{"class":1101},[1050,12558,10788],{"class":1194},[1050,12560,1198],{"class":1101},[1050,12562,12563,12566],{"class":1052,"line":2092},[1050,12564,12565],{"class":1194},"                level",[1050,12567,1273],{"class":1101},[1050,12569,12570,12572,12575,12577,12579,12581,12583,12585,12587],{"class":1052,"line":2098},[1050,12571,9539],{"class":1483},[1050,12573,12574],{"class":1232},"\"Calling ",[1050,12576,4930],{"class":4929},[1050,12578,12477],{"class":1194},[1050,12580,1102],{"class":1101},[1050,12582,5879],{"class":5878},[1050,12584,4938],{"class":4929},[1050,12586,6291],{"class":1232},[1050,12588,1273],{"class":1101},[1050,12590,12591,12594],{"class":1052,"line":2104},[1050,12592,12593],{"class":1204},"                extra",[1050,12595,11973],{"class":1101},[1050,12597,12598,12600,12602,12604,12606,12609,12611,12613],{"class":1052,"line":2109},[1050,12599,3692],{"class":1228},[1050,12601,8878],{"class":1232},[1050,12603,1229],{"class":1228},[1050,12605,1985],{"class":1101},[1050,12607,12608],{"class":1194}," func",[1050,12610,1102],{"class":1101},[1050,12612,5879],{"class":5878},[1050,12614,1273],{"class":1101},[1050,12616,12617,12619,12621,12623,12625,12627,12629,12631],{"class":1052,"line":2115},[1050,12618,3692],{"class":1228},[1050,12620,8859],{"class":1232},[1050,12622,1229],{"class":1228},[1050,12624,1985],{"class":1101},[1050,12626,12608],{"class":1194},[1050,12628,1102],{"class":1101},[1050,12630,12543],{"class":5878},[1050,12632,1273],{"class":1101},[1050,12634,12635,12637,12640,12642,12644,12646,12648,12650],{"class":1052,"line":2126},[1050,12636,3692],{"class":1228},[1050,12638,12639],{"class":1232},"args_count",[1050,12641,1229],{"class":1228},[1050,12643,1985],{"class":1101},[1050,12645,2714],{"class":2280},[1050,12647,1225],{"class":1101},[1050,12649,9166],{"class":1194},[1050,12651,1238],{"class":1101},[1050,12653,12654,12656,12659,12661,12663,12666,12668,12670,12672,12675],{"class":1052,"line":3021},[1050,12655,3692],{"class":1228},[1050,12657,12658],{"class":1232},"kwargs_keys",[1050,12660,1229],{"class":1228},[1050,12662,1985],{"class":1101},[1050,12664,12665],{"class":2308}," list",[1050,12667,1225],{"class":1101},[1050,12669,11924],{"class":1194},[1050,12671,1102],{"class":1101},[1050,12673,12674],{"class":1194},"keys",[1050,12676,12677],{"class":1101},"()),\n",[1050,12679,12680],{"class":1052,"line":3042},[1050,12681,12682],{"class":1101},"                }\n",[1050,12684,12685],{"class":1052,"line":3047},[1050,12686,9615],{"class":1101},[1050,12688,12689],{"class":1052,"line":3053},[1050,12690,2533],{"class":1067},[1050,12692,12693,12695],{"class":1052,"line":3064},[1050,12694,6420],{"class":1063},[1050,12696,1626],{"class":1101},[1050,12698,12699,12702,12704,12706,12708,12710,12712,12714,12716,12718],{"class":1052,"line":3089},[1050,12700,12701],{"class":1067},"                result ",[1050,12703,1208],{"class":1101},[1050,12705,12608],{"class":1194},[1050,12707,1225],{"class":1101},[1050,12709,7126],{"class":1538},[1050,12711,9166],{"class":1194},[1050,12713,1360],{"class":1101},[1050,12715,11921],{"class":1538},[1050,12717,11924],{"class":1194},[1050,12719,1472],{"class":1101},[1050,12721,12722,12725,12727,12729],{"class":1052,"line":3107},[1050,12723,12724],{"class":1067},"                func_logger",[1050,12726,1102],{"class":1101},[1050,12728,10788],{"class":1194},[1050,12730,1198],{"class":1101},[1050,12732,12733,12736],{"class":1052,"line":3112},[1050,12734,12735],{"class":1194},"                    level",[1050,12737,1273],{"class":1101},[1050,12739,12740,12742,12745,12747,12749,12751,12753,12755,12757],{"class":1052,"line":3122},[1050,12741,6377],{"class":1483},[1050,12743,12744],{"class":1232},"\"Completed ",[1050,12746,4930],{"class":4929},[1050,12748,12477],{"class":1194},[1050,12750,1102],{"class":1101},[1050,12752,5879],{"class":5878},[1050,12754,4938],{"class":4929},[1050,12756,6291],{"class":1232},[1050,12758,1273],{"class":1101},[1050,12760,12761,12764],{"class":1052,"line":3157},[1050,12762,12763],{"class":1204},"                    extra",[1050,12765,11973],{"class":1101},[1050,12767,12768,12770,12772,12774,12776,12778,12780,12782],{"class":1052,"line":3187},[1050,12769,11357],{"class":1228},[1050,12771,8878],{"class":1232},[1050,12773,1229],{"class":1228},[1050,12775,1985],{"class":1101},[1050,12777,12608],{"class":1194},[1050,12779,1102],{"class":1101},[1050,12781,5879],{"class":5878},[1050,12783,1273],{"class":1101},[1050,12785,12786,12788,12790,12792,12794,12796,12798,12800],{"class":1052,"line":3227},[1050,12787,11357],{"class":1228},[1050,12789,8859],{"class":1232},[1050,12791,1229],{"class":1228},[1050,12793,1985],{"class":1101},[1050,12795,12608],{"class":1194},[1050,12797,1102],{"class":1101},[1050,12799,12543],{"class":5878},[1050,12801,1273],{"class":1101},[1050,12803,12804,12806,12809,12811,12813,12815],{"class":1052,"line":3262},[1050,12805,11357],{"class":1228},[1050,12807,12808],{"class":1232},"success",[1050,12810,1229],{"class":1228},[1050,12812,1985],{"class":1101},[1050,12814,11462],{"class":1284},[1050,12816,1273],{"class":1101},[1050,12818,12819],{"class":1052,"line":3268},[1050,12820,11627],{"class":1101},[1050,12822,12823],{"class":1052,"line":3285},[1050,12824,6411],{"class":1101},[1050,12826,12827,12829],{"class":1052,"line":3332},[1050,12828,4093],{"class":1063},[1050,12830,12831],{"class":1067}," result\n",[1050,12833,12834,12836,12838,12840,12842],{"class":1052,"line":3365},[1050,12835,6469],{"class":1063},[1050,12837,5838],{"class":2308},[1050,12839,5841],{"class":1063},[1050,12841,5844],{"class":1067},[1050,12843,1626],{"class":1101},[1050,12845,12846,12848,12850,12853],{"class":1052,"line":3373},[1050,12847,12724],{"class":1067},[1050,12849,1102],{"class":1101},[1050,12851,12852],{"class":1194},"error",[1050,12854,1198],{"class":1101},[1050,12856,12857,12859,12862,12864,12866,12868,12870,12872,12875,12877,12879,12881,12883,12885,12887,12889],{"class":1052,"line":3392},[1050,12858,6377],{"class":1483},[1050,12860,12861],{"class":1232},"\"Error in ",[1050,12863,4930],{"class":4929},[1050,12865,12477],{"class":1194},[1050,12867,1102],{"class":1101},[1050,12869,5879],{"class":5878},[1050,12871,4938],{"class":4929},[1050,12873,12874],{"class":1232},": ",[1050,12876,4930],{"class":4929},[1050,12878,9418],{"class":2308},[1050,12880,1225],{"class":1101},[1050,12882,5872],{"class":1194},[1050,12884,3173],{"class":1101},[1050,12886,4938],{"class":4929},[1050,12888,6291],{"class":1232},[1050,12890,1273],{"class":1101},[1050,12892,12893,12895],{"class":1052,"line":3410},[1050,12894,12763],{"class":1204},[1050,12896,11973],{"class":1101},[1050,12898,12899,12901,12903,12905,12907,12909,12911,12913],{"class":1052,"line":3415},[1050,12900,11357],{"class":1228},[1050,12902,8878],{"class":1232},[1050,12904,1229],{"class":1228},[1050,12906,1985],{"class":1101},[1050,12908,12608],{"class":1194},[1050,12910,1102],{"class":1101},[1050,12912,5879],{"class":5878},[1050,12914,1273],{"class":1101},[1050,12916,12917,12919,12921,12923,12925,12927,12929,12931],{"class":1052,"line":3421},[1050,12918,11357],{"class":1228},[1050,12920,8859],{"class":1232},[1050,12922,1229],{"class":1228},[1050,12924,1985],{"class":1101},[1050,12926,12608],{"class":1194},[1050,12928,1102],{"class":1101},[1050,12930,12543],{"class":5878},[1050,12932,1273],{"class":1101},[1050,12934,12935,12937,12939,12941,12943,12945,12947,12949],{"class":1052,"line":3434},[1050,12936,11357],{"class":1228},[1050,12938,12852],{"class":1232},[1050,12940,1229],{"class":1228},[1050,12942,1985],{"class":1101},[1050,12944,4962],{"class":2308},[1050,12946,1225],{"class":1101},[1050,12948,5872],{"class":1194},[1050,12950,1238],{"class":1101},[1050,12952,12953,12955,12957,12959,12961,12964,12966,12968,12970,12972],{"class":1052,"line":3472},[1050,12954,11357],{"class":1228},[1050,12956,5384],{"class":1232},[1050,12958,1229],{"class":1228},[1050,12960,1985],{"class":1101},[1050,12962,12963],{"class":2308}," type",[1050,12965,1225],{"class":1101},[1050,12967,5872],{"class":1194},[1050,12969,5875],{"class":1101},[1050,12971,5879],{"class":5878},[1050,12973,1273],{"class":1101},[1050,12975,12976],{"class":1052,"line":3499},[1050,12977,12978],{"class":1101},"                    },\n",[1050,12980,12981,12984,12986],{"class":1052,"line":3537},[1050,12982,12983],{"class":1204},"                    exc_info",[1050,12985,1208],{"class":1101},[1050,12987,12988],{"class":1284},"True\n",[1050,12990,12991],{"class":1052,"line":3544},[1050,12992,6411],{"class":1101},[1050,12994,12995],{"class":1052,"line":3558},[1050,12996,12997],{"class":1063},"                raise\n",[1050,12999,13000],{"class":1052,"line":3563},[1050,13001,4515],{"class":1067},[1050,13003,13004,13006],{"class":1052,"line":3569},[1050,13005,4979],{"class":1063},[1050,13007,13008],{"class":1067}," wrapper\n",[1050,13010,13011,13013],{"class":1052,"line":3587},[1050,13012,1860],{"class":1063},[1050,13014,13015],{"class":1067}," decorator\n",[1050,13017,13018],{"class":1052,"line":3604},[1050,13019,1075],{"emptyLinePlaceholder":1074},[1050,13021,13022,13024,13027,13029,13032],{"class":1052,"line":3629},[1050,13023,1484],{"class":1483},[1050,13025,13026],{"class":1487}," log_model_changes",[1050,13028,1225],{"class":1101},[1050,13030,13031],{"class":1493},"model_class",[1050,13033,1502],{"class":1101},[1050,13035,13036,13038,13041],{"class":1052,"line":3634},[1050,13037,1509],{"class":1508},[1050,13039,13040],{"class":1512},"Decorator to log model changes",[1050,13042,1516],{"class":1508},[1050,13044,13045,13047,13049,13051,13053],{"class":1052,"line":3642},[1050,13046,2277],{"class":1483},[1050,13048,12472],{"class":1487},[1050,13050,1225],{"class":1101},[1050,13052,12477],{"class":1493},[1050,13054,1502],{"class":1101},[1050,13056,13057,13059,13061,13063,13065],{"class":1052,"line":3658},[1050,13058,12484],{"class":1101},[1050,13060,12487],{"class":1487},[1050,13062,1225],{"class":1101},[1050,13064,12477],{"class":1194},[1050,13066,1472],{"class":1101},[1050,13068,13069,13071,13073,13075,13077,13079,13081,13083,13085,13087,13089],{"class":1052,"line":3675},[1050,13070,12498],{"class":1483},[1050,13072,12501],{"class":1487},[1050,13074,1225],{"class":1101},[1050,13076,2287],{"class":2286},[1050,13078,1360],{"class":1101},[1050,13080,3218],{"class":1538},[1050,13082,9166],{"class":1493},[1050,13084,1360],{"class":1101},[1050,13086,11921],{"class":1538},[1050,13088,11924],{"class":1493},[1050,13090,1502],{"class":1101},[1050,13092,13093,13095,13097,13099,13101,13103,13105,13108,13110,13112,13115,13117,13119,13121],{"class":1052,"line":3689},[1050,13094,1784],{"class":1063},[1050,13096,9495],{"class":2280},[1050,13098,1225],{"class":1101},[1050,13100,2287],{"class":1880},[1050,13102,1360],{"class":1101},[1050,13104,1408],{"class":1228},[1050,13106,13107],{"class":1232},"pk",[1050,13109,1229],{"class":1228},[1050,13111,3173],{"class":1101},[1050,13113,13114],{"class":1538}," and",[1050,13116,2507],{"class":1880},[1050,13118,1102],{"class":1101},[1050,13120,13107],{"class":1216},[1050,13122,1626],{"class":1101},[1050,13124,13125],{"class":1052,"line":3707},[1050,13126,13127],{"class":1056},"                # Update operation\n",[1050,13129,13130,13133,13135],{"class":1052,"line":3724},[1050,13131,13132],{"class":1067},"                old_values ",[1050,13134,1208],{"class":1101},[1050,13136,6071],{"class":1101},[1050,13138,13139,13141,13143,13145,13147,13149,13151,13153,13155],{"class":1052,"line":3741},[1050,13140,10597],{"class":1063},[1050,13142,1771],{"class":1067},[1050,13144,1620],{"class":1063},[1050,13146,2507],{"class":1880},[1050,13148,1102],{"class":1101},[1050,13150,6301],{"class":1216},[1050,13152,1102],{"class":1101},[1050,13154,11405],{"class":1216},[1050,13156,1626],{"class":1101},[1050,13158,13159,13162,13164,13166,13168,13170,13172,13174,13176,13178,13180,13182,13185,13187,13189],{"class":1052,"line":3758},[1050,13160,13161],{"class":1067},"                    old_values",[1050,13163,1560],{"class":1101},[1050,13165,1835],{"class":1067},[1050,13167,1102],{"class":1101},[1050,13169,8830],{"class":1216},[1050,13171,1838],{"class":1101},[1050,13173,1841],{"class":1101},[1050,13175,4565],{"class":2280},[1050,13177,1225],{"class":1101},[1050,13179,2287],{"class":1880},[1050,13181,1360],{"class":1101},[1050,13183,13184],{"class":1194}," field",[1050,13186,1102],{"class":1101},[1050,13188,8830],{"class":1216},[1050,13190,1472],{"class":1101},[1050,13192,13193],{"class":1052,"line":3775},[1050,13194,3265],{"class":1067},[1050,13196,13197,13199,13201,13203,13205,13207,13209,13211,13213,13215,13217,13219],{"class":1052,"line":3792},[1050,13198,12701],{"class":1067},[1050,13200,1208],{"class":1101},[1050,13202,12608],{"class":1194},[1050,13204,1225],{"class":1101},[1050,13206,2287],{"class":1880},[1050,13208,1360],{"class":1101},[1050,13210,3218],{"class":1538},[1050,13212,9166],{"class":1194},[1050,13214,1360],{"class":1101},[1050,13216,11921],{"class":1538},[1050,13218,11924],{"class":1194},[1050,13220,1472],{"class":1101},[1050,13222,13223],{"class":1052,"line":3798},[1050,13224,3265],{"class":1067},[1050,13226,13227],{"class":1052,"line":3812},[1050,13228,13229],{"class":1056},"                # Log changes\n",[1050,13231,13232,13235,13237],{"class":1052,"line":3829},[1050,13233,13234],{"class":1067},"                changes ",[1050,13236,1208],{"class":1101},[1050,13238,6071],{"class":1101},[1050,13240,13241,13243,13245,13247,13249,13251,13253,13255,13257],{"class":1052,"line":3846},[1050,13242,10597],{"class":1063},[1050,13244,1771],{"class":1067},[1050,13246,1620],{"class":1063},[1050,13248,2507],{"class":1880},[1050,13250,1102],{"class":1101},[1050,13252,6301],{"class":1216},[1050,13254,1102],{"class":1101},[1050,13256,11405],{"class":1216},[1050,13258,1626],{"class":1101},[1050,13260,13261,13264,13266,13269,13271,13273,13275,13277,13279,13281],{"class":1052,"line":3870},[1050,13262,13263],{"class":1067},"                    old_value ",[1050,13265,1208],{"class":1101},[1050,13267,13268],{"class":1067}," old_values",[1050,13270,1102],{"class":1101},[1050,13272,1222],{"class":1194},[1050,13274,1225],{"class":1101},[1050,13276,1835],{"class":1194},[1050,13278,1102],{"class":1101},[1050,13280,8830],{"class":1216},[1050,13282,1472],{"class":1101},[1050,13284,13285,13288,13290,13292,13294,13296,13298,13300,13302,13304],{"class":1052,"line":3875},[1050,13286,13287],{"class":1067},"                    new_value ",[1050,13289,1208],{"class":1101},[1050,13291,4565],{"class":2280},[1050,13293,1225],{"class":1101},[1050,13295,2287],{"class":1880},[1050,13297,1360],{"class":1101},[1050,13299,13184],{"class":1194},[1050,13301,1102],{"class":1101},[1050,13303,8830],{"class":1216},[1050,13305,1472],{"class":1101},[1050,13307,13308,13310,13313,13316,13319],{"class":1052,"line":3889},[1050,13309,10618],{"class":1063},[1050,13311,13312],{"class":1067}," old_value ",[1050,13314,13315],{"class":1538},"!=",[1050,13317,13318],{"class":1067}," new_value",[1050,13320,1626],{"class":1101},[1050,13322,13323,13326,13328,13330,13332,13334,13336,13338],{"class":1052,"line":3905},[1050,13324,13325],{"class":1067},"                        changes",[1050,13327,1560],{"class":1101},[1050,13329,1835],{"class":1067},[1050,13331,1102],{"class":1101},[1050,13333,8830],{"class":1216},[1050,13335,1838],{"class":1101},[1050,13337,1841],{"class":1101},[1050,13339,1971],{"class":1101},[1050,13341,13342,13345,13348,13350,13352,13355],{"class":1052,"line":3927},[1050,13343,13344],{"class":1228},"                            '",[1050,13346,13347],{"class":1232},"old",[1050,13349,1229],{"class":1228},[1050,13351,1985],{"class":1101},[1050,13353,13354],{"class":1067}," old_value",[1050,13356,1273],{"class":1101},[1050,13358,13359,13361,13364,13366,13368],{"class":1052,"line":3948},[1050,13360,13344],{"class":1228},[1050,13362,13363],{"class":1232},"new",[1050,13365,1229],{"class":1228},[1050,13367,1985],{"class":1101},[1050,13369,13370],{"class":1067}," new_value\n",[1050,13372,13373],{"class":1052,"line":3988},[1050,13374,13375],{"class":1101},"                        }\n",[1050,13377,13378],{"class":1052,"line":3993},[1050,13379,3265],{"class":1067},[1050,13381,13382,13385,13388],{"class":1052,"line":4018},[1050,13383,13384],{"class":1063},"                if",[1050,13386,13387],{"class":1067}," changes",[1050,13389,1626],{"class":1101},[1050,13391,13392,13395,13397,13399],{"class":1052,"line":4023},[1050,13393,13394],{"class":1067},"                    business_logger",[1050,13396,1102],{"class":1101},[1050,13398,11945],{"class":1194},[1050,13400,1198],{"class":1101},[1050,13402,13403,13406,13409,13411,13413,13415,13417,13419,13421],{"class":1052,"line":4028},[1050,13404,13405],{"class":1483},"                        f",[1050,13407,13408],{"class":1232},"\"Model updated: ",[1050,13410,4930],{"class":4929},[1050,13412,13031],{"class":1194},[1050,13414,1102],{"class":1101},[1050,13416,5879],{"class":5878},[1050,13418,4938],{"class":4929},[1050,13420,6291],{"class":1232},[1050,13422,1273],{"class":1101},[1050,13424,13425,13428],{"class":1052,"line":4046},[1050,13426,13427],{"class":1204},"                        extra",[1050,13429,11973],{"class":1101},[1050,13431,13432,13434,13436,13438,13440,13443,13445,13447],{"class":1052,"line":4056},[1050,13433,13344],{"class":1228},[1050,13435,6296],{"class":1232},[1050,13437,1229],{"class":1228},[1050,13439,1985],{"class":1101},[1050,13441,13442],{"class":1194}," model_class",[1050,13444,1102],{"class":1101},[1050,13446,5879],{"class":5878},[1050,13448,1273],{"class":1101},[1050,13450,13451,13453,13455,13457,13459,13461,13463,13465],{"class":1052,"line":4069},[1050,13452,13344],{"class":1228},[1050,13454,13107],{"class":1232},[1050,13456,1229],{"class":1228},[1050,13458,1985],{"class":1101},[1050,13460,2507],{"class":1880},[1050,13462,1102],{"class":1101},[1050,13464,13107],{"class":1216},[1050,13466,1273],{"class":1101},[1050,13468,13469,13471,13474,13476,13478,13480],{"class":1052,"line":4090},[1050,13470,13344],{"class":1228},[1050,13472,13473],{"class":1232},"changes",[1050,13475,1229],{"class":1228},[1050,13477,1985],{"class":1101},[1050,13479,13387],{"class":1194},[1050,13481,1273],{"class":1101},[1050,13483,13484,13486,13488,13490,13492,13494,13497,13499],{"class":1052,"line":4099},[1050,13485,13344],{"class":1228},[1050,13487,5321],{"class":1232},[1050,13489,1229],{"class":1228},[1050,13491,1985],{"class":1101},[1050,13493,1408],{"class":1228},[1050,13495,13496],{"class":1232},"update",[1050,13498,1229],{"class":1228},[1050,13500,1273],{"class":1101},[1050,13502,13503],{"class":1052,"line":4104},[1050,13504,13375],{"class":1101},[1050,13506,13507],{"class":1052,"line":4124},[1050,13508,13509],{"class":1101},"                    )\n",[1050,13511,13512,13514],{"class":1052,"line":4137},[1050,13513,3368],{"class":1063},[1050,13515,1626],{"class":1101},[1050,13517,13518],{"class":1052,"line":4144},[1050,13519,13520],{"class":1056},"                # Create operation\n",[1050,13522,13523,13525,13527,13529,13531,13533,13535,13537,13539,13541,13543,13545],{"class":1052,"line":4149},[1050,13524,12701],{"class":1067},[1050,13526,1208],{"class":1101},[1050,13528,12608],{"class":1194},[1050,13530,1225],{"class":1101},[1050,13532,2287],{"class":1880},[1050,13534,1360],{"class":1101},[1050,13536,3218],{"class":1538},[1050,13538,9166],{"class":1194},[1050,13540,1360],{"class":1101},[1050,13542,11921],{"class":1538},[1050,13544,11924],{"class":1194},[1050,13546,1472],{"class":1101},[1050,13548,13549,13552,13554,13556],{"class":1052,"line":4181},[1050,13550,13551],{"class":1067},"                business_logger",[1050,13553,1102],{"class":1101},[1050,13555,11945],{"class":1194},[1050,13557,1198],{"class":1101},[1050,13559,13560,13562,13565,13567,13569,13571,13573,13575,13577],{"class":1052,"line":4213},[1050,13561,6377],{"class":1483},[1050,13563,13564],{"class":1232},"\"Model created: ",[1050,13566,4930],{"class":4929},[1050,13568,13031],{"class":1194},[1050,13570,1102],{"class":1101},[1050,13572,5879],{"class":5878},[1050,13574,4938],{"class":4929},[1050,13576,6291],{"class":1232},[1050,13578,1273],{"class":1101},[1050,13580,13581,13583],{"class":1052,"line":4218},[1050,13582,12763],{"class":1204},[1050,13584,11973],{"class":1101},[1050,13586,13587,13589,13591,13593,13595,13597,13599,13601],{"class":1052,"line":4225},[1050,13588,11357],{"class":1228},[1050,13590,6296],{"class":1232},[1050,13592,1229],{"class":1228},[1050,13594,1985],{"class":1101},[1050,13596,13442],{"class":1194},[1050,13598,1102],{"class":1101},[1050,13600,5879],{"class":5878},[1050,13602,1273],{"class":1101},[1050,13604,13605,13607,13609,13611,13613,13615,13617,13619],{"class":1052,"line":4240},[1050,13606,11357],{"class":1228},[1050,13608,13107],{"class":1232},[1050,13610,1229],{"class":1228},[1050,13612,1985],{"class":1101},[1050,13614,2507],{"class":1880},[1050,13616,1102],{"class":1101},[1050,13618,13107],{"class":1216},[1050,13620,1273],{"class":1101},[1050,13622,13623,13625,13627,13629,13631,13633,13636,13638],{"class":1052,"line":4260},[1050,13624,11357],{"class":1228},[1050,13626,5321],{"class":1232},[1050,13628,1229],{"class":1228},[1050,13630,1985],{"class":1101},[1050,13632,1408],{"class":1228},[1050,13634,13635],{"class":1232},"create",[1050,13637,1229],{"class":1228},[1050,13639,1273],{"class":1101},[1050,13641,13642],{"class":1052,"line":4289},[1050,13643,11627],{"class":1101},[1050,13645,13646],{"class":1052,"line":4310},[1050,13647,6411],{"class":1101},[1050,13649,13650],{"class":1052,"line":4331},[1050,13651,2533],{"class":1067},[1050,13653,13654,13656],{"class":1052,"line":4361},[1050,13655,3637],{"class":1063},[1050,13657,12831],{"class":1067},[1050,13659,13660],{"class":1052,"line":4381},[1050,13661,4515],{"class":1067},[1050,13663,13664,13666],{"class":1052,"line":4386},[1050,13665,4979],{"class":1063},[1050,13667,13008],{"class":1067},[1050,13669,13670,13672],{"class":1052,"line":4391},[1050,13671,1860],{"class":1063},[1050,13673,13015],{"class":1067},[1050,13675,13676],{"class":1052,"line":4397},[1050,13677,1075],{"emptyLinePlaceholder":1074},[1050,13679,13680],{"class":1052,"line":4409},[1050,13681,13682],{"class":1056},"# Usage examples\n",[1050,13684,13685,13688,13691],{"class":1052,"line":4414},[1050,13686,13687],{"class":1101},"@",[1050,13689,13690],{"class":1487},"log_function_call",[1050,13692,2398],{"class":1101},[1050,13694,13695,13697,13700,13702,13704,13706,13709],{"class":1052,"line":4424},[1050,13696,1484],{"class":1483},[1050,13698,13699],{"class":1487}," process_payment",[1050,13701,1225],{"class":1101},[1050,13703,9592],{"class":1493},[1050,13705,1360],{"class":1101},[1050,13707,13708],{"class":1493}," amount",[1050,13710,1502],{"class":1101},[1050,13712,13713,13715,13718],{"class":1052,"line":4434},[1050,13714,1509],{"class":1508},[1050,13716,13717],{"class":1512},"Process payment with automatic logging",[1050,13719,1516],{"class":1508},[1050,13721,13722,13725],{"class":1052,"line":4439},[1050,13723,13724],{"class":1194},"    log_business_event",[1050,13726,1198],{"class":1101},[1050,13728,13729,13731,13734,13736],{"class":1052,"line":4457},[1050,13730,2014],{"class":1228},[1050,13732,13733],{"class":1232},"payment_initiated",[1050,13735,1229],{"class":1228},[1050,13737,1273],{"class":1101},[1050,13739,13740,13743,13745,13747,13749,13751],{"class":1052,"line":4472},[1050,13741,13742],{"class":1204},"        user_id",[1050,13744,1208],{"class":1101},[1050,13746,9592],{"class":1194},[1050,13748,1102],{"class":1101},[1050,13750,12131],{"class":1216},[1050,13752,1273],{"class":1101},[1050,13754,13755,13758,13760,13763],{"class":1052,"line":4477},[1050,13756,13757],{"class":1204},"        amount",[1050,13759,1208],{"class":1101},[1050,13761,13762],{"class":1194},"amount",[1050,13764,1273],{"class":1101},[1050,13766,13767,13770,13772,13774,13777],{"class":1052,"line":4496},[1050,13768,13769],{"class":1204},"        currency",[1050,13771,1208],{"class":1101},[1050,13773,1229],{"class":1228},[1050,13775,13776],{"class":1232},"USD",[1050,13778,1849],{"class":1228},[1050,13780,13781],{"class":1052,"line":4512},[1050,13782,12027],{"class":1101},[1050,13784,13785],{"class":1052,"line":4518},[1050,13786,1673],{"class":1067},[1050,13788,13789],{"class":1052,"line":4524},[1050,13790,13791],{"class":1056},"    # Payment processing logic here\n",[1050,13793,13794],{"class":1052,"line":4546},[1050,13795,1673],{"class":1067},[1050,13797,13798,13800],{"class":1052,"line":4551},[1050,13799,13724],{"class":1194},[1050,13801,1198],{"class":1101},[1050,13803,13804,13806,13809,13811],{"class":1052,"line":4557},[1050,13805,2014],{"class":1228},[1050,13807,13808],{"class":1232},"payment_completed",[1050,13810,1229],{"class":1228},[1050,13812,1273],{"class":1101},[1050,13814,13815,13817,13819,13821,13823,13825],{"class":1052,"line":4588},[1050,13816,13742],{"class":1204},[1050,13818,1208],{"class":1101},[1050,13820,9592],{"class":1194},[1050,13822,1102],{"class":1101},[1050,13824,12131],{"class":1216},[1050,13826,1273],{"class":1101},[1050,13828,13829,13831,13833,13835],{"class":1052,"line":4617},[1050,13830,13757],{"class":1204},[1050,13832,1208],{"class":1101},[1050,13834,13762],{"class":1194},[1050,13836,1273],{"class":1101},[1050,13838,13839,13841,13843,13845,13847],{"class":1052,"line":4622},[1050,13840,13769],{"class":1204},[1050,13842,1208],{"class":1101},[1050,13844,1229],{"class":1228},[1050,13846,13776],{"class":1232},[1050,13848,1849],{"class":1228},[1050,13850,13851],{"class":1052,"line":4642},[1050,13852,12027],{"class":1101},[1050,13854,13855],{"class":1052,"line":4647},[1050,13856,1075],{"emptyLinePlaceholder":1074},[1050,13858,13859,13861,13864,13866,13869,13871,13874],{"class":1052,"line":4653},[1050,13860,2253],{"class":1483},[1050,13862,13863],{"class":2256}," Order",[1050,13865,1225],{"class":1101},[1050,13867,13868],{"class":8720},"models",[1050,13870,1102],{"class":1101},[1050,13872,13873],{"class":8720},"Model",[1050,13875,1502],{"class":1101},[1050,13877,13878],{"class":1052,"line":4676},[1050,13879,13880],{"class":1056},"    # Model fields here\n",[1050,13882,13883],{"class":1052,"line":4701},[1050,13884,1673],{"class":1067},[1050,13886,13887,13890,13893,13895,13897,13899,13902,13904,13906],{"class":1052,"line":4734},[1050,13888,13889],{"class":1101},"    @",[1050,13891,13892],{"class":1487},"log_model_changes",[1050,13894,1225],{"class":1101},[1050,13896,13031],{"class":1204},[1050,13898,1208],{"class":1101},[1050,13900,13901],{"class":1483},"lambda",[1050,13903,1985],{"class":1101},[1050,13905,13863],{"class":1194},[1050,13907,1472],{"class":1101},[1050,13909,13910,13912,13915,13917,13919,13921,13923,13925,13927,13929,13931],{"class":1052,"line":4767},[1050,13911,2277],{"class":1483},[1050,13913,13914],{"class":1487}," save",[1050,13916,1225],{"class":1101},[1050,13918,2287],{"class":2286},[1050,13920,1360],{"class":1101},[1050,13922,3218],{"class":1538},[1050,13924,9166],{"class":1493},[1050,13926,1360],{"class":1101},[1050,13928,11921],{"class":1538},[1050,13930,11924],{"class":1493},[1050,13932,1502],{"class":1101},[1050,13934,13935,13937,13939,13942,13944,13946,13948,13950,13952,13954],{"class":1052,"line":4772},[1050,13936,10797],{"class":2308},[1050,13938,8788],{"class":1101},[1050,13940,13941],{"class":1194},"save",[1050,13943,1225],{"class":1101},[1050,13945,7126],{"class":1538},[1050,13947,9166],{"class":1194},[1050,13949,1360],{"class":1101},[1050,13951,11921],{"class":1538},[1050,13953,11924],{"class":1194},[1050,13955,1472],{"class":1101},[1030,13957,13959],{"id":13958},"alerting-and-monitoring-systems","Alerting and Monitoring Systems",[1035,13961,13963],{"id":13962},"custom-alerting-system","Custom Alerting System",[1040,13965,13967],{"className":1042,"code":13966,"language":1044,"meta":1045,"style":1045},"# monitoring/alerts.py\nimport smtplib\nimport requests\nimport logging\nfrom email.mime.text import MIMEText\nfrom email.mime.multipart import MIMEMultipart\nfrom django.conf import settings\nfrom django.utils import timezone\nfrom .performance import performance_monitor\n\nclass AlertManager:\n    \"\"\"Manage alerts for various system conditions\"\"\"\n    \n    def __init__(self):\n        self.alert_channels = {\n            'email': self.send_email_alert,\n            'slack': self.send_slack_alert,\n            'webhook': self.send_webhook_alert,\n        }\n        self.alert_history = {}\n        self.cooldown_period = 300  # 5 minutes\n    \n    def check_system_health(self):\n        \"\"\"Check system health and send alerts if needed\"\"\"\n        metrics = performance_monitor.get_performance_summary()\n        alerts = []\n        \n        # Check various conditions\n        if metrics['system']['cpu_percent'] > 90:\n            alerts.append({\n                'level': 'critical',\n                'message': f\"High CPU usage: {metrics['system']['cpu_percent']:.1f}%\",\n                'metric': 'cpu_usage',\n                'value': metrics['system']['cpu_percent'],\n            })\n        \n        if metrics['system']['memory_percent'] > 90:\n            alerts.append({\n                'level': 'critical',\n                'message': f\"High memory usage: {metrics['system']['memory_percent']:.1f}%\",\n                'metric': 'memory_usage',\n                'value': metrics['system']['memory_percent'],\n            })\n        \n        if metrics['requests']['error_rate'] > 0.05:  # 5% error rate\n            alerts.append({\n                'level': 'warning',\n                'message': f\"High error rate: {metrics['requests']['error_rate']:.2%}\",\n                'metric': 'error_rate',\n                'value': metrics['requests']['error_rate'],\n            })\n        \n        if metrics['requests']['avg_response_time'] > 2.0:  # 2 seconds\n            alerts.append({\n                'level': 'warning',\n                'message': f\"Slow response time: {metrics['requests']['avg_response_time']:.2f}s\",\n                'metric': 'response_time',\n                'value': metrics['requests']['avg_response_time'],\n            })\n        \n        # Send alerts\n        for alert in alerts:\n            self.send_alert(alert)\n    \n    def send_alert(self, alert):\n        \"\"\"Send alert through configured channels\"\"\"\n        alert_key = f\"{alert['metric']}_{alert['level']}\"\n        current_time = timezone.now().timestamp()\n        \n        # Check cooldown period\n        if alert_key in self.alert_history:\n            last_sent = self.alert_history[alert_key]\n            if current_time - last_sent \u003C self.cooldown_period:\n                return  # Skip alert due to cooldown\n        \n        # Send through all configured channels\n        for channel in settings.ALERT_CHANNELS:\n            try:\n                self.alert_channels[channel](alert)\n            except Exception as e:\n                logging.error(f\"Failed to send alert via {channel}: {str(e)}\")\n        \n        # Update alert history\n        self.alert_history[alert_key] = current_time\n    \n    def send_email_alert(self, alert):\n        \"\"\"Send email alert\"\"\"\n        msg = MIMEMultipart()\n        msg['From'] = settings.ALERT_EMAIL_FROM\n        msg['To'] = ', '.join(settings.ALERT_EMAIL_TO)\n        msg['Subject'] = f\"[{alert['level'].upper()}] Django App Alert\"\n        \n        body = f\"\"\"\n        Alert Level: {alert['level'].upper()}\n        Message: {alert['message']}\n        Metric: {alert['metric']}\n        Value: {alert['value']}\n        Time: {timezone.now().isoformat()}\n        \n        Please check the application immediately.\n        \"\"\"\n        \n        msg.attach(MIMEText(body, 'plain'))\n        \n        server = smtplib.SMTP(settings.EMAIL_HOST, settings.EMAIL_PORT)\n        if settings.EMAIL_USE_TLS:\n            server.starttls()\n        server.login(settings.EMAIL_HOST_USER, settings.EMAIL_HOST_PASSWORD)\n        server.send_message(msg)\n        server.quit()\n    \n    def send_slack_alert(self, alert):\n        \"\"\"Send Slack alert\"\"\"\n        color = 'danger' if alert['level'] == 'critical' else 'warning'\n        \n        payload = {\n            'channel': settings.SLACK_ALERT_CHANNEL,\n            'username': 'Django Monitor',\n            'text': f\"*{alert['level'].upper()} Alert*\",\n            'attachments': [\n                {\n                    'color': color,\n                    'fields': [\n                        {'title': 'Message', 'value': alert['message'], 'short': False},\n                        {'title': 'Metric', 'value': alert['metric'], 'short': True},\n                        {'title': 'Value', 'value': str(alert['value']), 'short': True},\n                        {'title': 'Time', 'value': timezone.now().isoformat(), 'short': True},\n                    ]\n                }\n            ]\n        }\n        \n        requests.post(settings.SLACK_WEBHOOK_URL, json=payload, timeout=10)\n    \n    def send_webhook_alert(self, alert):\n        \"\"\"Send webhook alert\"\"\"\n        payload = {\n            'alert': alert,\n            'timestamp': timezone.now().isoformat(),\n            'service': 'django-app',\n        }\n        \n        requests.post(settings.ALERT_WEBHOOK_URL, json=payload, timeout=10)\n\n# Initialize alert manager\nalert_manager = AlertManager()\n\n# Celery task for periodic health checks\nfrom celery import shared_task\n\n@shared_task\ndef check_system_health():\n    \"\"\"Periodic system health check\"\"\"\n    alert_manager.check_system_health()\n",[1047,13968,13969,13974,13981,13987,13993,14015,14035,14051,14065,14080,14084,14093,14102,14106,14118,14131,14151,14171,14191,14195,14208,14225,14229,14242,14251,14268,14277,14281,14286,14318,14329,14348,14396,14415,14445,14450,14454,14484,14494,14512,14557,14576,14606,14610,14614,14648,14658,14676,14722,14740,14770,14774,14778,14812,14822,14840,14887,14905,14935,14939,14943,14948,14962,14978,14982,15000,15009,15056,15075,15079,15084,15101,15121,15143,15150,15154,15159,15178,15184,15203,15215,15255,15259,15264,15283,15287,15304,15313,15325,15350,15390,15435,15439,15450,15475,15496,15517,15538,15559,15563,15568,15573,15577,15607,15611,15646,15659,15671,15701,15716,15727,15731,15748,15757,15800,15804,15813,15832,15851,15891,15903,15908,15923,15935,15989,16042,16100,16152,16157,16161,16166,16170,16174,16212,16216,16233,16242,16250,16264,16286,16305,16309,16313,16348,16352,16357,16368,16372,16377,16389,16393,16400,16408,16417],{"__ignoreMap":1045},[1050,13970,13971],{"class":1052,"line":1053},[1050,13972,13973],{"class":1056},"# monitoring/alerts.py\n",[1050,13975,13976,13978],{"class":1052,"line":1060},[1050,13977,1064],{"class":1063},[1050,13979,13980],{"class":1067}," smtplib\n",[1050,13982,13983,13985],{"class":1052,"line":1071},[1050,13984,1064],{"class":1063},[1050,13986,10698],{"class":1067},[1050,13988,13989,13991],{"class":1052,"line":1078},[1050,13990,1064],{"class":1063},[1050,13992,8671],{"class":1067},[1050,13994,13995,13997,14000,14002,14005,14007,14010,14012],{"class":1052,"line":1084},[1050,13996,1095],{"class":1063},[1050,13998,13999],{"class":1067}," email",[1050,14001,1102],{"class":1101},[1050,14003,14004],{"class":1067},"mime",[1050,14006,1102],{"class":1101},[1050,14008,14009],{"class":1067},"text ",[1050,14011,1064],{"class":1063},[1050,14013,14014],{"class":1067}," MIMEText\n",[1050,14016,14017,14019,14021,14023,14025,14027,14030,14032],{"class":1052,"line":1092},[1050,14018,1095],{"class":1063},[1050,14020,13999],{"class":1067},[1050,14022,1102],{"class":1101},[1050,14024,14004],{"class":1067},[1050,14026,1102],{"class":1101},[1050,14028,14029],{"class":1067},"multipart ",[1050,14031,1064],{"class":1063},[1050,14033,14034],{"class":1067}," MIMEMultipart\n",[1050,14036,14037,14039,14041,14043,14046,14048],{"class":1052,"line":1118},[1050,14038,1095],{"class":1063},[1050,14040,2190],{"class":1067},[1050,14042,1102],{"class":1101},[1050,14044,14045],{"class":1067},"conf ",[1050,14047,1064],{"class":1063},[1050,14049,14050],{"class":1067}," settings\n",[1050,14052,14053,14055,14057,14059,14061,14063],{"class":1052,"line":1139},[1050,14054,1095],{"class":1063},[1050,14056,2190],{"class":1067},[1050,14058,1102],{"class":1101},[1050,14060,2232],{"class":1067},[1050,14062,1064],{"class":1063},[1050,14064,2237],{"class":1067},[1050,14066,14067,14069,14072,14075,14077],{"class":1052,"line":1160},[1050,14068,1095],{"class":1063},[1050,14070,14071],{"class":1101}," .",[1050,14073,14074],{"class":1067},"performance ",[1050,14076,1064],{"class":1063},[1050,14078,14079],{"class":1067}," performance_monitor\n",[1050,14081,14082],{"class":1052,"line":1181},[1050,14083,1075],{"emptyLinePlaceholder":1074},[1050,14085,14086,14088,14091],{"class":1052,"line":1186},[1050,14087,2253],{"class":1483},[1050,14089,14090],{"class":2256}," AlertManager",[1050,14092,1626],{"class":1101},[1050,14094,14095,14097,14100],{"class":1052,"line":1201},[1050,14096,1509],{"class":1508},[1050,14098,14099],{"class":1512},"Manage alerts for various system conditions",[1050,14101,1516],{"class":1508},[1050,14103,14104],{"class":1052,"line":1241},[1050,14105,1673],{"class":1067},[1050,14107,14108,14110,14112,14114,14116],{"class":1052,"line":1250},[1050,14109,2277],{"class":1483},[1050,14111,2281],{"class":2280},[1050,14113,1225],{"class":1101},[1050,14115,2287],{"class":2286},[1050,14117,1502],{"class":1101},[1050,14119,14120,14122,14124,14127,14129],{"class":1052,"line":1258},[1050,14121,2294],{"class":1880},[1050,14123,1102],{"class":1101},[1050,14125,14126],{"class":1216},"alert_channels",[1050,14128,1841],{"class":1101},[1050,14130,1971],{"class":1101},[1050,14132,14133,14135,14138,14140,14142,14144,14146,14149],{"class":1052,"line":1276},[1050,14134,6665],{"class":1228},[1050,14136,14137],{"class":1232},"email",[1050,14139,1229],{"class":1228},[1050,14141,1985],{"class":1101},[1050,14143,2507],{"class":1880},[1050,14145,1102],{"class":1101},[1050,14147,14148],{"class":1216},"send_email_alert",[1050,14150,1273],{"class":1101},[1050,14152,14153,14155,14158,14160,14162,14164,14166,14169],{"class":1052,"line":1290},[1050,14154,6665],{"class":1228},[1050,14156,14157],{"class":1232},"slack",[1050,14159,1229],{"class":1228},[1050,14161,1985],{"class":1101},[1050,14163,2507],{"class":1880},[1050,14165,1102],{"class":1101},[1050,14167,14168],{"class":1216},"send_slack_alert",[1050,14170,1273],{"class":1101},[1050,14172,14173,14175,14178,14180,14182,14184,14186,14189],{"class":1052,"line":1302},[1050,14174,6665],{"class":1228},[1050,14176,14177],{"class":1232},"webhook",[1050,14179,1229],{"class":1228},[1050,14181,1985],{"class":1101},[1050,14183,2507],{"class":1880},[1050,14185,1102],{"class":1101},[1050,14187,14188],{"class":1216},"send_webhook_alert",[1050,14190,1273],{"class":1101},[1050,14192,14193],{"class":1052,"line":1308},[1050,14194,8953],{"class":1101},[1050,14196,14197,14199,14201,14204,14206],{"class":1052,"line":1325},[1050,14198,2294],{"class":1880},[1050,14200,1102],{"class":1101},[1050,14202,14203],{"class":1216},"alert_history",[1050,14205,1841],{"class":1101},[1050,14207,6071],{"class":1101},[1050,14209,14210,14212,14214,14217,14219,14222],{"class":1052,"line":1334},[1050,14211,2294],{"class":1880},[1050,14213,1102],{"class":1101},[1050,14215,14216],{"class":1216},"cooldown_period",[1050,14218,1841],{"class":1101},[1050,14220,14221],{"class":1356}," 300",[1050,14223,14224],{"class":1056},"  # 5 minutes\n",[1050,14226,14227],{"class":1052,"line":1342},[1050,14228,1673],{"class":1067},[1050,14230,14231,14233,14236,14238,14240],{"class":1052,"line":1348},[1050,14232,2277],{"class":1483},[1050,14234,14235],{"class":1487}," check_system_health",[1050,14237,1225],{"class":1101},[1050,14239,2287],{"class":2286},[1050,14241,1502],{"class":1101},[1050,14243,14244,14246,14249],{"class":1052,"line":1366},[1050,14245,2494],{"class":1508},[1050,14247,14248],{"class":1512},"Check system health and send alerts if needed",[1050,14250,1516],{"class":1508},[1050,14252,14253,14256,14258,14261,14263,14266],{"class":1052,"line":1379},[1050,14254,14255],{"class":1067},"        metrics ",[1050,14257,1208],{"class":1101},[1050,14259,14260],{"class":1067}," performance_monitor",[1050,14262,1102],{"class":1101},[1050,14264,14265],{"class":1194},"get_performance_summary",[1050,14267,2398],{"class":1101},[1050,14269,14270,14273,14275],{"class":1052,"line":1418},[1050,14271,14272],{"class":1067},"        alerts ",[1050,14274,1208],{"class":1101},[1050,14276,3061],{"class":1101},[1050,14278,14279],{"class":1052,"line":1456},[1050,14280,4515],{"class":1067},[1050,14282,14283],{"class":1052,"line":1469},[1050,14284,14285],{"class":1056},"        # Check various conditions\n",[1050,14287,14288,14290,14293,14295,14297,14299,14301,14303,14305,14307,14309,14311,14313,14316],{"class":1052,"line":1475},[1050,14289,8967],{"class":1063},[1050,14291,14292],{"class":1067}," metrics",[1050,14294,1560],{"class":1101},[1050,14296,1229],{"class":1228},[1050,14298,3880],{"class":1232},[1050,14300,1229],{"class":1228},[1050,14302,1643],{"class":1101},[1050,14304,1229],{"class":1228},[1050,14306,3582],{"class":1232},[1050,14308,1229],{"class":1228},[1050,14310,1838],{"class":1101},[1050,14312,2732],{"class":1538},[1050,14314,14315],{"class":1356}," 90",[1050,14317,1626],{"class":1101},[1050,14319,14320,14323,14325,14327],{"class":1052,"line":1480},[1050,14321,14322],{"class":1067},"            alerts",[1050,14324,1102],{"class":1101},[1050,14326,2691],{"class":1194},[1050,14328,11684],{"class":1101},[1050,14330,14331,14333,14335,14337,14339,14341,14344,14346],{"class":1052,"line":1505},[1050,14332,2547],{"class":1228},[1050,14334,6963],{"class":1232},[1050,14336,1229],{"class":1228},[1050,14338,1985],{"class":1101},[1050,14340,1408],{"class":1228},[1050,14342,14343],{"class":1232},"critical",[1050,14345,1229],{"class":1228},[1050,14347,1273],{"class":1101},[1050,14349,14350,14352,14354,14356,14358,14360,14363,14365,14368,14370,14372,14374,14376,14378,14380,14382,14384,14386,14389,14391,14394],{"class":1052,"line":1519},[1050,14351,2547],{"class":1228},[1050,14353,8839],{"class":1232},[1050,14355,1229],{"class":1228},[1050,14357,1985],{"class":1101},[1050,14359,4924],{"class":1483},[1050,14361,14362],{"class":1232},"\"High CPU usage: ",[1050,14364,4930],{"class":4929},[1050,14366,14367],{"class":1194},"metrics",[1050,14369,1560],{"class":1101},[1050,14371,1229],{"class":1228},[1050,14373,3880],{"class":1232},[1050,14375,1229],{"class":1228},[1050,14377,1643],{"class":1101},[1050,14379,1229],{"class":1228},[1050,14381,3582],{"class":1232},[1050,14383,1229],{"class":1228},[1050,14385,1838],{"class":1101},[1050,14387,14388],{"class":1483},":.1f",[1050,14390,4938],{"class":4929},[1050,14392,14393],{"class":1232},"%\"",[1050,14395,1273],{"class":1101},[1050,14397,14398,14400,14402,14404,14406,14408,14411,14413],{"class":1052,"line":1525},[1050,14399,2547],{"class":1228},[1050,14401,2696],{"class":1232},[1050,14403,1229],{"class":1228},[1050,14405,1985],{"class":1101},[1050,14407,1408],{"class":1228},[1050,14409,14410],{"class":1232},"cpu_usage",[1050,14412,1229],{"class":1228},[1050,14414,1273],{"class":1101},[1050,14416,14417,14419,14421,14423,14425,14427,14429,14431,14433,14435,14437,14439,14441,14443],{"class":1052,"line":1572},[1050,14418,2547],{"class":1228},[1050,14420,10586],{"class":1232},[1050,14422,1229],{"class":1228},[1050,14424,1985],{"class":1101},[1050,14426,14292],{"class":1194},[1050,14428,1560],{"class":1101},[1050,14430,1229],{"class":1228},[1050,14432,3880],{"class":1232},[1050,14434,1229],{"class":1228},[1050,14436,1643],{"class":1101},[1050,14438,1229],{"class":1228},[1050,14440,3582],{"class":1232},[1050,14442,1229],{"class":1228},[1050,14444,7035],{"class":1101},[1050,14446,14447],{"class":1052,"line":1611},[1050,14448,14449],{"class":1101},"            })\n",[1050,14451,14452],{"class":1052,"line":1629},[1050,14453,4515],{"class":1067},[1050,14455,14456,14458,14460,14462,14464,14466,14468,14470,14472,14474,14476,14478,14480,14482],{"class":1052,"line":1670},[1050,14457,8967],{"class":1063},[1050,14459,14292],{"class":1067},[1050,14461,1560],{"class":1101},[1050,14463,1229],{"class":1228},[1050,14465,3880],{"class":1232},[1050,14467,1229],{"class":1228},[1050,14469,1643],{"class":1101},[1050,14471,1229],{"class":1228},[1050,14473,3910],{"class":1232},[1050,14475,1229],{"class":1228},[1050,14477,1838],{"class":1101},[1050,14479,2732],{"class":1538},[1050,14481,14315],{"class":1356},[1050,14483,1626],{"class":1101},[1050,14485,14486,14488,14490,14492],{"class":1052,"line":1676},[1050,14487,14322],{"class":1067},[1050,14489,1102],{"class":1101},[1050,14491,2691],{"class":1194},[1050,14493,11684],{"class":1101},[1050,14495,14496,14498,14500,14502,14504,14506,14508,14510],{"class":1052,"line":1682},[1050,14497,2547],{"class":1228},[1050,14499,6963],{"class":1232},[1050,14501,1229],{"class":1228},[1050,14503,1985],{"class":1101},[1050,14505,1408],{"class":1228},[1050,14507,14343],{"class":1232},[1050,14509,1229],{"class":1228},[1050,14511,1273],{"class":1101},[1050,14513,14514,14516,14518,14520,14522,14524,14527,14529,14531,14533,14535,14537,14539,14541,14543,14545,14547,14549,14551,14553,14555],{"class":1052,"line":1720},[1050,14515,2547],{"class":1228},[1050,14517,8839],{"class":1232},[1050,14519,1229],{"class":1228},[1050,14521,1985],{"class":1101},[1050,14523,4924],{"class":1483},[1050,14525,14526],{"class":1232},"\"High memory usage: ",[1050,14528,4930],{"class":4929},[1050,14530,14367],{"class":1194},[1050,14532,1560],{"class":1101},[1050,14534,1229],{"class":1228},[1050,14536,3880],{"class":1232},[1050,14538,1229],{"class":1228},[1050,14540,1643],{"class":1101},[1050,14542,1229],{"class":1228},[1050,14544,3910],{"class":1232},[1050,14546,1229],{"class":1228},[1050,14548,1838],{"class":1101},[1050,14550,14388],{"class":1483},[1050,14552,4938],{"class":4929},[1050,14554,14393],{"class":1232},[1050,14556,1273],{"class":1101},[1050,14558,14559,14561,14563,14565,14567,14569,14572,14574],{"class":1052,"line":1766},[1050,14560,2547],{"class":1228},[1050,14562,2696],{"class":1232},[1050,14564,1229],{"class":1228},[1050,14566,1985],{"class":1101},[1050,14568,1408],{"class":1228},[1050,14570,14571],{"class":1232},"memory_usage",[1050,14573,1229],{"class":1228},[1050,14575,1273],{"class":1101},[1050,14577,14578,14580,14582,14584,14586,14588,14590,14592,14594,14596,14598,14600,14602,14604],{"class":1052,"line":1781},[1050,14579,2547],{"class":1228},[1050,14581,10586],{"class":1232},[1050,14583,1229],{"class":1228},[1050,14585,1985],{"class":1101},[1050,14587,14292],{"class":1194},[1050,14589,1560],{"class":1101},[1050,14591,1229],{"class":1228},[1050,14593,3880],{"class":1232},[1050,14595,1229],{"class":1228},[1050,14597,1643],{"class":1101},[1050,14599,1229],{"class":1228},[1050,14601,3910],{"class":1232},[1050,14603,1229],{"class":1228},[1050,14605,7035],{"class":1101},[1050,14607,14608],{"class":1052,"line":1811},[1050,14609,14449],{"class":1101},[1050,14611,14612],{"class":1052,"line":1852},[1050,14613,4515],{"class":1067},[1050,14615,14616,14618,14620,14622,14624,14626,14628,14630,14632,14634,14636,14638,14640,14643,14645],{"class":1052,"line":1857},[1050,14617,8967],{"class":1063},[1050,14619,14292],{"class":1067},[1050,14621,1560],{"class":1101},[1050,14623,1229],{"class":1228},[1050,14625,3680],{"class":1232},[1050,14627,1229],{"class":1228},[1050,14629,1643],{"class":1101},[1050,14631,1229],{"class":1228},[1050,14633,3729],{"class":1232},[1050,14635,1229],{"class":1228},[1050,14637,1838],{"class":1101},[1050,14639,2732],{"class":1538},[1050,14641,14642],{"class":1356}," 0.05",[1050,14644,1985],{"class":1101},[1050,14646,14647],{"class":1056},"  # 5% error rate\n",[1050,14649,14650,14652,14654,14656],{"class":1052,"line":1866},[1050,14651,14322],{"class":1067},[1050,14653,1102],{"class":1101},[1050,14655,2691],{"class":1194},[1050,14657,11684],{"class":1101},[1050,14659,14660,14662,14664,14666,14668,14670,14672,14674],{"class":1052,"line":1871},[1050,14661,2547],{"class":1228},[1050,14663,6963],{"class":1232},[1050,14665,1229],{"class":1228},[1050,14667,1985],{"class":1101},[1050,14669,1408],{"class":1228},[1050,14671,11394],{"class":1232},[1050,14673,1229],{"class":1228},[1050,14675,1273],{"class":1101},[1050,14677,14678,14680,14682,14684,14686,14688,14691,14693,14695,14697,14699,14701,14703,14705,14707,14709,14711,14713,14716,14718,14720],{"class":1052,"line":1877},[1050,14679,2547],{"class":1228},[1050,14681,8839],{"class":1232},[1050,14683,1229],{"class":1228},[1050,14685,1985],{"class":1101},[1050,14687,4924],{"class":1483},[1050,14689,14690],{"class":1232},"\"High error rate: ",[1050,14692,4930],{"class":4929},[1050,14694,14367],{"class":1194},[1050,14696,1560],{"class":1101},[1050,14698,1229],{"class":1228},[1050,14700,3680],{"class":1232},[1050,14702,1229],{"class":1228},[1050,14704,1643],{"class":1101},[1050,14706,1229],{"class":1228},[1050,14708,3729],{"class":1232},[1050,14710,1229],{"class":1228},[1050,14712,1838],{"class":1101},[1050,14714,14715],{"class":1483},":.2%",[1050,14717,4938],{"class":4929},[1050,14719,6291],{"class":1232},[1050,14721,1273],{"class":1101},[1050,14723,14724,14726,14728,14730,14732,14734,14736,14738],{"class":1052,"line":1916},[1050,14725,2547],{"class":1228},[1050,14727,2696],{"class":1232},[1050,14729,1229],{"class":1228},[1050,14731,1985],{"class":1101},[1050,14733,1408],{"class":1228},[1050,14735,3729],{"class":1232},[1050,14737,1229],{"class":1228},[1050,14739,1273],{"class":1101},[1050,14741,14742,14744,14746,14748,14750,14752,14754,14756,14758,14760,14762,14764,14766,14768],{"class":1052,"line":1952},[1050,14743,2547],{"class":1228},[1050,14745,10586],{"class":1232},[1050,14747,1229],{"class":1228},[1050,14749,1985],{"class":1101},[1050,14751,14292],{"class":1194},[1050,14753,1560],{"class":1101},[1050,14755,1229],{"class":1228},[1050,14757,3680],{"class":1232},[1050,14759,1229],{"class":1228},[1050,14761,1643],{"class":1101},[1050,14763,1229],{"class":1228},[1050,14765,3729],{"class":1232},[1050,14767,1229],{"class":1228},[1050,14769,7035],{"class":1101},[1050,14771,14772],{"class":1052,"line":1957},[1050,14773,14449],{"class":1101},[1050,14775,14776],{"class":1052,"line":1963},[1050,14777,4515],{"class":1067},[1050,14779,14780,14782,14784,14786,14788,14790,14792,14794,14796,14798,14800,14802,14804,14807,14809],{"class":1052,"line":1974},[1050,14781,8967],{"class":1063},[1050,14783,14292],{"class":1067},[1050,14785,1560],{"class":1101},[1050,14787,1229],{"class":1228},[1050,14789,3680],{"class":1232},[1050,14791,1229],{"class":1228},[1050,14793,1643],{"class":1101},[1050,14795,1229],{"class":1228},[1050,14797,3746],{"class":1232},[1050,14799,1229],{"class":1228},[1050,14801,1838],{"class":1101},[1050,14803,2732],{"class":1538},[1050,14805,14806],{"class":1356}," 2.0",[1050,14808,1985],{"class":1101},[1050,14810,14811],{"class":1056},"  # 2 seconds\n",[1050,14813,14814,14816,14818,14820],{"class":1052,"line":1997},[1050,14815,14322],{"class":1067},[1050,14817,1102],{"class":1101},[1050,14819,2691],{"class":1194},[1050,14821,11684],{"class":1101},[1050,14823,14824,14826,14828,14830,14832,14834,14836,14838],{"class":1052,"line":2011},[1050,14825,2547],{"class":1228},[1050,14827,6963],{"class":1232},[1050,14829,1229],{"class":1228},[1050,14831,1985],{"class":1101},[1050,14833,1408],{"class":1228},[1050,14835,11394],{"class":1232},[1050,14837,1229],{"class":1228},[1050,14839,1273],{"class":1101},[1050,14841,14842,14844,14846,14848,14850,14852,14855,14857,14859,14861,14863,14865,14867,14869,14871,14873,14875,14877,14880,14882,14885],{"class":1052,"line":2052},[1050,14843,2547],{"class":1228},[1050,14845,8839],{"class":1232},[1050,14847,1229],{"class":1228},[1050,14849,1985],{"class":1101},[1050,14851,4924],{"class":1483},[1050,14853,14854],{"class":1232},"\"Slow response time: ",[1050,14856,4930],{"class":4929},[1050,14858,14367],{"class":1194},[1050,14860,1560],{"class":1101},[1050,14862,1229],{"class":1228},[1050,14864,3680],{"class":1232},[1050,14866,1229],{"class":1228},[1050,14868,1643],{"class":1101},[1050,14870,1229],{"class":1228},[1050,14872,3746],{"class":1232},[1050,14874,1229],{"class":1228},[1050,14876,1838],{"class":1101},[1050,14878,14879],{"class":1483},":.2f",[1050,14881,4938],{"class":4929},[1050,14883,14884],{"class":1232},"s\"",[1050,14886,1273],{"class":1101},[1050,14888,14889,14891,14893,14895,14897,14899,14901,14903],{"class":1052,"line":2092},[1050,14890,2547],{"class":1228},[1050,14892,2696],{"class":1232},[1050,14894,1229],{"class":1228},[1050,14896,1985],{"class":1101},[1050,14898,1408],{"class":1228},[1050,14900,2610],{"class":1232},[1050,14902,1229],{"class":1228},[1050,14904,1273],{"class":1101},[1050,14906,14907,14909,14911,14913,14915,14917,14919,14921,14923,14925,14927,14929,14931,14933],{"class":1052,"line":2098},[1050,14908,2547],{"class":1228},[1050,14910,10586],{"class":1232},[1050,14912,1229],{"class":1228},[1050,14914,1985],{"class":1101},[1050,14916,14292],{"class":1194},[1050,14918,1560],{"class":1101},[1050,14920,1229],{"class":1228},[1050,14922,3680],{"class":1232},[1050,14924,1229],{"class":1228},[1050,14926,1643],{"class":1101},[1050,14928,1229],{"class":1228},[1050,14930,3746],{"class":1232},[1050,14932,1229],{"class":1228},[1050,14934,7035],{"class":1101},[1050,14936,14937],{"class":1052,"line":2104},[1050,14938,14449],{"class":1101},[1050,14940,14941],{"class":1052,"line":2109},[1050,14942,4515],{"class":1067},[1050,14944,14945],{"class":1052,"line":2115},[1050,14946,14947],{"class":1056},"        # Send alerts\n",[1050,14949,14950,14952,14955,14957,14960],{"class":1052,"line":2126},[1050,14951,1614],{"class":1063},[1050,14953,14954],{"class":1067}," alert ",[1050,14956,1620],{"class":1063},[1050,14958,14959],{"class":1067}," alerts",[1050,14961,1626],{"class":1101},[1050,14963,14964,14966,14968,14971,14973,14976],{"class":1052,"line":3021},[1050,14965,2678],{"class":1880},[1050,14967,1102],{"class":1101},[1050,14969,14970],{"class":1194},"send_alert",[1050,14972,1225],{"class":1101},[1050,14974,14975],{"class":1194},"alert",[1050,14977,1472],{"class":1101},[1050,14979,14980],{"class":1052,"line":3042},[1050,14981,1673],{"class":1067},[1050,14983,14984,14986,14989,14991,14993,14995,14998],{"class":1052,"line":3047},[1050,14985,2277],{"class":1483},[1050,14987,14988],{"class":1487}," send_alert",[1050,14990,1225],{"class":1101},[1050,14992,2287],{"class":2286},[1050,14994,1360],{"class":1101},[1050,14996,14997],{"class":1493}," alert",[1050,14999,1502],{"class":1101},[1050,15001,15002,15004,15007],{"class":1052,"line":3053},[1050,15003,2494],{"class":1508},[1050,15005,15006],{"class":1512},"Send alert through configured channels",[1050,15008,1516],{"class":1508},[1050,15010,15011,15014,15016,15018,15020,15022,15024,15026,15028,15030,15032,15034,15036,15038,15040,15042,15044,15046,15048,15050,15052,15054],{"class":1052,"line":3064},[1050,15012,15013],{"class":1067},"        alert_key ",[1050,15015,1208],{"class":1101},[1050,15017,4924],{"class":1483},[1050,15019,6291],{"class":1232},[1050,15021,4930],{"class":4929},[1050,15023,14975],{"class":1067},[1050,15025,1560],{"class":1101},[1050,15027,1229],{"class":1228},[1050,15029,2696],{"class":1232},[1050,15031,1229],{"class":1228},[1050,15033,1838],{"class":1101},[1050,15035,4938],{"class":4929},[1050,15037,6311],{"class":1232},[1050,15039,4930],{"class":4929},[1050,15041,14975],{"class":1067},[1050,15043,1560],{"class":1101},[1050,15045,1229],{"class":1228},[1050,15047,6963],{"class":1232},[1050,15049,1229],{"class":1228},[1050,15051,1838],{"class":1101},[1050,15053,4938],{"class":4929},[1050,15055,6329],{"class":1232},[1050,15057,15058,15061,15063,15065,15067,15069,15071,15073],{"class":1052,"line":3089},[1050,15059,15060],{"class":1067},"        current_time ",[1050,15062,1208],{"class":1101},[1050,15064,8781],{"class":1067},[1050,15066,1102],{"class":1101},[1050,15068,6178],{"class":1194},[1050,15070,8788],{"class":1101},[1050,15072,2550],{"class":1194},[1050,15074,2398],{"class":1101},[1050,15076,15077],{"class":1052,"line":3107},[1050,15078,4515],{"class":1067},[1050,15080,15081],{"class":1052,"line":3112},[1050,15082,15083],{"class":1056},"        # Check cooldown period\n",[1050,15085,15086,15088,15091,15093,15095,15097,15099],{"class":1052,"line":3122},[1050,15087,8967],{"class":1063},[1050,15089,15090],{"class":1067}," alert_key ",[1050,15092,1620],{"class":1538},[1050,15094,2507],{"class":1880},[1050,15096,1102],{"class":1101},[1050,15098,14203],{"class":1216},[1050,15100,1626],{"class":1101},[1050,15102,15103,15106,15108,15110,15112,15114,15116,15119],{"class":1052,"line":3157},[1050,15104,15105],{"class":1067},"            last_sent ",[1050,15107,1208],{"class":1101},[1050,15109,2507],{"class":1880},[1050,15111,1102],{"class":1101},[1050,15113,14203],{"class":1216},[1050,15115,1560],{"class":1101},[1050,15117,15118],{"class":1216},"alert_key",[1050,15120,1608],{"class":1101},[1050,15122,15123,15125,15127,15129,15132,15135,15137,15139,15141],{"class":1052,"line":3187},[1050,15124,1784],{"class":1063},[1050,15126,3029],{"class":1067},[1050,15128,3032],{"class":1538},[1050,15130,15131],{"class":1067}," last_sent ",[1050,15133,15134],{"class":1538},"\u003C",[1050,15136,2507],{"class":1880},[1050,15138,1102],{"class":1101},[1050,15140,14216],{"class":1216},[1050,15142,1626],{"class":1101},[1050,15144,15145,15147],{"class":1052,"line":3227},[1050,15146,4093],{"class":1063},[1050,15148,15149],{"class":1056},"  # Skip alert due to cooldown\n",[1050,15151,15152],{"class":1052,"line":3262},[1050,15153,4515],{"class":1067},[1050,15155,15156],{"class":1052,"line":3268},[1050,15157,15158],{"class":1056},"        # Send through all configured channels\n",[1050,15160,15161,15163,15166,15168,15171,15173,15176],{"class":1052,"line":3285},[1050,15162,1614],{"class":1063},[1050,15164,15165],{"class":1067}," channel ",[1050,15167,1620],{"class":1063},[1050,15169,15170],{"class":1067}," settings",[1050,15172,1102],{"class":1101},[1050,15174,15175],{"class":9907},"ALERT_CHANNELS",[1050,15177,1626],{"class":1101},[1050,15179,15180,15182],{"class":1052,"line":3332},[1050,15181,6420],{"class":1063},[1050,15183,1626],{"class":1101},[1050,15185,15186,15188,15190,15192,15194,15196,15199,15201],{"class":1052,"line":3365},[1050,15187,2742],{"class":1880},[1050,15189,1102],{"class":1101},[1050,15191,14126],{"class":1216},[1050,15193,1560],{"class":1101},[1050,15195,11173],{"class":1216},[1050,15197,15198],{"class":1101},"](",[1050,15200,14975],{"class":1194},[1050,15202,1472],{"class":1101},[1050,15204,15205,15207,15209,15211,15213],{"class":1052,"line":3373},[1050,15206,6469],{"class":1063},[1050,15208,5838],{"class":2308},[1050,15210,5841],{"class":1063},[1050,15212,5844],{"class":1067},[1050,15214,1626],{"class":1101},[1050,15216,15217,15220,15222,15224,15226,15228,15231,15233,15235,15237,15239,15241,15243,15245,15247,15249,15251,15253],{"class":1052,"line":3392},[1050,15218,15219],{"class":1067},"                logging",[1050,15221,1102],{"class":1101},[1050,15223,12852],{"class":1194},[1050,15225,1225],{"class":1101},[1050,15227,10500],{"class":1483},[1050,15229,15230],{"class":1232},"\"Failed to send alert via ",[1050,15232,4930],{"class":4929},[1050,15234,11173],{"class":1194},[1050,15236,4938],{"class":4929},[1050,15238,12874],{"class":1232},[1050,15240,4930],{"class":4929},[1050,15242,9418],{"class":2308},[1050,15244,1225],{"class":1101},[1050,15246,5872],{"class":1194},[1050,15248,3173],{"class":1101},[1050,15250,4938],{"class":4929},[1050,15252,6291],{"class":1232},[1050,15254,1472],{"class":1101},[1050,15256,15257],{"class":1052,"line":3410},[1050,15258,4515],{"class":1067},[1050,15260,15261],{"class":1052,"line":3415},[1050,15262,15263],{"class":1056},"        # Update alert history\n",[1050,15265,15266,15268,15270,15272,15274,15276,15278,15280],{"class":1052,"line":3421},[1050,15267,2294],{"class":1880},[1050,15269,1102],{"class":1101},[1050,15271,14203],{"class":1216},[1050,15273,1560],{"class":1101},[1050,15275,15118],{"class":1216},[1050,15277,1838],{"class":1101},[1050,15279,1841],{"class":1101},[1050,15281,15282],{"class":1067}," current_time\n",[1050,15284,15285],{"class":1052,"line":3434},[1050,15286,1673],{"class":1067},[1050,15288,15289,15291,15294,15296,15298,15300,15302],{"class":1052,"line":3472},[1050,15290,2277],{"class":1483},[1050,15292,15293],{"class":1487}," send_email_alert",[1050,15295,1225],{"class":1101},[1050,15297,2287],{"class":2286},[1050,15299,1360],{"class":1101},[1050,15301,14997],{"class":1493},[1050,15303,1502],{"class":1101},[1050,15305,15306,15308,15311],{"class":1052,"line":3499},[1050,15307,2494],{"class":1508},[1050,15309,15310],{"class":1512},"Send email alert",[1050,15312,1516],{"class":1508},[1050,15314,15315,15318,15320,15323],{"class":1052,"line":3537},[1050,15316,15317],{"class":1067},"        msg ",[1050,15319,1208],{"class":1101},[1050,15321,15322],{"class":1194}," MIMEMultipart",[1050,15324,2398],{"class":1101},[1050,15326,15327,15330,15332,15334,15337,15339,15341,15343,15345,15347],{"class":1052,"line":3544},[1050,15328,15329],{"class":1067},"        msg",[1050,15331,1560],{"class":1101},[1050,15333,1229],{"class":1228},[1050,15335,15336],{"class":1232},"From",[1050,15338,1229],{"class":1228},[1050,15340,1838],{"class":1101},[1050,15342,1841],{"class":1101},[1050,15344,15170],{"class":1067},[1050,15346,1102],{"class":1101},[1050,15348,15349],{"class":9907},"ALERT_EMAIL_FROM\n",[1050,15351,15352,15354,15356,15358,15361,15363,15365,15367,15369,15372,15374,15376,15378,15380,15383,15385,15388],{"class":1052,"line":3558},[1050,15353,15329],{"class":1067},[1050,15355,1560],{"class":1101},[1050,15357,1229],{"class":1228},[1050,15359,15360],{"class":1232},"To",[1050,15362,1229],{"class":1228},[1050,15364,1838],{"class":1101},[1050,15366,1841],{"class":1101},[1050,15368,1408],{"class":1228},[1050,15370,15371],{"class":1232},", ",[1050,15373,1229],{"class":1228},[1050,15375,1102],{"class":1101},[1050,15377,1896],{"class":1194},[1050,15379,1225],{"class":1101},[1050,15381,15382],{"class":1194},"settings",[1050,15384,1102],{"class":1101},[1050,15386,15387],{"class":9907},"ALERT_EMAIL_TO",[1050,15389,1472],{"class":1101},[1050,15391,15392,15394,15396,15398,15401,15403,15405,15407,15409,15412,15414,15416,15418,15420,15422,15424,15426,15428,15430,15432],{"class":1052,"line":3563},[1050,15393,15329],{"class":1067},[1050,15395,1560],{"class":1101},[1050,15397,1229],{"class":1228},[1050,15399,15400],{"class":1232},"Subject",[1050,15402,1229],{"class":1228},[1050,15404,1838],{"class":1101},[1050,15406,1841],{"class":1101},[1050,15408,4924],{"class":1483},[1050,15410,15411],{"class":1232},"\"[",[1050,15413,4930],{"class":4929},[1050,15415,14975],{"class":1067},[1050,15417,1560],{"class":1101},[1050,15419,1229],{"class":1228},[1050,15421,6963],{"class":1232},[1050,15423,1229],{"class":1228},[1050,15425,1652],{"class":1101},[1050,15427,10513],{"class":1194},[1050,15429,4667],{"class":1101},[1050,15431,4938],{"class":4929},[1050,15433,15434],{"class":1232},"] Django App Alert\"\n",[1050,15436,15437],{"class":1052,"line":3569},[1050,15438,4515],{"class":1067},[1050,15440,15441,15444,15446,15448],{"class":1052,"line":3587},[1050,15442,15443],{"class":1067},"        body ",[1050,15445,1208],{"class":1101},[1050,15447,4924],{"class":1483},[1050,15449,1516],{"class":1232},[1050,15451,15452,15455,15457,15459,15461,15463,15465,15467,15469,15471,15473],{"class":1052,"line":3604},[1050,15453,15454],{"class":1232},"        Alert Level: ",[1050,15456,4930],{"class":4929},[1050,15458,14975],{"class":1067},[1050,15460,1560],{"class":1101},[1050,15462,1229],{"class":1228},[1050,15464,6963],{"class":1232},[1050,15466,1229],{"class":1228},[1050,15468,1652],{"class":1101},[1050,15470,10513],{"class":1194},[1050,15472,4667],{"class":1101},[1050,15474,2101],{"class":4929},[1050,15476,15477,15480,15482,15484,15486,15488,15490,15492,15494],{"class":1052,"line":3629},[1050,15478,15479],{"class":1232},"        Message: ",[1050,15481,4930],{"class":4929},[1050,15483,14975],{"class":1067},[1050,15485,1560],{"class":1101},[1050,15487,1229],{"class":1228},[1050,15489,8839],{"class":1232},[1050,15491,1229],{"class":1228},[1050,15493,1838],{"class":1101},[1050,15495,2101],{"class":4929},[1050,15497,15498,15501,15503,15505,15507,15509,15511,15513,15515],{"class":1052,"line":3634},[1050,15499,15500],{"class":1232},"        Metric: ",[1050,15502,4930],{"class":4929},[1050,15504,14975],{"class":1067},[1050,15506,1560],{"class":1101},[1050,15508,1229],{"class":1228},[1050,15510,2696],{"class":1232},[1050,15512,1229],{"class":1228},[1050,15514,1838],{"class":1101},[1050,15516,2101],{"class":4929},[1050,15518,15519,15522,15524,15526,15528,15530,15532,15534,15536],{"class":1052,"line":3642},[1050,15520,15521],{"class":1232},"        Value: ",[1050,15523,4930],{"class":4929},[1050,15525,14975],{"class":1067},[1050,15527,1560],{"class":1101},[1050,15529,1229],{"class":1228},[1050,15531,10586],{"class":1232},[1050,15533,1229],{"class":1228},[1050,15535,1838],{"class":1101},[1050,15537,2101],{"class":4929},[1050,15539,15540,15543,15545,15547,15549,15551,15553,15555,15557],{"class":1052,"line":3658},[1050,15541,15542],{"class":1232},"        Time: ",[1050,15544,4930],{"class":4929},[1050,15546,6173],{"class":1067},[1050,15548,1102],{"class":1101},[1050,15550,6178],{"class":1194},[1050,15552,8788],{"class":1101},[1050,15554,8791],{"class":1194},[1050,15556,4667],{"class":1101},[1050,15558,2101],{"class":4929},[1050,15560,15561],{"class":1052,"line":3675},[1050,15562,4515],{"class":1232},[1050,15564,15565],{"class":1052,"line":3689},[1050,15566,15567],{"class":1232},"        Please check the application immediately.\n",[1050,15569,15570],{"class":1052,"line":3707},[1050,15571,15572],{"class":1232},"        \"\"\"\n",[1050,15574,15575],{"class":1052,"line":3724},[1050,15576,4515],{"class":1067},[1050,15578,15579,15581,15583,15586,15588,15591,15593,15596,15598,15600,15603,15605],{"class":1052,"line":3741},[1050,15580,15329],{"class":1067},[1050,15582,1102],{"class":1101},[1050,15584,15585],{"class":1194},"attach",[1050,15587,1225],{"class":1101},[1050,15589,15590],{"class":1194},"MIMEText",[1050,15592,1225],{"class":1101},[1050,15594,15595],{"class":1194},"body",[1050,15597,1360],{"class":1101},[1050,15599,1408],{"class":1228},[1050,15601,15602],{"class":1232},"plain",[1050,15604,1229],{"class":1228},[1050,15606,10955],{"class":1101},[1050,15608,15609],{"class":1052,"line":3758},[1050,15610,4515],{"class":1067},[1050,15612,15613,15616,15618,15621,15623,15626,15628,15630,15632,15635,15637,15639,15641,15644],{"class":1052,"line":3775},[1050,15614,15615],{"class":1067},"        server ",[1050,15617,1208],{"class":1101},[1050,15619,15620],{"class":1067}," smtplib",[1050,15622,1102],{"class":1101},[1050,15624,15625],{"class":1194},"SMTP",[1050,15627,1225],{"class":1101},[1050,15629,15382],{"class":1194},[1050,15631,1102],{"class":1101},[1050,15633,15634],{"class":9907},"EMAIL_HOST",[1050,15636,1360],{"class":1101},[1050,15638,15170],{"class":1194},[1050,15640,1102],{"class":1101},[1050,15642,15643],{"class":9907},"EMAIL_PORT",[1050,15645,1472],{"class":1101},[1050,15647,15648,15650,15652,15654,15657],{"class":1052,"line":3792},[1050,15649,8967],{"class":1063},[1050,15651,15170],{"class":1067},[1050,15653,1102],{"class":1101},[1050,15655,15656],{"class":9907},"EMAIL_USE_TLS",[1050,15658,1626],{"class":1101},[1050,15660,15661,15664,15666,15669],{"class":1052,"line":3798},[1050,15662,15663],{"class":1067},"            server",[1050,15665,1102],{"class":1101},[1050,15667,15668],{"class":1194},"starttls",[1050,15670,2398],{"class":1101},[1050,15672,15673,15676,15678,15681,15683,15685,15687,15690,15692,15694,15696,15699],{"class":1052,"line":3812},[1050,15674,15675],{"class":1067},"        server",[1050,15677,1102],{"class":1101},[1050,15679,15680],{"class":1194},"login",[1050,15682,1225],{"class":1101},[1050,15684,15382],{"class":1194},[1050,15686,1102],{"class":1101},[1050,15688,15689],{"class":9907},"EMAIL_HOST_USER",[1050,15691,1360],{"class":1101},[1050,15693,15170],{"class":1194},[1050,15695,1102],{"class":1101},[1050,15697,15698],{"class":9907},"EMAIL_HOST_PASSWORD",[1050,15700,1472],{"class":1101},[1050,15702,15703,15705,15707,15710,15712,15714],{"class":1052,"line":3829},[1050,15704,15675],{"class":1067},[1050,15706,1102],{"class":1101},[1050,15708,15709],{"class":1194},"send_message",[1050,15711,1225],{"class":1101},[1050,15713,9157],{"class":1194},[1050,15715,1472],{"class":1101},[1050,15717,15718,15720,15722,15725],{"class":1052,"line":3846},[1050,15719,15675],{"class":1067},[1050,15721,1102],{"class":1101},[1050,15723,15724],{"class":1194},"quit",[1050,15726,2398],{"class":1101},[1050,15728,15729],{"class":1052,"line":3870},[1050,15730,1673],{"class":1067},[1050,15732,15733,15735,15738,15740,15742,15744,15746],{"class":1052,"line":3875},[1050,15734,2277],{"class":1483},[1050,15736,15737],{"class":1487}," send_slack_alert",[1050,15739,1225],{"class":1101},[1050,15741,2287],{"class":2286},[1050,15743,1360],{"class":1101},[1050,15745,14997],{"class":1493},[1050,15747,1502],{"class":1101},[1050,15749,15750,15752,15755],{"class":1052,"line":3889},[1050,15751,2494],{"class":1508},[1050,15753,15754],{"class":1512},"Send Slack alert",[1050,15756,1516],{"class":1508},[1050,15758,15759,15762,15764,15766,15768,15770,15772,15774,15776,15778,15780,15782,15784,15786,15788,15790,15792,15794,15796,15798],{"class":1052,"line":3905},[1050,15760,15761],{"class":1067},"        color ",[1050,15763,1208],{"class":1101},[1050,15765,1408],{"class":1228},[1050,15767,11369],{"class":1232},[1050,15769,1229],{"class":1228},[1050,15771,5617],{"class":1063},[1050,15773,14997],{"class":1067},[1050,15775,1560],{"class":1101},[1050,15777,1229],{"class":1228},[1050,15779,6963],{"class":1232},[1050,15781,1229],{"class":1228},[1050,15783,1838],{"class":1101},[1050,15785,8357],{"class":1538},[1050,15787,1408],{"class":1228},[1050,15789,14343],{"class":1232},[1050,15791,1229],{"class":1228},[1050,15793,3359],{"class":1063},[1050,15795,1408],{"class":1228},[1050,15797,11394],{"class":1232},[1050,15799,1849],{"class":1228},[1050,15801,15802],{"class":1052,"line":3927},[1050,15803,4515],{"class":1067},[1050,15805,15806,15809,15811],{"class":1052,"line":3948},[1050,15807,15808],{"class":1067},"        payload ",[1050,15810,1208],{"class":1101},[1050,15812,1971],{"class":1101},[1050,15814,15815,15817,15819,15821,15823,15825,15827,15830],{"class":1052,"line":3988},[1050,15816,6665],{"class":1228},[1050,15818,11173],{"class":1232},[1050,15820,1229],{"class":1228},[1050,15822,1985],{"class":1101},[1050,15824,15170],{"class":1067},[1050,15826,1102],{"class":1101},[1050,15828,15829],{"class":9907},"SLACK_ALERT_CHANNEL",[1050,15831,1273],{"class":1101},[1050,15833,15834,15836,15838,15840,15842,15844,15847,15849],{"class":1052,"line":3993},[1050,15835,6665],{"class":1228},[1050,15837,11276],{"class":1232},[1050,15839,1229],{"class":1228},[1050,15841,1985],{"class":1101},[1050,15843,1408],{"class":1228},[1050,15845,15846],{"class":1232},"Django Monitor",[1050,15848,1229],{"class":1228},[1050,15850,1273],{"class":1101},[1050,15852,15853,15855,15857,15859,15861,15863,15866,15868,15870,15872,15874,15876,15878,15880,15882,15884,15886,15889],{"class":1052,"line":4018},[1050,15854,6665],{"class":1228},[1050,15856,11296],{"class":1232},[1050,15858,1229],{"class":1228},[1050,15860,1985],{"class":1101},[1050,15862,4924],{"class":1483},[1050,15864,15865],{"class":1232},"\"*",[1050,15867,4930],{"class":4929},[1050,15869,14975],{"class":1067},[1050,15871,1560],{"class":1101},[1050,15873,1229],{"class":1228},[1050,15875,6963],{"class":1232},[1050,15877,1229],{"class":1228},[1050,15879,1652],{"class":1101},[1050,15881,10513],{"class":1194},[1050,15883,4667],{"class":1101},[1050,15885,4938],{"class":4929},[1050,15887,15888],{"class":1232}," Alert*\"",[1050,15890,1273],{"class":1101},[1050,15892,15893,15895,15897,15899,15901],{"class":1052,"line":4023},[1050,15894,6665],{"class":1228},[1050,15896,11341],{"class":1232},[1050,15898,1229],{"class":1228},[1050,15900,1985],{"class":1101},[1050,15902,9807],{"class":1101},[1050,15904,15905],{"class":1052,"line":4028},[1050,15906,15907],{"class":1101},"                {\n",[1050,15909,15910,15912,15914,15916,15918,15921],{"class":1052,"line":4046},[1050,15911,3692],{"class":1228},[1050,15913,11360],{"class":1232},[1050,15915,1229],{"class":1228},[1050,15917,1985],{"class":1101},[1050,15919,15920],{"class":1067}," color",[1050,15922,1273],{"class":1101},[1050,15924,15925,15927,15929,15931,15933],{"class":1052,"line":4056},[1050,15926,3692],{"class":1228},[1050,15928,11405],{"class":1232},[1050,15930,1229],{"class":1228},[1050,15932,1985],{"class":1101},[1050,15934,9807],{"class":1101},[1050,15936,15937,15940,15942,15944,15946,15948,15950,15953,15955,15957,15959,15961,15963,15965,15967,15969,15971,15973,15975,15977,15979,15981,15983,15985,15987],{"class":1052,"line":4069},[1050,15938,15939],{"class":1101},"                        {",[1050,15941,1229],{"class":1228},[1050,15943,11421],{"class":1232},[1050,15945,1229],{"class":1228},[1050,15947,1985],{"class":1101},[1050,15949,1408],{"class":1228},[1050,15951,15952],{"class":1232},"Message",[1050,15954,1229],{"class":1228},[1050,15956,1360],{"class":1101},[1050,15958,1408],{"class":1228},[1050,15960,10586],{"class":1232},[1050,15962,1229],{"class":1228},[1050,15964,1985],{"class":1101},[1050,15966,14997],{"class":1067},[1050,15968,1560],{"class":1101},[1050,15970,1229],{"class":1228},[1050,15972,8839],{"class":1232},[1050,15974,1229],{"class":1228},[1050,15976,2910],{"class":1101},[1050,15978,1408],{"class":1228},[1050,15980,11455],{"class":1232},[1050,15982,1229],{"class":1228},[1050,15984,1985],{"class":1101},[1050,15986,6632],{"class":1284},[1050,15988,11465],{"class":1101},[1050,15990,15991,15993,15995,15997,15999,16001,16003,16006,16008,16010,16012,16014,16016,16018,16020,16022,16024,16026,16028,16030,16032,16034,16036,16038,16040],{"class":1052,"line":4090},[1050,15992,15939],{"class":1101},[1050,15994,1229],{"class":1228},[1050,15996,11421],{"class":1232},[1050,15998,1229],{"class":1228},[1050,16000,1985],{"class":1101},[1050,16002,1408],{"class":1228},[1050,16004,16005],{"class":1232},"Metric",[1050,16007,1229],{"class":1228},[1050,16009,1360],{"class":1101},[1050,16011,1408],{"class":1228},[1050,16013,10586],{"class":1232},[1050,16015,1229],{"class":1228},[1050,16017,1985],{"class":1101},[1050,16019,14997],{"class":1067},[1050,16021,1560],{"class":1101},[1050,16023,1229],{"class":1228},[1050,16025,2696],{"class":1232},[1050,16027,1229],{"class":1228},[1050,16029,2910],{"class":1101},[1050,16031,1408],{"class":1228},[1050,16033,11455],{"class":1232},[1050,16035,1229],{"class":1228},[1050,16037,1985],{"class":1101},[1050,16039,11462],{"class":1284},[1050,16041,11465],{"class":1101},[1050,16043,16044,16046,16048,16050,16052,16054,16056,16059,16061,16063,16065,16067,16069,16071,16073,16075,16077,16079,16081,16083,16085,16088,16090,16092,16094,16096,16098],{"class":1052,"line":4099},[1050,16045,15939],{"class":1101},[1050,16047,1229],{"class":1228},[1050,16049,11421],{"class":1232},[1050,16051,1229],{"class":1228},[1050,16053,1985],{"class":1101},[1050,16055,1408],{"class":1228},[1050,16057,16058],{"class":1232},"Value",[1050,16060,1229],{"class":1228},[1050,16062,1360],{"class":1101},[1050,16064,1408],{"class":1228},[1050,16066,10586],{"class":1232},[1050,16068,1229],{"class":1228},[1050,16070,1985],{"class":1101},[1050,16072,4962],{"class":2308},[1050,16074,1225],{"class":1101},[1050,16076,14975],{"class":1194},[1050,16078,1560],{"class":1101},[1050,16080,1229],{"class":1228},[1050,16082,10586],{"class":1232},[1050,16084,1229],{"class":1228},[1050,16086,16087],{"class":1101},"]),",[1050,16089,1408],{"class":1228},[1050,16091,11455],{"class":1232},[1050,16093,1229],{"class":1228},[1050,16095,1985],{"class":1101},[1050,16097,11462],{"class":1284},[1050,16099,11465],{"class":1101},[1050,16101,16102,16104,16106,16108,16110,16112,16114,16116,16118,16120,16122,16124,16126,16128,16130,16132,16134,16136,16138,16140,16142,16144,16146,16148,16150],{"class":1052,"line":4104},[1050,16103,15939],{"class":1101},[1050,16105,1229],{"class":1228},[1050,16107,11421],{"class":1232},[1050,16109,1229],{"class":1228},[1050,16111,1985],{"class":1101},[1050,16113,1408],{"class":1228},[1050,16115,11584],{"class":1232},[1050,16117,1229],{"class":1228},[1050,16119,1360],{"class":1101},[1050,16121,1408],{"class":1228},[1050,16123,10586],{"class":1232},[1050,16125,1229],{"class":1228},[1050,16127,1985],{"class":1101},[1050,16129,8781],{"class":1067},[1050,16131,1102],{"class":1101},[1050,16133,6178],{"class":1194},[1050,16135,8788],{"class":1101},[1050,16137,8791],{"class":1194},[1050,16139,5967],{"class":1101},[1050,16141,1408],{"class":1228},[1050,16143,11455],{"class":1232},[1050,16145,1229],{"class":1228},[1050,16147,1985],{"class":1101},[1050,16149,11462],{"class":1284},[1050,16151,11465],{"class":1101},[1050,16153,16154],{"class":1052,"line":4124},[1050,16155,16156],{"class":1101},"                    ]\n",[1050,16158,16159],{"class":1052,"line":4137},[1050,16160,12682],{"class":1101},[1050,16162,16163],{"class":1052,"line":4144},[1050,16164,16165],{"class":1101},"            ]\n",[1050,16167,16168],{"class":1052,"line":4149},[1050,16169,8953],{"class":1101},[1050,16171,16172],{"class":1052,"line":4181},[1050,16173,4515],{"class":1067},[1050,16175,16176,16179,16181,16183,16185,16187,16189,16192,16194,16196,16198,16201,16203,16205,16207,16210],{"class":1052,"line":4213},[1050,16177,16178],{"class":1067},"        requests",[1050,16180,1102],{"class":1101},[1050,16182,11771],{"class":1194},[1050,16184,1225],{"class":1101},[1050,16186,15382],{"class":1194},[1050,16188,1102],{"class":1101},[1050,16190,16191],{"class":9907},"SLACK_WEBHOOK_URL",[1050,16193,1360],{"class":1101},[1050,16195,9398],{"class":1204},[1050,16197,1208],{"class":1101},[1050,16199,16200],{"class":1194},"payload",[1050,16202,1360],{"class":1101},[1050,16204,11792],{"class":1204},[1050,16206,1208],{"class":1101},[1050,16208,16209],{"class":1356},"10",[1050,16211,1472],{"class":1101},[1050,16213,16214],{"class":1052,"line":4218},[1050,16215,1673],{"class":1067},[1050,16217,16218,16220,16223,16225,16227,16229,16231],{"class":1052,"line":4225},[1050,16219,2277],{"class":1483},[1050,16221,16222],{"class":1487}," send_webhook_alert",[1050,16224,1225],{"class":1101},[1050,16226,2287],{"class":2286},[1050,16228,1360],{"class":1101},[1050,16230,14997],{"class":1493},[1050,16232,1502],{"class":1101},[1050,16234,16235,16237,16240],{"class":1052,"line":4240},[1050,16236,2494],{"class":1508},[1050,16238,16239],{"class":1512},"Send webhook alert",[1050,16241,1516],{"class":1508},[1050,16243,16244,16246,16248],{"class":1052,"line":4260},[1050,16245,15808],{"class":1067},[1050,16247,1208],{"class":1101},[1050,16249,1971],{"class":1101},[1050,16251,16252,16254,16256,16258,16260,16262],{"class":1052,"line":4289},[1050,16253,6665],{"class":1228},[1050,16255,14975],{"class":1232},[1050,16257,1229],{"class":1228},[1050,16259,1985],{"class":1101},[1050,16261,14997],{"class":1067},[1050,16263,1273],{"class":1101},[1050,16265,16266,16268,16270,16272,16274,16276,16278,16280,16282,16284],{"class":1052,"line":4310},[1050,16267,6665],{"class":1228},[1050,16269,2550],{"class":1232},[1050,16271,1229],{"class":1228},[1050,16273,1985],{"class":1101},[1050,16275,8781],{"class":1067},[1050,16277,1102],{"class":1101},[1050,16279,6178],{"class":1194},[1050,16281,8788],{"class":1101},[1050,16283,8791],{"class":1194},[1050,16285,1331],{"class":1101},[1050,16287,16288,16290,16293,16295,16297,16299,16301,16303],{"class":1052,"line":4331},[1050,16289,6665],{"class":1228},[1050,16291,16292],{"class":1232},"service",[1050,16294,1229],{"class":1228},[1050,16296,1985],{"class":1101},[1050,16298,1408],{"class":1228},[1050,16300,1990],{"class":1232},[1050,16302,1229],{"class":1228},[1050,16304,1273],{"class":1101},[1050,16306,16307],{"class":1052,"line":4361},[1050,16308,8953],{"class":1101},[1050,16310,16311],{"class":1052,"line":4381},[1050,16312,4515],{"class":1067},[1050,16314,16315,16317,16319,16321,16323,16325,16327,16330,16332,16334,16336,16338,16340,16342,16344,16346],{"class":1052,"line":4386},[1050,16316,16178],{"class":1067},[1050,16318,1102],{"class":1101},[1050,16320,11771],{"class":1194},[1050,16322,1225],{"class":1101},[1050,16324,15382],{"class":1194},[1050,16326,1102],{"class":1101},[1050,16328,16329],{"class":9907},"ALERT_WEBHOOK_URL",[1050,16331,1360],{"class":1101},[1050,16333,9398],{"class":1204},[1050,16335,1208],{"class":1101},[1050,16337,16200],{"class":1194},[1050,16339,1360],{"class":1101},[1050,16341,11792],{"class":1204},[1050,16343,1208],{"class":1101},[1050,16345,16209],{"class":1356},[1050,16347,1472],{"class":1101},[1050,16349,16350],{"class":1052,"line":4391},[1050,16351,1075],{"emptyLinePlaceholder":1074},[1050,16353,16354],{"class":1052,"line":4397},[1050,16355,16356],{"class":1056},"# Initialize alert manager\n",[1050,16358,16359,16362,16364,16366],{"class":1052,"line":4409},[1050,16360,16361],{"class":1067},"alert_manager ",[1050,16363,1208],{"class":1101},[1050,16365,14090],{"class":1194},[1050,16367,2398],{"class":1101},[1050,16369,16370],{"class":1052,"line":4414},[1050,16371,1075],{"emptyLinePlaceholder":1074},[1050,16373,16374],{"class":1052,"line":4424},[1050,16375,16376],{"class":1056},"# Celery task for periodic health checks\n",[1050,16378,16379,16381,16384,16386],{"class":1052,"line":4434},[1050,16380,1095],{"class":1063},[1050,16382,16383],{"class":1067}," celery ",[1050,16385,1064],{"class":1063},[1050,16387,16388],{"class":1067}," shared_task\n",[1050,16390,16391],{"class":1052,"line":4439},[1050,16392,1075],{"emptyLinePlaceholder":1074},[1050,16394,16395,16397],{"class":1052,"line":4457},[1050,16396,13687],{"class":1101},[1050,16398,16399],{"class":1487},"shared_task\n",[1050,16401,16402,16404,16406],{"class":1052,"line":4472},[1050,16403,1484],{"class":1483},[1050,16405,14235],{"class":1487},[1050,16407,3086],{"class":1101},[1050,16409,16410,16412,16415],{"class":1052,"line":4477},[1050,16411,1509],{"class":1508},[1050,16413,16414],{"class":1512},"Periodic system health check",[1050,16416,1516],{"class":1508},[1050,16418,16419,16422,16424,16427],{"class":1052,"line":4496},[1050,16420,16421],{"class":1067},"    alert_manager",[1050,16423,1102],{"class":1101},[1050,16425,16426],{"class":1194},"check_system_health",[1050,16428,2398],{"class":1101},[1026,16430,16431],{},"This comprehensive monitoring and logging guide provides all the tools needed to maintain visibility into Django application performance, errors, and business metrics in production environments.",[6712,16433,16434],{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sCyAa, html code.shiki .sCyAa{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s6DHA, html code.shiki .s6DHA{--shiki-light:#6182B8;--shiki-default:#A65E2B;--shiki-dark:#C99076}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s131V, html code.shiki .s131V{--shiki-light:#90A4AE;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .s27EL, html code.shiki .s27EL{--shiki-light:#91B859;--shiki-default:#AB5E3F;--shiki-dark:#C4704F}html pre.shiki code .sETVe, html code.shiki .sETVe{--shiki-light:#39ADB5;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sk0MF, html code.shiki .sk0MF{--shiki-light:#90A4AE;--shiki-default:#BDA437;--shiki-dark:#E6CC77}html pre.shiki code .sGuSu, html code.shiki .sGuSu{--shiki-light:#39ADB5;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sRJPX, html code.shiki .sRJPX{--shiki-light:#91B859;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}",{"title":1045,"searchDepth":1053,"depth":1060,"links":16436},[16437,16442,16447],{"id":1032,"depth":1060,"text":1033,"children":16438},[16439,16440,16441],{"id":1037,"depth":1071,"text":1038},{"id":2141,"depth":1071,"text":2142},{"id":4985,"depth":1071,"text":4986},{"id":6552,"depth":1060,"text":6553,"children":16443},[16444,16445,16446],{"id":6556,"depth":1071,"text":6557},{"id":8646,"depth":1071,"text":8647},{"id":11824,"depth":1071,"text":11825},{"id":13958,"depth":1060,"text":13959,"children":16448},[16449],{"id":13962,"depth":1071,"text":13963},"md",null,{},{"title":767,"description":1028},"huB8MEzKmaDsMGgrTZY0fBeH1J34npp2lzkWmTspL9Q",[16456,16458],{"title":763,"path":764,"stem":765,"description":16457,"children":-1},"Scaling Django applications requires strategic planning for handling increased traffic, data growth, and user demands. This chapter covers horizontal and vertical scaling strategies, load balancing configurations, auto-scaling implementations, and performance optimization techniques for high-traffic Django applications.",{"title":771,"path":772,"stem":773,"description":16459,"children":-1},"Comprehensive backup strategies are critical for Django applications to ensure data protection, disaster recovery, and business continuity. This chapter covers database backups, file system backups, automated backup procedures, disaster recovery planning, and backup testing strategies.",1772474954590]