[{"data":1,"prerenderedAt":11615},["ShallowReactive",2],{"navigation":3,"/deployment/scaling-and-load-balancing":1016,"/deployment/scaling-and-load-balancing-surround":11610},[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":763,"body":1018,"description":1028,"extension":11605,"links":11606,"meta":11607,"navigation":1108,"path":764,"seo":11608,"stem":765,"__hash__":11609},"docs/20.deployment/07.scaling-and-load-balancing.md",{"type":1019,"value":1020,"toc":11582},"minimark",[1021,1025,1029,1034,1039,1045,1061,1066,1080,1084,1383,1387,1391,1964,1968,1976,1980,1984,2804,3898,3902,4494,4497,4501,5433,5437,6700,6704,6708,8614,8618,9437,9441,11575,11578],[1022,1023,763],"h1",{"id":1024},"scaling-and-load-balancing",[1026,1027,1028],"p",{},"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.",[1030,1031,1033],"h2",{"id":1032},"scaling-fundamentals","Scaling Fundamentals",[1035,1036,1038],"h3",{"id":1037},"vertical-vs-horizontal-scaling","Vertical vs Horizontal Scaling",[1026,1040,1041],{},[1042,1043,1044],"strong",{},"Vertical Scaling (Scale Up)",[1046,1047,1048,1052,1055,1058],"ul",{},[1049,1050,1051],"li",{},"Increase server resources (CPU, RAM, storage)",[1049,1053,1054],{},"Simpler to implement but has hardware limits",[1049,1056,1057],{},"Single point of failure",[1049,1059,1060],{},"Cost increases exponentially",[1026,1062,1063],{},[1042,1064,1065],{},"Horizontal Scaling (Scale Out)",[1046,1067,1068,1071,1074,1077],{},[1049,1069,1070],{},"Add more servers to distribute load",[1049,1072,1073],{},"Better fault tolerance and unlimited growth potential",[1049,1075,1076],{},"Requires application architecture changes",[1049,1078,1079],{},"More complex but cost-effective at scale",[1035,1081,1083],{"id":1082},"django-scaling-challenges","Django Scaling Challenges",[1085,1086,1091],"pre",{"className":1087,"code":1088,"language":1089,"meta":1090,"style":1090},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Common scaling bottlenecks in Django applications\n\n# 1. Database connections\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'OPTIONS': {\n            'MAX_CONNS': 20,  # Limited connections per server\n        },\n    }\n}\n\n# 2. Session storage\nSESSION_ENGINE = 'django.contrib.sessions.backends.db'  # Database bottleneck\n\n# 3. Static file serving\nSTATIC_URL = '/static/'  # Server bandwidth limitation\n\n# 4. Cache invalidation\nCACHES = {\n    'default': {\n        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',  # Not shared\n    }\n}\n\n# 5. File uploads and media storage\nMEDIA_ROOT = '/path/to/media/'  # Local storage limitation\n","python","",[1092,1093,1094,1103,1110,1116,1130,1149,1173,1187,1210,1216,1222,1228,1233,1239,1257,1262,1268,1286,1291,1297,1307,1320,1344,1349,1354,1359,1365],"code",{"__ignoreMap":1090},[1095,1096,1099],"span",{"class":1097,"line":1098},"line",1,[1095,1100,1102],{"class":1101},"s9Tkl","# Common scaling bottlenecks in Django applications\n",[1095,1104,1106],{"class":1097,"line":1105},2,[1095,1107,1109],{"emptyLinePlaceholder":1108},true,"\n",[1095,1111,1113],{"class":1097,"line":1112},3,[1095,1114,1115],{"class":1101},"# 1. Database connections\n",[1095,1117,1119,1123,1127],{"class":1097,"line":1118},4,[1095,1120,1122],{"class":1121},"se3Ec","DATABASES",[1095,1124,1126],{"class":1125},"soVBu"," =",[1095,1128,1129],{"class":1125}," {\n",[1095,1131,1133,1137,1141,1144,1147],{"class":1097,"line":1132},5,[1095,1134,1136],{"class":1135},"sbYkP","    '",[1095,1138,1140],{"class":1139},"sTbE_","default",[1095,1142,1143],{"class":1135},"'",[1095,1145,1146],{"class":1125},":",[1095,1148,1129],{"class":1125},[1095,1150,1152,1155,1158,1160,1162,1165,1168,1170],{"class":1097,"line":1151},6,[1095,1153,1154],{"class":1135},"        '",[1095,1156,1157],{"class":1139},"ENGINE",[1095,1159,1143],{"class":1135},[1095,1161,1146],{"class":1125},[1095,1163,1164],{"class":1135}," '",[1095,1166,1167],{"class":1139},"django.db.backends.postgresql",[1095,1169,1143],{"class":1135},[1095,1171,1172],{"class":1125},",\n",[1095,1174,1176,1178,1181,1183,1185],{"class":1097,"line":1175},7,[1095,1177,1154],{"class":1135},[1095,1179,1180],{"class":1139},"OPTIONS",[1095,1182,1143],{"class":1135},[1095,1184,1146],{"class":1125},[1095,1186,1129],{"class":1125},[1095,1188,1190,1193,1196,1198,1200,1204,1207],{"class":1097,"line":1189},8,[1095,1191,1192],{"class":1135},"            '",[1095,1194,1195],{"class":1139},"MAX_CONNS",[1095,1197,1143],{"class":1135},[1095,1199,1146],{"class":1125},[1095,1201,1203],{"class":1202},"s7CZa"," 20",[1095,1205,1206],{"class":1125},",",[1095,1208,1209],{"class":1101},"  # Limited connections per server\n",[1095,1211,1213],{"class":1097,"line":1212},9,[1095,1214,1215],{"class":1125},"        },\n",[1095,1217,1219],{"class":1097,"line":1218},10,[1095,1220,1221],{"class":1125},"    }\n",[1095,1223,1225],{"class":1097,"line":1224},11,[1095,1226,1227],{"class":1125},"}\n",[1095,1229,1231],{"class":1097,"line":1230},12,[1095,1232,1109],{"emptyLinePlaceholder":1108},[1095,1234,1236],{"class":1097,"line":1235},13,[1095,1237,1238],{"class":1101},"# 2. Session storage\n",[1095,1240,1242,1245,1247,1249,1252,1254],{"class":1097,"line":1241},14,[1095,1243,1244],{"class":1121},"SESSION_ENGINE",[1095,1246,1126],{"class":1125},[1095,1248,1164],{"class":1135},[1095,1250,1251],{"class":1139},"django.contrib.sessions.backends.db",[1095,1253,1143],{"class":1135},[1095,1255,1256],{"class":1101},"  # Database bottleneck\n",[1095,1258,1260],{"class":1097,"line":1259},15,[1095,1261,1109],{"emptyLinePlaceholder":1108},[1095,1263,1265],{"class":1097,"line":1264},16,[1095,1266,1267],{"class":1101},"# 3. Static file serving\n",[1095,1269,1271,1274,1276,1278,1281,1283],{"class":1097,"line":1270},17,[1095,1272,1273],{"class":1121},"STATIC_URL",[1095,1275,1126],{"class":1125},[1095,1277,1164],{"class":1135},[1095,1279,1280],{"class":1139},"/static/",[1095,1282,1143],{"class":1135},[1095,1284,1285],{"class":1101},"  # Server bandwidth limitation\n",[1095,1287,1289],{"class":1097,"line":1288},18,[1095,1290,1109],{"emptyLinePlaceholder":1108},[1095,1292,1294],{"class":1097,"line":1293},19,[1095,1295,1296],{"class":1101},"# 4. Cache invalidation\n",[1095,1298,1300,1303,1305],{"class":1097,"line":1299},20,[1095,1301,1302],{"class":1121},"CACHES",[1095,1304,1126],{"class":1125},[1095,1306,1129],{"class":1125},[1095,1308,1310,1312,1314,1316,1318],{"class":1097,"line":1309},21,[1095,1311,1136],{"class":1135},[1095,1313,1140],{"class":1139},[1095,1315,1143],{"class":1135},[1095,1317,1146],{"class":1125},[1095,1319,1129],{"class":1125},[1095,1321,1323,1325,1328,1330,1332,1334,1337,1339,1341],{"class":1097,"line":1322},22,[1095,1324,1154],{"class":1135},[1095,1326,1327],{"class":1139},"BACKEND",[1095,1329,1143],{"class":1135},[1095,1331,1146],{"class":1125},[1095,1333,1164],{"class":1135},[1095,1335,1336],{"class":1139},"django.core.cache.backends.locmem.LocMemCache",[1095,1338,1143],{"class":1135},[1095,1340,1206],{"class":1125},[1095,1342,1343],{"class":1101},"  # Not shared\n",[1095,1345,1347],{"class":1097,"line":1346},23,[1095,1348,1221],{"class":1125},[1095,1350,1352],{"class":1097,"line":1351},24,[1095,1353,1227],{"class":1125},[1095,1355,1357],{"class":1097,"line":1356},25,[1095,1358,1109],{"emptyLinePlaceholder":1108},[1095,1360,1362],{"class":1097,"line":1361},26,[1095,1363,1364],{"class":1101},"# 5. File uploads and media storage\n",[1095,1366,1368,1371,1373,1375,1378,1380],{"class":1097,"line":1367},27,[1095,1369,1370],{"class":1121},"MEDIA_ROOT",[1095,1372,1126],{"class":1125},[1095,1374,1164],{"class":1135},[1095,1376,1377],{"class":1139},"/path/to/media/",[1095,1379,1143],{"class":1135},[1095,1381,1382],{"class":1101},"  # Local storage limitation\n",[1030,1384,1386],{"id":1385},"load-balancing-strategies","Load Balancing Strategies",[1035,1388,1390],{"id":1389},"nginx-load-balancer-configuration","Nginx Load Balancer Configuration",[1085,1392,1396],{"className":1393,"code":1394,"language":1395,"meta":1090,"style":1090},"language-nginx shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# /etc/nginx/nginx.conf\nupstream django_app {\n    # Load balancing methods\n    least_conn;  # Route to server with fewest active connections\n    # ip_hash;   # Route based on client IP (sticky sessions)\n    # random;    # Random distribution\n    \n    # Backend servers\n    server 10.0.1.10:8000 weight=3 max_fails=3 fail_timeout=30s;\n    server 10.0.1.11:8000 weight=3 max_fails=3 fail_timeout=30s;\n    server 10.0.1.12:8000 weight=2 max_fails=3 fail_timeout=30s;\n    server 10.0.1.13:8000 backup;  # Backup server\n    \n    # Health checks\n    keepalive 32;\n    keepalive_requests 100;\n    keepalive_timeout 60s;\n}\n\nserver {\n    listen 80;\n    server_name yourdomain.com;\n    \n    # Rate limiting\n    limit_req_zone $binary_remote_addr zone=api:10m rate=100r/m;\n    limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;\n    \n    # Connection limiting\n    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;\n    limit_conn conn_limit_per_ip 10;\n    \n    # Static files (served directly by Nginx)\n    location /static/ {\n        alias /var/www/static/;\n        expires 1y;\n        add_header Cache-Control \"public, immutable\";\n        \n        # Compression\n        gzip on;\n        gzip_types text/css application/javascript image/svg+xml;\n        \n        # Multiple static file servers\n        try_files $uri @static_fallback;\n    }\n    \n    location @static_fallback {\n        proxy_pass http://static_servers;\n    }\n    \n    # API endpoints with rate limiting\n    location /api/ {\n        limit_req zone=api burst=20 nodelay;\n        proxy_pass http://django_app;\n        include /etc/nginx/proxy_params;\n        \n        # Load balancer health checks\n        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;\n        proxy_next_upstream_tries 3;\n        proxy_next_upstream_timeout 10s;\n    }\n    \n    # Login endpoints with stricter rate limiting\n    location /auth/login/ {\n        limit_req zone=login burst=3 nodelay;\n        proxy_pass http://django_app;\n        include /etc/nginx/proxy_params;\n    }\n    \n    # Main application\n    location / {\n        proxy_pass http://django_app;\n        include /etc/nginx/proxy_params;\n        \n        # Connection pooling\n        proxy_http_version 1.1;\n        proxy_set_header Connection \"\";\n        \n        # Timeouts\n        proxy_connect_timeout 5s;\n        proxy_send_timeout 60s;\n        proxy_read_timeout 60s;\n        \n        # Buffering\n        proxy_buffering on;\n        proxy_buffer_size 4k;\n        proxy_buffers 8 4k;\n        proxy_busy_buffers_size 8k;\n    }\n    \n    # Health check endpoint\n    location /health/ {\n        proxy_pass http://django_app;\n        access_log off;\n        \n        # Custom health check headers\n        proxy_set_header X-Health-Check \"true\";\n    }\n}\n\n# Separate upstream for static files\nupstream static_servers {\n    server 10.0.2.10:80;\n    server 10.0.2.11:80;\n}\n","nginx",[1092,1397,1398,1403,1408,1413,1418,1423,1428,1433,1438,1443,1448,1453,1458,1462,1467,1472,1477,1482,1486,1490,1495,1500,1505,1509,1514,1519,1524,1528,1534,1540,1546,1551,1557,1563,1569,1575,1581,1587,1593,1599,1605,1610,1616,1622,1627,1632,1638,1644,1649,1654,1660,1666,1672,1678,1684,1689,1695,1701,1707,1713,1718,1723,1729,1735,1741,1746,1751,1756,1761,1767,1773,1778,1783,1788,1794,1800,1806,1811,1817,1823,1829,1835,1840,1846,1852,1858,1864,1870,1875,1880,1886,1892,1897,1903,1908,1914,1920,1925,1930,1935,1941,1947,1953,1959],{"__ignoreMap":1090},[1095,1399,1400],{"class":1097,"line":1098},[1095,1401,1402],{},"# /etc/nginx/nginx.conf\n",[1095,1404,1405],{"class":1097,"line":1105},[1095,1406,1407],{},"upstream django_app {\n",[1095,1409,1410],{"class":1097,"line":1112},[1095,1411,1412],{},"    # Load balancing methods\n",[1095,1414,1415],{"class":1097,"line":1118},[1095,1416,1417],{},"    least_conn;  # Route to server with fewest active connections\n",[1095,1419,1420],{"class":1097,"line":1132},[1095,1421,1422],{},"    # ip_hash;   # Route based on client IP (sticky sessions)\n",[1095,1424,1425],{"class":1097,"line":1151},[1095,1426,1427],{},"    # random;    # Random distribution\n",[1095,1429,1430],{"class":1097,"line":1175},[1095,1431,1432],{},"    \n",[1095,1434,1435],{"class":1097,"line":1189},[1095,1436,1437],{},"    # Backend servers\n",[1095,1439,1440],{"class":1097,"line":1212},[1095,1441,1442],{},"    server 10.0.1.10:8000 weight=3 max_fails=3 fail_timeout=30s;\n",[1095,1444,1445],{"class":1097,"line":1218},[1095,1446,1447],{},"    server 10.0.1.11:8000 weight=3 max_fails=3 fail_timeout=30s;\n",[1095,1449,1450],{"class":1097,"line":1224},[1095,1451,1452],{},"    server 10.0.1.12:8000 weight=2 max_fails=3 fail_timeout=30s;\n",[1095,1454,1455],{"class":1097,"line":1230},[1095,1456,1457],{},"    server 10.0.1.13:8000 backup;  # Backup server\n",[1095,1459,1460],{"class":1097,"line":1235},[1095,1461,1432],{},[1095,1463,1464],{"class":1097,"line":1241},[1095,1465,1466],{},"    # Health checks\n",[1095,1468,1469],{"class":1097,"line":1259},[1095,1470,1471],{},"    keepalive 32;\n",[1095,1473,1474],{"class":1097,"line":1264},[1095,1475,1476],{},"    keepalive_requests 100;\n",[1095,1478,1479],{"class":1097,"line":1270},[1095,1480,1481],{},"    keepalive_timeout 60s;\n",[1095,1483,1484],{"class":1097,"line":1288},[1095,1485,1227],{},[1095,1487,1488],{"class":1097,"line":1293},[1095,1489,1109],{"emptyLinePlaceholder":1108},[1095,1491,1492],{"class":1097,"line":1299},[1095,1493,1494],{},"server {\n",[1095,1496,1497],{"class":1097,"line":1309},[1095,1498,1499],{},"    listen 80;\n",[1095,1501,1502],{"class":1097,"line":1322},[1095,1503,1504],{},"    server_name yourdomain.com;\n",[1095,1506,1507],{"class":1097,"line":1346},[1095,1508,1432],{},[1095,1510,1511],{"class":1097,"line":1351},[1095,1512,1513],{},"    # Rate limiting\n",[1095,1515,1516],{"class":1097,"line":1356},[1095,1517,1518],{},"    limit_req_zone $binary_remote_addr zone=api:10m rate=100r/m;\n",[1095,1520,1521],{"class":1097,"line":1361},[1095,1522,1523],{},"    limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;\n",[1095,1525,1526],{"class":1097,"line":1367},[1095,1527,1432],{},[1095,1529,1531],{"class":1097,"line":1530},28,[1095,1532,1533],{},"    # Connection limiting\n",[1095,1535,1537],{"class":1097,"line":1536},29,[1095,1538,1539],{},"    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;\n",[1095,1541,1543],{"class":1097,"line":1542},30,[1095,1544,1545],{},"    limit_conn conn_limit_per_ip 10;\n",[1095,1547,1549],{"class":1097,"line":1548},31,[1095,1550,1432],{},[1095,1552,1554],{"class":1097,"line":1553},32,[1095,1555,1556],{},"    # Static files (served directly by Nginx)\n",[1095,1558,1560],{"class":1097,"line":1559},33,[1095,1561,1562],{},"    location /static/ {\n",[1095,1564,1566],{"class":1097,"line":1565},34,[1095,1567,1568],{},"        alias /var/www/static/;\n",[1095,1570,1572],{"class":1097,"line":1571},35,[1095,1573,1574],{},"        expires 1y;\n",[1095,1576,1578],{"class":1097,"line":1577},36,[1095,1579,1580],{},"        add_header Cache-Control \"public, immutable\";\n",[1095,1582,1584],{"class":1097,"line":1583},37,[1095,1585,1586],{},"        \n",[1095,1588,1590],{"class":1097,"line":1589},38,[1095,1591,1592],{},"        # Compression\n",[1095,1594,1596],{"class":1097,"line":1595},39,[1095,1597,1598],{},"        gzip on;\n",[1095,1600,1602],{"class":1097,"line":1601},40,[1095,1603,1604],{},"        gzip_types text/css application/javascript image/svg+xml;\n",[1095,1606,1608],{"class":1097,"line":1607},41,[1095,1609,1586],{},[1095,1611,1613],{"class":1097,"line":1612},42,[1095,1614,1615],{},"        # Multiple static file servers\n",[1095,1617,1619],{"class":1097,"line":1618},43,[1095,1620,1621],{},"        try_files $uri @static_fallback;\n",[1095,1623,1625],{"class":1097,"line":1624},44,[1095,1626,1221],{},[1095,1628,1630],{"class":1097,"line":1629},45,[1095,1631,1432],{},[1095,1633,1635],{"class":1097,"line":1634},46,[1095,1636,1637],{},"    location @static_fallback {\n",[1095,1639,1641],{"class":1097,"line":1640},47,[1095,1642,1643],{},"        proxy_pass http://static_servers;\n",[1095,1645,1647],{"class":1097,"line":1646},48,[1095,1648,1221],{},[1095,1650,1652],{"class":1097,"line":1651},49,[1095,1653,1432],{},[1095,1655,1657],{"class":1097,"line":1656},50,[1095,1658,1659],{},"    # API endpoints with rate limiting\n",[1095,1661,1663],{"class":1097,"line":1662},51,[1095,1664,1665],{},"    location /api/ {\n",[1095,1667,1669],{"class":1097,"line":1668},52,[1095,1670,1671],{},"        limit_req zone=api burst=20 nodelay;\n",[1095,1673,1675],{"class":1097,"line":1674},53,[1095,1676,1677],{},"        proxy_pass http://django_app;\n",[1095,1679,1681],{"class":1097,"line":1680},54,[1095,1682,1683],{},"        include /etc/nginx/proxy_params;\n",[1095,1685,1687],{"class":1097,"line":1686},55,[1095,1688,1586],{},[1095,1690,1692],{"class":1097,"line":1691},56,[1095,1693,1694],{},"        # Load balancer health checks\n",[1095,1696,1698],{"class":1097,"line":1697},57,[1095,1699,1700],{},"        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;\n",[1095,1702,1704],{"class":1097,"line":1703},58,[1095,1705,1706],{},"        proxy_next_upstream_tries 3;\n",[1095,1708,1710],{"class":1097,"line":1709},59,[1095,1711,1712],{},"        proxy_next_upstream_timeout 10s;\n",[1095,1714,1716],{"class":1097,"line":1715},60,[1095,1717,1221],{},[1095,1719,1721],{"class":1097,"line":1720},61,[1095,1722,1432],{},[1095,1724,1726],{"class":1097,"line":1725},62,[1095,1727,1728],{},"    # Login endpoints with stricter rate limiting\n",[1095,1730,1732],{"class":1097,"line":1731},63,[1095,1733,1734],{},"    location /auth/login/ {\n",[1095,1736,1738],{"class":1097,"line":1737},64,[1095,1739,1740],{},"        limit_req zone=login burst=3 nodelay;\n",[1095,1742,1744],{"class":1097,"line":1743},65,[1095,1745,1677],{},[1095,1747,1749],{"class":1097,"line":1748},66,[1095,1750,1683],{},[1095,1752,1754],{"class":1097,"line":1753},67,[1095,1755,1221],{},[1095,1757,1759],{"class":1097,"line":1758},68,[1095,1760,1432],{},[1095,1762,1764],{"class":1097,"line":1763},69,[1095,1765,1766],{},"    # Main application\n",[1095,1768,1770],{"class":1097,"line":1769},70,[1095,1771,1772],{},"    location / {\n",[1095,1774,1776],{"class":1097,"line":1775},71,[1095,1777,1677],{},[1095,1779,1781],{"class":1097,"line":1780},72,[1095,1782,1683],{},[1095,1784,1786],{"class":1097,"line":1785},73,[1095,1787,1586],{},[1095,1789,1791],{"class":1097,"line":1790},74,[1095,1792,1793],{},"        # Connection pooling\n",[1095,1795,1797],{"class":1097,"line":1796},75,[1095,1798,1799],{},"        proxy_http_version 1.1;\n",[1095,1801,1803],{"class":1097,"line":1802},76,[1095,1804,1805],{},"        proxy_set_header Connection \"\";\n",[1095,1807,1809],{"class":1097,"line":1808},77,[1095,1810,1586],{},[1095,1812,1814],{"class":1097,"line":1813},78,[1095,1815,1816],{},"        # Timeouts\n",[1095,1818,1820],{"class":1097,"line":1819},79,[1095,1821,1822],{},"        proxy_connect_timeout 5s;\n",[1095,1824,1826],{"class":1097,"line":1825},80,[1095,1827,1828],{},"        proxy_send_timeout 60s;\n",[1095,1830,1832],{"class":1097,"line":1831},81,[1095,1833,1834],{},"        proxy_read_timeout 60s;\n",[1095,1836,1838],{"class":1097,"line":1837},82,[1095,1839,1586],{},[1095,1841,1843],{"class":1097,"line":1842},83,[1095,1844,1845],{},"        # Buffering\n",[1095,1847,1849],{"class":1097,"line":1848},84,[1095,1850,1851],{},"        proxy_buffering on;\n",[1095,1853,1855],{"class":1097,"line":1854},85,[1095,1856,1857],{},"        proxy_buffer_size 4k;\n",[1095,1859,1861],{"class":1097,"line":1860},86,[1095,1862,1863],{},"        proxy_buffers 8 4k;\n",[1095,1865,1867],{"class":1097,"line":1866},87,[1095,1868,1869],{},"        proxy_busy_buffers_size 8k;\n",[1095,1871,1873],{"class":1097,"line":1872},88,[1095,1874,1221],{},[1095,1876,1878],{"class":1097,"line":1877},89,[1095,1879,1432],{},[1095,1881,1883],{"class":1097,"line":1882},90,[1095,1884,1885],{},"    # Health check endpoint\n",[1095,1887,1889],{"class":1097,"line":1888},91,[1095,1890,1891],{},"    location /health/ {\n",[1095,1893,1895],{"class":1097,"line":1894},92,[1095,1896,1677],{},[1095,1898,1900],{"class":1097,"line":1899},93,[1095,1901,1902],{},"        access_log off;\n",[1095,1904,1906],{"class":1097,"line":1905},94,[1095,1907,1586],{},[1095,1909,1911],{"class":1097,"line":1910},95,[1095,1912,1913],{},"        # Custom health check headers\n",[1095,1915,1917],{"class":1097,"line":1916},96,[1095,1918,1919],{},"        proxy_set_header X-Health-Check \"true\";\n",[1095,1921,1923],{"class":1097,"line":1922},97,[1095,1924,1221],{},[1095,1926,1928],{"class":1097,"line":1927},98,[1095,1929,1227],{},[1095,1931,1933],{"class":1097,"line":1932},99,[1095,1934,1109],{"emptyLinePlaceholder":1108},[1095,1936,1938],{"class":1097,"line":1937},100,[1095,1939,1940],{},"# Separate upstream for static files\n",[1095,1942,1944],{"class":1097,"line":1943},101,[1095,1945,1946],{},"upstream static_servers {\n",[1095,1948,1950],{"class":1097,"line":1949},102,[1095,1951,1952],{},"    server 10.0.2.10:80;\n",[1095,1954,1956],{"class":1097,"line":1955},103,[1095,1957,1958],{},"    server 10.0.2.11:80;\n",[1095,1960,1962],{"class":1097,"line":1961},104,[1095,1963,1227],{},[1035,1965,1967],{"id":1966},"haproxy-configuration","HAProxy Configuration",[1085,1969,1974],{"className":1970,"code":1972,"language":1973},[1971],"language-text","# /etc/haproxy/haproxy.cfg\nglobal\n    daemon\n    chroot /var/lib/haproxy\n    stats socket /run/haproxy/admin.sock mode 660 level admin\n    stats timeout 30s\n    user haproxy\n    group haproxy\n    \n    # SSL/TLS configuration\n    ssl-default-bind-ciphers ECDHE+AESGCM:ECDHE+CHACHA20:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS\n    ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets\n\ndefaults\n    mode http\n    timeout connect 5000ms\n    timeout client 50000ms\n    timeout server 50000ms\n    option httplog\n    option dontlognull\n    option redispatch\n    retries 3\n    \n    # Health checks\n    option httpchk GET /health/\n    http-check expect status 200\n\n# Statistics page\nfrontend stats\n    bind *:8404\n    stats enable\n    stats uri /stats\n    stats refresh 30s\n    stats admin if TRUE\n\n# Frontend configuration\nfrontend django_frontend\n    bind *:80\n    bind *:443 ssl crt /etc/ssl/certs/yourdomain.com.pem\n    \n    # Redirect HTTP to HTTPS\n    redirect scheme https if !{ ssl_fc }\n    \n    # Rate limiting\n    stick-table type ip size 100k expire 30s store http_req_rate(10s)\n    http-request track-sc0 src\n    http-request reject if { sc_http_req_rate(0) gt 20 }\n    \n    # Route to backend\n    default_backend django_backend\n\n# Backend configuration\nbackend django_backend\n    balance roundrobin\n    \n    # Health checks\n    option httpchk GET /health/\n    http-check expect status 200\n    \n    # Servers\n    server web1 10.0.1.10:8000 check weight 100 maxconn 100\n    server web2 10.0.1.11:8000 check weight 100 maxconn 100\n    server web3 10.0.1.12:8000 check weight 80 maxconn 80\n    server web4 10.0.1.13:8000 check backup\n    \n    # Connection settings\n    option httpclose\n    option forwardfor\n    \n    # Timeouts\n    timeout server 30s\n    timeout connect 5s\n","text",[1092,1975,1972],{"__ignoreMap":1090},[1030,1977,1979],{"id":1978},"database-scaling","Database Scaling",[1035,1981,1983],{"id":1982},"read-replicas-configuration","Read Replicas Configuration",[1085,1985,1987],{"className":1087,"code":1986,"language":1089,"meta":1090,"style":1090},"# settings/database_scaling.py\nimport os\n\n# Master-slave database configuration\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': os.environ.get('DB_NAME'),\n        'USER': os.environ.get('DB_USER'),\n        'PASSWORD': os.environ.get('DB_PASSWORD'),\n        'HOST': os.environ.get('DB_MASTER_HOST'),\n        'PORT': os.environ.get('DB_PORT', '5432'),\n        'OPTIONS': {\n            'sslmode': 'require',\n        },\n        'CONN_MAX_AGE': 600,\n    },\n    'read_replica_1': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': os.environ.get('DB_NAME'),\n        'USER': os.environ.get('DB_READ_USER'),\n        'PASSWORD': os.environ.get('DB_READ_PASSWORD'),\n        'HOST': os.environ.get('DB_REPLICA_1_HOST'),\n        'PORT': os.environ.get('DB_PORT', '5432'),\n        'OPTIONS': {\n            'sslmode': 'require',\n        },\n        'CONN_MAX_AGE': 600,\n    },\n    'read_replica_2': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': os.environ.get('DB_NAME'),\n        'USER': os.environ.get('DB_READ_USER'),\n        'PASSWORD': os.environ.get('DB_READ_PASSWORD'),\n        'HOST': os.environ.get('DB_REPLICA_2_HOST'),\n        'PORT': os.environ.get('DB_PORT', '5432'),\n        'OPTIONS': {\n            'sslmode': 'require',\n        },\n        'CONN_MAX_AGE': 600,\n    },\n}\n\n# Database routing\nDATABASE_ROUTERS = ['myproject.routers.DatabaseRouter']\n",[1092,1988,1989,1994,2004,2008,2013,2021,2033,2051,2091,2123,2155,2187,2228,2240,2260,2264,2280,2285,2298,2316,2346,2377,2408,2439,2477,2489,2507,2511,2525,2529,2542,2560,2590,2620,2650,2681,2719,2731,2749,2753,2767,2771,2775,2779,2784],{"__ignoreMap":1090},[1095,1990,1991],{"class":1097,"line":1098},[1095,1992,1993],{"class":1101},"# settings/database_scaling.py\n",[1095,1995,1996,2000],{"class":1097,"line":1105},[1095,1997,1999],{"class":1998},"siDh9","import",[1095,2001,2003],{"class":2002},"sftqT"," os\n",[1095,2005,2006],{"class":1097,"line":1112},[1095,2007,1109],{"emptyLinePlaceholder":1108},[1095,2009,2010],{"class":1097,"line":1118},[1095,2011,2012],{"class":1101},"# Master-slave database configuration\n",[1095,2014,2015,2017,2019],{"class":1097,"line":1132},[1095,2016,1122],{"class":1121},[1095,2018,1126],{"class":1125},[1095,2020,1129],{"class":1125},[1095,2022,2023,2025,2027,2029,2031],{"class":1097,"line":1151},[1095,2024,1136],{"class":1135},[1095,2026,1140],{"class":1139},[1095,2028,1143],{"class":1135},[1095,2030,1146],{"class":1125},[1095,2032,1129],{"class":1125},[1095,2034,2035,2037,2039,2041,2043,2045,2047,2049],{"class":1097,"line":1175},[1095,2036,1154],{"class":1135},[1095,2038,1157],{"class":1139},[1095,2040,1143],{"class":1135},[1095,2042,1146],{"class":1125},[1095,2044,1164],{"class":1135},[1095,2046,1167],{"class":1139},[1095,2048,1143],{"class":1135},[1095,2050,1172],{"class":1125},[1095,2052,2053,2055,2058,2060,2062,2065,2068,2072,2074,2078,2081,2083,2086,2088],{"class":1097,"line":1189},[1095,2054,1154],{"class":1135},[1095,2056,2057],{"class":1139},"NAME",[1095,2059,1143],{"class":1135},[1095,2061,1146],{"class":1125},[1095,2063,2064],{"class":2002}," os",[1095,2066,2067],{"class":1125},".",[1095,2069,2071],{"class":2070},"sBPpx","environ",[1095,2073,2067],{"class":1125},[1095,2075,2077],{"class":2076},"siWMO","get",[1095,2079,2080],{"class":1125},"(",[1095,2082,1143],{"class":1135},[1095,2084,2085],{"class":1139},"DB_NAME",[1095,2087,1143],{"class":1135},[1095,2089,2090],{"class":1125},"),\n",[1095,2092,2093,2095,2098,2100,2102,2104,2106,2108,2110,2112,2114,2116,2119,2121],{"class":1097,"line":1212},[1095,2094,1154],{"class":1135},[1095,2096,2097],{"class":1139},"USER",[1095,2099,1143],{"class":1135},[1095,2101,1146],{"class":1125},[1095,2103,2064],{"class":2002},[1095,2105,2067],{"class":1125},[1095,2107,2071],{"class":2070},[1095,2109,2067],{"class":1125},[1095,2111,2077],{"class":2076},[1095,2113,2080],{"class":1125},[1095,2115,1143],{"class":1135},[1095,2117,2118],{"class":1139},"DB_USER",[1095,2120,1143],{"class":1135},[1095,2122,2090],{"class":1125},[1095,2124,2125,2127,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148,2151,2153],{"class":1097,"line":1218},[1095,2126,1154],{"class":1135},[1095,2128,2129],{"class":1139},"PASSWORD",[1095,2131,1143],{"class":1135},[1095,2133,1146],{"class":1125},[1095,2135,2064],{"class":2002},[1095,2137,2067],{"class":1125},[1095,2139,2071],{"class":2070},[1095,2141,2067],{"class":1125},[1095,2143,2077],{"class":2076},[1095,2145,2080],{"class":1125},[1095,2147,1143],{"class":1135},[1095,2149,2150],{"class":1139},"DB_PASSWORD",[1095,2152,1143],{"class":1135},[1095,2154,2090],{"class":1125},[1095,2156,2157,2159,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2183,2185],{"class":1097,"line":1224},[1095,2158,1154],{"class":1135},[1095,2160,2161],{"class":1139},"HOST",[1095,2163,1143],{"class":1135},[1095,2165,1146],{"class":1125},[1095,2167,2064],{"class":2002},[1095,2169,2067],{"class":1125},[1095,2171,2071],{"class":2070},[1095,2173,2067],{"class":1125},[1095,2175,2077],{"class":2076},[1095,2177,2080],{"class":1125},[1095,2179,1143],{"class":1135},[1095,2181,2182],{"class":1139},"DB_MASTER_HOST",[1095,2184,1143],{"class":1135},[1095,2186,2090],{"class":1125},[1095,2188,2189,2191,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212,2215,2217,2219,2221,2224,2226],{"class":1097,"line":1230},[1095,2190,1154],{"class":1135},[1095,2192,2193],{"class":1139},"PORT",[1095,2195,1143],{"class":1135},[1095,2197,1146],{"class":1125},[1095,2199,2064],{"class":2002},[1095,2201,2067],{"class":1125},[1095,2203,2071],{"class":2070},[1095,2205,2067],{"class":1125},[1095,2207,2077],{"class":2076},[1095,2209,2080],{"class":1125},[1095,2211,1143],{"class":1135},[1095,2213,2214],{"class":1139},"DB_PORT",[1095,2216,1143],{"class":1135},[1095,2218,1206],{"class":1125},[1095,2220,1164],{"class":1135},[1095,2222,2223],{"class":1139},"5432",[1095,2225,1143],{"class":1135},[1095,2227,2090],{"class":1125},[1095,2229,2230,2232,2234,2236,2238],{"class":1097,"line":1235},[1095,2231,1154],{"class":1135},[1095,2233,1180],{"class":1139},[1095,2235,1143],{"class":1135},[1095,2237,1146],{"class":1125},[1095,2239,1129],{"class":1125},[1095,2241,2242,2244,2247,2249,2251,2253,2256,2258],{"class":1097,"line":1241},[1095,2243,1192],{"class":1135},[1095,2245,2246],{"class":1139},"sslmode",[1095,2248,1143],{"class":1135},[1095,2250,1146],{"class":1125},[1095,2252,1164],{"class":1135},[1095,2254,2255],{"class":1139},"require",[1095,2257,1143],{"class":1135},[1095,2259,1172],{"class":1125},[1095,2261,2262],{"class":1097,"line":1259},[1095,2263,1215],{"class":1125},[1095,2265,2266,2268,2271,2273,2275,2278],{"class":1097,"line":1264},[1095,2267,1154],{"class":1135},[1095,2269,2270],{"class":1139},"CONN_MAX_AGE",[1095,2272,1143],{"class":1135},[1095,2274,1146],{"class":1125},[1095,2276,2277],{"class":1202}," 600",[1095,2279,1172],{"class":1125},[1095,2281,2282],{"class":1097,"line":1270},[1095,2283,2284],{"class":1125},"    },\n",[1095,2286,2287,2289,2292,2294,2296],{"class":1097,"line":1288},[1095,2288,1136],{"class":1135},[1095,2290,2291],{"class":1139},"read_replica_1",[1095,2293,1143],{"class":1135},[1095,2295,1146],{"class":1125},[1095,2297,1129],{"class":1125},[1095,2299,2300,2302,2304,2306,2308,2310,2312,2314],{"class":1097,"line":1293},[1095,2301,1154],{"class":1135},[1095,2303,1157],{"class":1139},[1095,2305,1143],{"class":1135},[1095,2307,1146],{"class":1125},[1095,2309,1164],{"class":1135},[1095,2311,1167],{"class":1139},[1095,2313,1143],{"class":1135},[1095,2315,1172],{"class":1125},[1095,2317,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344],{"class":1097,"line":1299},[1095,2319,1154],{"class":1135},[1095,2321,2057],{"class":1139},[1095,2323,1143],{"class":1135},[1095,2325,1146],{"class":1125},[1095,2327,2064],{"class":2002},[1095,2329,2067],{"class":1125},[1095,2331,2071],{"class":2070},[1095,2333,2067],{"class":1125},[1095,2335,2077],{"class":2076},[1095,2337,2080],{"class":1125},[1095,2339,1143],{"class":1135},[1095,2341,2085],{"class":1139},[1095,2343,1143],{"class":1135},[1095,2345,2090],{"class":1125},[1095,2347,2348,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368,2370,2373,2375],{"class":1097,"line":1309},[1095,2349,1154],{"class":1135},[1095,2351,2097],{"class":1139},[1095,2353,1143],{"class":1135},[1095,2355,1146],{"class":1125},[1095,2357,2064],{"class":2002},[1095,2359,2067],{"class":1125},[1095,2361,2071],{"class":2070},[1095,2363,2067],{"class":1125},[1095,2365,2077],{"class":2076},[1095,2367,2080],{"class":1125},[1095,2369,1143],{"class":1135},[1095,2371,2372],{"class":1139},"DB_READ_USER",[1095,2374,1143],{"class":1135},[1095,2376,2090],{"class":1125},[1095,2378,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401,2404,2406],{"class":1097,"line":1322},[1095,2380,1154],{"class":1135},[1095,2382,2129],{"class":1139},[1095,2384,1143],{"class":1135},[1095,2386,1146],{"class":1125},[1095,2388,2064],{"class":2002},[1095,2390,2067],{"class":1125},[1095,2392,2071],{"class":2070},[1095,2394,2067],{"class":1125},[1095,2396,2077],{"class":2076},[1095,2398,2080],{"class":1125},[1095,2400,1143],{"class":1135},[1095,2402,2403],{"class":1139},"DB_READ_PASSWORD",[1095,2405,1143],{"class":1135},[1095,2407,2090],{"class":1125},[1095,2409,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2435,2437],{"class":1097,"line":1346},[1095,2411,1154],{"class":1135},[1095,2413,2161],{"class":1139},[1095,2415,1143],{"class":1135},[1095,2417,1146],{"class":1125},[1095,2419,2064],{"class":2002},[1095,2421,2067],{"class":1125},[1095,2423,2071],{"class":2070},[1095,2425,2067],{"class":1125},[1095,2427,2077],{"class":2076},[1095,2429,2080],{"class":1125},[1095,2431,1143],{"class":1135},[1095,2433,2434],{"class":1139},"DB_REPLICA_1_HOST",[1095,2436,1143],{"class":1135},[1095,2438,2090],{"class":1125},[1095,2440,2441,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475],{"class":1097,"line":1351},[1095,2442,1154],{"class":1135},[1095,2444,2193],{"class":1139},[1095,2446,1143],{"class":1135},[1095,2448,1146],{"class":1125},[1095,2450,2064],{"class":2002},[1095,2452,2067],{"class":1125},[1095,2454,2071],{"class":2070},[1095,2456,2067],{"class":1125},[1095,2458,2077],{"class":2076},[1095,2460,2080],{"class":1125},[1095,2462,1143],{"class":1135},[1095,2464,2214],{"class":1139},[1095,2466,1143],{"class":1135},[1095,2468,1206],{"class":1125},[1095,2470,1164],{"class":1135},[1095,2472,2223],{"class":1139},[1095,2474,1143],{"class":1135},[1095,2476,2090],{"class":1125},[1095,2478,2479,2481,2483,2485,2487],{"class":1097,"line":1356},[1095,2480,1154],{"class":1135},[1095,2482,1180],{"class":1139},[1095,2484,1143],{"class":1135},[1095,2486,1146],{"class":1125},[1095,2488,1129],{"class":1125},[1095,2490,2491,2493,2495,2497,2499,2501,2503,2505],{"class":1097,"line":1361},[1095,2492,1192],{"class":1135},[1095,2494,2246],{"class":1139},[1095,2496,1143],{"class":1135},[1095,2498,1146],{"class":1125},[1095,2500,1164],{"class":1135},[1095,2502,2255],{"class":1139},[1095,2504,1143],{"class":1135},[1095,2506,1172],{"class":1125},[1095,2508,2509],{"class":1097,"line":1367},[1095,2510,1215],{"class":1125},[1095,2512,2513,2515,2517,2519,2521,2523],{"class":1097,"line":1530},[1095,2514,1154],{"class":1135},[1095,2516,2270],{"class":1139},[1095,2518,1143],{"class":1135},[1095,2520,1146],{"class":1125},[1095,2522,2277],{"class":1202},[1095,2524,1172],{"class":1125},[1095,2526,2527],{"class":1097,"line":1536},[1095,2528,2284],{"class":1125},[1095,2530,2531,2533,2536,2538,2540],{"class":1097,"line":1542},[1095,2532,1136],{"class":1135},[1095,2534,2535],{"class":1139},"read_replica_2",[1095,2537,1143],{"class":1135},[1095,2539,1146],{"class":1125},[1095,2541,1129],{"class":1125},[1095,2543,2544,2546,2548,2550,2552,2554,2556,2558],{"class":1097,"line":1548},[1095,2545,1154],{"class":1135},[1095,2547,1157],{"class":1139},[1095,2549,1143],{"class":1135},[1095,2551,1146],{"class":1125},[1095,2553,1164],{"class":1135},[1095,2555,1167],{"class":1139},[1095,2557,1143],{"class":1135},[1095,2559,1172],{"class":1125},[1095,2561,2562,2564,2566,2568,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588],{"class":1097,"line":1553},[1095,2563,1154],{"class":1135},[1095,2565,2057],{"class":1139},[1095,2567,1143],{"class":1135},[1095,2569,1146],{"class":1125},[1095,2571,2064],{"class":2002},[1095,2573,2067],{"class":1125},[1095,2575,2071],{"class":2070},[1095,2577,2067],{"class":1125},[1095,2579,2077],{"class":2076},[1095,2581,2080],{"class":1125},[1095,2583,1143],{"class":1135},[1095,2585,2085],{"class":1139},[1095,2587,1143],{"class":1135},[1095,2589,2090],{"class":1125},[1095,2591,2592,2594,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618],{"class":1097,"line":1559},[1095,2593,1154],{"class":1135},[1095,2595,2097],{"class":1139},[1095,2597,1143],{"class":1135},[1095,2599,1146],{"class":1125},[1095,2601,2064],{"class":2002},[1095,2603,2067],{"class":1125},[1095,2605,2071],{"class":2070},[1095,2607,2067],{"class":1125},[1095,2609,2077],{"class":2076},[1095,2611,2080],{"class":1125},[1095,2613,1143],{"class":1135},[1095,2615,2372],{"class":1139},[1095,2617,1143],{"class":1135},[1095,2619,2090],{"class":1125},[1095,2621,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646,2648],{"class":1097,"line":1565},[1095,2623,1154],{"class":1135},[1095,2625,2129],{"class":1139},[1095,2627,1143],{"class":1135},[1095,2629,1146],{"class":1125},[1095,2631,2064],{"class":2002},[1095,2633,2067],{"class":1125},[1095,2635,2071],{"class":2070},[1095,2637,2067],{"class":1125},[1095,2639,2077],{"class":2076},[1095,2641,2080],{"class":1125},[1095,2643,1143],{"class":1135},[1095,2645,2403],{"class":1139},[1095,2647,1143],{"class":1135},[1095,2649,2090],{"class":1125},[1095,2651,2652,2654,2656,2658,2660,2662,2664,2666,2668,2670,2672,2674,2677,2679],{"class":1097,"line":1571},[1095,2653,1154],{"class":1135},[1095,2655,2161],{"class":1139},[1095,2657,1143],{"class":1135},[1095,2659,1146],{"class":1125},[1095,2661,2064],{"class":2002},[1095,2663,2067],{"class":1125},[1095,2665,2071],{"class":2070},[1095,2667,2067],{"class":1125},[1095,2669,2077],{"class":2076},[1095,2671,2080],{"class":1125},[1095,2673,1143],{"class":1135},[1095,2675,2676],{"class":1139},"DB_REPLICA_2_HOST",[1095,2678,1143],{"class":1135},[1095,2680,2090],{"class":1125},[1095,2682,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703,2705,2707,2709,2711,2713,2715,2717],{"class":1097,"line":1577},[1095,2684,1154],{"class":1135},[1095,2686,2193],{"class":1139},[1095,2688,1143],{"class":1135},[1095,2690,1146],{"class":1125},[1095,2692,2064],{"class":2002},[1095,2694,2067],{"class":1125},[1095,2696,2071],{"class":2070},[1095,2698,2067],{"class":1125},[1095,2700,2077],{"class":2076},[1095,2702,2080],{"class":1125},[1095,2704,1143],{"class":1135},[1095,2706,2214],{"class":1139},[1095,2708,1143],{"class":1135},[1095,2710,1206],{"class":1125},[1095,2712,1164],{"class":1135},[1095,2714,2223],{"class":1139},[1095,2716,1143],{"class":1135},[1095,2718,2090],{"class":1125},[1095,2720,2721,2723,2725,2727,2729],{"class":1097,"line":1583},[1095,2722,1154],{"class":1135},[1095,2724,1180],{"class":1139},[1095,2726,1143],{"class":1135},[1095,2728,1146],{"class":1125},[1095,2730,1129],{"class":1125},[1095,2732,2733,2735,2737,2739,2741,2743,2745,2747],{"class":1097,"line":1589},[1095,2734,1192],{"class":1135},[1095,2736,2246],{"class":1139},[1095,2738,1143],{"class":1135},[1095,2740,1146],{"class":1125},[1095,2742,1164],{"class":1135},[1095,2744,2255],{"class":1139},[1095,2746,1143],{"class":1135},[1095,2748,1172],{"class":1125},[1095,2750,2751],{"class":1097,"line":1595},[1095,2752,1215],{"class":1125},[1095,2754,2755,2757,2759,2761,2763,2765],{"class":1097,"line":1601},[1095,2756,1154],{"class":1135},[1095,2758,2270],{"class":1139},[1095,2760,1143],{"class":1135},[1095,2762,1146],{"class":1125},[1095,2764,2277],{"class":1202},[1095,2766,1172],{"class":1125},[1095,2768,2769],{"class":1097,"line":1607},[1095,2770,2284],{"class":1125},[1095,2772,2773],{"class":1097,"line":1612},[1095,2774,1227],{"class":1125},[1095,2776,2777],{"class":1097,"line":1618},[1095,2778,1109],{"emptyLinePlaceholder":1108},[1095,2780,2781],{"class":1097,"line":1624},[1095,2782,2783],{"class":1101},"# Database routing\n",[1095,2785,2786,2789,2791,2794,2796,2799,2801],{"class":1097,"line":1629},[1095,2787,2788],{"class":1121},"DATABASE_ROUTERS",[1095,2790,1126],{"class":1125},[1095,2792,2793],{"class":1125}," [",[1095,2795,1143],{"class":1135},[1095,2797,2798],{"class":1139},"myproject.routers.DatabaseRouter",[1095,2800,1143],{"class":1135},[1095,2802,2803],{"class":1125},"]\n",[1085,2805,2807],{"className":1087,"code":2806,"language":1089,"meta":1090,"style":1090},"# myproject/routers.py\nimport random\n\nclass DatabaseRouter:\n    \"\"\"\n    Route reads to read replicas and writes to master\n    \"\"\"\n    \n    def __init__(self):\n        self.read_databases = ['read_replica_1', 'read_replica_2']\n    \n    def db_for_read(self, model, **hints):\n        \"\"\"Reading from read replicas\"\"\"\n        if model._meta.app_label in ['sessions', 'admin']:\n            return 'default'  # Always read sessions from master\n        \n        # Random selection of read replica\n        return random.choice(self.read_databases)\n    \n    def db_for_write(self, model, **hints):\n        \"\"\"Writing to master database\"\"\"\n        return 'default'\n    \n    def allow_relation(self, obj1, obj2, **hints):\n        \"\"\"Allow relations if models are in the same app\"\"\"\n        db_set = {'default', 'read_replica_1', 'read_replica_2'}\n        if obj1._state.db in db_set and obj2._state.db in db_set:\n            return True\n        return None\n    \n    def allow_migrate(self, db, app_label, model_name=None, **hints):\n        \"\"\"Ensure that migrations only run on master\"\"\"\n        return db == 'default'\n\n# Advanced database router with load balancing\nclass LoadBalancedDatabaseRouter:\n    \"\"\"\n    Advanced database router with health checks and load balancing\n    \"\"\"\n    \n    def __init__(self):\n        self.read_databases = ['read_replica_1', 'read_replica_2']\n        self.database_weights = {\n            'read_replica_1': 3,\n            'read_replica_2': 2,\n        }\n        self.failed_databases = set()\n    \n    def get_read_database(self):\n        \"\"\"Get read database with weighted selection and health checks\"\"\"\n        available_dbs = [\n            db for db in self.read_databases \n            if db not in self.failed_databases\n        ]\n        \n        if not available_dbs:\n            # Fallback to master if all replicas are down\n            return 'default'\n        \n        # Weighted random selection\n        weights = [self.database_weights.get(db, 1) for db in available_dbs]\n        return random.choices(available_dbs, weights=weights)[0]\n    \n    def db_for_read(self, model, **hints):\n        \"\"\"Route reads with load balancing\"\"\"\n        # Always read critical data from master\n        if model._meta.app_label in ['sessions', 'admin', 'auth']:\n            return 'default'\n        \n        # Check if this is a recent write (read-after-write consistency)\n        if hasattr(hints.get('instance'), '_recently_written'):\n            return 'default'\n        \n        return self.get_read_database()\n    \n    def db_for_write(self, model, **hints):\n        \"\"\"All writes go to master\"\"\"\n        return 'default'\n    \n    def allow_migrate(self, db, app_label, model_name=None, **hints):\n        \"\"\"Only migrate on master\"\"\"\n        return db == 'default'\n",[1092,2808,2809,2814,2821,2825,2838,2844,2850,2854,2858,2876,2906,2910,2939,2950,2991,3005,3009,3014,3038,3042,3065,3074,3085,3089,3118,3127,3162,3203,3211,3218,3222,3261,3270,3286,3290,3295,3304,3308,3313,3317,3321,3333,3361,3374,3389,3404,3409,3427,3431,3444,3453,3463,3486,3505,3510,3514,3526,3531,3541,3545,3550,3592,3627,3631,3653,3662,3667,3710,3720,3724,3729,3765,3775,3779,3792,3796,3818,3827,3837,3841,3875,3884],{"__ignoreMap":1090},[1095,2810,2811],{"class":1097,"line":1098},[1095,2812,2813],{"class":1101},"# myproject/routers.py\n",[1095,2815,2816,2818],{"class":1097,"line":1105},[1095,2817,1999],{"class":1998},[1095,2819,2820],{"class":2002}," random\n",[1095,2822,2823],{"class":1097,"line":1112},[1095,2824,1109],{"emptyLinePlaceholder":1108},[1095,2826,2827,2831,2835],{"class":1097,"line":1118},[1095,2828,2830],{"class":2829},"s5Kfy","class",[1095,2832,2834],{"class":2833},"sD-vU"," DatabaseRouter",[1095,2836,2837],{"class":1125},":\n",[1095,2839,2840],{"class":1097,"line":1132},[1095,2841,2843],{"class":2842},"sm7ve","    \"\"\"\n",[1095,2845,2846],{"class":1097,"line":1151},[1095,2847,2849],{"class":2848},"sVyVU","    Route reads to read replicas and writes to master\n",[1095,2851,2852],{"class":1097,"line":1175},[1095,2853,2843],{"class":2842},[1095,2855,2856],{"class":1097,"line":1189},[1095,2857,1432],{"class":2002},[1095,2859,2860,2863,2867,2869,2873],{"class":1097,"line":1212},[1095,2861,2862],{"class":2829},"    def",[1095,2864,2866],{"class":2865},"sJdAF"," __init__",[1095,2868,2080],{"class":1125},[1095,2870,2872],{"class":2871},"sRjD_","self",[1095,2874,2875],{"class":1125},"):\n",[1095,2877,2878,2881,2883,2886,2888,2890,2892,2894,2896,2898,2900,2902,2904],{"class":1097,"line":1218},[1095,2879,2880],{"class":1121},"        self",[1095,2882,2067],{"class":1125},[1095,2884,2885],{"class":2070},"read_databases",[1095,2887,1126],{"class":1125},[1095,2889,2793],{"class":1125},[1095,2891,1143],{"class":1135},[1095,2893,2291],{"class":1139},[1095,2895,1143],{"class":1135},[1095,2897,1206],{"class":1125},[1095,2899,1164],{"class":1135},[1095,2901,2535],{"class":1139},[1095,2903,1143],{"class":1135},[1095,2905,2803],{"class":1125},[1095,2907,2908],{"class":1097,"line":1224},[1095,2909,1432],{"class":2002},[1095,2911,2912,2914,2918,2920,2922,2924,2928,2930,2934,2937],{"class":1097,"line":1230},[1095,2913,2862],{"class":2829},[1095,2915,2917],{"class":2916},"sljsM"," db_for_read",[1095,2919,2080],{"class":1125},[1095,2921,2872],{"class":2871},[1095,2923,1206],{"class":1125},[1095,2925,2927],{"class":2926},"sCyAa"," model",[1095,2929,1206],{"class":1125},[1095,2931,2933],{"class":2932},"sVsLi"," **",[1095,2935,2936],{"class":2926},"hints",[1095,2938,2875],{"class":1125},[1095,2940,2941,2944,2947],{"class":1097,"line":1235},[1095,2942,2943],{"class":2842},"        \"\"\"",[1095,2945,2946],{"class":2848},"Reading from read replicas",[1095,2948,2949],{"class":2842},"\"\"\"\n",[1095,2951,2952,2955,2957,2959,2962,2964,2967,2970,2972,2974,2977,2979,2981,2983,2986,2988],{"class":1097,"line":1241},[1095,2953,2954],{"class":1998},"        if",[1095,2956,2927],{"class":2002},[1095,2958,2067],{"class":1125},[1095,2960,2961],{"class":2070},"_meta",[1095,2963,2067],{"class":1125},[1095,2965,2966],{"class":2070},"app_label",[1095,2968,2969],{"class":2932}," in",[1095,2971,2793],{"class":1125},[1095,2973,1143],{"class":1135},[1095,2975,2976],{"class":1139},"sessions",[1095,2978,1143],{"class":1135},[1095,2980,1206],{"class":1125},[1095,2982,1164],{"class":1135},[1095,2984,2985],{"class":1139},"admin",[1095,2987,1143],{"class":1135},[1095,2989,2990],{"class":1125},"]:\n",[1095,2992,2993,2996,2998,3000,3002],{"class":1097,"line":1259},[1095,2994,2995],{"class":1998},"            return",[1095,2997,1164],{"class":1135},[1095,2999,1140],{"class":1139},[1095,3001,1143],{"class":1135},[1095,3003,3004],{"class":1101},"  # Always read sessions from master\n",[1095,3006,3007],{"class":1097,"line":1264},[1095,3008,1586],{"class":2002},[1095,3010,3011],{"class":1097,"line":1270},[1095,3012,3013],{"class":1101},"        # Random selection of read replica\n",[1095,3015,3016,3019,3022,3024,3027,3029,3031,3033,3035],{"class":1097,"line":1288},[1095,3017,3018],{"class":1998},"        return",[1095,3020,3021],{"class":2002}," random",[1095,3023,2067],{"class":1125},[1095,3025,3026],{"class":2076},"choice",[1095,3028,2080],{"class":1125},[1095,3030,2872],{"class":1121},[1095,3032,2067],{"class":1125},[1095,3034,2885],{"class":2070},[1095,3036,3037],{"class":1125},")\n",[1095,3039,3040],{"class":1097,"line":1293},[1095,3041,1432],{"class":2002},[1095,3043,3044,3046,3049,3051,3053,3055,3057,3059,3061,3063],{"class":1097,"line":1299},[1095,3045,2862],{"class":2829},[1095,3047,3048],{"class":2916}," db_for_write",[1095,3050,2080],{"class":1125},[1095,3052,2872],{"class":2871},[1095,3054,1206],{"class":1125},[1095,3056,2927],{"class":2926},[1095,3058,1206],{"class":1125},[1095,3060,2933],{"class":2932},[1095,3062,2936],{"class":2926},[1095,3064,2875],{"class":1125},[1095,3066,3067,3069,3072],{"class":1097,"line":1309},[1095,3068,2943],{"class":2842},[1095,3070,3071],{"class":2848},"Writing to master database",[1095,3073,2949],{"class":2842},[1095,3075,3076,3078,3080,3082],{"class":1097,"line":1322},[1095,3077,3018],{"class":1998},[1095,3079,1164],{"class":1135},[1095,3081,1140],{"class":1139},[1095,3083,3084],{"class":1135},"'\n",[1095,3086,3087],{"class":1097,"line":1346},[1095,3088,1432],{"class":2002},[1095,3090,3091,3093,3096,3098,3100,3102,3105,3107,3110,3112,3114,3116],{"class":1097,"line":1351},[1095,3092,2862],{"class":2829},[1095,3094,3095],{"class":2916}," allow_relation",[1095,3097,2080],{"class":1125},[1095,3099,2872],{"class":2871},[1095,3101,1206],{"class":1125},[1095,3103,3104],{"class":2926}," obj1",[1095,3106,1206],{"class":1125},[1095,3108,3109],{"class":2926}," obj2",[1095,3111,1206],{"class":1125},[1095,3113,2933],{"class":2932},[1095,3115,2936],{"class":2926},[1095,3117,2875],{"class":1125},[1095,3119,3120,3122,3125],{"class":1097,"line":1356},[1095,3121,2943],{"class":2842},[1095,3123,3124],{"class":2848},"Allow relations if models are in the same app",[1095,3126,2949],{"class":2842},[1095,3128,3129,3132,3135,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156,3158,3160],{"class":1097,"line":1361},[1095,3130,3131],{"class":2002},"        db_set ",[1095,3133,3134],{"class":1125},"=",[1095,3136,3137],{"class":1125}," {",[1095,3139,1143],{"class":1135},[1095,3141,1140],{"class":1139},[1095,3143,1143],{"class":1135},[1095,3145,1206],{"class":1125},[1095,3147,1164],{"class":1135},[1095,3149,2291],{"class":1139},[1095,3151,1143],{"class":1135},[1095,3153,1206],{"class":1125},[1095,3155,1164],{"class":1135},[1095,3157,2535],{"class":1139},[1095,3159,1143],{"class":1135},[1095,3161,1227],{"class":1125},[1095,3163,3164,3166,3168,3170,3173,3175,3178,3180,3183,3186,3188,3190,3192,3194,3196,3198,3201],{"class":1097,"line":1367},[1095,3165,2954],{"class":1998},[1095,3167,3104],{"class":2002},[1095,3169,2067],{"class":1125},[1095,3171,3172],{"class":2070},"_state",[1095,3174,2067],{"class":1125},[1095,3176,3177],{"class":2070},"db",[1095,3179,2969],{"class":2932},[1095,3181,3182],{"class":2002}," db_set ",[1095,3184,3185],{"class":2932},"and",[1095,3187,3109],{"class":2002},[1095,3189,2067],{"class":1125},[1095,3191,3172],{"class":2070},[1095,3193,2067],{"class":1125},[1095,3195,3177],{"class":2070},[1095,3197,2969],{"class":2932},[1095,3199,3200],{"class":2002}," db_set",[1095,3202,2837],{"class":1125},[1095,3204,3205,3207],{"class":1097,"line":1530},[1095,3206,2995],{"class":1998},[1095,3208,3210],{"class":3209},"s8XtY"," True\n",[1095,3212,3213,3215],{"class":1097,"line":1536},[1095,3214,3018],{"class":1998},[1095,3216,3217],{"class":3209}," None\n",[1095,3219,3220],{"class":1097,"line":1542},[1095,3221,1432],{"class":2002},[1095,3223,3224,3226,3229,3231,3233,3235,3238,3240,3243,3245,3248,3250,3253,3255,3257,3259],{"class":1097,"line":1548},[1095,3225,2862],{"class":2829},[1095,3227,3228],{"class":2916}," allow_migrate",[1095,3230,2080],{"class":1125},[1095,3232,2872],{"class":2871},[1095,3234,1206],{"class":1125},[1095,3236,3237],{"class":2926}," db",[1095,3239,1206],{"class":1125},[1095,3241,3242],{"class":2926}," app_label",[1095,3244,1206],{"class":1125},[1095,3246,3247],{"class":2926}," model_name",[1095,3249,3134],{"class":2932},[1095,3251,3252],{"class":3209},"None",[1095,3254,1206],{"class":1125},[1095,3256,2933],{"class":2932},[1095,3258,2936],{"class":2926},[1095,3260,2875],{"class":1125},[1095,3262,3263,3265,3268],{"class":1097,"line":1553},[1095,3264,2943],{"class":2842},[1095,3266,3267],{"class":2848},"Ensure that migrations only run on master",[1095,3269,2949],{"class":2842},[1095,3271,3272,3274,3277,3280,3282,3284],{"class":1097,"line":1559},[1095,3273,3018],{"class":1998},[1095,3275,3276],{"class":2002}," db ",[1095,3278,3279],{"class":2932},"==",[1095,3281,1164],{"class":1135},[1095,3283,1140],{"class":1139},[1095,3285,3084],{"class":1135},[1095,3287,3288],{"class":1097,"line":1565},[1095,3289,1109],{"emptyLinePlaceholder":1108},[1095,3291,3292],{"class":1097,"line":1571},[1095,3293,3294],{"class":1101},"# Advanced database router with load balancing\n",[1095,3296,3297,3299,3302],{"class":1097,"line":1577},[1095,3298,2830],{"class":2829},[1095,3300,3301],{"class":2833}," LoadBalancedDatabaseRouter",[1095,3303,2837],{"class":1125},[1095,3305,3306],{"class":1097,"line":1583},[1095,3307,2843],{"class":2842},[1095,3309,3310],{"class":1097,"line":1589},[1095,3311,3312],{"class":2848},"    Advanced database router with health checks and load balancing\n",[1095,3314,3315],{"class":1097,"line":1595},[1095,3316,2843],{"class":2842},[1095,3318,3319],{"class":1097,"line":1601},[1095,3320,1432],{"class":2002},[1095,3322,3323,3325,3327,3329,3331],{"class":1097,"line":1607},[1095,3324,2862],{"class":2829},[1095,3326,2866],{"class":2865},[1095,3328,2080],{"class":1125},[1095,3330,2872],{"class":2871},[1095,3332,2875],{"class":1125},[1095,3334,3335,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359],{"class":1097,"line":1612},[1095,3336,2880],{"class":1121},[1095,3338,2067],{"class":1125},[1095,3340,2885],{"class":2070},[1095,3342,1126],{"class":1125},[1095,3344,2793],{"class":1125},[1095,3346,1143],{"class":1135},[1095,3348,2291],{"class":1139},[1095,3350,1143],{"class":1135},[1095,3352,1206],{"class":1125},[1095,3354,1164],{"class":1135},[1095,3356,2535],{"class":1139},[1095,3358,1143],{"class":1135},[1095,3360,2803],{"class":1125},[1095,3362,3363,3365,3367,3370,3372],{"class":1097,"line":1618},[1095,3364,2880],{"class":1121},[1095,3366,2067],{"class":1125},[1095,3368,3369],{"class":2070},"database_weights",[1095,3371,1126],{"class":1125},[1095,3373,1129],{"class":1125},[1095,3375,3376,3378,3380,3382,3384,3387],{"class":1097,"line":1624},[1095,3377,1192],{"class":1135},[1095,3379,2291],{"class":1139},[1095,3381,1143],{"class":1135},[1095,3383,1146],{"class":1125},[1095,3385,3386],{"class":1202}," 3",[1095,3388,1172],{"class":1125},[1095,3390,3391,3393,3395,3397,3399,3402],{"class":1097,"line":1629},[1095,3392,1192],{"class":1135},[1095,3394,2535],{"class":1139},[1095,3396,1143],{"class":1135},[1095,3398,1146],{"class":1125},[1095,3400,3401],{"class":1202}," 2",[1095,3403,1172],{"class":1125},[1095,3405,3406],{"class":1097,"line":1634},[1095,3407,3408],{"class":1125},"        }\n",[1095,3410,3411,3413,3415,3418,3420,3424],{"class":1097,"line":1640},[1095,3412,2880],{"class":1121},[1095,3414,2067],{"class":1125},[1095,3416,3417],{"class":2070},"failed_databases",[1095,3419,1126],{"class":1125},[1095,3421,3423],{"class":3422},"sa2tF"," set",[1095,3425,3426],{"class":1125},"()\n",[1095,3428,3429],{"class":1097,"line":1646},[1095,3430,1432],{"class":2002},[1095,3432,3433,3435,3438,3440,3442],{"class":1097,"line":1651},[1095,3434,2862],{"class":2829},[1095,3436,3437],{"class":2916}," get_read_database",[1095,3439,2080],{"class":1125},[1095,3441,2872],{"class":2871},[1095,3443,2875],{"class":1125},[1095,3445,3446,3448,3451],{"class":1097,"line":1656},[1095,3447,2943],{"class":2842},[1095,3449,3450],{"class":2848},"Get read database with weighted selection and health checks",[1095,3452,2949],{"class":2842},[1095,3454,3455,3458,3460],{"class":1097,"line":1662},[1095,3456,3457],{"class":2002},"        available_dbs ",[1095,3459,3134],{"class":1125},[1095,3461,3462],{"class":1125}," [\n",[1095,3464,3465,3468,3471,3473,3476,3479,3481,3483],{"class":1097,"line":1668},[1095,3466,3467],{"class":2002},"            db ",[1095,3469,3470],{"class":1998},"for",[1095,3472,3276],{"class":2002},[1095,3474,3475],{"class":1998},"in",[1095,3477,3478],{"class":1121}," self",[1095,3480,2067],{"class":1125},[1095,3482,2885],{"class":2070},[1095,3484,3485],{"class":2002}," \n",[1095,3487,3488,3491,3493,3496,3498,3500,3502],{"class":1097,"line":1674},[1095,3489,3490],{"class":1998},"            if",[1095,3492,3276],{"class":2002},[1095,3494,3495],{"class":2932},"not",[1095,3497,2969],{"class":2932},[1095,3499,3478],{"class":1121},[1095,3501,2067],{"class":1125},[1095,3503,3504],{"class":2070},"failed_databases\n",[1095,3506,3507],{"class":1097,"line":1680},[1095,3508,3509],{"class":1125},"        ]\n",[1095,3511,3512],{"class":1097,"line":1686},[1095,3513,1586],{"class":2002},[1095,3515,3516,3518,3521,3524],{"class":1097,"line":1691},[1095,3517,2954],{"class":1998},[1095,3519,3520],{"class":2932}," not",[1095,3522,3523],{"class":2002}," available_dbs",[1095,3525,2837],{"class":1125},[1095,3527,3528],{"class":1097,"line":1697},[1095,3529,3530],{"class":1101},"            # Fallback to master if all replicas are down\n",[1095,3532,3533,3535,3537,3539],{"class":1097,"line":1703},[1095,3534,2995],{"class":1998},[1095,3536,1164],{"class":1135},[1095,3538,1140],{"class":1139},[1095,3540,3084],{"class":1135},[1095,3542,3543],{"class":1097,"line":1709},[1095,3544,1586],{"class":2002},[1095,3546,3547],{"class":1097,"line":1715},[1095,3548,3549],{"class":1101},"        # Weighted random selection\n",[1095,3551,3552,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3578,3581,3584,3586,3588,3590],{"class":1097,"line":1720},[1095,3553,3554],{"class":2002},"        weights ",[1095,3556,3134],{"class":1125},[1095,3558,2793],{"class":1125},[1095,3560,2872],{"class":1121},[1095,3562,2067],{"class":1125},[1095,3564,3369],{"class":2070},[1095,3566,2067],{"class":1125},[1095,3568,2077],{"class":2076},[1095,3570,2080],{"class":1125},[1095,3572,3177],{"class":2076},[1095,3574,1206],{"class":1125},[1095,3576,3577],{"class":1202}," 1",[1095,3579,3580],{"class":1125},")",[1095,3582,3583],{"class":1998}," for",[1095,3585,3276],{"class":2002},[1095,3587,3475],{"class":1998},[1095,3589,3523],{"class":2002},[1095,3591,2803],{"class":1125},[1095,3593,3594,3596,3598,3600,3603,3605,3608,3610,3614,3616,3619,3622,3625],{"class":1097,"line":1725},[1095,3595,3018],{"class":1998},[1095,3597,3021],{"class":2002},[1095,3599,2067],{"class":1125},[1095,3601,3602],{"class":2076},"choices",[1095,3604,2080],{"class":1125},[1095,3606,3607],{"class":2076},"available_dbs",[1095,3609,1206],{"class":1125},[1095,3611,3613],{"class":3612},"sqOPj"," weights",[1095,3615,3134],{"class":1125},[1095,3617,3618],{"class":2076},"weights",[1095,3620,3621],{"class":1125},")[",[1095,3623,3624],{"class":1202},"0",[1095,3626,2803],{"class":1125},[1095,3628,3629],{"class":1097,"line":1731},[1095,3630,1432],{"class":2002},[1095,3632,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651],{"class":1097,"line":1737},[1095,3634,2862],{"class":2829},[1095,3636,2917],{"class":2916},[1095,3638,2080],{"class":1125},[1095,3640,2872],{"class":2871},[1095,3642,1206],{"class":1125},[1095,3644,2927],{"class":2926},[1095,3646,1206],{"class":1125},[1095,3648,2933],{"class":2932},[1095,3650,2936],{"class":2926},[1095,3652,2875],{"class":1125},[1095,3654,3655,3657,3660],{"class":1097,"line":1743},[1095,3656,2943],{"class":2842},[1095,3658,3659],{"class":2848},"Route reads with load balancing",[1095,3661,2949],{"class":2842},[1095,3663,3664],{"class":1097,"line":1748},[1095,3665,3666],{"class":1101},"        # Always read critical data from master\n",[1095,3668,3669,3671,3673,3675,3677,3679,3681,3683,3685,3687,3689,3691,3693,3695,3697,3699,3701,3703,3706,3708],{"class":1097,"line":1753},[1095,3670,2954],{"class":1998},[1095,3672,2927],{"class":2002},[1095,3674,2067],{"class":1125},[1095,3676,2961],{"class":2070},[1095,3678,2067],{"class":1125},[1095,3680,2966],{"class":2070},[1095,3682,2969],{"class":2932},[1095,3684,2793],{"class":1125},[1095,3686,1143],{"class":1135},[1095,3688,2976],{"class":1139},[1095,3690,1143],{"class":1135},[1095,3692,1206],{"class":1125},[1095,3694,1164],{"class":1135},[1095,3696,2985],{"class":1139},[1095,3698,1143],{"class":1135},[1095,3700,1206],{"class":1125},[1095,3702,1164],{"class":1135},[1095,3704,3705],{"class":1139},"auth",[1095,3707,1143],{"class":1135},[1095,3709,2990],{"class":1125},[1095,3711,3712,3714,3716,3718],{"class":1097,"line":1758},[1095,3713,2995],{"class":1998},[1095,3715,1164],{"class":1135},[1095,3717,1140],{"class":1139},[1095,3719,3084],{"class":1135},[1095,3721,3722],{"class":1097,"line":1763},[1095,3723,1586],{"class":2002},[1095,3725,3726],{"class":1097,"line":1769},[1095,3727,3728],{"class":1101},"        # Check if this is a recent write (read-after-write consistency)\n",[1095,3730,3731,3733,3736,3738,3740,3742,3744,3746,3748,3751,3753,3756,3758,3761,3763],{"class":1097,"line":1775},[1095,3732,2954],{"class":1998},[1095,3734,3735],{"class":2865}," hasattr",[1095,3737,2080],{"class":1125},[1095,3739,2936],{"class":2076},[1095,3741,2067],{"class":1125},[1095,3743,2077],{"class":2076},[1095,3745,2080],{"class":1125},[1095,3747,1143],{"class":1135},[1095,3749,3750],{"class":1139},"instance",[1095,3752,1143],{"class":1135},[1095,3754,3755],{"class":1125},"),",[1095,3757,1164],{"class":1135},[1095,3759,3760],{"class":1139},"_recently_written",[1095,3762,1143],{"class":1135},[1095,3764,2875],{"class":1125},[1095,3766,3767,3769,3771,3773],{"class":1097,"line":1780},[1095,3768,2995],{"class":1998},[1095,3770,1164],{"class":1135},[1095,3772,1140],{"class":1139},[1095,3774,3084],{"class":1135},[1095,3776,3777],{"class":1097,"line":1785},[1095,3778,1586],{"class":2002},[1095,3780,3781,3783,3785,3787,3790],{"class":1097,"line":1790},[1095,3782,3018],{"class":1998},[1095,3784,3478],{"class":1121},[1095,3786,2067],{"class":1125},[1095,3788,3789],{"class":2076},"get_read_database",[1095,3791,3426],{"class":1125},[1095,3793,3794],{"class":1097,"line":1796},[1095,3795,1432],{"class":2002},[1095,3797,3798,3800,3802,3804,3806,3808,3810,3812,3814,3816],{"class":1097,"line":1802},[1095,3799,2862],{"class":2829},[1095,3801,3048],{"class":2916},[1095,3803,2080],{"class":1125},[1095,3805,2872],{"class":2871},[1095,3807,1206],{"class":1125},[1095,3809,2927],{"class":2926},[1095,3811,1206],{"class":1125},[1095,3813,2933],{"class":2932},[1095,3815,2936],{"class":2926},[1095,3817,2875],{"class":1125},[1095,3819,3820,3822,3825],{"class":1097,"line":1808},[1095,3821,2943],{"class":2842},[1095,3823,3824],{"class":2848},"All writes go to master",[1095,3826,2949],{"class":2842},[1095,3828,3829,3831,3833,3835],{"class":1097,"line":1813},[1095,3830,3018],{"class":1998},[1095,3832,1164],{"class":1135},[1095,3834,1140],{"class":1139},[1095,3836,3084],{"class":1135},[1095,3838,3839],{"class":1097,"line":1819},[1095,3840,1432],{"class":2002},[1095,3842,3843,3845,3847,3849,3851,3853,3855,3857,3859,3861,3863,3865,3867,3869,3871,3873],{"class":1097,"line":1825},[1095,3844,2862],{"class":2829},[1095,3846,3228],{"class":2916},[1095,3848,2080],{"class":1125},[1095,3850,2872],{"class":2871},[1095,3852,1206],{"class":1125},[1095,3854,3237],{"class":2926},[1095,3856,1206],{"class":1125},[1095,3858,3242],{"class":2926},[1095,3860,1206],{"class":1125},[1095,3862,3247],{"class":2926},[1095,3864,3134],{"class":2932},[1095,3866,3252],{"class":3209},[1095,3868,1206],{"class":1125},[1095,3870,2933],{"class":2932},[1095,3872,2936],{"class":2926},[1095,3874,2875],{"class":1125},[1095,3876,3877,3879,3882],{"class":1097,"line":1831},[1095,3878,2943],{"class":2842},[1095,3880,3881],{"class":2848},"Only migrate on master",[1095,3883,2949],{"class":2842},[1095,3885,3886,3888,3890,3892,3894,3896],{"class":1097,"line":1837},[1095,3887,3018],{"class":1998},[1095,3889,3276],{"class":2002},[1095,3891,3279],{"class":2932},[1095,3893,1164],{"class":1135},[1095,3895,1140],{"class":1139},[1095,3897,3084],{"class":1135},[1035,3899,3901],{"id":3900},"database-connection-pooling","Database Connection Pooling",[1085,3903,3905],{"className":1087,"code":3904,"language":1089,"meta":1090,"style":1090},"# settings/connection_pooling.py\nimport os\n\n# PgBouncer configuration\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': os.environ.get('DB_NAME'),\n        'USER': os.environ.get('DB_USER'),\n        'PASSWORD': os.environ.get('DB_PASSWORD'),\n        'HOST': os.environ.get('PGBOUNCER_HOST', 'localhost'),\n        'PORT': os.environ.get('PGBOUNCER_PORT', '6432'),\n        'OPTIONS': {\n            'sslmode': 'require',\n            'application_name': 'django-app',\n        },\n        'CONN_MAX_AGE': 0,  # Disable Django's connection pooling\n    }\n}\n\n# Alternative: Django-pool for connection pooling\nDATABASES = {\n    'default': {\n        'ENGINE': 'django_pool.backends.postgresql',\n        'NAME': os.environ.get('DB_NAME'),\n        'USER': os.environ.get('DB_USER'),\n        'PASSWORD': os.environ.get('DB_PASSWORD'),\n        'HOST': os.environ.get('DB_HOST'),\n        'PORT': os.environ.get('DB_PORT', '5432'),\n        'OPTIONS': {\n            'MAX_CONNS': 20,\n            'MIN_CONNS': 5,\n            'sslmode': 'require',\n        },\n    }\n}\n",[1092,3906,3907,3912,3918,3922,3927,3935,3947,3965,3995,4025,4055,4095,4135,4147,4165,4185,4189,4207,4211,4215,4219,4224,4232,4244,4263,4293,4323,4353,4384,4422,4434,4448,4464,4482,4486,4490],{"__ignoreMap":1090},[1095,3908,3909],{"class":1097,"line":1098},[1095,3910,3911],{"class":1101},"# settings/connection_pooling.py\n",[1095,3913,3914,3916],{"class":1097,"line":1105},[1095,3915,1999],{"class":1998},[1095,3917,2003],{"class":2002},[1095,3919,3920],{"class":1097,"line":1112},[1095,3921,1109],{"emptyLinePlaceholder":1108},[1095,3923,3924],{"class":1097,"line":1118},[1095,3925,3926],{"class":1101},"# PgBouncer configuration\n",[1095,3928,3929,3931,3933],{"class":1097,"line":1132},[1095,3930,1122],{"class":1121},[1095,3932,1126],{"class":1125},[1095,3934,1129],{"class":1125},[1095,3936,3937,3939,3941,3943,3945],{"class":1097,"line":1151},[1095,3938,1136],{"class":1135},[1095,3940,1140],{"class":1139},[1095,3942,1143],{"class":1135},[1095,3944,1146],{"class":1125},[1095,3946,1129],{"class":1125},[1095,3948,3949,3951,3953,3955,3957,3959,3961,3963],{"class":1097,"line":1175},[1095,3950,1154],{"class":1135},[1095,3952,1157],{"class":1139},[1095,3954,1143],{"class":1135},[1095,3956,1146],{"class":1125},[1095,3958,1164],{"class":1135},[1095,3960,1167],{"class":1139},[1095,3962,1143],{"class":1135},[1095,3964,1172],{"class":1125},[1095,3966,3967,3969,3971,3973,3975,3977,3979,3981,3983,3985,3987,3989,3991,3993],{"class":1097,"line":1189},[1095,3968,1154],{"class":1135},[1095,3970,2057],{"class":1139},[1095,3972,1143],{"class":1135},[1095,3974,1146],{"class":1125},[1095,3976,2064],{"class":2002},[1095,3978,2067],{"class":1125},[1095,3980,2071],{"class":2070},[1095,3982,2067],{"class":1125},[1095,3984,2077],{"class":2076},[1095,3986,2080],{"class":1125},[1095,3988,1143],{"class":1135},[1095,3990,2085],{"class":1139},[1095,3992,1143],{"class":1135},[1095,3994,2090],{"class":1125},[1095,3996,3997,3999,4001,4003,4005,4007,4009,4011,4013,4015,4017,4019,4021,4023],{"class":1097,"line":1212},[1095,3998,1154],{"class":1135},[1095,4000,2097],{"class":1139},[1095,4002,1143],{"class":1135},[1095,4004,1146],{"class":1125},[1095,4006,2064],{"class":2002},[1095,4008,2067],{"class":1125},[1095,4010,2071],{"class":2070},[1095,4012,2067],{"class":1125},[1095,4014,2077],{"class":2076},[1095,4016,2080],{"class":1125},[1095,4018,1143],{"class":1135},[1095,4020,2118],{"class":1139},[1095,4022,1143],{"class":1135},[1095,4024,2090],{"class":1125},[1095,4026,4027,4029,4031,4033,4035,4037,4039,4041,4043,4045,4047,4049,4051,4053],{"class":1097,"line":1218},[1095,4028,1154],{"class":1135},[1095,4030,2129],{"class":1139},[1095,4032,1143],{"class":1135},[1095,4034,1146],{"class":1125},[1095,4036,2064],{"class":2002},[1095,4038,2067],{"class":1125},[1095,4040,2071],{"class":2070},[1095,4042,2067],{"class":1125},[1095,4044,2077],{"class":2076},[1095,4046,2080],{"class":1125},[1095,4048,1143],{"class":1135},[1095,4050,2150],{"class":1139},[1095,4052,1143],{"class":1135},[1095,4054,2090],{"class":1125},[1095,4056,4057,4059,4061,4063,4065,4067,4069,4071,4073,4075,4077,4079,4082,4084,4086,4088,4091,4093],{"class":1097,"line":1224},[1095,4058,1154],{"class":1135},[1095,4060,2161],{"class":1139},[1095,4062,1143],{"class":1135},[1095,4064,1146],{"class":1125},[1095,4066,2064],{"class":2002},[1095,4068,2067],{"class":1125},[1095,4070,2071],{"class":2070},[1095,4072,2067],{"class":1125},[1095,4074,2077],{"class":2076},[1095,4076,2080],{"class":1125},[1095,4078,1143],{"class":1135},[1095,4080,4081],{"class":1139},"PGBOUNCER_HOST",[1095,4083,1143],{"class":1135},[1095,4085,1206],{"class":1125},[1095,4087,1164],{"class":1135},[1095,4089,4090],{"class":1139},"localhost",[1095,4092,1143],{"class":1135},[1095,4094,2090],{"class":1125},[1095,4096,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117,4119,4122,4124,4126,4128,4131,4133],{"class":1097,"line":1230},[1095,4098,1154],{"class":1135},[1095,4100,2193],{"class":1139},[1095,4102,1143],{"class":1135},[1095,4104,1146],{"class":1125},[1095,4106,2064],{"class":2002},[1095,4108,2067],{"class":1125},[1095,4110,2071],{"class":2070},[1095,4112,2067],{"class":1125},[1095,4114,2077],{"class":2076},[1095,4116,2080],{"class":1125},[1095,4118,1143],{"class":1135},[1095,4120,4121],{"class":1139},"PGBOUNCER_PORT",[1095,4123,1143],{"class":1135},[1095,4125,1206],{"class":1125},[1095,4127,1164],{"class":1135},[1095,4129,4130],{"class":1139},"6432",[1095,4132,1143],{"class":1135},[1095,4134,2090],{"class":1125},[1095,4136,4137,4139,4141,4143,4145],{"class":1097,"line":1235},[1095,4138,1154],{"class":1135},[1095,4140,1180],{"class":1139},[1095,4142,1143],{"class":1135},[1095,4144,1146],{"class":1125},[1095,4146,1129],{"class":1125},[1095,4148,4149,4151,4153,4155,4157,4159,4161,4163],{"class":1097,"line":1241},[1095,4150,1192],{"class":1135},[1095,4152,2246],{"class":1139},[1095,4154,1143],{"class":1135},[1095,4156,1146],{"class":1125},[1095,4158,1164],{"class":1135},[1095,4160,2255],{"class":1139},[1095,4162,1143],{"class":1135},[1095,4164,1172],{"class":1125},[1095,4166,4167,4169,4172,4174,4176,4178,4181,4183],{"class":1097,"line":1259},[1095,4168,1192],{"class":1135},[1095,4170,4171],{"class":1139},"application_name",[1095,4173,1143],{"class":1135},[1095,4175,1146],{"class":1125},[1095,4177,1164],{"class":1135},[1095,4179,4180],{"class":1139},"django-app",[1095,4182,1143],{"class":1135},[1095,4184,1172],{"class":1125},[1095,4186,4187],{"class":1097,"line":1264},[1095,4188,1215],{"class":1125},[1095,4190,4191,4193,4195,4197,4199,4202,4204],{"class":1097,"line":1270},[1095,4192,1154],{"class":1135},[1095,4194,2270],{"class":1139},[1095,4196,1143],{"class":1135},[1095,4198,1146],{"class":1125},[1095,4200,4201],{"class":1202}," 0",[1095,4203,1206],{"class":1125},[1095,4205,4206],{"class":1101},"  # Disable Django's connection pooling\n",[1095,4208,4209],{"class":1097,"line":1288},[1095,4210,1221],{"class":1125},[1095,4212,4213],{"class":1097,"line":1293},[1095,4214,1227],{"class":1125},[1095,4216,4217],{"class":1097,"line":1299},[1095,4218,1109],{"emptyLinePlaceholder":1108},[1095,4220,4221],{"class":1097,"line":1309},[1095,4222,4223],{"class":1101},"# Alternative: Django-pool for connection pooling\n",[1095,4225,4226,4228,4230],{"class":1097,"line":1322},[1095,4227,1122],{"class":1121},[1095,4229,1126],{"class":1125},[1095,4231,1129],{"class":1125},[1095,4233,4234,4236,4238,4240,4242],{"class":1097,"line":1346},[1095,4235,1136],{"class":1135},[1095,4237,1140],{"class":1139},[1095,4239,1143],{"class":1135},[1095,4241,1146],{"class":1125},[1095,4243,1129],{"class":1125},[1095,4245,4246,4248,4250,4252,4254,4256,4259,4261],{"class":1097,"line":1351},[1095,4247,1154],{"class":1135},[1095,4249,1157],{"class":1139},[1095,4251,1143],{"class":1135},[1095,4253,1146],{"class":1125},[1095,4255,1164],{"class":1135},[1095,4257,4258],{"class":1139},"django_pool.backends.postgresql",[1095,4260,1143],{"class":1135},[1095,4262,1172],{"class":1125},[1095,4264,4265,4267,4269,4271,4273,4275,4277,4279,4281,4283,4285,4287,4289,4291],{"class":1097,"line":1356},[1095,4266,1154],{"class":1135},[1095,4268,2057],{"class":1139},[1095,4270,1143],{"class":1135},[1095,4272,1146],{"class":1125},[1095,4274,2064],{"class":2002},[1095,4276,2067],{"class":1125},[1095,4278,2071],{"class":2070},[1095,4280,2067],{"class":1125},[1095,4282,2077],{"class":2076},[1095,4284,2080],{"class":1125},[1095,4286,1143],{"class":1135},[1095,4288,2085],{"class":1139},[1095,4290,1143],{"class":1135},[1095,4292,2090],{"class":1125},[1095,4294,4295,4297,4299,4301,4303,4305,4307,4309,4311,4313,4315,4317,4319,4321],{"class":1097,"line":1361},[1095,4296,1154],{"class":1135},[1095,4298,2097],{"class":1139},[1095,4300,1143],{"class":1135},[1095,4302,1146],{"class":1125},[1095,4304,2064],{"class":2002},[1095,4306,2067],{"class":1125},[1095,4308,2071],{"class":2070},[1095,4310,2067],{"class":1125},[1095,4312,2077],{"class":2076},[1095,4314,2080],{"class":1125},[1095,4316,1143],{"class":1135},[1095,4318,2118],{"class":1139},[1095,4320,1143],{"class":1135},[1095,4322,2090],{"class":1125},[1095,4324,4325,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351],{"class":1097,"line":1367},[1095,4326,1154],{"class":1135},[1095,4328,2129],{"class":1139},[1095,4330,1143],{"class":1135},[1095,4332,1146],{"class":1125},[1095,4334,2064],{"class":2002},[1095,4336,2067],{"class":1125},[1095,4338,2071],{"class":2070},[1095,4340,2067],{"class":1125},[1095,4342,2077],{"class":2076},[1095,4344,2080],{"class":1125},[1095,4346,1143],{"class":1135},[1095,4348,2150],{"class":1139},[1095,4350,1143],{"class":1135},[1095,4352,2090],{"class":1125},[1095,4354,4355,4357,4359,4361,4363,4365,4367,4369,4371,4373,4375,4377,4380,4382],{"class":1097,"line":1530},[1095,4356,1154],{"class":1135},[1095,4358,2161],{"class":1139},[1095,4360,1143],{"class":1135},[1095,4362,1146],{"class":1125},[1095,4364,2064],{"class":2002},[1095,4366,2067],{"class":1125},[1095,4368,2071],{"class":2070},[1095,4370,2067],{"class":1125},[1095,4372,2077],{"class":2076},[1095,4374,2080],{"class":1125},[1095,4376,1143],{"class":1135},[1095,4378,4379],{"class":1139},"DB_HOST",[1095,4381,1143],{"class":1135},[1095,4383,2090],{"class":1125},[1095,4385,4386,4388,4390,4392,4394,4396,4398,4400,4402,4404,4406,4408,4410,4412,4414,4416,4418,4420],{"class":1097,"line":1536},[1095,4387,1154],{"class":1135},[1095,4389,2193],{"class":1139},[1095,4391,1143],{"class":1135},[1095,4393,1146],{"class":1125},[1095,4395,2064],{"class":2002},[1095,4397,2067],{"class":1125},[1095,4399,2071],{"class":2070},[1095,4401,2067],{"class":1125},[1095,4403,2077],{"class":2076},[1095,4405,2080],{"class":1125},[1095,4407,1143],{"class":1135},[1095,4409,2214],{"class":1139},[1095,4411,1143],{"class":1135},[1095,4413,1206],{"class":1125},[1095,4415,1164],{"class":1135},[1095,4417,2223],{"class":1139},[1095,4419,1143],{"class":1135},[1095,4421,2090],{"class":1125},[1095,4423,4424,4426,4428,4430,4432],{"class":1097,"line":1542},[1095,4425,1154],{"class":1135},[1095,4427,1180],{"class":1139},[1095,4429,1143],{"class":1135},[1095,4431,1146],{"class":1125},[1095,4433,1129],{"class":1125},[1095,4435,4436,4438,4440,4442,4444,4446],{"class":1097,"line":1548},[1095,4437,1192],{"class":1135},[1095,4439,1195],{"class":1139},[1095,4441,1143],{"class":1135},[1095,4443,1146],{"class":1125},[1095,4445,1203],{"class":1202},[1095,4447,1172],{"class":1125},[1095,4449,4450,4452,4455,4457,4459,4462],{"class":1097,"line":1553},[1095,4451,1192],{"class":1135},[1095,4453,4454],{"class":1139},"MIN_CONNS",[1095,4456,1143],{"class":1135},[1095,4458,1146],{"class":1125},[1095,4460,4461],{"class":1202}," 5",[1095,4463,1172],{"class":1125},[1095,4465,4466,4468,4470,4472,4474,4476,4478,4480],{"class":1097,"line":1559},[1095,4467,1192],{"class":1135},[1095,4469,2246],{"class":1139},[1095,4471,1143],{"class":1135},[1095,4473,1146],{"class":1125},[1095,4475,1164],{"class":1135},[1095,4477,2255],{"class":1139},[1095,4479,1143],{"class":1135},[1095,4481,1172],{"class":1125},[1095,4483,4484],{"class":1097,"line":1565},[1095,4485,1215],{"class":1125},[1095,4487,4488],{"class":1097,"line":1571},[1095,4489,1221],{"class":1125},[1095,4491,4492],{"class":1097,"line":1577},[1095,4493,1227],{"class":1125},[1030,4495,793],{"id":4496},"caching-strategies",[1035,4498,4500],{"id":4499},"multi-level-caching","Multi-Level Caching",[1085,4502,4504],{"className":1087,"code":4503,"language":1089,"meta":1090,"style":1090},"# settings/caching.py\nimport os\n\n# Multi-level caching configuration\nCACHES = {\n    # L1 Cache: Local memory (fastest)\n    'local': {\n        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',\n        'LOCATION': 'local-cache',\n        'TIMEOUT': 60,  # 1 minute\n        'OPTIONS': {\n            'MAX_ENTRIES': 1000,\n        },\n    },\n    \n    # L2 Cache: Redis (shared across servers)\n    'default': {\n        'BACKEND': 'django_redis.cache.RedisCache',\n        'LOCATION': [\n            f\"redis://{os.environ.get('REDIS_HOST_1', 'localhost')}:6379/1\",\n            f\"redis://{os.environ.get('REDIS_HOST_2', 'localhost')}:6380/1\",\n            f\"redis://{os.environ.get('REDIS_HOST_3', 'localhost')}:6381/1\",\n        ],\n        'OPTIONS': {\n            'CLIENT_CLASS': 'django_redis.client.ShardClient',\n            'CONNECTION_POOL_KWARGS': {\n                'max_connections': 50,\n                'retry_on_timeout': True,\n            },\n            'SERIALIZER': 'django_redis.serializers.json.JSONSerializer',\n            'COMPRESSOR': 'django_redis.compressors.zlib.ZlibCompressor',\n        },\n        'KEY_PREFIX': 'myapp',\n        'VERSION': 1,\n        'TIMEOUT': 300,  # 5 minutes\n    },\n    \n    # L3 Cache: Database cache (persistent)\n    'database': {\n        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',\n        'LOCATION': 'cache_table',\n        'TIMEOUT': 3600,  # 1 hour\n        'OPTIONS': {\n            'MAX_ENTRIES': 10000,\n        },\n    },\n    \n    # Session cache\n    'sessions': {\n        'BACKEND': 'django_redis.cache.RedisCache',\n        'LOCATION': f\"redis://{os.environ.get('REDIS_SESSION_HOST', 'localhost')}:6379/2\",\n        'OPTIONS': {\n            'CLIENT_CLASS': 'django_redis.client.DefaultClient',\n        },\n        'KEY_PREFIX': 'sessions',\n        'TIMEOUT': 86400,  # 24 hours\n    },\n}\n\n# Cache middleware\nMIDDLEWARE = [\n    'django.middleware.cache.UpdateCacheMiddleware',\n    # ... other middleware ...\n    'django.middleware.cache.FetchFromCacheMiddleware',\n]\n\nCACHE_MIDDLEWARE_ALIAS = 'default'\nCACHE_MIDDLEWARE_SECONDS = 600\nCACHE_MIDDLEWARE_KEY_PREFIX = 'middleware'\n\n# Session configuration\nSESSION_ENGINE = 'django.contrib.sessions.backends.cache'\nSESSION_CACHE_ALIAS = 'sessions'\n",[1092,4505,4506,4511,4517,4521,4526,4534,4539,4552,4570,4590,4609,4621,4637,4641,4645,4649,4654,4666,4685,4697,4747,4791,4835,4840,4852,4872,4885,4902,4918,4923,4943,4963,4967,4987,5002,5020,5024,5028,5033,5046,5065,5084,5102,5114,5129,5133,5137,5141,5146,5158,5176,5229,5241,5260,5264,5282,5300,5304,5308,5312,5317,5326,5337,5342,5353,5357,5361,5374,5384,5398,5402,5407,5420],{"__ignoreMap":1090},[1095,4507,4508],{"class":1097,"line":1098},[1095,4509,4510],{"class":1101},"# settings/caching.py\n",[1095,4512,4513,4515],{"class":1097,"line":1105},[1095,4514,1999],{"class":1998},[1095,4516,2003],{"class":2002},[1095,4518,4519],{"class":1097,"line":1112},[1095,4520,1109],{"emptyLinePlaceholder":1108},[1095,4522,4523],{"class":1097,"line":1118},[1095,4524,4525],{"class":1101},"# Multi-level caching configuration\n",[1095,4527,4528,4530,4532],{"class":1097,"line":1132},[1095,4529,1302],{"class":1121},[1095,4531,1126],{"class":1125},[1095,4533,1129],{"class":1125},[1095,4535,4536],{"class":1097,"line":1151},[1095,4537,4538],{"class":1101},"    # L1 Cache: Local memory (fastest)\n",[1095,4540,4541,4543,4546,4548,4550],{"class":1097,"line":1175},[1095,4542,1136],{"class":1135},[1095,4544,4545],{"class":1139},"local",[1095,4547,1143],{"class":1135},[1095,4549,1146],{"class":1125},[1095,4551,1129],{"class":1125},[1095,4553,4554,4556,4558,4560,4562,4564,4566,4568],{"class":1097,"line":1189},[1095,4555,1154],{"class":1135},[1095,4557,1327],{"class":1139},[1095,4559,1143],{"class":1135},[1095,4561,1146],{"class":1125},[1095,4563,1164],{"class":1135},[1095,4565,1336],{"class":1139},[1095,4567,1143],{"class":1135},[1095,4569,1172],{"class":1125},[1095,4571,4572,4574,4577,4579,4581,4583,4586,4588],{"class":1097,"line":1212},[1095,4573,1154],{"class":1135},[1095,4575,4576],{"class":1139},"LOCATION",[1095,4578,1143],{"class":1135},[1095,4580,1146],{"class":1125},[1095,4582,1164],{"class":1135},[1095,4584,4585],{"class":1139},"local-cache",[1095,4587,1143],{"class":1135},[1095,4589,1172],{"class":1125},[1095,4591,4592,4594,4597,4599,4601,4604,4606],{"class":1097,"line":1218},[1095,4593,1154],{"class":1135},[1095,4595,4596],{"class":1139},"TIMEOUT",[1095,4598,1143],{"class":1135},[1095,4600,1146],{"class":1125},[1095,4602,4603],{"class":1202}," 60",[1095,4605,1206],{"class":1125},[1095,4607,4608],{"class":1101},"  # 1 minute\n",[1095,4610,4611,4613,4615,4617,4619],{"class":1097,"line":1224},[1095,4612,1154],{"class":1135},[1095,4614,1180],{"class":1139},[1095,4616,1143],{"class":1135},[1095,4618,1146],{"class":1125},[1095,4620,1129],{"class":1125},[1095,4622,4623,4625,4628,4630,4632,4635],{"class":1097,"line":1230},[1095,4624,1192],{"class":1135},[1095,4626,4627],{"class":1139},"MAX_ENTRIES",[1095,4629,1143],{"class":1135},[1095,4631,1146],{"class":1125},[1095,4633,4634],{"class":1202}," 1000",[1095,4636,1172],{"class":1125},[1095,4638,4639],{"class":1097,"line":1235},[1095,4640,1215],{"class":1125},[1095,4642,4643],{"class":1097,"line":1241},[1095,4644,2284],{"class":1125},[1095,4646,4647],{"class":1097,"line":1259},[1095,4648,1432],{"class":2002},[1095,4650,4651],{"class":1097,"line":1264},[1095,4652,4653],{"class":1101},"    # L2 Cache: Redis (shared across servers)\n",[1095,4655,4656,4658,4660,4662,4664],{"class":1097,"line":1270},[1095,4657,1136],{"class":1135},[1095,4659,1140],{"class":1139},[1095,4661,1143],{"class":1135},[1095,4663,1146],{"class":1125},[1095,4665,1129],{"class":1125},[1095,4667,4668,4670,4672,4674,4676,4678,4681,4683],{"class":1097,"line":1288},[1095,4669,1154],{"class":1135},[1095,4671,1327],{"class":1139},[1095,4673,1143],{"class":1135},[1095,4675,1146],{"class":1125},[1095,4677,1164],{"class":1135},[1095,4679,4680],{"class":1139},"django_redis.cache.RedisCache",[1095,4682,1143],{"class":1135},[1095,4684,1172],{"class":1125},[1095,4686,4687,4689,4691,4693,4695],{"class":1097,"line":1293},[1095,4688,1154],{"class":1135},[1095,4690,4576],{"class":1139},[1095,4692,1143],{"class":1135},[1095,4694,1146],{"class":1125},[1095,4696,3462],{"class":1125},[1095,4698,4699,4702,4705,4709,4712,4714,4716,4718,4720,4722,4724,4727,4729,4731,4733,4735,4737,4739,4742,4745],{"class":1097,"line":1299},[1095,4700,4701],{"class":2829},"            f",[1095,4703,4704],{"class":1139},"\"redis://",[1095,4706,4708],{"class":4707},"s3h35","{",[1095,4710,4711],{"class":2002},"os",[1095,4713,2067],{"class":1125},[1095,4715,2071],{"class":2070},[1095,4717,2067],{"class":1125},[1095,4719,2077],{"class":2076},[1095,4721,2080],{"class":1125},[1095,4723,1143],{"class":1135},[1095,4725,4726],{"class":1139},"REDIS_HOST_1",[1095,4728,1143],{"class":1135},[1095,4730,1206],{"class":1125},[1095,4732,1164],{"class":1135},[1095,4734,4090],{"class":1139},[1095,4736,1143],{"class":1135},[1095,4738,3580],{"class":1125},[1095,4740,4741],{"class":4707},"}",[1095,4743,4744],{"class":1139},":6379/1\"",[1095,4746,1172],{"class":1125},[1095,4748,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767,4769,4772,4774,4776,4778,4780,4782,4784,4786,4789],{"class":1097,"line":1309},[1095,4750,4701],{"class":2829},[1095,4752,4704],{"class":1139},[1095,4754,4708],{"class":4707},[1095,4756,4711],{"class":2002},[1095,4758,2067],{"class":1125},[1095,4760,2071],{"class":2070},[1095,4762,2067],{"class":1125},[1095,4764,2077],{"class":2076},[1095,4766,2080],{"class":1125},[1095,4768,1143],{"class":1135},[1095,4770,4771],{"class":1139},"REDIS_HOST_2",[1095,4773,1143],{"class":1135},[1095,4775,1206],{"class":1125},[1095,4777,1164],{"class":1135},[1095,4779,4090],{"class":1139},[1095,4781,1143],{"class":1135},[1095,4783,3580],{"class":1125},[1095,4785,4741],{"class":4707},[1095,4787,4788],{"class":1139},":6380/1\"",[1095,4790,1172],{"class":1125},[1095,4792,4793,4795,4797,4799,4801,4803,4805,4807,4809,4811,4813,4816,4818,4820,4822,4824,4826,4828,4830,4833],{"class":1097,"line":1322},[1095,4794,4701],{"class":2829},[1095,4796,4704],{"class":1139},[1095,4798,4708],{"class":4707},[1095,4800,4711],{"class":2002},[1095,4802,2067],{"class":1125},[1095,4804,2071],{"class":2070},[1095,4806,2067],{"class":1125},[1095,4808,2077],{"class":2076},[1095,4810,2080],{"class":1125},[1095,4812,1143],{"class":1135},[1095,4814,4815],{"class":1139},"REDIS_HOST_3",[1095,4817,1143],{"class":1135},[1095,4819,1206],{"class":1125},[1095,4821,1164],{"class":1135},[1095,4823,4090],{"class":1139},[1095,4825,1143],{"class":1135},[1095,4827,3580],{"class":1125},[1095,4829,4741],{"class":4707},[1095,4831,4832],{"class":1139},":6381/1\"",[1095,4834,1172],{"class":1125},[1095,4836,4837],{"class":1097,"line":1346},[1095,4838,4839],{"class":1125},"        ],\n",[1095,4841,4842,4844,4846,4848,4850],{"class":1097,"line":1351},[1095,4843,1154],{"class":1135},[1095,4845,1180],{"class":1139},[1095,4847,1143],{"class":1135},[1095,4849,1146],{"class":1125},[1095,4851,1129],{"class":1125},[1095,4853,4854,4856,4859,4861,4863,4865,4868,4870],{"class":1097,"line":1356},[1095,4855,1192],{"class":1135},[1095,4857,4858],{"class":1139},"CLIENT_CLASS",[1095,4860,1143],{"class":1135},[1095,4862,1146],{"class":1125},[1095,4864,1164],{"class":1135},[1095,4866,4867],{"class":1139},"django_redis.client.ShardClient",[1095,4869,1143],{"class":1135},[1095,4871,1172],{"class":1125},[1095,4873,4874,4876,4879,4881,4883],{"class":1097,"line":1361},[1095,4875,1192],{"class":1135},[1095,4877,4878],{"class":1139},"CONNECTION_POOL_KWARGS",[1095,4880,1143],{"class":1135},[1095,4882,1146],{"class":1125},[1095,4884,1129],{"class":1125},[1095,4886,4887,4890,4893,4895,4897,4900],{"class":1097,"line":1367},[1095,4888,4889],{"class":1135},"                '",[1095,4891,4892],{"class":1139},"max_connections",[1095,4894,1143],{"class":1135},[1095,4896,1146],{"class":1125},[1095,4898,4899],{"class":1202}," 50",[1095,4901,1172],{"class":1125},[1095,4903,4904,4906,4909,4911,4913,4916],{"class":1097,"line":1530},[1095,4905,4889],{"class":1135},[1095,4907,4908],{"class":1139},"retry_on_timeout",[1095,4910,1143],{"class":1135},[1095,4912,1146],{"class":1125},[1095,4914,4915],{"class":3209}," True",[1095,4917,1172],{"class":1125},[1095,4919,4920],{"class":1097,"line":1536},[1095,4921,4922],{"class":1125},"            },\n",[1095,4924,4925,4927,4930,4932,4934,4936,4939,4941],{"class":1097,"line":1542},[1095,4926,1192],{"class":1135},[1095,4928,4929],{"class":1139},"SERIALIZER",[1095,4931,1143],{"class":1135},[1095,4933,1146],{"class":1125},[1095,4935,1164],{"class":1135},[1095,4937,4938],{"class":1139},"django_redis.serializers.json.JSONSerializer",[1095,4940,1143],{"class":1135},[1095,4942,1172],{"class":1125},[1095,4944,4945,4947,4950,4952,4954,4956,4959,4961],{"class":1097,"line":1548},[1095,4946,1192],{"class":1135},[1095,4948,4949],{"class":1139},"COMPRESSOR",[1095,4951,1143],{"class":1135},[1095,4953,1146],{"class":1125},[1095,4955,1164],{"class":1135},[1095,4957,4958],{"class":1139},"django_redis.compressors.zlib.ZlibCompressor",[1095,4960,1143],{"class":1135},[1095,4962,1172],{"class":1125},[1095,4964,4965],{"class":1097,"line":1553},[1095,4966,1215],{"class":1125},[1095,4968,4969,4971,4974,4976,4978,4980,4983,4985],{"class":1097,"line":1559},[1095,4970,1154],{"class":1135},[1095,4972,4973],{"class":1139},"KEY_PREFIX",[1095,4975,1143],{"class":1135},[1095,4977,1146],{"class":1125},[1095,4979,1164],{"class":1135},[1095,4981,4982],{"class":1139},"myapp",[1095,4984,1143],{"class":1135},[1095,4986,1172],{"class":1125},[1095,4988,4989,4991,4994,4996,4998,5000],{"class":1097,"line":1565},[1095,4990,1154],{"class":1135},[1095,4992,4993],{"class":1139},"VERSION",[1095,4995,1143],{"class":1135},[1095,4997,1146],{"class":1125},[1095,4999,3577],{"class":1202},[1095,5001,1172],{"class":1125},[1095,5003,5004,5006,5008,5010,5012,5015,5017],{"class":1097,"line":1571},[1095,5005,1154],{"class":1135},[1095,5007,4596],{"class":1139},[1095,5009,1143],{"class":1135},[1095,5011,1146],{"class":1125},[1095,5013,5014],{"class":1202}," 300",[1095,5016,1206],{"class":1125},[1095,5018,5019],{"class":1101},"  # 5 minutes\n",[1095,5021,5022],{"class":1097,"line":1577},[1095,5023,2284],{"class":1125},[1095,5025,5026],{"class":1097,"line":1583},[1095,5027,1432],{"class":2002},[1095,5029,5030],{"class":1097,"line":1589},[1095,5031,5032],{"class":1101},"    # L3 Cache: Database cache (persistent)\n",[1095,5034,5035,5037,5040,5042,5044],{"class":1097,"line":1595},[1095,5036,1136],{"class":1135},[1095,5038,5039],{"class":1139},"database",[1095,5041,1143],{"class":1135},[1095,5043,1146],{"class":1125},[1095,5045,1129],{"class":1125},[1095,5047,5048,5050,5052,5054,5056,5058,5061,5063],{"class":1097,"line":1601},[1095,5049,1154],{"class":1135},[1095,5051,1327],{"class":1139},[1095,5053,1143],{"class":1135},[1095,5055,1146],{"class":1125},[1095,5057,1164],{"class":1135},[1095,5059,5060],{"class":1139},"django.core.cache.backends.db.DatabaseCache",[1095,5062,1143],{"class":1135},[1095,5064,1172],{"class":1125},[1095,5066,5067,5069,5071,5073,5075,5077,5080,5082],{"class":1097,"line":1607},[1095,5068,1154],{"class":1135},[1095,5070,4576],{"class":1139},[1095,5072,1143],{"class":1135},[1095,5074,1146],{"class":1125},[1095,5076,1164],{"class":1135},[1095,5078,5079],{"class":1139},"cache_table",[1095,5081,1143],{"class":1135},[1095,5083,1172],{"class":1125},[1095,5085,5086,5088,5090,5092,5094,5097,5099],{"class":1097,"line":1612},[1095,5087,1154],{"class":1135},[1095,5089,4596],{"class":1139},[1095,5091,1143],{"class":1135},[1095,5093,1146],{"class":1125},[1095,5095,5096],{"class":1202}," 3600",[1095,5098,1206],{"class":1125},[1095,5100,5101],{"class":1101},"  # 1 hour\n",[1095,5103,5104,5106,5108,5110,5112],{"class":1097,"line":1618},[1095,5105,1154],{"class":1135},[1095,5107,1180],{"class":1139},[1095,5109,1143],{"class":1135},[1095,5111,1146],{"class":1125},[1095,5113,1129],{"class":1125},[1095,5115,5116,5118,5120,5122,5124,5127],{"class":1097,"line":1624},[1095,5117,1192],{"class":1135},[1095,5119,4627],{"class":1139},[1095,5121,1143],{"class":1135},[1095,5123,1146],{"class":1125},[1095,5125,5126],{"class":1202}," 10000",[1095,5128,1172],{"class":1125},[1095,5130,5131],{"class":1097,"line":1629},[1095,5132,1215],{"class":1125},[1095,5134,5135],{"class":1097,"line":1634},[1095,5136,2284],{"class":1125},[1095,5138,5139],{"class":1097,"line":1640},[1095,5140,1432],{"class":2002},[1095,5142,5143],{"class":1097,"line":1646},[1095,5144,5145],{"class":1101},"    # Session cache\n",[1095,5147,5148,5150,5152,5154,5156],{"class":1097,"line":1651},[1095,5149,1136],{"class":1135},[1095,5151,2976],{"class":1139},[1095,5153,1143],{"class":1135},[1095,5155,1146],{"class":1125},[1095,5157,1129],{"class":1125},[1095,5159,5160,5162,5164,5166,5168,5170,5172,5174],{"class":1097,"line":1656},[1095,5161,1154],{"class":1135},[1095,5163,1327],{"class":1139},[1095,5165,1143],{"class":1135},[1095,5167,1146],{"class":1125},[1095,5169,1164],{"class":1135},[1095,5171,4680],{"class":1139},[1095,5173,1143],{"class":1135},[1095,5175,1172],{"class":1125},[1095,5177,5178,5180,5182,5184,5186,5189,5191,5193,5195,5197,5199,5201,5203,5205,5207,5210,5212,5214,5216,5218,5220,5222,5224,5227],{"class":1097,"line":1662},[1095,5179,1154],{"class":1135},[1095,5181,4576],{"class":1139},[1095,5183,1143],{"class":1135},[1095,5185,1146],{"class":1125},[1095,5187,5188],{"class":2829}," f",[1095,5190,4704],{"class":1139},[1095,5192,4708],{"class":4707},[1095,5194,4711],{"class":2002},[1095,5196,2067],{"class":1125},[1095,5198,2071],{"class":2070},[1095,5200,2067],{"class":1125},[1095,5202,2077],{"class":2076},[1095,5204,2080],{"class":1125},[1095,5206,1143],{"class":1135},[1095,5208,5209],{"class":1139},"REDIS_SESSION_HOST",[1095,5211,1143],{"class":1135},[1095,5213,1206],{"class":1125},[1095,5215,1164],{"class":1135},[1095,5217,4090],{"class":1139},[1095,5219,1143],{"class":1135},[1095,5221,3580],{"class":1125},[1095,5223,4741],{"class":4707},[1095,5225,5226],{"class":1139},":6379/2\"",[1095,5228,1172],{"class":1125},[1095,5230,5231,5233,5235,5237,5239],{"class":1097,"line":1668},[1095,5232,1154],{"class":1135},[1095,5234,1180],{"class":1139},[1095,5236,1143],{"class":1135},[1095,5238,1146],{"class":1125},[1095,5240,1129],{"class":1125},[1095,5242,5243,5245,5247,5249,5251,5253,5256,5258],{"class":1097,"line":1674},[1095,5244,1192],{"class":1135},[1095,5246,4858],{"class":1139},[1095,5248,1143],{"class":1135},[1095,5250,1146],{"class":1125},[1095,5252,1164],{"class":1135},[1095,5254,5255],{"class":1139},"django_redis.client.DefaultClient",[1095,5257,1143],{"class":1135},[1095,5259,1172],{"class":1125},[1095,5261,5262],{"class":1097,"line":1680},[1095,5263,1215],{"class":1125},[1095,5265,5266,5268,5270,5272,5274,5276,5278,5280],{"class":1097,"line":1686},[1095,5267,1154],{"class":1135},[1095,5269,4973],{"class":1139},[1095,5271,1143],{"class":1135},[1095,5273,1146],{"class":1125},[1095,5275,1164],{"class":1135},[1095,5277,2976],{"class":1139},[1095,5279,1143],{"class":1135},[1095,5281,1172],{"class":1125},[1095,5283,5284,5286,5288,5290,5292,5295,5297],{"class":1097,"line":1691},[1095,5285,1154],{"class":1135},[1095,5287,4596],{"class":1139},[1095,5289,1143],{"class":1135},[1095,5291,1146],{"class":1125},[1095,5293,5294],{"class":1202}," 86400",[1095,5296,1206],{"class":1125},[1095,5298,5299],{"class":1101},"  # 24 hours\n",[1095,5301,5302],{"class":1097,"line":1697},[1095,5303,2284],{"class":1125},[1095,5305,5306],{"class":1097,"line":1703},[1095,5307,1227],{"class":1125},[1095,5309,5310],{"class":1097,"line":1709},[1095,5311,1109],{"emptyLinePlaceholder":1108},[1095,5313,5314],{"class":1097,"line":1715},[1095,5315,5316],{"class":1101},"# Cache middleware\n",[1095,5318,5319,5322,5324],{"class":1097,"line":1720},[1095,5320,5321],{"class":1121},"MIDDLEWARE",[1095,5323,1126],{"class":1125},[1095,5325,3462],{"class":1125},[1095,5327,5328,5330,5333,5335],{"class":1097,"line":1725},[1095,5329,1136],{"class":1135},[1095,5331,5332],{"class":1139},"django.middleware.cache.UpdateCacheMiddleware",[1095,5334,1143],{"class":1135},[1095,5336,1172],{"class":1125},[1095,5338,5339],{"class":1097,"line":1731},[1095,5340,5341],{"class":1101},"    # ... other middleware ...\n",[1095,5343,5344,5346,5349,5351],{"class":1097,"line":1737},[1095,5345,1136],{"class":1135},[1095,5347,5348],{"class":1139},"django.middleware.cache.FetchFromCacheMiddleware",[1095,5350,1143],{"class":1135},[1095,5352,1172],{"class":1125},[1095,5354,5355],{"class":1097,"line":1743},[1095,5356,2803],{"class":1125},[1095,5358,5359],{"class":1097,"line":1748},[1095,5360,1109],{"emptyLinePlaceholder":1108},[1095,5362,5363,5366,5368,5370,5372],{"class":1097,"line":1753},[1095,5364,5365],{"class":1121},"CACHE_MIDDLEWARE_ALIAS",[1095,5367,1126],{"class":1125},[1095,5369,1164],{"class":1135},[1095,5371,1140],{"class":1139},[1095,5373,3084],{"class":1135},[1095,5375,5376,5379,5381],{"class":1097,"line":1758},[1095,5377,5378],{"class":1121},"CACHE_MIDDLEWARE_SECONDS",[1095,5380,1126],{"class":1125},[1095,5382,5383],{"class":1202}," 600\n",[1095,5385,5386,5389,5391,5393,5396],{"class":1097,"line":1763},[1095,5387,5388],{"class":1121},"CACHE_MIDDLEWARE_KEY_PREFIX",[1095,5390,1126],{"class":1125},[1095,5392,1164],{"class":1135},[1095,5394,5395],{"class":1139},"middleware",[1095,5397,3084],{"class":1135},[1095,5399,5400],{"class":1097,"line":1769},[1095,5401,1109],{"emptyLinePlaceholder":1108},[1095,5403,5404],{"class":1097,"line":1775},[1095,5405,5406],{"class":1101},"# Session configuration\n",[1095,5408,5409,5411,5413,5415,5418],{"class":1097,"line":1780},[1095,5410,1244],{"class":1121},[1095,5412,1126],{"class":1125},[1095,5414,1164],{"class":1135},[1095,5416,5417],{"class":1139},"django.contrib.sessions.backends.cache",[1095,5419,3084],{"class":1135},[1095,5421,5422,5425,5427,5429,5431],{"class":1097,"line":1785},[1095,5423,5424],{"class":1121},"SESSION_CACHE_ALIAS",[1095,5426,1126],{"class":1125},[1095,5428,1164],{"class":1135},[1095,5430,2976],{"class":1139},[1095,5432,3084],{"class":1135},[1035,5434,5436],{"id":5435},"custom-cache-backend","Custom Cache Backend",[1085,5438,5440],{"className":1087,"code":5439,"language":1089,"meta":1090,"style":1090},"# cache/backends.py\nfrom django.core.cache.backends.base import BaseCache\nfrom django.core.cache import caches\nimport time\n\nclass MultiLevelCache(BaseCache):\n    \"\"\"\n    Multi-level cache backend that tries L1 (local) then L2 (Redis)\n    \"\"\"\n    \n    def __init__(self, server, params):\n        super().__init__(server, params)\n        self.l1_cache = caches['local']\n        self.l2_cache = caches['default']\n        self.l1_timeout = 60  # L1 cache timeout\n    \n    def get(self, key, default=None, version=None):\n        \"\"\"Get from L1 first, then L2\"\"\"\n        # Try L1 cache first\n        value = self.l1_cache.get(key, None, version)\n        if value is not None:\n            return value\n        \n        # Try L2 cache\n        value = self.l2_cache.get(key, default, version)\n        if value is not None and value != default:\n            # Store in L1 cache for faster access\n            self.l1_cache.set(key, value, self.l1_timeout, version)\n        \n        return value\n    \n    def set(self, key, value, timeout=None, version=None):\n        \"\"\"Set in both L1 and L2 caches\"\"\"\n        # Set in L2 cache (persistent)\n        self.l2_cache.set(key, value, timeout, version)\n        \n        # Set in L1 cache (fast access)\n        l1_timeout = min(timeout or self.default_timeout, self.l1_timeout)\n        self.l1_cache.set(key, value, l1_timeout, version)\n    \n    def delete(self, key, version=None):\n        \"\"\"Delete from both caches\"\"\"\n        self.l1_cache.delete(key, version)\n        self.l2_cache.delete(key, version)\n    \n    def clear(self):\n        \"\"\"Clear both caches\"\"\"\n        self.l1_cache.clear()\n        self.l2_cache.clear()\n\n# Cache warming utility\nclass CacheWarmer:\n    \"\"\"Utility to warm up caches with frequently accessed data\"\"\"\n    \n    def __init__(self):\n        self.cache = caches['default']\n    \n    def warm_user_data(self, user_ids):\n        \"\"\"Warm cache with user data\"\"\"\n        from django.contrib.auth.models import User\n        \n        users = User.objects.filter(id__in=user_ids).select_related('profile')\n        for user in users:\n            cache_key = f'user:{user.id}'\n            user_data = {\n                'id': user.id,\n                'username': user.username,\n                'email': user.email,\n                'profile': getattr(user, 'profile', None),\n            }\n            self.cache.set(cache_key, user_data, timeout=3600)\n    \n    def warm_popular_content(self):\n        \"\"\"Warm cache with popular content\"\"\"\n        from myapp.models import Article\n        \n        popular_articles = Article.objects.filter(\n            is_published=True\n        ).order_by('-view_count')[:100]\n        \n        for article in popular_articles:\n            cache_key = f'article:{article.id}'\n            self.cache.set(cache_key, article, timeout=1800)\n",[1092,5441,5442,5447,5480,5500,5507,5511,5526,5530,5535,5539,5543,5565,5587,5612,5635,5651,5655,5691,5700,5705,5738,5754,5761,5765,5770,5800,5824,5829,5866,5870,5876,5880,5917,5926,5931,5961,5965,5970,6005,6036,6040,6065,6074,6097,6119,6123,6136,6145,6160,6174,6178,6183,6192,6202,6206,6218,6240,6244,6262,6271,6297,6301,6348,6363,6389,6398,6417,6436,6455,6486,6491,6524,6528,6541,6550,6566,6570,6591,6601,6626,6630,6644,6668],{"__ignoreMap":1090},[1095,5443,5444],{"class":1097,"line":1098},[1095,5445,5446],{"class":1101},"# cache/backends.py\n",[1095,5448,5449,5452,5455,5457,5460,5462,5465,5467,5470,5472,5475,5477],{"class":1097,"line":1105},[1095,5450,5451],{"class":1998},"from",[1095,5453,5454],{"class":2002}," django",[1095,5456,2067],{"class":1125},[1095,5458,5459],{"class":2002},"core",[1095,5461,2067],{"class":1125},[1095,5463,5464],{"class":2002},"cache",[1095,5466,2067],{"class":1125},[1095,5468,5469],{"class":2002},"backends",[1095,5471,2067],{"class":1125},[1095,5473,5474],{"class":2002},"base ",[1095,5476,1999],{"class":1998},[1095,5478,5479],{"class":2002}," BaseCache\n",[1095,5481,5482,5484,5486,5488,5490,5492,5495,5497],{"class":1097,"line":1112},[1095,5483,5451],{"class":1998},[1095,5485,5454],{"class":2002},[1095,5487,2067],{"class":1125},[1095,5489,5459],{"class":2002},[1095,5491,2067],{"class":1125},[1095,5493,5494],{"class":2002},"cache ",[1095,5496,1999],{"class":1998},[1095,5498,5499],{"class":2002}," caches\n",[1095,5501,5502,5504],{"class":1097,"line":1118},[1095,5503,1999],{"class":1998},[1095,5505,5506],{"class":2002}," time\n",[1095,5508,5509],{"class":1097,"line":1132},[1095,5510,1109],{"emptyLinePlaceholder":1108},[1095,5512,5513,5515,5518,5520,5524],{"class":1097,"line":1151},[1095,5514,2830],{"class":2829},[1095,5516,5517],{"class":2833}," MultiLevelCache",[1095,5519,2080],{"class":1125},[1095,5521,5523],{"class":5522},"sYn-s","BaseCache",[1095,5525,2875],{"class":1125},[1095,5527,5528],{"class":1097,"line":1175},[1095,5529,2843],{"class":2842},[1095,5531,5532],{"class":1097,"line":1189},[1095,5533,5534],{"class":2848},"    Multi-level cache backend that tries L1 (local) then L2 (Redis)\n",[1095,5536,5537],{"class":1097,"line":1212},[1095,5538,2843],{"class":2842},[1095,5540,5541],{"class":1097,"line":1218},[1095,5542,1432],{"class":2002},[1095,5544,5545,5547,5549,5551,5553,5555,5558,5560,5563],{"class":1097,"line":1224},[1095,5546,2862],{"class":2829},[1095,5548,2866],{"class":2865},[1095,5550,2080],{"class":1125},[1095,5552,2872],{"class":2871},[1095,5554,1206],{"class":1125},[1095,5556,5557],{"class":2926}," server",[1095,5559,1206],{"class":1125},[1095,5561,5562],{"class":2926}," params",[1095,5564,2875],{"class":1125},[1095,5566,5567,5570,5573,5576,5578,5581,5583,5585],{"class":1097,"line":1230},[1095,5568,5569],{"class":3422},"        super",[1095,5571,5572],{"class":1125},"().",[1095,5574,5575],{"class":2865},"__init__",[1095,5577,2080],{"class":1125},[1095,5579,5580],{"class":2076},"server",[1095,5582,1206],{"class":1125},[1095,5584,5562],{"class":2076},[1095,5586,3037],{"class":1125},[1095,5588,5589,5591,5593,5596,5598,5601,5604,5606,5608,5610],{"class":1097,"line":1235},[1095,5590,2880],{"class":1121},[1095,5592,2067],{"class":1125},[1095,5594,5595],{"class":2070},"l1_cache",[1095,5597,1126],{"class":1125},[1095,5599,5600],{"class":2002}," caches",[1095,5602,5603],{"class":1125},"[",[1095,5605,1143],{"class":1135},[1095,5607,4545],{"class":1139},[1095,5609,1143],{"class":1135},[1095,5611,2803],{"class":1125},[1095,5613,5614,5616,5618,5621,5623,5625,5627,5629,5631,5633],{"class":1097,"line":1241},[1095,5615,2880],{"class":1121},[1095,5617,2067],{"class":1125},[1095,5619,5620],{"class":2070},"l2_cache",[1095,5622,1126],{"class":1125},[1095,5624,5600],{"class":2002},[1095,5626,5603],{"class":1125},[1095,5628,1143],{"class":1135},[1095,5630,1140],{"class":1139},[1095,5632,1143],{"class":1135},[1095,5634,2803],{"class":1125},[1095,5636,5637,5639,5641,5644,5646,5648],{"class":1097,"line":1259},[1095,5638,2880],{"class":1121},[1095,5640,2067],{"class":1125},[1095,5642,5643],{"class":2070},"l1_timeout",[1095,5645,1126],{"class":1125},[1095,5647,4603],{"class":1202},[1095,5649,5650],{"class":1101},"  # L1 cache timeout\n",[1095,5652,5653],{"class":1097,"line":1264},[1095,5654,1432],{"class":2002},[1095,5656,5657,5659,5662,5664,5666,5668,5671,5673,5676,5678,5680,5682,5685,5687,5689],{"class":1097,"line":1270},[1095,5658,2862],{"class":2829},[1095,5660,5661],{"class":2916}," get",[1095,5663,2080],{"class":1125},[1095,5665,2872],{"class":2871},[1095,5667,1206],{"class":1125},[1095,5669,5670],{"class":2926}," key",[1095,5672,1206],{"class":1125},[1095,5674,5675],{"class":2926}," default",[1095,5677,3134],{"class":2932},[1095,5679,3252],{"class":3209},[1095,5681,1206],{"class":1125},[1095,5683,5684],{"class":2926}," version",[1095,5686,3134],{"class":2932},[1095,5688,3252],{"class":3209},[1095,5690,2875],{"class":1125},[1095,5692,5693,5695,5698],{"class":1097,"line":1288},[1095,5694,2943],{"class":2842},[1095,5696,5697],{"class":2848},"Get from L1 first, then L2",[1095,5699,2949],{"class":2842},[1095,5701,5702],{"class":1097,"line":1293},[1095,5703,5704],{"class":1101},"        # Try L1 cache first\n",[1095,5706,5707,5710,5712,5714,5716,5718,5720,5722,5724,5727,5729,5732,5734,5736],{"class":1097,"line":1299},[1095,5708,5709],{"class":2002},"        value ",[1095,5711,3134],{"class":1125},[1095,5713,3478],{"class":1121},[1095,5715,2067],{"class":1125},[1095,5717,5595],{"class":2070},[1095,5719,2067],{"class":1125},[1095,5721,2077],{"class":2076},[1095,5723,2080],{"class":1125},[1095,5725,5726],{"class":2076},"key",[1095,5728,1206],{"class":1125},[1095,5730,5731],{"class":3209}," None",[1095,5733,1206],{"class":1125},[1095,5735,5684],{"class":2076},[1095,5737,3037],{"class":1125},[1095,5739,5740,5742,5745,5748,5750,5752],{"class":1097,"line":1309},[1095,5741,2954],{"class":1998},[1095,5743,5744],{"class":2002}," value ",[1095,5746,5747],{"class":2932},"is",[1095,5749,3520],{"class":2932},[1095,5751,5731],{"class":3209},[1095,5753,2837],{"class":1125},[1095,5755,5756,5758],{"class":1097,"line":1322},[1095,5757,2995],{"class":1998},[1095,5759,5760],{"class":2002}," value\n",[1095,5762,5763],{"class":1097,"line":1346},[1095,5764,1586],{"class":2002},[1095,5766,5767],{"class":1097,"line":1351},[1095,5768,5769],{"class":1101},"        # Try L2 cache\n",[1095,5771,5772,5774,5776,5778,5780,5782,5784,5786,5788,5790,5792,5794,5796,5798],{"class":1097,"line":1356},[1095,5773,5709],{"class":2002},[1095,5775,3134],{"class":1125},[1095,5777,3478],{"class":1121},[1095,5779,2067],{"class":1125},[1095,5781,5620],{"class":2070},[1095,5783,2067],{"class":1125},[1095,5785,2077],{"class":2076},[1095,5787,2080],{"class":1125},[1095,5789,5726],{"class":2076},[1095,5791,1206],{"class":1125},[1095,5793,5675],{"class":2076},[1095,5795,1206],{"class":1125},[1095,5797,5684],{"class":2076},[1095,5799,3037],{"class":1125},[1095,5801,5802,5804,5806,5808,5810,5812,5815,5817,5820,5822],{"class":1097,"line":1361},[1095,5803,2954],{"class":1998},[1095,5805,5744],{"class":2002},[1095,5807,5747],{"class":2932},[1095,5809,3520],{"class":2932},[1095,5811,5731],{"class":3209},[1095,5813,5814],{"class":2932}," and",[1095,5816,5744],{"class":2002},[1095,5818,5819],{"class":2932},"!=",[1095,5821,5675],{"class":2002},[1095,5823,2837],{"class":1125},[1095,5825,5826],{"class":1097,"line":1367},[1095,5827,5828],{"class":1101},"            # Store in L1 cache for faster access\n",[1095,5830,5831,5834,5836,5838,5840,5843,5845,5847,5849,5852,5854,5856,5858,5860,5862,5864],{"class":1097,"line":1530},[1095,5832,5833],{"class":1121},"            self",[1095,5835,2067],{"class":1125},[1095,5837,5595],{"class":2070},[1095,5839,2067],{"class":1125},[1095,5841,5842],{"class":2076},"set",[1095,5844,2080],{"class":1125},[1095,5846,5726],{"class":2076},[1095,5848,1206],{"class":1125},[1095,5850,5851],{"class":2076}," value",[1095,5853,1206],{"class":1125},[1095,5855,3478],{"class":1121},[1095,5857,2067],{"class":1125},[1095,5859,5643],{"class":2070},[1095,5861,1206],{"class":1125},[1095,5863,5684],{"class":2076},[1095,5865,3037],{"class":1125},[1095,5867,5868],{"class":1097,"line":1536},[1095,5869,1586],{"class":2002},[1095,5871,5872,5874],{"class":1097,"line":1542},[1095,5873,3018],{"class":1998},[1095,5875,5760],{"class":2002},[1095,5877,5878],{"class":1097,"line":1548},[1095,5879,1432],{"class":2002},[1095,5881,5882,5884,5886,5888,5890,5892,5894,5896,5898,5900,5903,5905,5907,5909,5911,5913,5915],{"class":1097,"line":1553},[1095,5883,2862],{"class":2829},[1095,5885,3423],{"class":3422},[1095,5887,2080],{"class":1125},[1095,5889,2872],{"class":2871},[1095,5891,1206],{"class":1125},[1095,5893,5670],{"class":2926},[1095,5895,1206],{"class":1125},[1095,5897,5851],{"class":2926},[1095,5899,1206],{"class":1125},[1095,5901,5902],{"class":2926}," timeout",[1095,5904,3134],{"class":2932},[1095,5906,3252],{"class":3209},[1095,5908,1206],{"class":1125},[1095,5910,5684],{"class":2926},[1095,5912,3134],{"class":2932},[1095,5914,3252],{"class":3209},[1095,5916,2875],{"class":1125},[1095,5918,5919,5921,5924],{"class":1097,"line":1559},[1095,5920,2943],{"class":2842},[1095,5922,5923],{"class":2848},"Set in both L1 and L2 caches",[1095,5925,2949],{"class":2842},[1095,5927,5928],{"class":1097,"line":1565},[1095,5929,5930],{"class":1101},"        # Set in L2 cache (persistent)\n",[1095,5932,5933,5935,5937,5939,5941,5943,5945,5947,5949,5951,5953,5955,5957,5959],{"class":1097,"line":1571},[1095,5934,2880],{"class":1121},[1095,5936,2067],{"class":1125},[1095,5938,5620],{"class":2070},[1095,5940,2067],{"class":1125},[1095,5942,5842],{"class":2076},[1095,5944,2080],{"class":1125},[1095,5946,5726],{"class":2076},[1095,5948,1206],{"class":1125},[1095,5950,5851],{"class":2076},[1095,5952,1206],{"class":1125},[1095,5954,5902],{"class":2076},[1095,5956,1206],{"class":1125},[1095,5958,5684],{"class":2076},[1095,5960,3037],{"class":1125},[1095,5962,5963],{"class":1097,"line":1577},[1095,5964,1586],{"class":2002},[1095,5966,5967],{"class":1097,"line":1583},[1095,5968,5969],{"class":1101},"        # Set in L1 cache (fast access)\n",[1095,5971,5972,5975,5977,5980,5982,5985,5988,5990,5992,5995,5997,5999,6001,6003],{"class":1097,"line":1589},[1095,5973,5974],{"class":2002},"        l1_timeout ",[1095,5976,3134],{"class":1125},[1095,5978,5979],{"class":2865}," min",[1095,5981,2080],{"class":1125},[1095,5983,5984],{"class":2076},"timeout ",[1095,5986,5987],{"class":1998},"or",[1095,5989,3478],{"class":1121},[1095,5991,2067],{"class":1125},[1095,5993,5994],{"class":2070},"default_timeout",[1095,5996,1206],{"class":1125},[1095,5998,3478],{"class":1121},[1095,6000,2067],{"class":1125},[1095,6002,5643],{"class":2070},[1095,6004,3037],{"class":1125},[1095,6006,6007,6009,6011,6013,6015,6017,6019,6021,6023,6025,6027,6030,6032,6034],{"class":1097,"line":1595},[1095,6008,2880],{"class":1121},[1095,6010,2067],{"class":1125},[1095,6012,5595],{"class":2070},[1095,6014,2067],{"class":1125},[1095,6016,5842],{"class":2076},[1095,6018,2080],{"class":1125},[1095,6020,5726],{"class":2076},[1095,6022,1206],{"class":1125},[1095,6024,5851],{"class":2076},[1095,6026,1206],{"class":1125},[1095,6028,6029],{"class":2076}," l1_timeout",[1095,6031,1206],{"class":1125},[1095,6033,5684],{"class":2076},[1095,6035,3037],{"class":1125},[1095,6037,6038],{"class":1097,"line":1601},[1095,6039,1432],{"class":2002},[1095,6041,6042,6044,6047,6049,6051,6053,6055,6057,6059,6061,6063],{"class":1097,"line":1607},[1095,6043,2862],{"class":2829},[1095,6045,6046],{"class":2916}," delete",[1095,6048,2080],{"class":1125},[1095,6050,2872],{"class":2871},[1095,6052,1206],{"class":1125},[1095,6054,5670],{"class":2926},[1095,6056,1206],{"class":1125},[1095,6058,5684],{"class":2926},[1095,6060,3134],{"class":2932},[1095,6062,3252],{"class":3209},[1095,6064,2875],{"class":1125},[1095,6066,6067,6069,6072],{"class":1097,"line":1612},[1095,6068,2943],{"class":2842},[1095,6070,6071],{"class":2848},"Delete from both caches",[1095,6073,2949],{"class":2842},[1095,6075,6076,6078,6080,6082,6084,6087,6089,6091,6093,6095],{"class":1097,"line":1618},[1095,6077,2880],{"class":1121},[1095,6079,2067],{"class":1125},[1095,6081,5595],{"class":2070},[1095,6083,2067],{"class":1125},[1095,6085,6086],{"class":2076},"delete",[1095,6088,2080],{"class":1125},[1095,6090,5726],{"class":2076},[1095,6092,1206],{"class":1125},[1095,6094,5684],{"class":2076},[1095,6096,3037],{"class":1125},[1095,6098,6099,6101,6103,6105,6107,6109,6111,6113,6115,6117],{"class":1097,"line":1624},[1095,6100,2880],{"class":1121},[1095,6102,2067],{"class":1125},[1095,6104,5620],{"class":2070},[1095,6106,2067],{"class":1125},[1095,6108,6086],{"class":2076},[1095,6110,2080],{"class":1125},[1095,6112,5726],{"class":2076},[1095,6114,1206],{"class":1125},[1095,6116,5684],{"class":2076},[1095,6118,3037],{"class":1125},[1095,6120,6121],{"class":1097,"line":1629},[1095,6122,1432],{"class":2002},[1095,6124,6125,6127,6130,6132,6134],{"class":1097,"line":1634},[1095,6126,2862],{"class":2829},[1095,6128,6129],{"class":2916}," clear",[1095,6131,2080],{"class":1125},[1095,6133,2872],{"class":2871},[1095,6135,2875],{"class":1125},[1095,6137,6138,6140,6143],{"class":1097,"line":1640},[1095,6139,2943],{"class":2842},[1095,6141,6142],{"class":2848},"Clear both caches",[1095,6144,2949],{"class":2842},[1095,6146,6147,6149,6151,6153,6155,6158],{"class":1097,"line":1646},[1095,6148,2880],{"class":1121},[1095,6150,2067],{"class":1125},[1095,6152,5595],{"class":2070},[1095,6154,2067],{"class":1125},[1095,6156,6157],{"class":2076},"clear",[1095,6159,3426],{"class":1125},[1095,6161,6162,6164,6166,6168,6170,6172],{"class":1097,"line":1651},[1095,6163,2880],{"class":1121},[1095,6165,2067],{"class":1125},[1095,6167,5620],{"class":2070},[1095,6169,2067],{"class":1125},[1095,6171,6157],{"class":2076},[1095,6173,3426],{"class":1125},[1095,6175,6176],{"class":1097,"line":1656},[1095,6177,1109],{"emptyLinePlaceholder":1108},[1095,6179,6180],{"class":1097,"line":1662},[1095,6181,6182],{"class":1101},"# Cache warming utility\n",[1095,6184,6185,6187,6190],{"class":1097,"line":1668},[1095,6186,2830],{"class":2829},[1095,6188,6189],{"class":2833}," CacheWarmer",[1095,6191,2837],{"class":1125},[1095,6193,6194,6197,6200],{"class":1097,"line":1674},[1095,6195,6196],{"class":2842},"    \"\"\"",[1095,6198,6199],{"class":2848},"Utility to warm up caches with frequently accessed data",[1095,6201,2949],{"class":2842},[1095,6203,6204],{"class":1097,"line":1680},[1095,6205,1432],{"class":2002},[1095,6207,6208,6210,6212,6214,6216],{"class":1097,"line":1686},[1095,6209,2862],{"class":2829},[1095,6211,2866],{"class":2865},[1095,6213,2080],{"class":1125},[1095,6215,2872],{"class":2871},[1095,6217,2875],{"class":1125},[1095,6219,6220,6222,6224,6226,6228,6230,6232,6234,6236,6238],{"class":1097,"line":1691},[1095,6221,2880],{"class":1121},[1095,6223,2067],{"class":1125},[1095,6225,5464],{"class":2070},[1095,6227,1126],{"class":1125},[1095,6229,5600],{"class":2002},[1095,6231,5603],{"class":1125},[1095,6233,1143],{"class":1135},[1095,6235,1140],{"class":1139},[1095,6237,1143],{"class":1135},[1095,6239,2803],{"class":1125},[1095,6241,6242],{"class":1097,"line":1697},[1095,6243,1432],{"class":2002},[1095,6245,6246,6248,6251,6253,6255,6257,6260],{"class":1097,"line":1703},[1095,6247,2862],{"class":2829},[1095,6249,6250],{"class":2916}," warm_user_data",[1095,6252,2080],{"class":1125},[1095,6254,2872],{"class":2871},[1095,6256,1206],{"class":1125},[1095,6258,6259],{"class":2926}," user_ids",[1095,6261,2875],{"class":1125},[1095,6263,6264,6266,6269],{"class":1097,"line":1709},[1095,6265,2943],{"class":2842},[1095,6267,6268],{"class":2848},"Warm cache with user data",[1095,6270,2949],{"class":2842},[1095,6272,6273,6276,6278,6280,6283,6285,6287,6289,6292,6294],{"class":1097,"line":1715},[1095,6274,6275],{"class":1998},"        from",[1095,6277,5454],{"class":2002},[1095,6279,2067],{"class":1125},[1095,6281,6282],{"class":2002},"contrib",[1095,6284,2067],{"class":1125},[1095,6286,3705],{"class":2002},[1095,6288,2067],{"class":1125},[1095,6290,6291],{"class":2002},"models ",[1095,6293,1999],{"class":1998},[1095,6295,6296],{"class":2002}," User\n",[1095,6298,6299],{"class":1097,"line":1720},[1095,6300,1586],{"class":2002},[1095,6302,6303,6306,6308,6311,6313,6316,6318,6321,6323,6326,6328,6331,6334,6337,6339,6341,6344,6346],{"class":1097,"line":1725},[1095,6304,6305],{"class":2002},"        users ",[1095,6307,3134],{"class":1125},[1095,6309,6310],{"class":2002}," User",[1095,6312,2067],{"class":1125},[1095,6314,6315],{"class":2070},"objects",[1095,6317,2067],{"class":1125},[1095,6319,6320],{"class":2076},"filter",[1095,6322,2080],{"class":1125},[1095,6324,6325],{"class":3612},"id__in",[1095,6327,3134],{"class":1125},[1095,6329,6330],{"class":2076},"user_ids",[1095,6332,6333],{"class":1125},").",[1095,6335,6336],{"class":2076},"select_related",[1095,6338,2080],{"class":1125},[1095,6340,1143],{"class":1135},[1095,6342,6343],{"class":1139},"profile",[1095,6345,1143],{"class":1135},[1095,6347,3037],{"class":1125},[1095,6349,6350,6353,6356,6358,6361],{"class":1097,"line":1731},[1095,6351,6352],{"class":1998},"        for",[1095,6354,6355],{"class":2002}," user ",[1095,6357,3475],{"class":1998},[1095,6359,6360],{"class":2002}," users",[1095,6362,2837],{"class":1125},[1095,6364,6365,6368,6370,6372,6375,6377,6380,6382,6385,6387],{"class":1097,"line":1737},[1095,6366,6367],{"class":2002},"            cache_key ",[1095,6369,3134],{"class":1125},[1095,6371,5188],{"class":2829},[1095,6373,6374],{"class":1139},"'user:",[1095,6376,4708],{"class":4707},[1095,6378,6379],{"class":2002},"user",[1095,6381,2067],{"class":1125},[1095,6383,6384],{"class":2070},"id",[1095,6386,4741],{"class":4707},[1095,6388,3084],{"class":1139},[1095,6390,6391,6394,6396],{"class":1097,"line":1743},[1095,6392,6393],{"class":2002},"            user_data ",[1095,6395,3134],{"class":1125},[1095,6397,1129],{"class":1125},[1095,6399,6400,6402,6404,6406,6408,6411,6413,6415],{"class":1097,"line":1748},[1095,6401,4889],{"class":1135},[1095,6403,6384],{"class":1139},[1095,6405,1143],{"class":1135},[1095,6407,1146],{"class":1125},[1095,6409,6410],{"class":2002}," user",[1095,6412,2067],{"class":1125},[1095,6414,6384],{"class":2070},[1095,6416,1172],{"class":1125},[1095,6418,6419,6421,6424,6426,6428,6430,6432,6434],{"class":1097,"line":1753},[1095,6420,4889],{"class":1135},[1095,6422,6423],{"class":1139},"username",[1095,6425,1143],{"class":1135},[1095,6427,1146],{"class":1125},[1095,6429,6410],{"class":2002},[1095,6431,2067],{"class":1125},[1095,6433,6423],{"class":2070},[1095,6435,1172],{"class":1125},[1095,6437,6438,6440,6443,6445,6447,6449,6451,6453],{"class":1097,"line":1758},[1095,6439,4889],{"class":1135},[1095,6441,6442],{"class":1139},"email",[1095,6444,1143],{"class":1135},[1095,6446,1146],{"class":1125},[1095,6448,6410],{"class":2002},[1095,6450,2067],{"class":1125},[1095,6452,6442],{"class":2070},[1095,6454,1172],{"class":1125},[1095,6456,6457,6459,6461,6463,6465,6468,6470,6472,6474,6476,6478,6480,6482,6484],{"class":1097,"line":1763},[1095,6458,4889],{"class":1135},[1095,6460,6343],{"class":1139},[1095,6462,1143],{"class":1135},[1095,6464,1146],{"class":1125},[1095,6466,6467],{"class":2865}," getattr",[1095,6469,2080],{"class":1125},[1095,6471,6379],{"class":2076},[1095,6473,1206],{"class":1125},[1095,6475,1164],{"class":1135},[1095,6477,6343],{"class":1139},[1095,6479,1143],{"class":1135},[1095,6481,1206],{"class":1125},[1095,6483,5731],{"class":3209},[1095,6485,2090],{"class":1125},[1095,6487,6488],{"class":1097,"line":1769},[1095,6489,6490],{"class":1125},"            }\n",[1095,6492,6493,6495,6497,6499,6501,6503,6505,6508,6510,6513,6515,6517,6519,6522],{"class":1097,"line":1775},[1095,6494,5833],{"class":1121},[1095,6496,2067],{"class":1125},[1095,6498,5464],{"class":2070},[1095,6500,2067],{"class":1125},[1095,6502,5842],{"class":2076},[1095,6504,2080],{"class":1125},[1095,6506,6507],{"class":2076},"cache_key",[1095,6509,1206],{"class":1125},[1095,6511,6512],{"class":2076}," user_data",[1095,6514,1206],{"class":1125},[1095,6516,5902],{"class":3612},[1095,6518,3134],{"class":1125},[1095,6520,6521],{"class":1202},"3600",[1095,6523,3037],{"class":1125},[1095,6525,6526],{"class":1097,"line":1780},[1095,6527,1432],{"class":2002},[1095,6529,6530,6532,6535,6537,6539],{"class":1097,"line":1785},[1095,6531,2862],{"class":2829},[1095,6533,6534],{"class":2916}," warm_popular_content",[1095,6536,2080],{"class":1125},[1095,6538,2872],{"class":2871},[1095,6540,2875],{"class":1125},[1095,6542,6543,6545,6548],{"class":1097,"line":1790},[1095,6544,2943],{"class":2842},[1095,6546,6547],{"class":2848},"Warm cache with popular content",[1095,6549,2949],{"class":2842},[1095,6551,6552,6554,6557,6559,6561,6563],{"class":1097,"line":1796},[1095,6553,6275],{"class":1998},[1095,6555,6556],{"class":2002}," myapp",[1095,6558,2067],{"class":1125},[1095,6560,6291],{"class":2002},[1095,6562,1999],{"class":1998},[1095,6564,6565],{"class":2002}," Article\n",[1095,6567,6568],{"class":1097,"line":1802},[1095,6569,1586],{"class":2002},[1095,6571,6572,6575,6577,6580,6582,6584,6586,6588],{"class":1097,"line":1808},[1095,6573,6574],{"class":2002},"        popular_articles ",[1095,6576,3134],{"class":1125},[1095,6578,6579],{"class":2002}," Article",[1095,6581,2067],{"class":1125},[1095,6583,6315],{"class":2070},[1095,6585,2067],{"class":1125},[1095,6587,6320],{"class":2076},[1095,6589,6590],{"class":1125},"(\n",[1095,6592,6593,6596,6598],{"class":1097,"line":1813},[1095,6594,6595],{"class":3612},"            is_published",[1095,6597,3134],{"class":1125},[1095,6599,6600],{"class":3209},"True\n",[1095,6602,6603,6606,6609,6611,6613,6616,6618,6621,6624],{"class":1097,"line":1819},[1095,6604,6605],{"class":1125},"        ).",[1095,6607,6608],{"class":2076},"order_by",[1095,6610,2080],{"class":1125},[1095,6612,1143],{"class":1135},[1095,6614,6615],{"class":1139},"-view_count",[1095,6617,1143],{"class":1135},[1095,6619,6620],{"class":1125},")[:",[1095,6622,6623],{"class":1202},"100",[1095,6625,2803],{"class":1125},[1095,6627,6628],{"class":1097,"line":1825},[1095,6629,1586],{"class":2002},[1095,6631,6632,6634,6637,6639,6642],{"class":1097,"line":1831},[1095,6633,6352],{"class":1998},[1095,6635,6636],{"class":2002}," article ",[1095,6638,3475],{"class":1998},[1095,6640,6641],{"class":2002}," popular_articles",[1095,6643,2837],{"class":1125},[1095,6645,6646,6648,6650,6652,6655,6657,6660,6662,6664,6666],{"class":1097,"line":1837},[1095,6647,6367],{"class":2002},[1095,6649,3134],{"class":1125},[1095,6651,5188],{"class":2829},[1095,6653,6654],{"class":1139},"'article:",[1095,6656,4708],{"class":4707},[1095,6658,6659],{"class":2002},"article",[1095,6661,2067],{"class":1125},[1095,6663,6384],{"class":2070},[1095,6665,4741],{"class":4707},[1095,6667,3084],{"class":1139},[1095,6669,6670,6672,6674,6676,6678,6680,6682,6684,6686,6689,6691,6693,6695,6698],{"class":1097,"line":1842},[1095,6671,5833],{"class":1121},[1095,6673,2067],{"class":1125},[1095,6675,5464],{"class":2070},[1095,6677,2067],{"class":1125},[1095,6679,5842],{"class":2076},[1095,6681,2080],{"class":1125},[1095,6683,6507],{"class":2076},[1095,6685,1206],{"class":1125},[1095,6687,6688],{"class":2076}," article",[1095,6690,1206],{"class":1125},[1095,6692,5902],{"class":3612},[1095,6694,3134],{"class":1125},[1095,6696,6697],{"class":1202},"1800",[1095,6699,3037],{"class":1125},[1030,6701,6703],{"id":6702},"auto-scaling-implementation","Auto-Scaling Implementation",[1035,6705,6707],{"id":6706},"aws-auto-scaling","AWS Auto Scaling",[1085,6709,6711],{"className":1087,"code":6710,"language":1089,"meta":1090,"style":1090},"# aws/autoscaling.py\nimport boto3\nimport json\n\nclass DjangoAutoScaler:\n    \"\"\"Auto-scaling manager for Django applications on AWS\"\"\"\n    \n    def __init__(self, region='us-east-1'):\n        self.autoscaling = boto3.client('autoscaling', region_name=region)\n        self.cloudwatch = boto3.client('cloudwatch', region_name=region)\n        self.elbv2 = boto3.client('elbv2', region_name=region)\n    \n    def create_launch_template(self, template_name, ami_id, instance_type):\n        \"\"\"Create launch template for auto scaling\"\"\"\n        ec2 = boto3.client('ec2')\n        \n        user_data = \"\"\"#!/bin/bash\n        yum update -y\n        yum install -y docker\n        service docker start\n        usermod -a -G docker ec2-user\n        \n        # Pull and run Django application\n        docker run -d --name django-app \\\n            --env-file /opt/django/.env \\\n            -p 8000:8000 \\\n            your-registry/django-app:latest\n        \"\"\"\n        \n        response = ec2.create_launch_template(\n            LaunchTemplateName=template_name,\n            LaunchTemplateData={\n                'ImageId': ami_id,\n                'InstanceType': instance_type,\n                'SecurityGroupIds': ['sg-12345678'],\n                'IamInstanceProfile': {\n                    'Name': 'django-instance-profile'\n                },\n                'UserData': user_data,\n                'TagSpecifications': [\n                    {\n                        'ResourceType': 'instance',\n                        'Tags': [\n                            {'Key': 'Name', 'Value': 'django-auto-scaled'},\n                            {'Key': 'Environment', 'Value': 'production'},\n                        ]\n                    }\n                ]\n            }\n        )\n        return response['LaunchTemplate']['LaunchTemplateId']\n    \n    def create_auto_scaling_group(self, group_name, launch_template_id, \n                                  target_group_arn, min_size=1, max_size=10, desired_capacity=2):\n        \"\"\"Create auto scaling group\"\"\"\n        response = self.autoscaling.create_auto_scaling_group(\n            AutoScalingGroupName=group_name,\n            LaunchTemplate={\n                'LaunchTemplateId': launch_template_id,\n                'Version': '$Latest'\n            },\n            MinSize=min_size,\n            MaxSize=max_size,\n            DesiredCapacity=desired_capacity,\n            TargetGroupARNs=[target_group_arn],\n            VPCZoneIdentifier='subnet-12345,subnet-67890',\n            HealthCheckType='ELB',\n            HealthCheckGracePeriod=300,\n            DefaultCooldown=300,\n            Tags=[\n                {\n                    'Key': 'Name',\n                    'Value': 'django-asg',\n                    'PropagateAtLaunch': True,\n                    'ResourceId': group_name,\n                    'ResourceType': 'auto-scaling-group'\n                }\n            ]\n        )\n        return response\n    \n    def create_scaling_policies(self, group_name):\n        \"\"\"Create scaling policies\"\"\"\n        # Scale up policy\n        scale_up_response = self.autoscaling.put_scaling_policy(\n            AutoScalingGroupName=group_name,\n            PolicyName=f'{group_name}-scale-up',\n            PolicyType='TargetTrackingScaling',\n            TargetTrackingConfiguration={\n                'TargetValue': 70.0,\n                'PredefinedMetricSpecification': {\n                    'PredefinedMetricType': 'ASGAverageCPUUtilization'\n                },\n                'ScaleOutCooldown': 300,\n                'ScaleInCooldown': 300\n            }\n        )\n        \n        # Scale based on request count\n        request_count_policy = self.autoscaling.put_scaling_policy(\n            AutoScalingGroupName=group_name,\n            PolicyName=f'{group_name}-request-count',\n            PolicyType='TargetTrackingScaling',\n            TargetTrackingConfiguration={\n                'TargetValue': 1000.0,\n                'PredefinedMetricSpecification': {\n                    'PredefinedMetricType': 'ALBRequestCountPerTarget',\n                    'ResourceLabel': 'app/django-alb/1234567890123456/targetgroup/django-tg/1234567890123456'\n                }\n            }\n        )\n        \n        return scale_up_response, request_count_policy\n    \n    def create_custom_metrics_alarm(self, group_name):\n        \"\"\"Create custom CloudWatch alarms for Django-specific metrics\"\"\"\n        # Database connection alarm\n        self.cloudwatch.put_metric_alarm(\n            AlarmName=f'{group_name}-db-connections',\n            ComparisonOperator='GreaterThanThreshold',\n            EvaluationPeriods=2,\n            MetricName='DatabaseConnections',\n            Namespace='Django/Application',\n            Period=300,\n            Statistic='Average',\n            Threshold=80.0,\n            ActionsEnabled=True,\n            AlarmActions=[\n                f'arn:aws:autoscaling:us-east-1:123456789012:scalingPolicy:policy-id:autoScalingGroupName/{group_name}:policyName/{group_name}-scale-up'\n            ],\n            AlarmDescription='Scale up when database connections are high',\n            Unit='Count'\n        )\n        \n        # Response time alarm\n        self.cloudwatch.put_metric_alarm(\n            AlarmName=f'{group_name}-response-time',\n            ComparisonOperator='GreaterThanThreshold',\n            EvaluationPeriods=3,\n            MetricName='TargetResponseTime',\n            Namespace='AWS/ApplicationELB',\n            Period=300,\n            Statistic='Average',\n            Threshold=2.0,\n            ActionsEnabled=True,\n            AlarmActions=[\n                f'arn:aws:autoscaling:us-east-1:123456789012:scalingPolicy:policy-id:autoScalingGroupName/{group_name}:policyName/{group_name}-scale-up'\n            ],\n            AlarmDescription='Scale up when response time is high',\n            Unit='Seconds'\n        )\n",[1092,6712,6713,6718,6725,6732,6736,6745,6754,6758,6784,6823,6858,6893,6897,6925,6934,6958,6962,6975,6980,6985,6990,6995,6999,7004,7012,7019,7026,7031,7036,7040,7057,7069,7077,7092,7107,7130,7143,7162,7167,7182,7195,7200,7220,7233,7274,7312,7317,7322,7327,7331,7336,7364,7368,7393,7430,7439,7458,7470,7477,7491,7509,7513,7525,7537,7549,7562,7578,7594,7606,7617,7625,7630,7648,7667,7682,7697,7714,7719,7724,7728,7735,7739,7756,7765,7770,7790,7800,7823,7839,7846,7862,7875,7893,7897,7912,7926,7930,7934,7938,7943,7962,7972,7993,8007,8013,8029,8042,8062,8081,8086,8091,8096,8101,8114,8119,8137,8147,8153,8169,8192,8209,8221,8238,8255,8267,8284,8297,8310,8318,8345,8351,8368,8383,8388,8393,8399,8414,8436,8451,8463,8479,8495,8506,8521,8533,8544,8551,8574,8579,8595,8609],{"__ignoreMap":1090},[1095,6714,6715],{"class":1097,"line":1098},[1095,6716,6717],{"class":1101},"# aws/autoscaling.py\n",[1095,6719,6720,6722],{"class":1097,"line":1105},[1095,6721,1999],{"class":1998},[1095,6723,6724],{"class":2002}," boto3\n",[1095,6726,6727,6729],{"class":1097,"line":1112},[1095,6728,1999],{"class":1998},[1095,6730,6731],{"class":2002}," json\n",[1095,6733,6734],{"class":1097,"line":1118},[1095,6735,1109],{"emptyLinePlaceholder":1108},[1095,6737,6738,6740,6743],{"class":1097,"line":1132},[1095,6739,2830],{"class":2829},[1095,6741,6742],{"class":2833}," DjangoAutoScaler",[1095,6744,2837],{"class":1125},[1095,6746,6747,6749,6752],{"class":1097,"line":1151},[1095,6748,6196],{"class":2842},[1095,6750,6751],{"class":2848},"Auto-scaling manager for Django applications on AWS",[1095,6753,2949],{"class":2842},[1095,6755,6756],{"class":1097,"line":1175},[1095,6757,1432],{"class":2002},[1095,6759,6760,6762,6764,6766,6768,6770,6773,6775,6777,6780,6782],{"class":1097,"line":1189},[1095,6761,2862],{"class":2829},[1095,6763,2866],{"class":2865},[1095,6765,2080],{"class":1125},[1095,6767,2872],{"class":2871},[1095,6769,1206],{"class":1125},[1095,6771,6772],{"class":2926}," region",[1095,6774,3134],{"class":2932},[1095,6776,1143],{"class":1135},[1095,6778,6779],{"class":1139},"us-east-1",[1095,6781,1143],{"class":1135},[1095,6783,2875],{"class":1125},[1095,6785,6786,6788,6790,6793,6795,6798,6800,6803,6805,6807,6809,6811,6813,6816,6818,6821],{"class":1097,"line":1212},[1095,6787,2880],{"class":1121},[1095,6789,2067],{"class":1125},[1095,6791,6792],{"class":2070},"autoscaling",[1095,6794,1126],{"class":1125},[1095,6796,6797],{"class":2002}," boto3",[1095,6799,2067],{"class":1125},[1095,6801,6802],{"class":2076},"client",[1095,6804,2080],{"class":1125},[1095,6806,1143],{"class":1135},[1095,6808,6792],{"class":1139},[1095,6810,1143],{"class":1135},[1095,6812,1206],{"class":1125},[1095,6814,6815],{"class":3612}," region_name",[1095,6817,3134],{"class":1125},[1095,6819,6820],{"class":2076},"region",[1095,6822,3037],{"class":1125},[1095,6824,6825,6827,6829,6832,6834,6836,6838,6840,6842,6844,6846,6848,6850,6852,6854,6856],{"class":1097,"line":1218},[1095,6826,2880],{"class":1121},[1095,6828,2067],{"class":1125},[1095,6830,6831],{"class":2070},"cloudwatch",[1095,6833,1126],{"class":1125},[1095,6835,6797],{"class":2002},[1095,6837,2067],{"class":1125},[1095,6839,6802],{"class":2076},[1095,6841,2080],{"class":1125},[1095,6843,1143],{"class":1135},[1095,6845,6831],{"class":1139},[1095,6847,1143],{"class":1135},[1095,6849,1206],{"class":1125},[1095,6851,6815],{"class":3612},[1095,6853,3134],{"class":1125},[1095,6855,6820],{"class":2076},[1095,6857,3037],{"class":1125},[1095,6859,6860,6862,6864,6867,6869,6871,6873,6875,6877,6879,6881,6883,6885,6887,6889,6891],{"class":1097,"line":1224},[1095,6861,2880],{"class":1121},[1095,6863,2067],{"class":1125},[1095,6865,6866],{"class":2070},"elbv2",[1095,6868,1126],{"class":1125},[1095,6870,6797],{"class":2002},[1095,6872,2067],{"class":1125},[1095,6874,6802],{"class":2076},[1095,6876,2080],{"class":1125},[1095,6878,1143],{"class":1135},[1095,6880,6866],{"class":1139},[1095,6882,1143],{"class":1135},[1095,6884,1206],{"class":1125},[1095,6886,6815],{"class":3612},[1095,6888,3134],{"class":1125},[1095,6890,6820],{"class":2076},[1095,6892,3037],{"class":1125},[1095,6894,6895],{"class":1097,"line":1230},[1095,6896,1432],{"class":2002},[1095,6898,6899,6901,6904,6906,6908,6910,6913,6915,6918,6920,6923],{"class":1097,"line":1235},[1095,6900,2862],{"class":2829},[1095,6902,6903],{"class":2916}," create_launch_template",[1095,6905,2080],{"class":1125},[1095,6907,2872],{"class":2871},[1095,6909,1206],{"class":1125},[1095,6911,6912],{"class":2926}," template_name",[1095,6914,1206],{"class":1125},[1095,6916,6917],{"class":2926}," ami_id",[1095,6919,1206],{"class":1125},[1095,6921,6922],{"class":2926}," instance_type",[1095,6924,2875],{"class":1125},[1095,6926,6927,6929,6932],{"class":1097,"line":1241},[1095,6928,2943],{"class":2842},[1095,6930,6931],{"class":2848},"Create launch template for auto scaling",[1095,6933,2949],{"class":2842},[1095,6935,6936,6939,6941,6943,6945,6947,6949,6951,6954,6956],{"class":1097,"line":1259},[1095,6937,6938],{"class":2002},"        ec2 ",[1095,6940,3134],{"class":1125},[1095,6942,6797],{"class":2002},[1095,6944,2067],{"class":1125},[1095,6946,6802],{"class":2076},[1095,6948,2080],{"class":1125},[1095,6950,1143],{"class":1135},[1095,6952,6953],{"class":1139},"ec2",[1095,6955,1143],{"class":1135},[1095,6957,3037],{"class":1125},[1095,6959,6960],{"class":1097,"line":1264},[1095,6961,1586],{"class":2002},[1095,6963,6964,6967,6969,6972],{"class":1097,"line":1270},[1095,6965,6966],{"class":2002},"        user_data ",[1095,6968,3134],{"class":1125},[1095,6970,6971],{"class":1135}," \"\"\"",[1095,6973,6974],{"class":1139},"#!/bin/bash\n",[1095,6976,6977],{"class":1097,"line":1288},[1095,6978,6979],{"class":1139},"        yum update -y\n",[1095,6981,6982],{"class":1097,"line":1293},[1095,6983,6984],{"class":1139},"        yum install -y docker\n",[1095,6986,6987],{"class":1097,"line":1299},[1095,6988,6989],{"class":1139},"        service docker start\n",[1095,6991,6992],{"class":1097,"line":1309},[1095,6993,6994],{"class":1139},"        usermod -a -G docker ec2-user\n",[1095,6996,6997],{"class":1097,"line":1322},[1095,6998,1586],{"class":1139},[1095,7000,7001],{"class":1097,"line":1346},[1095,7002,7003],{"class":1139},"        # Pull and run Django application\n",[1095,7005,7006,7009],{"class":1097,"line":1351},[1095,7007,7008],{"class":1139},"        docker run -d --name django-app ",[1095,7010,7011],{"class":3209},"\\\n",[1095,7013,7014,7017],{"class":1097,"line":1356},[1095,7015,7016],{"class":1139},"            --env-file /opt/django/.env ",[1095,7018,7011],{"class":3209},[1095,7020,7021,7024],{"class":1097,"line":1361},[1095,7022,7023],{"class":1139},"            -p 8000:8000 ",[1095,7025,7011],{"class":3209},[1095,7027,7028],{"class":1097,"line":1367},[1095,7029,7030],{"class":1139},"            your-registry/django-app:latest\n",[1095,7032,7033],{"class":1097,"line":1530},[1095,7034,7035],{"class":1135},"        \"\"\"\n",[1095,7037,7038],{"class":1097,"line":1536},[1095,7039,1586],{"class":2002},[1095,7041,7042,7045,7047,7050,7052,7055],{"class":1097,"line":1542},[1095,7043,7044],{"class":2002},"        response ",[1095,7046,3134],{"class":1125},[1095,7048,7049],{"class":2002}," ec2",[1095,7051,2067],{"class":1125},[1095,7053,7054],{"class":2076},"create_launch_template",[1095,7056,6590],{"class":1125},[1095,7058,7059,7062,7064,7067],{"class":1097,"line":1548},[1095,7060,7061],{"class":3612},"            LaunchTemplateName",[1095,7063,3134],{"class":1125},[1095,7065,7066],{"class":2076},"template_name",[1095,7068,1172],{"class":1125},[1095,7070,7071,7074],{"class":1097,"line":1553},[1095,7072,7073],{"class":3612},"            LaunchTemplateData",[1095,7075,7076],{"class":1125},"={\n",[1095,7078,7079,7081,7084,7086,7088,7090],{"class":1097,"line":1559},[1095,7080,4889],{"class":1135},[1095,7082,7083],{"class":1139},"ImageId",[1095,7085,1143],{"class":1135},[1095,7087,1146],{"class":1125},[1095,7089,6917],{"class":2076},[1095,7091,1172],{"class":1125},[1095,7093,7094,7096,7099,7101,7103,7105],{"class":1097,"line":1565},[1095,7095,4889],{"class":1135},[1095,7097,7098],{"class":1139},"InstanceType",[1095,7100,1143],{"class":1135},[1095,7102,1146],{"class":1125},[1095,7104,6922],{"class":2076},[1095,7106,1172],{"class":1125},[1095,7108,7109,7111,7114,7116,7118,7120,7122,7125,7127],{"class":1097,"line":1571},[1095,7110,4889],{"class":1135},[1095,7112,7113],{"class":1139},"SecurityGroupIds",[1095,7115,1143],{"class":1135},[1095,7117,1146],{"class":1125},[1095,7119,2793],{"class":1125},[1095,7121,1143],{"class":1135},[1095,7123,7124],{"class":1139},"sg-12345678",[1095,7126,1143],{"class":1135},[1095,7128,7129],{"class":1125},"],\n",[1095,7131,7132,7134,7137,7139,7141],{"class":1097,"line":1577},[1095,7133,4889],{"class":1135},[1095,7135,7136],{"class":1139},"IamInstanceProfile",[1095,7138,1143],{"class":1135},[1095,7140,1146],{"class":1125},[1095,7142,1129],{"class":1125},[1095,7144,7145,7148,7151,7153,7155,7157,7160],{"class":1097,"line":1583},[1095,7146,7147],{"class":1135},"                    '",[1095,7149,7150],{"class":1139},"Name",[1095,7152,1143],{"class":1135},[1095,7154,1146],{"class":1125},[1095,7156,1164],{"class":1135},[1095,7158,7159],{"class":1139},"django-instance-profile",[1095,7161,3084],{"class":1135},[1095,7163,7164],{"class":1097,"line":1589},[1095,7165,7166],{"class":1125},"                },\n",[1095,7168,7169,7171,7174,7176,7178,7180],{"class":1097,"line":1595},[1095,7170,4889],{"class":1135},[1095,7172,7173],{"class":1139},"UserData",[1095,7175,1143],{"class":1135},[1095,7177,1146],{"class":1125},[1095,7179,6512],{"class":2076},[1095,7181,1172],{"class":1125},[1095,7183,7184,7186,7189,7191,7193],{"class":1097,"line":1601},[1095,7185,4889],{"class":1135},[1095,7187,7188],{"class":1139},"TagSpecifications",[1095,7190,1143],{"class":1135},[1095,7192,1146],{"class":1125},[1095,7194,3462],{"class":1125},[1095,7196,7197],{"class":1097,"line":1607},[1095,7198,7199],{"class":1125},"                    {\n",[1095,7201,7202,7205,7208,7210,7212,7214,7216,7218],{"class":1097,"line":1612},[1095,7203,7204],{"class":1135},"                        '",[1095,7206,7207],{"class":1139},"ResourceType",[1095,7209,1143],{"class":1135},[1095,7211,1146],{"class":1125},[1095,7213,1164],{"class":1135},[1095,7215,3750],{"class":1139},[1095,7217,1143],{"class":1135},[1095,7219,1172],{"class":1125},[1095,7221,7222,7224,7227,7229,7231],{"class":1097,"line":1618},[1095,7223,7204],{"class":1135},[1095,7225,7226],{"class":1139},"Tags",[1095,7228,1143],{"class":1135},[1095,7230,1146],{"class":1125},[1095,7232,3462],{"class":1125},[1095,7234,7235,7238,7240,7243,7245,7247,7249,7251,7253,7255,7257,7260,7262,7264,7266,7269,7271],{"class":1097,"line":1624},[1095,7236,7237],{"class":1125},"                            {",[1095,7239,1143],{"class":1135},[1095,7241,7242],{"class":1139},"Key",[1095,7244,1143],{"class":1135},[1095,7246,1146],{"class":1125},[1095,7248,1164],{"class":1135},[1095,7250,7150],{"class":1139},[1095,7252,1143],{"class":1135},[1095,7254,1206],{"class":1125},[1095,7256,1164],{"class":1135},[1095,7258,7259],{"class":1139},"Value",[1095,7261,1143],{"class":1135},[1095,7263,1146],{"class":1125},[1095,7265,1164],{"class":1135},[1095,7267,7268],{"class":1139},"django-auto-scaled",[1095,7270,1143],{"class":1135},[1095,7272,7273],{"class":1125},"},\n",[1095,7275,7276,7278,7280,7282,7284,7286,7288,7291,7293,7295,7297,7299,7301,7303,7305,7308,7310],{"class":1097,"line":1629},[1095,7277,7237],{"class":1125},[1095,7279,1143],{"class":1135},[1095,7281,7242],{"class":1139},[1095,7283,1143],{"class":1135},[1095,7285,1146],{"class":1125},[1095,7287,1164],{"class":1135},[1095,7289,7290],{"class":1139},"Environment",[1095,7292,1143],{"class":1135},[1095,7294,1206],{"class":1125},[1095,7296,1164],{"class":1135},[1095,7298,7259],{"class":1139},[1095,7300,1143],{"class":1135},[1095,7302,1146],{"class":1125},[1095,7304,1164],{"class":1135},[1095,7306,7307],{"class":1139},"production",[1095,7309,1143],{"class":1135},[1095,7311,7273],{"class":1125},[1095,7313,7314],{"class":1097,"line":1634},[1095,7315,7316],{"class":1125},"                        ]\n",[1095,7318,7319],{"class":1097,"line":1640},[1095,7320,7321],{"class":1125},"                    }\n",[1095,7323,7324],{"class":1097,"line":1646},[1095,7325,7326],{"class":1125},"                ]\n",[1095,7328,7329],{"class":1097,"line":1651},[1095,7330,6490],{"class":1125},[1095,7332,7333],{"class":1097,"line":1656},[1095,7334,7335],{"class":1125},"        )\n",[1095,7337,7338,7340,7343,7345,7347,7350,7352,7355,7357,7360,7362],{"class":1097,"line":1662},[1095,7339,3018],{"class":1998},[1095,7341,7342],{"class":2002}," response",[1095,7344,5603],{"class":1125},[1095,7346,1143],{"class":1135},[1095,7348,7349],{"class":1139},"LaunchTemplate",[1095,7351,1143],{"class":1135},[1095,7353,7354],{"class":1125},"][",[1095,7356,1143],{"class":1135},[1095,7358,7359],{"class":1139},"LaunchTemplateId",[1095,7361,1143],{"class":1135},[1095,7363,2803],{"class":1125},[1095,7365,7366],{"class":1097,"line":1668},[1095,7367,1432],{"class":2002},[1095,7369,7370,7372,7375,7377,7379,7381,7384,7386,7389,7391],{"class":1097,"line":1674},[1095,7371,2862],{"class":2829},[1095,7373,7374],{"class":2916}," create_auto_scaling_group",[1095,7376,2080],{"class":1125},[1095,7378,2872],{"class":2871},[1095,7380,1206],{"class":1125},[1095,7382,7383],{"class":2926}," group_name",[1095,7385,1206],{"class":1125},[1095,7387,7388],{"class":2926}," launch_template_id",[1095,7390,1206],{"class":1125},[1095,7392,3485],{"class":2002},[1095,7394,7395,7398,7400,7403,7405,7408,7410,7413,7415,7418,7420,7423,7425,7428],{"class":1097,"line":1680},[1095,7396,7397],{"class":2926},"                                  target_group_arn",[1095,7399,1206],{"class":1125},[1095,7401,7402],{"class":2926}," min_size",[1095,7404,3134],{"class":2932},[1095,7406,7407],{"class":1202},"1",[1095,7409,1206],{"class":1125},[1095,7411,7412],{"class":2926}," max_size",[1095,7414,3134],{"class":2932},[1095,7416,7417],{"class":1202},"10",[1095,7419,1206],{"class":1125},[1095,7421,7422],{"class":2926}," desired_capacity",[1095,7424,3134],{"class":2932},[1095,7426,7427],{"class":1202},"2",[1095,7429,2875],{"class":1125},[1095,7431,7432,7434,7437],{"class":1097,"line":1686},[1095,7433,2943],{"class":2842},[1095,7435,7436],{"class":2848},"Create auto scaling group",[1095,7438,2949],{"class":2842},[1095,7440,7441,7443,7445,7447,7449,7451,7453,7456],{"class":1097,"line":1691},[1095,7442,7044],{"class":2002},[1095,7444,3134],{"class":1125},[1095,7446,3478],{"class":1121},[1095,7448,2067],{"class":1125},[1095,7450,6792],{"class":2070},[1095,7452,2067],{"class":1125},[1095,7454,7455],{"class":2076},"create_auto_scaling_group",[1095,7457,6590],{"class":1125},[1095,7459,7460,7463,7465,7468],{"class":1097,"line":1697},[1095,7461,7462],{"class":3612},"            AutoScalingGroupName",[1095,7464,3134],{"class":1125},[1095,7466,7467],{"class":2076},"group_name",[1095,7469,1172],{"class":1125},[1095,7471,7472,7475],{"class":1097,"line":1703},[1095,7473,7474],{"class":3612},"            LaunchTemplate",[1095,7476,7076],{"class":1125},[1095,7478,7479,7481,7483,7485,7487,7489],{"class":1097,"line":1709},[1095,7480,4889],{"class":1135},[1095,7482,7359],{"class":1139},[1095,7484,1143],{"class":1135},[1095,7486,1146],{"class":1125},[1095,7488,7388],{"class":2076},[1095,7490,1172],{"class":1125},[1095,7492,7493,7495,7498,7500,7502,7504,7507],{"class":1097,"line":1715},[1095,7494,4889],{"class":1135},[1095,7496,7497],{"class":1139},"Version",[1095,7499,1143],{"class":1135},[1095,7501,1146],{"class":1125},[1095,7503,1164],{"class":1135},[1095,7505,7506],{"class":1139},"$Latest",[1095,7508,3084],{"class":1135},[1095,7510,7511],{"class":1097,"line":1720},[1095,7512,4922],{"class":1125},[1095,7514,7515,7518,7520,7523],{"class":1097,"line":1725},[1095,7516,7517],{"class":3612},"            MinSize",[1095,7519,3134],{"class":1125},[1095,7521,7522],{"class":2076},"min_size",[1095,7524,1172],{"class":1125},[1095,7526,7527,7530,7532,7535],{"class":1097,"line":1731},[1095,7528,7529],{"class":3612},"            MaxSize",[1095,7531,3134],{"class":1125},[1095,7533,7534],{"class":2076},"max_size",[1095,7536,1172],{"class":1125},[1095,7538,7539,7542,7544,7547],{"class":1097,"line":1737},[1095,7540,7541],{"class":3612},"            DesiredCapacity",[1095,7543,3134],{"class":1125},[1095,7545,7546],{"class":2076},"desired_capacity",[1095,7548,1172],{"class":1125},[1095,7550,7551,7554,7557,7560],{"class":1097,"line":1743},[1095,7552,7553],{"class":3612},"            TargetGroupARNs",[1095,7555,7556],{"class":1125},"=[",[1095,7558,7559],{"class":2076},"target_group_arn",[1095,7561,7129],{"class":1125},[1095,7563,7564,7567,7569,7571,7574,7576],{"class":1097,"line":1748},[1095,7565,7566],{"class":3612},"            VPCZoneIdentifier",[1095,7568,3134],{"class":1125},[1095,7570,1143],{"class":1135},[1095,7572,7573],{"class":1139},"subnet-12345,subnet-67890",[1095,7575,1143],{"class":1135},[1095,7577,1172],{"class":1125},[1095,7579,7580,7583,7585,7587,7590,7592],{"class":1097,"line":1753},[1095,7581,7582],{"class":3612},"            HealthCheckType",[1095,7584,3134],{"class":1125},[1095,7586,1143],{"class":1135},[1095,7588,7589],{"class":1139},"ELB",[1095,7591,1143],{"class":1135},[1095,7593,1172],{"class":1125},[1095,7595,7596,7599,7601,7604],{"class":1097,"line":1758},[1095,7597,7598],{"class":3612},"            HealthCheckGracePeriod",[1095,7600,3134],{"class":1125},[1095,7602,7603],{"class":1202},"300",[1095,7605,1172],{"class":1125},[1095,7607,7608,7611,7613,7615],{"class":1097,"line":1763},[1095,7609,7610],{"class":3612},"            DefaultCooldown",[1095,7612,3134],{"class":1125},[1095,7614,7603],{"class":1202},[1095,7616,1172],{"class":1125},[1095,7618,7619,7622],{"class":1097,"line":1769},[1095,7620,7621],{"class":3612},"            Tags",[1095,7623,7624],{"class":1125},"=[\n",[1095,7626,7627],{"class":1097,"line":1775},[1095,7628,7629],{"class":1125},"                {\n",[1095,7631,7632,7634,7636,7638,7640,7642,7644,7646],{"class":1097,"line":1780},[1095,7633,7147],{"class":1135},[1095,7635,7242],{"class":1139},[1095,7637,1143],{"class":1135},[1095,7639,1146],{"class":1125},[1095,7641,1164],{"class":1135},[1095,7643,7150],{"class":1139},[1095,7645,1143],{"class":1135},[1095,7647,1172],{"class":1125},[1095,7649,7650,7652,7654,7656,7658,7660,7663,7665],{"class":1097,"line":1785},[1095,7651,7147],{"class":1135},[1095,7653,7259],{"class":1139},[1095,7655,1143],{"class":1135},[1095,7657,1146],{"class":1125},[1095,7659,1164],{"class":1135},[1095,7661,7662],{"class":1139},"django-asg",[1095,7664,1143],{"class":1135},[1095,7666,1172],{"class":1125},[1095,7668,7669,7671,7674,7676,7678,7680],{"class":1097,"line":1790},[1095,7670,7147],{"class":1135},[1095,7672,7673],{"class":1139},"PropagateAtLaunch",[1095,7675,1143],{"class":1135},[1095,7677,1146],{"class":1125},[1095,7679,4915],{"class":3209},[1095,7681,1172],{"class":1125},[1095,7683,7684,7686,7689,7691,7693,7695],{"class":1097,"line":1796},[1095,7685,7147],{"class":1135},[1095,7687,7688],{"class":1139},"ResourceId",[1095,7690,1143],{"class":1135},[1095,7692,1146],{"class":1125},[1095,7694,7383],{"class":2076},[1095,7696,1172],{"class":1125},[1095,7698,7699,7701,7703,7705,7707,7709,7712],{"class":1097,"line":1802},[1095,7700,7147],{"class":1135},[1095,7702,7207],{"class":1139},[1095,7704,1143],{"class":1135},[1095,7706,1146],{"class":1125},[1095,7708,1164],{"class":1135},[1095,7710,7711],{"class":1139},"auto-scaling-group",[1095,7713,3084],{"class":1135},[1095,7715,7716],{"class":1097,"line":1808},[1095,7717,7718],{"class":1125},"                }\n",[1095,7720,7721],{"class":1097,"line":1813},[1095,7722,7723],{"class":1125},"            ]\n",[1095,7725,7726],{"class":1097,"line":1819},[1095,7727,7335],{"class":1125},[1095,7729,7730,7732],{"class":1097,"line":1825},[1095,7731,3018],{"class":1998},[1095,7733,7734],{"class":2002}," response\n",[1095,7736,7737],{"class":1097,"line":1831},[1095,7738,1432],{"class":2002},[1095,7740,7741,7743,7746,7748,7750,7752,7754],{"class":1097,"line":1837},[1095,7742,2862],{"class":2829},[1095,7744,7745],{"class":2916}," create_scaling_policies",[1095,7747,2080],{"class":1125},[1095,7749,2872],{"class":2871},[1095,7751,1206],{"class":1125},[1095,7753,7383],{"class":2926},[1095,7755,2875],{"class":1125},[1095,7757,7758,7760,7763],{"class":1097,"line":1842},[1095,7759,2943],{"class":2842},[1095,7761,7762],{"class":2848},"Create scaling policies",[1095,7764,2949],{"class":2842},[1095,7766,7767],{"class":1097,"line":1848},[1095,7768,7769],{"class":1101},"        # Scale up policy\n",[1095,7771,7772,7775,7777,7779,7781,7783,7785,7788],{"class":1097,"line":1854},[1095,7773,7774],{"class":2002},"        scale_up_response ",[1095,7776,3134],{"class":1125},[1095,7778,3478],{"class":1121},[1095,7780,2067],{"class":1125},[1095,7782,6792],{"class":2070},[1095,7784,2067],{"class":1125},[1095,7786,7787],{"class":2076},"put_scaling_policy",[1095,7789,6590],{"class":1125},[1095,7791,7792,7794,7796,7798],{"class":1097,"line":1860},[1095,7793,7462],{"class":3612},[1095,7795,3134],{"class":1125},[1095,7797,7467],{"class":2076},[1095,7799,1172],{"class":1125},[1095,7801,7802,7805,7807,7810,7812,7814,7816,7818,7821],{"class":1097,"line":1866},[1095,7803,7804],{"class":3612},"            PolicyName",[1095,7806,3134],{"class":1125},[1095,7808,7809],{"class":2829},"f",[1095,7811,1143],{"class":1139},[1095,7813,4708],{"class":4707},[1095,7815,7467],{"class":2076},[1095,7817,4741],{"class":4707},[1095,7819,7820],{"class":1139},"-scale-up'",[1095,7822,1172],{"class":1125},[1095,7824,7825,7828,7830,7832,7835,7837],{"class":1097,"line":1872},[1095,7826,7827],{"class":3612},"            PolicyType",[1095,7829,3134],{"class":1125},[1095,7831,1143],{"class":1135},[1095,7833,7834],{"class":1139},"TargetTrackingScaling",[1095,7836,1143],{"class":1135},[1095,7838,1172],{"class":1125},[1095,7840,7841,7844],{"class":1097,"line":1877},[1095,7842,7843],{"class":3612},"            TargetTrackingConfiguration",[1095,7845,7076],{"class":1125},[1095,7847,7848,7850,7853,7855,7857,7860],{"class":1097,"line":1882},[1095,7849,4889],{"class":1135},[1095,7851,7852],{"class":1139},"TargetValue",[1095,7854,1143],{"class":1135},[1095,7856,1146],{"class":1125},[1095,7858,7859],{"class":1202}," 70.0",[1095,7861,1172],{"class":1125},[1095,7863,7864,7866,7869,7871,7873],{"class":1097,"line":1888},[1095,7865,4889],{"class":1135},[1095,7867,7868],{"class":1139},"PredefinedMetricSpecification",[1095,7870,1143],{"class":1135},[1095,7872,1146],{"class":1125},[1095,7874,1129],{"class":1125},[1095,7876,7877,7879,7882,7884,7886,7888,7891],{"class":1097,"line":1894},[1095,7878,7147],{"class":1135},[1095,7880,7881],{"class":1139},"PredefinedMetricType",[1095,7883,1143],{"class":1135},[1095,7885,1146],{"class":1125},[1095,7887,1164],{"class":1135},[1095,7889,7890],{"class":1139},"ASGAverageCPUUtilization",[1095,7892,3084],{"class":1135},[1095,7894,7895],{"class":1097,"line":1899},[1095,7896,7166],{"class":1125},[1095,7898,7899,7901,7904,7906,7908,7910],{"class":1097,"line":1905},[1095,7900,4889],{"class":1135},[1095,7902,7903],{"class":1139},"ScaleOutCooldown",[1095,7905,1143],{"class":1135},[1095,7907,1146],{"class":1125},[1095,7909,5014],{"class":1202},[1095,7911,1172],{"class":1125},[1095,7913,7914,7916,7919,7921,7923],{"class":1097,"line":1910},[1095,7915,4889],{"class":1135},[1095,7917,7918],{"class":1139},"ScaleInCooldown",[1095,7920,1143],{"class":1135},[1095,7922,1146],{"class":1125},[1095,7924,7925],{"class":1202}," 300\n",[1095,7927,7928],{"class":1097,"line":1916},[1095,7929,6490],{"class":1125},[1095,7931,7932],{"class":1097,"line":1922},[1095,7933,7335],{"class":1125},[1095,7935,7936],{"class":1097,"line":1927},[1095,7937,1586],{"class":2002},[1095,7939,7940],{"class":1097,"line":1932},[1095,7941,7942],{"class":1101},"        # Scale based on request count\n",[1095,7944,7945,7948,7950,7952,7954,7956,7958,7960],{"class":1097,"line":1937},[1095,7946,7947],{"class":2002},"        request_count_policy ",[1095,7949,3134],{"class":1125},[1095,7951,3478],{"class":1121},[1095,7953,2067],{"class":1125},[1095,7955,6792],{"class":2070},[1095,7957,2067],{"class":1125},[1095,7959,7787],{"class":2076},[1095,7961,6590],{"class":1125},[1095,7963,7964,7966,7968,7970],{"class":1097,"line":1943},[1095,7965,7462],{"class":3612},[1095,7967,3134],{"class":1125},[1095,7969,7467],{"class":2076},[1095,7971,1172],{"class":1125},[1095,7973,7974,7976,7978,7980,7982,7984,7986,7988,7991],{"class":1097,"line":1949},[1095,7975,7804],{"class":3612},[1095,7977,3134],{"class":1125},[1095,7979,7809],{"class":2829},[1095,7981,1143],{"class":1139},[1095,7983,4708],{"class":4707},[1095,7985,7467],{"class":2076},[1095,7987,4741],{"class":4707},[1095,7989,7990],{"class":1139},"-request-count'",[1095,7992,1172],{"class":1125},[1095,7994,7995,7997,7999,8001,8003,8005],{"class":1097,"line":1955},[1095,7996,7827],{"class":3612},[1095,7998,3134],{"class":1125},[1095,8000,1143],{"class":1135},[1095,8002,7834],{"class":1139},[1095,8004,1143],{"class":1135},[1095,8006,1172],{"class":1125},[1095,8008,8009,8011],{"class":1097,"line":1961},[1095,8010,7843],{"class":3612},[1095,8012,7076],{"class":1125},[1095,8014,8016,8018,8020,8022,8024,8027],{"class":1097,"line":8015},105,[1095,8017,4889],{"class":1135},[1095,8019,7852],{"class":1139},[1095,8021,1143],{"class":1135},[1095,8023,1146],{"class":1125},[1095,8025,8026],{"class":1202}," 1000.0",[1095,8028,1172],{"class":1125},[1095,8030,8032,8034,8036,8038,8040],{"class":1097,"line":8031},106,[1095,8033,4889],{"class":1135},[1095,8035,7868],{"class":1139},[1095,8037,1143],{"class":1135},[1095,8039,1146],{"class":1125},[1095,8041,1129],{"class":1125},[1095,8043,8045,8047,8049,8051,8053,8055,8058,8060],{"class":1097,"line":8044},107,[1095,8046,7147],{"class":1135},[1095,8048,7881],{"class":1139},[1095,8050,1143],{"class":1135},[1095,8052,1146],{"class":1125},[1095,8054,1164],{"class":1135},[1095,8056,8057],{"class":1139},"ALBRequestCountPerTarget",[1095,8059,1143],{"class":1135},[1095,8061,1172],{"class":1125},[1095,8063,8065,8067,8070,8072,8074,8076,8079],{"class":1097,"line":8064},108,[1095,8066,7147],{"class":1135},[1095,8068,8069],{"class":1139},"ResourceLabel",[1095,8071,1143],{"class":1135},[1095,8073,1146],{"class":1125},[1095,8075,1164],{"class":1135},[1095,8077,8078],{"class":1139},"app/django-alb/1234567890123456/targetgroup/django-tg/1234567890123456",[1095,8080,3084],{"class":1135},[1095,8082,8084],{"class":1097,"line":8083},109,[1095,8085,7718],{"class":1125},[1095,8087,8089],{"class":1097,"line":8088},110,[1095,8090,6490],{"class":1125},[1095,8092,8094],{"class":1097,"line":8093},111,[1095,8095,7335],{"class":1125},[1095,8097,8099],{"class":1097,"line":8098},112,[1095,8100,1586],{"class":2002},[1095,8102,8104,8106,8109,8111],{"class":1097,"line":8103},113,[1095,8105,3018],{"class":1998},[1095,8107,8108],{"class":2002}," scale_up_response",[1095,8110,1206],{"class":1125},[1095,8112,8113],{"class":2002}," request_count_policy\n",[1095,8115,8117],{"class":1097,"line":8116},114,[1095,8118,1432],{"class":2002},[1095,8120,8122,8124,8127,8129,8131,8133,8135],{"class":1097,"line":8121},115,[1095,8123,2862],{"class":2829},[1095,8125,8126],{"class":2916}," create_custom_metrics_alarm",[1095,8128,2080],{"class":1125},[1095,8130,2872],{"class":2871},[1095,8132,1206],{"class":1125},[1095,8134,7383],{"class":2926},[1095,8136,2875],{"class":1125},[1095,8138,8140,8142,8145],{"class":1097,"line":8139},116,[1095,8141,2943],{"class":2842},[1095,8143,8144],{"class":2848},"Create custom CloudWatch alarms for Django-specific metrics",[1095,8146,2949],{"class":2842},[1095,8148,8150],{"class":1097,"line":8149},117,[1095,8151,8152],{"class":1101},"        # Database connection alarm\n",[1095,8154,8156,8158,8160,8162,8164,8167],{"class":1097,"line":8155},118,[1095,8157,2880],{"class":1121},[1095,8159,2067],{"class":1125},[1095,8161,6831],{"class":2070},[1095,8163,2067],{"class":1125},[1095,8165,8166],{"class":2076},"put_metric_alarm",[1095,8168,6590],{"class":1125},[1095,8170,8172,8175,8177,8179,8181,8183,8185,8187,8190],{"class":1097,"line":8171},119,[1095,8173,8174],{"class":3612},"            AlarmName",[1095,8176,3134],{"class":1125},[1095,8178,7809],{"class":2829},[1095,8180,1143],{"class":1139},[1095,8182,4708],{"class":4707},[1095,8184,7467],{"class":2076},[1095,8186,4741],{"class":4707},[1095,8188,8189],{"class":1139},"-db-connections'",[1095,8191,1172],{"class":1125},[1095,8193,8195,8198,8200,8202,8205,8207],{"class":1097,"line":8194},120,[1095,8196,8197],{"class":3612},"            ComparisonOperator",[1095,8199,3134],{"class":1125},[1095,8201,1143],{"class":1135},[1095,8203,8204],{"class":1139},"GreaterThanThreshold",[1095,8206,1143],{"class":1135},[1095,8208,1172],{"class":1125},[1095,8210,8212,8215,8217,8219],{"class":1097,"line":8211},121,[1095,8213,8214],{"class":3612},"            EvaluationPeriods",[1095,8216,3134],{"class":1125},[1095,8218,7427],{"class":1202},[1095,8220,1172],{"class":1125},[1095,8222,8224,8227,8229,8231,8234,8236],{"class":1097,"line":8223},122,[1095,8225,8226],{"class":3612},"            MetricName",[1095,8228,3134],{"class":1125},[1095,8230,1143],{"class":1135},[1095,8232,8233],{"class":1139},"DatabaseConnections",[1095,8235,1143],{"class":1135},[1095,8237,1172],{"class":1125},[1095,8239,8241,8244,8246,8248,8251,8253],{"class":1097,"line":8240},123,[1095,8242,8243],{"class":3612},"            Namespace",[1095,8245,3134],{"class":1125},[1095,8247,1143],{"class":1135},[1095,8249,8250],{"class":1139},"Django/Application",[1095,8252,1143],{"class":1135},[1095,8254,1172],{"class":1125},[1095,8256,8258,8261,8263,8265],{"class":1097,"line":8257},124,[1095,8259,8260],{"class":3612},"            Period",[1095,8262,3134],{"class":1125},[1095,8264,7603],{"class":1202},[1095,8266,1172],{"class":1125},[1095,8268,8270,8273,8275,8277,8280,8282],{"class":1097,"line":8269},125,[1095,8271,8272],{"class":3612},"            Statistic",[1095,8274,3134],{"class":1125},[1095,8276,1143],{"class":1135},[1095,8278,8279],{"class":1139},"Average",[1095,8281,1143],{"class":1135},[1095,8283,1172],{"class":1125},[1095,8285,8287,8290,8292,8295],{"class":1097,"line":8286},126,[1095,8288,8289],{"class":3612},"            Threshold",[1095,8291,3134],{"class":1125},[1095,8293,8294],{"class":1202},"80.0",[1095,8296,1172],{"class":1125},[1095,8298,8300,8303,8305,8308],{"class":1097,"line":8299},127,[1095,8301,8302],{"class":3612},"            ActionsEnabled",[1095,8304,3134],{"class":1125},[1095,8306,8307],{"class":3209},"True",[1095,8309,1172],{"class":1125},[1095,8311,8313,8316],{"class":1097,"line":8312},128,[1095,8314,8315],{"class":3612},"            AlarmActions",[1095,8317,7624],{"class":1125},[1095,8319,8321,8324,8327,8329,8331,8333,8336,8338,8340,8342],{"class":1097,"line":8320},129,[1095,8322,8323],{"class":2829},"                f",[1095,8325,8326],{"class":1139},"'arn:aws:autoscaling:us-east-1:123456789012:scalingPolicy:policy-id:autoScalingGroupName/",[1095,8328,4708],{"class":4707},[1095,8330,7467],{"class":2076},[1095,8332,4741],{"class":4707},[1095,8334,8335],{"class":1139},":policyName/",[1095,8337,4708],{"class":4707},[1095,8339,7467],{"class":2076},[1095,8341,4741],{"class":4707},[1095,8343,8344],{"class":1139},"-scale-up'\n",[1095,8346,8348],{"class":1097,"line":8347},130,[1095,8349,8350],{"class":1125},"            ],\n",[1095,8352,8354,8357,8359,8361,8364,8366],{"class":1097,"line":8353},131,[1095,8355,8356],{"class":3612},"            AlarmDescription",[1095,8358,3134],{"class":1125},[1095,8360,1143],{"class":1135},[1095,8362,8363],{"class":1139},"Scale up when database connections are high",[1095,8365,1143],{"class":1135},[1095,8367,1172],{"class":1125},[1095,8369,8371,8374,8376,8378,8381],{"class":1097,"line":8370},132,[1095,8372,8373],{"class":3612},"            Unit",[1095,8375,3134],{"class":1125},[1095,8377,1143],{"class":1135},[1095,8379,8380],{"class":1139},"Count",[1095,8382,3084],{"class":1135},[1095,8384,8386],{"class":1097,"line":8385},133,[1095,8387,7335],{"class":1125},[1095,8389,8391],{"class":1097,"line":8390},134,[1095,8392,1586],{"class":2002},[1095,8394,8396],{"class":1097,"line":8395},135,[1095,8397,8398],{"class":1101},"        # Response time alarm\n",[1095,8400,8402,8404,8406,8408,8410,8412],{"class":1097,"line":8401},136,[1095,8403,2880],{"class":1121},[1095,8405,2067],{"class":1125},[1095,8407,6831],{"class":2070},[1095,8409,2067],{"class":1125},[1095,8411,8166],{"class":2076},[1095,8413,6590],{"class":1125},[1095,8415,8417,8419,8421,8423,8425,8427,8429,8431,8434],{"class":1097,"line":8416},137,[1095,8418,8174],{"class":3612},[1095,8420,3134],{"class":1125},[1095,8422,7809],{"class":2829},[1095,8424,1143],{"class":1139},[1095,8426,4708],{"class":4707},[1095,8428,7467],{"class":2076},[1095,8430,4741],{"class":4707},[1095,8432,8433],{"class":1139},"-response-time'",[1095,8435,1172],{"class":1125},[1095,8437,8439,8441,8443,8445,8447,8449],{"class":1097,"line":8438},138,[1095,8440,8197],{"class":3612},[1095,8442,3134],{"class":1125},[1095,8444,1143],{"class":1135},[1095,8446,8204],{"class":1139},[1095,8448,1143],{"class":1135},[1095,8450,1172],{"class":1125},[1095,8452,8454,8456,8458,8461],{"class":1097,"line":8453},139,[1095,8455,8214],{"class":3612},[1095,8457,3134],{"class":1125},[1095,8459,8460],{"class":1202},"3",[1095,8462,1172],{"class":1125},[1095,8464,8466,8468,8470,8472,8475,8477],{"class":1097,"line":8465},140,[1095,8467,8226],{"class":3612},[1095,8469,3134],{"class":1125},[1095,8471,1143],{"class":1135},[1095,8473,8474],{"class":1139},"TargetResponseTime",[1095,8476,1143],{"class":1135},[1095,8478,1172],{"class":1125},[1095,8480,8482,8484,8486,8488,8491,8493],{"class":1097,"line":8481},141,[1095,8483,8243],{"class":3612},[1095,8485,3134],{"class":1125},[1095,8487,1143],{"class":1135},[1095,8489,8490],{"class":1139},"AWS/ApplicationELB",[1095,8492,1143],{"class":1135},[1095,8494,1172],{"class":1125},[1095,8496,8498,8500,8502,8504],{"class":1097,"line":8497},142,[1095,8499,8260],{"class":3612},[1095,8501,3134],{"class":1125},[1095,8503,7603],{"class":1202},[1095,8505,1172],{"class":1125},[1095,8507,8509,8511,8513,8515,8517,8519],{"class":1097,"line":8508},143,[1095,8510,8272],{"class":3612},[1095,8512,3134],{"class":1125},[1095,8514,1143],{"class":1135},[1095,8516,8279],{"class":1139},[1095,8518,1143],{"class":1135},[1095,8520,1172],{"class":1125},[1095,8522,8524,8526,8528,8531],{"class":1097,"line":8523},144,[1095,8525,8289],{"class":3612},[1095,8527,3134],{"class":1125},[1095,8529,8530],{"class":1202},"2.0",[1095,8532,1172],{"class":1125},[1095,8534,8536,8538,8540,8542],{"class":1097,"line":8535},145,[1095,8537,8302],{"class":3612},[1095,8539,3134],{"class":1125},[1095,8541,8307],{"class":3209},[1095,8543,1172],{"class":1125},[1095,8545,8547,8549],{"class":1097,"line":8546},146,[1095,8548,8315],{"class":3612},[1095,8550,7624],{"class":1125},[1095,8552,8554,8556,8558,8560,8562,8564,8566,8568,8570,8572],{"class":1097,"line":8553},147,[1095,8555,8323],{"class":2829},[1095,8557,8326],{"class":1139},[1095,8559,4708],{"class":4707},[1095,8561,7467],{"class":2076},[1095,8563,4741],{"class":4707},[1095,8565,8335],{"class":1139},[1095,8567,4708],{"class":4707},[1095,8569,7467],{"class":2076},[1095,8571,4741],{"class":4707},[1095,8573,8344],{"class":1139},[1095,8575,8577],{"class":1097,"line":8576},148,[1095,8578,8350],{"class":1125},[1095,8580,8582,8584,8586,8588,8591,8593],{"class":1097,"line":8581},149,[1095,8583,8356],{"class":3612},[1095,8585,3134],{"class":1125},[1095,8587,1143],{"class":1135},[1095,8589,8590],{"class":1139},"Scale up when response time is high",[1095,8592,1143],{"class":1135},[1095,8594,1172],{"class":1125},[1095,8596,8598,8600,8602,8604,8607],{"class":1097,"line":8597},150,[1095,8599,8373],{"class":3612},[1095,8601,3134],{"class":1125},[1095,8603,1143],{"class":1135},[1095,8605,8606],{"class":1139},"Seconds",[1095,8608,3084],{"class":1135},[1095,8610,8612],{"class":1097,"line":8611},151,[1095,8613,7335],{"class":1125},[1035,8615,8617],{"id":8616},"kubernetes-horizontal-pod-autoscaler","Kubernetes Horizontal Pod Autoscaler",[1085,8619,8623],{"className":8620,"code":8621,"language":8622,"meta":1090,"style":1090},"language-yaml shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# k8s/hpa.yaml\napiVersion: autoscaling/v2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: django-hpa\n  namespace: production\nspec:\n  scaleTargetRef:\n    apiVersion: apps/v1\n    kind: Deployment\n    name: django-app\n  minReplicas: 3\n  maxReplicas: 50\n  metrics:\n  # CPU-based scaling\n  - type: Resource\n    resource:\n      name: cpu\n      target:\n        type: Utilization\n        averageUtilization: 70\n  \n  # Memory-based scaling\n  - type: Resource\n    resource:\n      name: memory\n      target:\n        type: Utilization\n        averageUtilization: 80\n  \n  # Custom metrics scaling\n  - type: Pods\n    pods:\n      metric:\n        name: django_requests_per_second\n      target:\n        type: AverageValue\n        averageValue: \"100\"\n  \n  # External metrics (e.g., queue length)\n  - type: External\n    external:\n      metric:\n        name: celery_queue_length\n        selector:\n          matchLabels:\n            queue: \"default\"\n      target:\n        type: Value\n        value: \"50\"\n\n  behavior:\n    scaleDown:\n      stabilizationWindowSeconds: 300\n      policies:\n      - type: Percent\n        value: 10\n        periodSeconds: 60\n      - type: Pods\n        value: 2\n        periodSeconds: 60\n      selectPolicy: Min\n    scaleUp:\n      stabilizationWindowSeconds: 60\n      policies:\n      - type: Percent\n        value: 50\n        periodSeconds: 60\n      - type: Pods\n        value: 5\n        periodSeconds: 60\n      selectPolicy: Max\n\n---\n# Vertical Pod Autoscaler\napiVersion: autoscaling.k8s.io/v1\nkind: VerticalPodAutoscaler\nmetadata:\n  name: django-vpa\nspec:\n  targetRef:\n    apiVersion: apps/v1\n    kind: Deployment\n    name: django-app\n  updatePolicy:\n    updateMode: \"Auto\"\n  resourcePolicy:\n    containerPolicies:\n    - containerName: django\n      minAllowed:\n        cpu: 100m\n        memory: 128Mi\n      maxAllowed:\n        cpu: 2\n        memory: 2Gi\n      controlledResources: [\"cpu\", \"memory\"]\n","yaml",[1092,8624,8625,8630,8641,8651,8658,8668,8678,8685,8692,8702,8712,8722,8732,8742,8749,8754,8767,8774,8784,8791,8801,8811,8816,8821,8831,8837,8846,8852,8860,8869,8873,8878,8889,8896,8903,8913,8919,8928,8943,8947,8952,8963,8970,8976,8985,8992,8999,9012,9018,9027,9041,9045,9052,9059,9068,9075,9087,9096,9106,9116,9125,9133,9143,9150,9158,9164,9174,9182,9190,9200,9209,9217,9226,9230,9235,9240,9249,9258,9264,9273,9279,9286,9294,9302,9310,9317,9331,9338,9345,9358,9365,9375,9385,9392,9400,9409],{"__ignoreMap":1090},[1095,8626,8627],{"class":1097,"line":1098},[1095,8628,8629],{"class":1101},"# k8s/hpa.yaml\n",[1095,8631,8632,8636,8638],{"class":1097,"line":1105},[1095,8633,8635],{"class":8634},"suXOh","apiVersion",[1095,8637,1146],{"class":1125},[1095,8639,8640],{"class":1139}," autoscaling/v2\n",[1095,8642,8643,8646,8648],{"class":1097,"line":1112},[1095,8644,8645],{"class":8634},"kind",[1095,8647,1146],{"class":1125},[1095,8649,8650],{"class":1139}," HorizontalPodAutoscaler\n",[1095,8652,8653,8656],{"class":1097,"line":1118},[1095,8654,8655],{"class":8634},"metadata",[1095,8657,2837],{"class":1125},[1095,8659,8660,8663,8665],{"class":1097,"line":1132},[1095,8661,8662],{"class":8634},"  name",[1095,8664,1146],{"class":1125},[1095,8666,8667],{"class":1139}," django-hpa\n",[1095,8669,8670,8673,8675],{"class":1097,"line":1151},[1095,8671,8672],{"class":8634},"  namespace",[1095,8674,1146],{"class":1125},[1095,8676,8677],{"class":1139}," production\n",[1095,8679,8680,8683],{"class":1097,"line":1175},[1095,8681,8682],{"class":8634},"spec",[1095,8684,2837],{"class":1125},[1095,8686,8687,8690],{"class":1097,"line":1189},[1095,8688,8689],{"class":8634},"  scaleTargetRef",[1095,8691,2837],{"class":1125},[1095,8693,8694,8697,8699],{"class":1097,"line":1212},[1095,8695,8696],{"class":8634},"    apiVersion",[1095,8698,1146],{"class":1125},[1095,8700,8701],{"class":1139}," apps/v1\n",[1095,8703,8704,8707,8709],{"class":1097,"line":1218},[1095,8705,8706],{"class":8634},"    kind",[1095,8708,1146],{"class":1125},[1095,8710,8711],{"class":1139}," Deployment\n",[1095,8713,8714,8717,8719],{"class":1097,"line":1224},[1095,8715,8716],{"class":8634},"    name",[1095,8718,1146],{"class":1125},[1095,8720,8721],{"class":1139}," django-app\n",[1095,8723,8724,8727,8729],{"class":1097,"line":1230},[1095,8725,8726],{"class":8634},"  minReplicas",[1095,8728,1146],{"class":1125},[1095,8730,8731],{"class":1202}," 3\n",[1095,8733,8734,8737,8739],{"class":1097,"line":1235},[1095,8735,8736],{"class":8634},"  maxReplicas",[1095,8738,1146],{"class":1125},[1095,8740,8741],{"class":1202}," 50\n",[1095,8743,8744,8747],{"class":1097,"line":1241},[1095,8745,8746],{"class":8634},"  metrics",[1095,8748,2837],{"class":1125},[1095,8750,8751],{"class":1097,"line":1259},[1095,8752,8753],{"class":1101},"  # CPU-based scaling\n",[1095,8755,8756,8759,8762,8764],{"class":1097,"line":1264},[1095,8757,8758],{"class":1125},"  -",[1095,8760,8761],{"class":8634}," type",[1095,8763,1146],{"class":1125},[1095,8765,8766],{"class":1139}," Resource\n",[1095,8768,8769,8772],{"class":1097,"line":1270},[1095,8770,8771],{"class":8634},"    resource",[1095,8773,2837],{"class":1125},[1095,8775,8776,8779,8781],{"class":1097,"line":1288},[1095,8777,8778],{"class":8634},"      name",[1095,8780,1146],{"class":1125},[1095,8782,8783],{"class":1139}," cpu\n",[1095,8785,8786,8789],{"class":1097,"line":1293},[1095,8787,8788],{"class":8634},"      target",[1095,8790,2837],{"class":1125},[1095,8792,8793,8796,8798],{"class":1097,"line":1299},[1095,8794,8795],{"class":8634},"        type",[1095,8797,1146],{"class":1125},[1095,8799,8800],{"class":1139}," Utilization\n",[1095,8802,8803,8806,8808],{"class":1097,"line":1309},[1095,8804,8805],{"class":8634},"        averageUtilization",[1095,8807,1146],{"class":1125},[1095,8809,8810],{"class":1202}," 70\n",[1095,8812,8813],{"class":1097,"line":1322},[1095,8814,8815],{"class":2002},"  \n",[1095,8817,8818],{"class":1097,"line":1346},[1095,8819,8820],{"class":1101},"  # Memory-based scaling\n",[1095,8822,8823,8825,8827,8829],{"class":1097,"line":1351},[1095,8824,8758],{"class":1125},[1095,8826,8761],{"class":8634},[1095,8828,1146],{"class":1125},[1095,8830,8766],{"class":1139},[1095,8832,8833,8835],{"class":1097,"line":1356},[1095,8834,8771],{"class":8634},[1095,8836,2837],{"class":1125},[1095,8838,8839,8841,8843],{"class":1097,"line":1361},[1095,8840,8778],{"class":8634},[1095,8842,1146],{"class":1125},[1095,8844,8845],{"class":1139}," memory\n",[1095,8847,8848,8850],{"class":1097,"line":1367},[1095,8849,8788],{"class":8634},[1095,8851,2837],{"class":1125},[1095,8853,8854,8856,8858],{"class":1097,"line":1530},[1095,8855,8795],{"class":8634},[1095,8857,1146],{"class":1125},[1095,8859,8800],{"class":1139},[1095,8861,8862,8864,8866],{"class":1097,"line":1536},[1095,8863,8805],{"class":8634},[1095,8865,1146],{"class":1125},[1095,8867,8868],{"class":1202}," 80\n",[1095,8870,8871],{"class":1097,"line":1542},[1095,8872,8815],{"class":2002},[1095,8874,8875],{"class":1097,"line":1548},[1095,8876,8877],{"class":1101},"  # Custom metrics scaling\n",[1095,8879,8880,8882,8884,8886],{"class":1097,"line":1553},[1095,8881,8758],{"class":1125},[1095,8883,8761],{"class":8634},[1095,8885,1146],{"class":1125},[1095,8887,8888],{"class":1139}," Pods\n",[1095,8890,8891,8894],{"class":1097,"line":1559},[1095,8892,8893],{"class":8634},"    pods",[1095,8895,2837],{"class":1125},[1095,8897,8898,8901],{"class":1097,"line":1565},[1095,8899,8900],{"class":8634},"      metric",[1095,8902,2837],{"class":1125},[1095,8904,8905,8908,8910],{"class":1097,"line":1571},[1095,8906,8907],{"class":8634},"        name",[1095,8909,1146],{"class":1125},[1095,8911,8912],{"class":1139}," django_requests_per_second\n",[1095,8914,8915,8917],{"class":1097,"line":1577},[1095,8916,8788],{"class":8634},[1095,8918,2837],{"class":1125},[1095,8920,8921,8923,8925],{"class":1097,"line":1583},[1095,8922,8795],{"class":8634},[1095,8924,1146],{"class":1125},[1095,8926,8927],{"class":1139}," AverageValue\n",[1095,8929,8930,8933,8935,8938,8940],{"class":1097,"line":1589},[1095,8931,8932],{"class":8634},"        averageValue",[1095,8934,1146],{"class":1125},[1095,8936,8937],{"class":1135}," \"",[1095,8939,6623],{"class":1139},[1095,8941,8942],{"class":1135},"\"\n",[1095,8944,8945],{"class":1097,"line":1595},[1095,8946,8815],{"class":2002},[1095,8948,8949],{"class":1097,"line":1601},[1095,8950,8951],{"class":1101},"  # External metrics (e.g., queue length)\n",[1095,8953,8954,8956,8958,8960],{"class":1097,"line":1607},[1095,8955,8758],{"class":1125},[1095,8957,8761],{"class":8634},[1095,8959,1146],{"class":1125},[1095,8961,8962],{"class":1139}," External\n",[1095,8964,8965,8968],{"class":1097,"line":1612},[1095,8966,8967],{"class":8634},"    external",[1095,8969,2837],{"class":1125},[1095,8971,8972,8974],{"class":1097,"line":1618},[1095,8973,8900],{"class":8634},[1095,8975,2837],{"class":1125},[1095,8977,8978,8980,8982],{"class":1097,"line":1624},[1095,8979,8907],{"class":8634},[1095,8981,1146],{"class":1125},[1095,8983,8984],{"class":1139}," celery_queue_length\n",[1095,8986,8987,8990],{"class":1097,"line":1629},[1095,8988,8989],{"class":8634},"        selector",[1095,8991,2837],{"class":1125},[1095,8993,8994,8997],{"class":1097,"line":1634},[1095,8995,8996],{"class":8634},"          matchLabels",[1095,8998,2837],{"class":1125},[1095,9000,9001,9004,9006,9008,9010],{"class":1097,"line":1640},[1095,9002,9003],{"class":8634},"            queue",[1095,9005,1146],{"class":1125},[1095,9007,8937],{"class":1135},[1095,9009,1140],{"class":1139},[1095,9011,8942],{"class":1135},[1095,9013,9014,9016],{"class":1097,"line":1646},[1095,9015,8788],{"class":8634},[1095,9017,2837],{"class":1125},[1095,9019,9020,9022,9024],{"class":1097,"line":1651},[1095,9021,8795],{"class":8634},[1095,9023,1146],{"class":1125},[1095,9025,9026],{"class":1139}," Value\n",[1095,9028,9029,9032,9034,9036,9039],{"class":1097,"line":1656},[1095,9030,9031],{"class":8634},"        value",[1095,9033,1146],{"class":1125},[1095,9035,8937],{"class":1135},[1095,9037,9038],{"class":1139},"50",[1095,9040,8942],{"class":1135},[1095,9042,9043],{"class":1097,"line":1662},[1095,9044,1109],{"emptyLinePlaceholder":1108},[1095,9046,9047,9050],{"class":1097,"line":1668},[1095,9048,9049],{"class":8634},"  behavior",[1095,9051,2837],{"class":1125},[1095,9053,9054,9057],{"class":1097,"line":1674},[1095,9055,9056],{"class":8634},"    scaleDown",[1095,9058,2837],{"class":1125},[1095,9060,9061,9064,9066],{"class":1097,"line":1680},[1095,9062,9063],{"class":8634},"      stabilizationWindowSeconds",[1095,9065,1146],{"class":1125},[1095,9067,7925],{"class":1202},[1095,9069,9070,9073],{"class":1097,"line":1686},[1095,9071,9072],{"class":8634},"      policies",[1095,9074,2837],{"class":1125},[1095,9076,9077,9080,9082,9084],{"class":1097,"line":1691},[1095,9078,9079],{"class":1125},"      -",[1095,9081,8761],{"class":8634},[1095,9083,1146],{"class":1125},[1095,9085,9086],{"class":1139}," Percent\n",[1095,9088,9089,9091,9093],{"class":1097,"line":1697},[1095,9090,9031],{"class":8634},[1095,9092,1146],{"class":1125},[1095,9094,9095],{"class":1202}," 10\n",[1095,9097,9098,9101,9103],{"class":1097,"line":1703},[1095,9099,9100],{"class":8634},"        periodSeconds",[1095,9102,1146],{"class":1125},[1095,9104,9105],{"class":1202}," 60\n",[1095,9107,9108,9110,9112,9114],{"class":1097,"line":1709},[1095,9109,9079],{"class":1125},[1095,9111,8761],{"class":8634},[1095,9113,1146],{"class":1125},[1095,9115,8888],{"class":1139},[1095,9117,9118,9120,9122],{"class":1097,"line":1715},[1095,9119,9031],{"class":8634},[1095,9121,1146],{"class":1125},[1095,9123,9124],{"class":1202}," 2\n",[1095,9126,9127,9129,9131],{"class":1097,"line":1720},[1095,9128,9100],{"class":8634},[1095,9130,1146],{"class":1125},[1095,9132,9105],{"class":1202},[1095,9134,9135,9138,9140],{"class":1097,"line":1725},[1095,9136,9137],{"class":8634},"      selectPolicy",[1095,9139,1146],{"class":1125},[1095,9141,9142],{"class":1139}," Min\n",[1095,9144,9145,9148],{"class":1097,"line":1731},[1095,9146,9147],{"class":8634},"    scaleUp",[1095,9149,2837],{"class":1125},[1095,9151,9152,9154,9156],{"class":1097,"line":1737},[1095,9153,9063],{"class":8634},[1095,9155,1146],{"class":1125},[1095,9157,9105],{"class":1202},[1095,9159,9160,9162],{"class":1097,"line":1743},[1095,9161,9072],{"class":8634},[1095,9163,2837],{"class":1125},[1095,9165,9166,9168,9170,9172],{"class":1097,"line":1748},[1095,9167,9079],{"class":1125},[1095,9169,8761],{"class":8634},[1095,9171,1146],{"class":1125},[1095,9173,9086],{"class":1139},[1095,9175,9176,9178,9180],{"class":1097,"line":1753},[1095,9177,9031],{"class":8634},[1095,9179,1146],{"class":1125},[1095,9181,8741],{"class":1202},[1095,9183,9184,9186,9188],{"class":1097,"line":1758},[1095,9185,9100],{"class":8634},[1095,9187,1146],{"class":1125},[1095,9189,9105],{"class":1202},[1095,9191,9192,9194,9196,9198],{"class":1097,"line":1763},[1095,9193,9079],{"class":1125},[1095,9195,8761],{"class":8634},[1095,9197,1146],{"class":1125},[1095,9199,8888],{"class":1139},[1095,9201,9202,9204,9206],{"class":1097,"line":1769},[1095,9203,9031],{"class":8634},[1095,9205,1146],{"class":1125},[1095,9207,9208],{"class":1202}," 5\n",[1095,9210,9211,9213,9215],{"class":1097,"line":1775},[1095,9212,9100],{"class":8634},[1095,9214,1146],{"class":1125},[1095,9216,9105],{"class":1202},[1095,9218,9219,9221,9223],{"class":1097,"line":1780},[1095,9220,9137],{"class":8634},[1095,9222,1146],{"class":1125},[1095,9224,9225],{"class":1139}," Max\n",[1095,9227,9228],{"class":1097,"line":1785},[1095,9229,1109],{"emptyLinePlaceholder":1108},[1095,9231,9232],{"class":1097,"line":1790},[1095,9233,9234],{"class":5522},"---\n",[1095,9236,9237],{"class":1097,"line":1796},[1095,9238,9239],{"class":1101},"# Vertical Pod Autoscaler\n",[1095,9241,9242,9244,9246],{"class":1097,"line":1802},[1095,9243,8635],{"class":8634},[1095,9245,1146],{"class":1125},[1095,9247,9248],{"class":1139}," autoscaling.k8s.io/v1\n",[1095,9250,9251,9253,9255],{"class":1097,"line":1808},[1095,9252,8645],{"class":8634},[1095,9254,1146],{"class":1125},[1095,9256,9257],{"class":1139}," VerticalPodAutoscaler\n",[1095,9259,9260,9262],{"class":1097,"line":1813},[1095,9261,8655],{"class":8634},[1095,9263,2837],{"class":1125},[1095,9265,9266,9268,9270],{"class":1097,"line":1819},[1095,9267,8662],{"class":8634},[1095,9269,1146],{"class":1125},[1095,9271,9272],{"class":1139}," django-vpa\n",[1095,9274,9275,9277],{"class":1097,"line":1825},[1095,9276,8682],{"class":8634},[1095,9278,2837],{"class":1125},[1095,9280,9281,9284],{"class":1097,"line":1831},[1095,9282,9283],{"class":8634},"  targetRef",[1095,9285,2837],{"class":1125},[1095,9287,9288,9290,9292],{"class":1097,"line":1837},[1095,9289,8696],{"class":8634},[1095,9291,1146],{"class":1125},[1095,9293,8701],{"class":1139},[1095,9295,9296,9298,9300],{"class":1097,"line":1842},[1095,9297,8706],{"class":8634},[1095,9299,1146],{"class":1125},[1095,9301,8711],{"class":1139},[1095,9303,9304,9306,9308],{"class":1097,"line":1848},[1095,9305,8716],{"class":8634},[1095,9307,1146],{"class":1125},[1095,9309,8721],{"class":1139},[1095,9311,9312,9315],{"class":1097,"line":1854},[1095,9313,9314],{"class":8634},"  updatePolicy",[1095,9316,2837],{"class":1125},[1095,9318,9319,9322,9324,9326,9329],{"class":1097,"line":1860},[1095,9320,9321],{"class":8634},"    updateMode",[1095,9323,1146],{"class":1125},[1095,9325,8937],{"class":1135},[1095,9327,9328],{"class":1139},"Auto",[1095,9330,8942],{"class":1135},[1095,9332,9333,9336],{"class":1097,"line":1866},[1095,9334,9335],{"class":8634},"  resourcePolicy",[1095,9337,2837],{"class":1125},[1095,9339,9340,9343],{"class":1097,"line":1872},[1095,9341,9342],{"class":8634},"    containerPolicies",[1095,9344,2837],{"class":1125},[1095,9346,9347,9350,9353,9355],{"class":1097,"line":1877},[1095,9348,9349],{"class":1125},"    -",[1095,9351,9352],{"class":8634}," containerName",[1095,9354,1146],{"class":1125},[1095,9356,9357],{"class":1139}," django\n",[1095,9359,9360,9363],{"class":1097,"line":1882},[1095,9361,9362],{"class":8634},"      minAllowed",[1095,9364,2837],{"class":1125},[1095,9366,9367,9370,9372],{"class":1097,"line":1888},[1095,9368,9369],{"class":8634},"        cpu",[1095,9371,1146],{"class":1125},[1095,9373,9374],{"class":1139}," 100m\n",[1095,9376,9377,9380,9382],{"class":1097,"line":1894},[1095,9378,9379],{"class":8634},"        memory",[1095,9381,1146],{"class":1125},[1095,9383,9384],{"class":1139}," 128Mi\n",[1095,9386,9387,9390],{"class":1097,"line":1899},[1095,9388,9389],{"class":8634},"      maxAllowed",[1095,9391,2837],{"class":1125},[1095,9393,9394,9396,9398],{"class":1097,"line":1905},[1095,9395,9369],{"class":8634},[1095,9397,1146],{"class":1125},[1095,9399,9124],{"class":1202},[1095,9401,9402,9404,9406],{"class":1097,"line":1910},[1095,9403,9379],{"class":8634},[1095,9405,1146],{"class":1125},[1095,9407,9408],{"class":1139}," 2Gi\n",[1095,9410,9411,9414,9416,9418,9421,9424,9426,9428,9430,9433,9435],{"class":1097,"line":1916},[1095,9412,9413],{"class":8634},"      controlledResources",[1095,9415,1146],{"class":1125},[1095,9417,2793],{"class":1125},[1095,9419,9420],{"class":1135},"\"",[1095,9422,9423],{"class":1139},"cpu",[1095,9425,9420],{"class":1135},[1095,9427,1206],{"class":1125},[1095,9429,8937],{"class":1135},[1095,9431,9432],{"class":1139},"memory",[1095,9434,9420],{"class":1135},[1095,9436,2803],{"class":1125},[1035,9438,9440],{"id":9439},"custom-metrics-for-scaling","Custom Metrics for Scaling",[1085,9442,9444],{"className":1087,"code":9443,"language":1089,"meta":1090,"style":1090},"# monitoring/metrics.py\nimport time\nimport threading\nfrom collections import defaultdict, deque\nfrom django.core.cache import cache\nfrom django.db import connection\nimport psutil\n\nclass ScalingMetricsCollector:\n    \"\"\"Collect metrics for auto-scaling decisions\"\"\"\n    \n    def __init__(self):\n        self.request_times = deque(maxlen=1000)\n        self.request_count = defaultdict(int)\n        self.error_count = defaultdict(int)\n        self.active_connections = 0\n        self.lock = threading.Lock()\n    \n    def record_request(self, response_time, status_code, endpoint):\n        \"\"\"Record request metrics\"\"\"\n        with self.lock:\n            current_minute = int(time.time() // 60)\n            \n            self.request_times.append(response_time)\n            self.request_count[current_minute] += 1\n            \n            if status_code >= 400:\n                self.error_count[current_minute] += 1\n    \n    def get_scaling_metrics(self):\n        \"\"\"Get current metrics for scaling decisions\"\"\"\n        with self.lock:\n            current_minute = int(time.time() // 60)\n            \n            # Request rate (requests per minute)\n            request_rate = self.request_count.get(current_minute, 0)\n            \n            # Average response time\n            avg_response_time = (\n                sum(self.request_times) / len(self.request_times)\n                if self.request_times else 0\n            )\n            \n            # Error rate\n            total_requests = self.request_count.get(current_minute, 0)\n            error_rate = (\n                self.error_count.get(current_minute, 0) / total_requests\n                if total_requests > 0 else 0\n            )\n            \n            # System metrics\n            cpu_percent = psutil.cpu_percent(interval=1)\n            memory_percent = psutil.virtual_memory().percent\n            \n            # Database connections\n            db_connections = self.get_db_connection_count()\n            \n            # Cache hit rate\n            cache_stats = self.get_cache_stats()\n            \n            return {\n                'timestamp': time.time(),\n                'request_rate': request_rate,\n                'avg_response_time': avg_response_time,\n                'error_rate': error_rate,\n                'cpu_percent': cpu_percent,\n                'memory_percent': memory_percent,\n                'db_connections': db_connections,\n                'cache_hit_rate': cache_stats.get('hit_rate', 0),\n                'active_users': self.get_active_user_count(),\n            }\n    \n    def get_db_connection_count(self):\n        \"\"\"Get current database connection count\"\"\"\n        try:\n            with connection.cursor() as cursor:\n                cursor.execute(\n                    \"SELECT count(*) FROM pg_stat_activity WHERE state = 'active'\"\n                )\n                return cursor.fetchone()[0]\n        except Exception:\n            return 0\n    \n    def get_cache_stats(self):\n        \"\"\"Get cache statistics\"\"\"\n        try:\n            # Redis cache stats\n            from django_redis import get_redis_connection\n            redis_conn = get_redis_connection(\"default\")\n            info = redis_conn.info()\n            \n            hits = info.get('keyspace_hits', 0)\n            misses = info.get('keyspace_misses', 0)\n            total = hits + misses\n            \n            return {\n                'hits': hits,\n                'misses': misses,\n                'hit_rate': hits / total if total > 0 else 0,\n            }\n        except Exception:\n            return {'hit_rate': 0}\n    \n    def get_active_user_count(self):\n        \"\"\"Get count of active users\"\"\"\n        try:\n            # Count active sessions\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            return active_sessions\n        except Exception:\n            return 0\n    \n    def should_scale_up(self):\n        \"\"\"Determine if scaling up is needed\"\"\"\n        metrics = self.get_scaling_metrics()\n        \n        # Scale up conditions\n        conditions = [\n            metrics['cpu_percent'] > 80,\n            metrics['memory_percent'] > 85,\n            metrics['avg_response_time'] > 2.0,\n            metrics['error_rate'] > 0.05,\n            metrics['request_rate'] > 1000,\n            metrics['db_connections'] > 80,\n        ]\n        \n        # Scale up if any 2 conditions are met\n        return sum(conditions) >= 2\n    \n    def should_scale_down(self):\n        \"\"\"Determine if scaling down is possible\"\"\"\n        metrics = self.get_scaling_metrics()\n        \n        # Scale down conditions (all must be met)\n        conditions = [\n            metrics['cpu_percent'] \u003C 30,\n            metrics['memory_percent'] \u003C 40,\n            metrics['avg_response_time'] \u003C 0.5,\n            metrics['error_rate'] \u003C 0.01,\n            metrics['request_rate'] \u003C 100,\n        ]\n        \n        return all(conditions)\n\n# Global metrics collector\nscaling_metrics = ScalingMetricsCollector()\n\n# Middleware to collect metrics\nclass ScalingMetricsMiddleware:\n    \"\"\"Middleware to collect scaling 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        response = self.get_response(request)\n        \n        response_time = time.time() - start_time\n        scaling_metrics.record_request(\n            response_time=response_time,\n            status_code=response.status_code,\n            endpoint=request.path\n        )\n        \n        return response\n",[1092,9445,9446,9451,9457,9464,9481,9500,9516,9523,9527,9536,9545,9549,9561,9587,9607,9626,9640,9661,9665,9693,9702,9715,9744,9749,9769,9791,9795,9810,9829,9833,9846,9855,9867,9891,9895,9900,9927,9931,9936,9946,9977,9993,9998,10002,10007,10034,10043,10070,10086,10090,10094,10099,10125,10144,10148,10153,10169,10173,10178,10194,10198,10204,10225,10241,10257,10273,10288,10304,10320,10353,10373,10377,10381,10394,10403,10410,10433,10445,10455,10460,10479,10489,10495,10499,10512,10521,10527,10532,10545,10565,10582,10586,10615,10643,10659,10663,10669,10685,10701,10734,10738,10746,10764,10768,10781,10790,10796,10801,10824,10840,10844,10864,10881,10891,10895,10902,10910,10916,10920,10933,10942,10958,10962,10967,10976,10999,11020,11041,11062,11082,11102,11106,11110,11115,11134,11138,11151,11160,11174,11178,11183,11191,11213,11234,11255,11276,11297,11301,11305,11318,11322,11327,11339,11344,11350,11360,11370,11375,11393,11408,11413,11432,11448,11453,11473,11478,11500,11513,11525,11543,11558,11563,11568],{"__ignoreMap":1090},[1095,9447,9448],{"class":1097,"line":1098},[1095,9449,9450],{"class":1101},"# monitoring/metrics.py\n",[1095,9452,9453,9455],{"class":1097,"line":1105},[1095,9454,1999],{"class":1998},[1095,9456,5506],{"class":2002},[1095,9458,9459,9461],{"class":1097,"line":1112},[1095,9460,1999],{"class":1998},[1095,9462,9463],{"class":2002}," threading\n",[1095,9465,9466,9468,9471,9473,9476,9478],{"class":1097,"line":1118},[1095,9467,5451],{"class":1998},[1095,9469,9470],{"class":2002}," collections ",[1095,9472,1999],{"class":1998},[1095,9474,9475],{"class":2002}," defaultdict",[1095,9477,1206],{"class":1125},[1095,9479,9480],{"class":2002}," deque\n",[1095,9482,9483,9485,9487,9489,9491,9493,9495,9497],{"class":1097,"line":1132},[1095,9484,5451],{"class":1998},[1095,9486,5454],{"class":2002},[1095,9488,2067],{"class":1125},[1095,9490,5459],{"class":2002},[1095,9492,2067],{"class":1125},[1095,9494,5494],{"class":2002},[1095,9496,1999],{"class":1998},[1095,9498,9499],{"class":2002}," cache\n",[1095,9501,9502,9504,9506,9508,9511,9513],{"class":1097,"line":1151},[1095,9503,5451],{"class":1998},[1095,9505,5454],{"class":2002},[1095,9507,2067],{"class":1125},[1095,9509,9510],{"class":2002},"db ",[1095,9512,1999],{"class":1998},[1095,9514,9515],{"class":2002}," connection\n",[1095,9517,9518,9520],{"class":1097,"line":1175},[1095,9519,1999],{"class":1998},[1095,9521,9522],{"class":2002}," psutil\n",[1095,9524,9525],{"class":1097,"line":1189},[1095,9526,1109],{"emptyLinePlaceholder":1108},[1095,9528,9529,9531,9534],{"class":1097,"line":1212},[1095,9530,2830],{"class":2829},[1095,9532,9533],{"class":2833}," ScalingMetricsCollector",[1095,9535,2837],{"class":1125},[1095,9537,9538,9540,9543],{"class":1097,"line":1218},[1095,9539,6196],{"class":2842},[1095,9541,9542],{"class":2848},"Collect metrics for auto-scaling decisions",[1095,9544,2949],{"class":2842},[1095,9546,9547],{"class":1097,"line":1224},[1095,9548,1432],{"class":2002},[1095,9550,9551,9553,9555,9557,9559],{"class":1097,"line":1230},[1095,9552,2862],{"class":2829},[1095,9554,2866],{"class":2865},[1095,9556,2080],{"class":1125},[1095,9558,2872],{"class":2871},[1095,9560,2875],{"class":1125},[1095,9562,9563,9565,9567,9570,9572,9575,9577,9580,9582,9585],{"class":1097,"line":1235},[1095,9564,2880],{"class":1121},[1095,9566,2067],{"class":1125},[1095,9568,9569],{"class":2070},"request_times",[1095,9571,1126],{"class":1125},[1095,9573,9574],{"class":2076}," deque",[1095,9576,2080],{"class":1125},[1095,9578,9579],{"class":3612},"maxlen",[1095,9581,3134],{"class":1125},[1095,9583,9584],{"class":1202},"1000",[1095,9586,3037],{"class":1125},[1095,9588,9589,9591,9593,9596,9598,9600,9602,9605],{"class":1097,"line":1241},[1095,9590,2880],{"class":1121},[1095,9592,2067],{"class":1125},[1095,9594,9595],{"class":2070},"request_count",[1095,9597,1126],{"class":1125},[1095,9599,9475],{"class":2076},[1095,9601,2080],{"class":1125},[1095,9603,9604],{"class":3422},"int",[1095,9606,3037],{"class":1125},[1095,9608,9609,9611,9613,9616,9618,9620,9622,9624],{"class":1097,"line":1259},[1095,9610,2880],{"class":1121},[1095,9612,2067],{"class":1125},[1095,9614,9615],{"class":2070},"error_count",[1095,9617,1126],{"class":1125},[1095,9619,9475],{"class":2076},[1095,9621,2080],{"class":1125},[1095,9623,9604],{"class":3422},[1095,9625,3037],{"class":1125},[1095,9627,9628,9630,9632,9635,9637],{"class":1097,"line":1264},[1095,9629,2880],{"class":1121},[1095,9631,2067],{"class":1125},[1095,9633,9634],{"class":2070},"active_connections",[1095,9636,1126],{"class":1125},[1095,9638,9639],{"class":1202}," 0\n",[1095,9641,9642,9644,9646,9649,9651,9654,9656,9659],{"class":1097,"line":1270},[1095,9643,2880],{"class":1121},[1095,9645,2067],{"class":1125},[1095,9647,9648],{"class":2070},"lock",[1095,9650,1126],{"class":1125},[1095,9652,9653],{"class":2002}," threading",[1095,9655,2067],{"class":1125},[1095,9657,9658],{"class":2076},"Lock",[1095,9660,3426],{"class":1125},[1095,9662,9663],{"class":1097,"line":1288},[1095,9664,1432],{"class":2002},[1095,9666,9667,9669,9672,9674,9676,9678,9681,9683,9686,9688,9691],{"class":1097,"line":1293},[1095,9668,2862],{"class":2829},[1095,9670,9671],{"class":2916}," record_request",[1095,9673,2080],{"class":1125},[1095,9675,2872],{"class":2871},[1095,9677,1206],{"class":1125},[1095,9679,9680],{"class":2926}," response_time",[1095,9682,1206],{"class":1125},[1095,9684,9685],{"class":2926}," status_code",[1095,9687,1206],{"class":1125},[1095,9689,9690],{"class":2926}," endpoint",[1095,9692,2875],{"class":1125},[1095,9694,9695,9697,9700],{"class":1097,"line":1299},[1095,9696,2943],{"class":2842},[1095,9698,9699],{"class":2848},"Record request metrics",[1095,9701,2949],{"class":2842},[1095,9703,9704,9707,9709,9711,9713],{"class":1097,"line":1309},[1095,9705,9706],{"class":1998},"        with",[1095,9708,3478],{"class":1121},[1095,9710,2067],{"class":1125},[1095,9712,9648],{"class":2070},[1095,9714,2837],{"class":1125},[1095,9716,9717,9720,9722,9725,9727,9730,9732,9734,9737,9740,9742],{"class":1097,"line":1322},[1095,9718,9719],{"class":2002},"            current_minute ",[1095,9721,3134],{"class":1125},[1095,9723,9724],{"class":3422}," int",[1095,9726,2080],{"class":1125},[1095,9728,9729],{"class":2076},"time",[1095,9731,2067],{"class":1125},[1095,9733,9729],{"class":2076},[1095,9735,9736],{"class":1125},"()",[1095,9738,9739],{"class":2932}," //",[1095,9741,4603],{"class":1202},[1095,9743,3037],{"class":1125},[1095,9745,9746],{"class":1097,"line":1346},[1095,9747,9748],{"class":2002},"            \n",[1095,9750,9751,9753,9755,9757,9759,9762,9764,9767],{"class":1097,"line":1351},[1095,9752,5833],{"class":1121},[1095,9754,2067],{"class":1125},[1095,9756,9569],{"class":2070},[1095,9758,2067],{"class":1125},[1095,9760,9761],{"class":2076},"append",[1095,9763,2080],{"class":1125},[1095,9765,9766],{"class":2076},"response_time",[1095,9768,3037],{"class":1125},[1095,9770,9771,9773,9775,9777,9779,9782,9785,9788],{"class":1097,"line":1356},[1095,9772,5833],{"class":1121},[1095,9774,2067],{"class":1125},[1095,9776,9595],{"class":2070},[1095,9778,5603],{"class":1125},[1095,9780,9781],{"class":2070},"current_minute",[1095,9783,9784],{"class":1125},"]",[1095,9786,9787],{"class":1125}," +=",[1095,9789,9790],{"class":1202}," 1\n",[1095,9792,9793],{"class":1097,"line":1361},[1095,9794,9748],{"class":2002},[1095,9796,9797,9799,9802,9805,9808],{"class":1097,"line":1367},[1095,9798,3490],{"class":1998},[1095,9800,9801],{"class":2002}," status_code ",[1095,9803,9804],{"class":2932},">=",[1095,9806,9807],{"class":1202}," 400",[1095,9809,2837],{"class":1125},[1095,9811,9812,9815,9817,9819,9821,9823,9825,9827],{"class":1097,"line":1530},[1095,9813,9814],{"class":1121},"                self",[1095,9816,2067],{"class":1125},[1095,9818,9615],{"class":2070},[1095,9820,5603],{"class":1125},[1095,9822,9781],{"class":2070},[1095,9824,9784],{"class":1125},[1095,9826,9787],{"class":1125},[1095,9828,9790],{"class":1202},[1095,9830,9831],{"class":1097,"line":1536},[1095,9832,1432],{"class":2002},[1095,9834,9835,9837,9840,9842,9844],{"class":1097,"line":1542},[1095,9836,2862],{"class":2829},[1095,9838,9839],{"class":2916}," get_scaling_metrics",[1095,9841,2080],{"class":1125},[1095,9843,2872],{"class":2871},[1095,9845,2875],{"class":1125},[1095,9847,9848,9850,9853],{"class":1097,"line":1548},[1095,9849,2943],{"class":2842},[1095,9851,9852],{"class":2848},"Get current metrics for scaling decisions",[1095,9854,2949],{"class":2842},[1095,9856,9857,9859,9861,9863,9865],{"class":1097,"line":1553},[1095,9858,9706],{"class":1998},[1095,9860,3478],{"class":1121},[1095,9862,2067],{"class":1125},[1095,9864,9648],{"class":2070},[1095,9866,2837],{"class":1125},[1095,9868,9869,9871,9873,9875,9877,9879,9881,9883,9885,9887,9889],{"class":1097,"line":1559},[1095,9870,9719],{"class":2002},[1095,9872,3134],{"class":1125},[1095,9874,9724],{"class":3422},[1095,9876,2080],{"class":1125},[1095,9878,9729],{"class":2076},[1095,9880,2067],{"class":1125},[1095,9882,9729],{"class":2076},[1095,9884,9736],{"class":1125},[1095,9886,9739],{"class":2932},[1095,9888,4603],{"class":1202},[1095,9890,3037],{"class":1125},[1095,9892,9893],{"class":1097,"line":1565},[1095,9894,9748],{"class":2002},[1095,9896,9897],{"class":1097,"line":1571},[1095,9898,9899],{"class":1101},"            # Request rate (requests per minute)\n",[1095,9901,9902,9905,9907,9909,9911,9913,9915,9917,9919,9921,9923,9925],{"class":1097,"line":1577},[1095,9903,9904],{"class":2002},"            request_rate ",[1095,9906,3134],{"class":1125},[1095,9908,3478],{"class":1121},[1095,9910,2067],{"class":1125},[1095,9912,9595],{"class":2070},[1095,9914,2067],{"class":1125},[1095,9916,2077],{"class":2076},[1095,9918,2080],{"class":1125},[1095,9920,9781],{"class":2076},[1095,9922,1206],{"class":1125},[1095,9924,4201],{"class":1202},[1095,9926,3037],{"class":1125},[1095,9928,9929],{"class":1097,"line":1583},[1095,9930,9748],{"class":2002},[1095,9932,9933],{"class":1097,"line":1589},[1095,9934,9935],{"class":1101},"            # Average response time\n",[1095,9937,9938,9941,9943],{"class":1097,"line":1595},[1095,9939,9940],{"class":2002},"            avg_response_time ",[1095,9942,3134],{"class":1125},[1095,9944,9945],{"class":1125}," (\n",[1095,9947,9948,9951,9953,9955,9957,9959,9961,9964,9967,9969,9971,9973,9975],{"class":1097,"line":1601},[1095,9949,9950],{"class":2865},"                sum",[1095,9952,2080],{"class":1125},[1095,9954,2872],{"class":1121},[1095,9956,2067],{"class":1125},[1095,9958,9569],{"class":2070},[1095,9960,3580],{"class":1125},[1095,9962,9963],{"class":2932}," /",[1095,9965,9966],{"class":2865}," len",[1095,9968,2080],{"class":1125},[1095,9970,2872],{"class":1121},[1095,9972,2067],{"class":1125},[1095,9974,9569],{"class":2070},[1095,9976,3037],{"class":1125},[1095,9978,9979,9982,9984,9986,9988,9991],{"class":1097,"line":1607},[1095,9980,9981],{"class":1998},"                if",[1095,9983,3478],{"class":1121},[1095,9985,2067],{"class":1125},[1095,9987,9569],{"class":2070},[1095,9989,9990],{"class":1998}," else",[1095,9992,9639],{"class":1202},[1095,9994,9995],{"class":1097,"line":1612},[1095,9996,9997],{"class":1125},"            )\n",[1095,9999,10000],{"class":1097,"line":1618},[1095,10001,9748],{"class":2002},[1095,10003,10004],{"class":1097,"line":1624},[1095,10005,10006],{"class":1101},"            # Error rate\n",[1095,10008,10009,10012,10014,10016,10018,10020,10022,10024,10026,10028,10030,10032],{"class":1097,"line":1629},[1095,10010,10011],{"class":2002},"            total_requests ",[1095,10013,3134],{"class":1125},[1095,10015,3478],{"class":1121},[1095,10017,2067],{"class":1125},[1095,10019,9595],{"class":2070},[1095,10021,2067],{"class":1125},[1095,10023,2077],{"class":2076},[1095,10025,2080],{"class":1125},[1095,10027,9781],{"class":2076},[1095,10029,1206],{"class":1125},[1095,10031,4201],{"class":1202},[1095,10033,3037],{"class":1125},[1095,10035,10036,10039,10041],{"class":1097,"line":1634},[1095,10037,10038],{"class":2002},"            error_rate ",[1095,10040,3134],{"class":1125},[1095,10042,9945],{"class":1125},[1095,10044,10045,10047,10049,10051,10053,10055,10057,10059,10061,10063,10065,10067],{"class":1097,"line":1640},[1095,10046,9814],{"class":1121},[1095,10048,2067],{"class":1125},[1095,10050,9615],{"class":2070},[1095,10052,2067],{"class":1125},[1095,10054,2077],{"class":2076},[1095,10056,2080],{"class":1125},[1095,10058,9781],{"class":2076},[1095,10060,1206],{"class":1125},[1095,10062,4201],{"class":1202},[1095,10064,3580],{"class":1125},[1095,10066,9963],{"class":2932},[1095,10068,10069],{"class":2002}," total_requests\n",[1095,10071,10072,10074,10077,10080,10082,10084],{"class":1097,"line":1646},[1095,10073,9981],{"class":1998},[1095,10075,10076],{"class":2002}," total_requests ",[1095,10078,10079],{"class":2932},">",[1095,10081,4201],{"class":1202},[1095,10083,9990],{"class":1998},[1095,10085,9639],{"class":1202},[1095,10087,10088],{"class":1097,"line":1651},[1095,10089,9997],{"class":1125},[1095,10091,10092],{"class":1097,"line":1656},[1095,10093,9748],{"class":2002},[1095,10095,10096],{"class":1097,"line":1662},[1095,10097,10098],{"class":1101},"            # System metrics\n",[1095,10100,10101,10104,10106,10109,10111,10114,10116,10119,10121,10123],{"class":1097,"line":1668},[1095,10102,10103],{"class":2002},"            cpu_percent ",[1095,10105,3134],{"class":1125},[1095,10107,10108],{"class":2002}," psutil",[1095,10110,2067],{"class":1125},[1095,10112,10113],{"class":2076},"cpu_percent",[1095,10115,2080],{"class":1125},[1095,10117,10118],{"class":3612},"interval",[1095,10120,3134],{"class":1125},[1095,10122,7407],{"class":1202},[1095,10124,3037],{"class":1125},[1095,10126,10127,10130,10132,10134,10136,10139,10141],{"class":1097,"line":1674},[1095,10128,10129],{"class":2002},"            memory_percent ",[1095,10131,3134],{"class":1125},[1095,10133,10108],{"class":2002},[1095,10135,2067],{"class":1125},[1095,10137,10138],{"class":2076},"virtual_memory",[1095,10140,5572],{"class":1125},[1095,10142,10143],{"class":2070},"percent\n",[1095,10145,10146],{"class":1097,"line":1680},[1095,10147,9748],{"class":2002},[1095,10149,10150],{"class":1097,"line":1686},[1095,10151,10152],{"class":1101},"            # Database connections\n",[1095,10154,10155,10158,10160,10162,10164,10167],{"class":1097,"line":1691},[1095,10156,10157],{"class":2002},"            db_connections ",[1095,10159,3134],{"class":1125},[1095,10161,3478],{"class":1121},[1095,10163,2067],{"class":1125},[1095,10165,10166],{"class":2076},"get_db_connection_count",[1095,10168,3426],{"class":1125},[1095,10170,10171],{"class":1097,"line":1697},[1095,10172,9748],{"class":2002},[1095,10174,10175],{"class":1097,"line":1703},[1095,10176,10177],{"class":1101},"            # Cache hit rate\n",[1095,10179,10180,10183,10185,10187,10189,10192],{"class":1097,"line":1709},[1095,10181,10182],{"class":2002},"            cache_stats ",[1095,10184,3134],{"class":1125},[1095,10186,3478],{"class":1121},[1095,10188,2067],{"class":1125},[1095,10190,10191],{"class":2076},"get_cache_stats",[1095,10193,3426],{"class":1125},[1095,10195,10196],{"class":1097,"line":1715},[1095,10197,9748],{"class":2002},[1095,10199,10200,10202],{"class":1097,"line":1720},[1095,10201,2995],{"class":1998},[1095,10203,1129],{"class":1125},[1095,10205,10206,10208,10211,10213,10215,10218,10220,10222],{"class":1097,"line":1725},[1095,10207,4889],{"class":1135},[1095,10209,10210],{"class":1139},"timestamp",[1095,10212,1143],{"class":1135},[1095,10214,1146],{"class":1125},[1095,10216,10217],{"class":2002}," time",[1095,10219,2067],{"class":1125},[1095,10221,9729],{"class":2076},[1095,10223,10224],{"class":1125},"(),\n",[1095,10226,10227,10229,10232,10234,10236,10239],{"class":1097,"line":1731},[1095,10228,4889],{"class":1135},[1095,10230,10231],{"class":1139},"request_rate",[1095,10233,1143],{"class":1135},[1095,10235,1146],{"class":1125},[1095,10237,10238],{"class":2002}," request_rate",[1095,10240,1172],{"class":1125},[1095,10242,10243,10245,10248,10250,10252,10255],{"class":1097,"line":1737},[1095,10244,4889],{"class":1135},[1095,10246,10247],{"class":1139},"avg_response_time",[1095,10249,1143],{"class":1135},[1095,10251,1146],{"class":1125},[1095,10253,10254],{"class":2002}," avg_response_time",[1095,10256,1172],{"class":1125},[1095,10258,10259,10261,10264,10266,10268,10271],{"class":1097,"line":1743},[1095,10260,4889],{"class":1135},[1095,10262,10263],{"class":1139},"error_rate",[1095,10265,1143],{"class":1135},[1095,10267,1146],{"class":1125},[1095,10269,10270],{"class":2002}," error_rate",[1095,10272,1172],{"class":1125},[1095,10274,10275,10277,10279,10281,10283,10286],{"class":1097,"line":1748},[1095,10276,4889],{"class":1135},[1095,10278,10113],{"class":1139},[1095,10280,1143],{"class":1135},[1095,10282,1146],{"class":1125},[1095,10284,10285],{"class":2002}," cpu_percent",[1095,10287,1172],{"class":1125},[1095,10289,10290,10292,10295,10297,10299,10302],{"class":1097,"line":1753},[1095,10291,4889],{"class":1135},[1095,10293,10294],{"class":1139},"memory_percent",[1095,10296,1143],{"class":1135},[1095,10298,1146],{"class":1125},[1095,10300,10301],{"class":2002}," memory_percent",[1095,10303,1172],{"class":1125},[1095,10305,10306,10308,10311,10313,10315,10318],{"class":1097,"line":1758},[1095,10307,4889],{"class":1135},[1095,10309,10310],{"class":1139},"db_connections",[1095,10312,1143],{"class":1135},[1095,10314,1146],{"class":1125},[1095,10316,10317],{"class":2002}," db_connections",[1095,10319,1172],{"class":1125},[1095,10321,10322,10324,10327,10329,10331,10334,10336,10338,10340,10342,10345,10347,10349,10351],{"class":1097,"line":1763},[1095,10323,4889],{"class":1135},[1095,10325,10326],{"class":1139},"cache_hit_rate",[1095,10328,1143],{"class":1135},[1095,10330,1146],{"class":1125},[1095,10332,10333],{"class":2002}," cache_stats",[1095,10335,2067],{"class":1125},[1095,10337,2077],{"class":2076},[1095,10339,2080],{"class":1125},[1095,10341,1143],{"class":1135},[1095,10343,10344],{"class":1139},"hit_rate",[1095,10346,1143],{"class":1135},[1095,10348,1206],{"class":1125},[1095,10350,4201],{"class":1202},[1095,10352,2090],{"class":1125},[1095,10354,10355,10357,10360,10362,10364,10366,10368,10371],{"class":1097,"line":1769},[1095,10356,4889],{"class":1135},[1095,10358,10359],{"class":1139},"active_users",[1095,10361,1143],{"class":1135},[1095,10363,1146],{"class":1125},[1095,10365,3478],{"class":1121},[1095,10367,2067],{"class":1125},[1095,10369,10370],{"class":2076},"get_active_user_count",[1095,10372,10224],{"class":1125},[1095,10374,10375],{"class":1097,"line":1775},[1095,10376,6490],{"class":1125},[1095,10378,10379],{"class":1097,"line":1780},[1095,10380,1432],{"class":2002},[1095,10382,10383,10385,10388,10390,10392],{"class":1097,"line":1785},[1095,10384,2862],{"class":2829},[1095,10386,10387],{"class":2916}," get_db_connection_count",[1095,10389,2080],{"class":1125},[1095,10391,2872],{"class":2871},[1095,10393,2875],{"class":1125},[1095,10395,10396,10398,10401],{"class":1097,"line":1790},[1095,10397,2943],{"class":2842},[1095,10399,10400],{"class":2848},"Get current database connection count",[1095,10402,2949],{"class":2842},[1095,10404,10405,10408],{"class":1097,"line":1796},[1095,10406,10407],{"class":1998},"        try",[1095,10409,2837],{"class":1125},[1095,10411,10412,10415,10418,10420,10423,10425,10428,10431],{"class":1097,"line":1802},[1095,10413,10414],{"class":1998},"            with",[1095,10416,10417],{"class":2002}," connection",[1095,10419,2067],{"class":1125},[1095,10421,10422],{"class":2076},"cursor",[1095,10424,9736],{"class":1125},[1095,10426,10427],{"class":1998}," as",[1095,10429,10430],{"class":2002}," cursor",[1095,10432,2837],{"class":1125},[1095,10434,10435,10438,10440,10443],{"class":1097,"line":1808},[1095,10436,10437],{"class":2002},"                cursor",[1095,10439,2067],{"class":1125},[1095,10441,10442],{"class":2076},"execute",[1095,10444,6590],{"class":1125},[1095,10446,10447,10450,10453],{"class":1097,"line":1813},[1095,10448,10449],{"class":1135},"                    \"",[1095,10451,10452],{"class":1139},"SELECT count(*) FROM pg_stat_activity WHERE state = 'active'",[1095,10454,8942],{"class":1135},[1095,10456,10457],{"class":1097,"line":1819},[1095,10458,10459],{"class":1125},"                )\n",[1095,10461,10462,10465,10467,10469,10472,10475,10477],{"class":1097,"line":1825},[1095,10463,10464],{"class":1998},"                return",[1095,10466,10430],{"class":2002},[1095,10468,2067],{"class":1125},[1095,10470,10471],{"class":2076},"fetchone",[1095,10473,10474],{"class":1125},"()[",[1095,10476,3624],{"class":1202},[1095,10478,2803],{"class":1125},[1095,10480,10481,10484,10487],{"class":1097,"line":1831},[1095,10482,10483],{"class":1998},"        except",[1095,10485,10486],{"class":3422}," Exception",[1095,10488,2837],{"class":1125},[1095,10490,10491,10493],{"class":1097,"line":1837},[1095,10492,2995],{"class":1998},[1095,10494,9639],{"class":1202},[1095,10496,10497],{"class":1097,"line":1842},[1095,10498,1432],{"class":2002},[1095,10500,10501,10503,10506,10508,10510],{"class":1097,"line":1848},[1095,10502,2862],{"class":2829},[1095,10504,10505],{"class":2916}," get_cache_stats",[1095,10507,2080],{"class":1125},[1095,10509,2872],{"class":2871},[1095,10511,2875],{"class":1125},[1095,10513,10514,10516,10519],{"class":1097,"line":1854},[1095,10515,2943],{"class":2842},[1095,10517,10518],{"class":2848},"Get cache statistics",[1095,10520,2949],{"class":2842},[1095,10522,10523,10525],{"class":1097,"line":1860},[1095,10524,10407],{"class":1998},[1095,10526,2837],{"class":1125},[1095,10528,10529],{"class":1097,"line":1866},[1095,10530,10531],{"class":1101},"            # Redis cache stats\n",[1095,10533,10534,10537,10540,10542],{"class":1097,"line":1872},[1095,10535,10536],{"class":1998},"            from",[1095,10538,10539],{"class":2002}," django_redis ",[1095,10541,1999],{"class":1998},[1095,10543,10544],{"class":2002}," get_redis_connection\n",[1095,10546,10547,10550,10552,10555,10557,10559,10561,10563],{"class":1097,"line":1877},[1095,10548,10549],{"class":2002},"            redis_conn ",[1095,10551,3134],{"class":1125},[1095,10553,10554],{"class":2076}," get_redis_connection",[1095,10556,2080],{"class":1125},[1095,10558,9420],{"class":1135},[1095,10560,1140],{"class":1139},[1095,10562,9420],{"class":1135},[1095,10564,3037],{"class":1125},[1095,10566,10567,10570,10572,10575,10577,10580],{"class":1097,"line":1882},[1095,10568,10569],{"class":2002},"            info ",[1095,10571,3134],{"class":1125},[1095,10573,10574],{"class":2002}," redis_conn",[1095,10576,2067],{"class":1125},[1095,10578,10579],{"class":2076},"info",[1095,10581,3426],{"class":1125},[1095,10583,10584],{"class":1097,"line":1888},[1095,10585,9748],{"class":2002},[1095,10587,10588,10591,10593,10596,10598,10600,10602,10604,10607,10609,10611,10613],{"class":1097,"line":1894},[1095,10589,10590],{"class":2002},"            hits ",[1095,10592,3134],{"class":1125},[1095,10594,10595],{"class":2002}," info",[1095,10597,2067],{"class":1125},[1095,10599,2077],{"class":2076},[1095,10601,2080],{"class":1125},[1095,10603,1143],{"class":1135},[1095,10605,10606],{"class":1139},"keyspace_hits",[1095,10608,1143],{"class":1135},[1095,10610,1206],{"class":1125},[1095,10612,4201],{"class":1202},[1095,10614,3037],{"class":1125},[1095,10616,10617,10620,10622,10624,10626,10628,10630,10632,10635,10637,10639,10641],{"class":1097,"line":1899},[1095,10618,10619],{"class":2002},"            misses ",[1095,10621,3134],{"class":1125},[1095,10623,10595],{"class":2002},[1095,10625,2067],{"class":1125},[1095,10627,2077],{"class":2076},[1095,10629,2080],{"class":1125},[1095,10631,1143],{"class":1135},[1095,10633,10634],{"class":1139},"keyspace_misses",[1095,10636,1143],{"class":1135},[1095,10638,1206],{"class":1125},[1095,10640,4201],{"class":1202},[1095,10642,3037],{"class":1125},[1095,10644,10645,10648,10650,10653,10656],{"class":1097,"line":1905},[1095,10646,10647],{"class":2002},"            total ",[1095,10649,3134],{"class":1125},[1095,10651,10652],{"class":2002}," hits ",[1095,10654,10655],{"class":2932},"+",[1095,10657,10658],{"class":2002}," misses\n",[1095,10660,10661],{"class":1097,"line":1910},[1095,10662,9748],{"class":2002},[1095,10664,10665,10667],{"class":1097,"line":1916},[1095,10666,2995],{"class":1998},[1095,10668,1129],{"class":1125},[1095,10670,10671,10673,10676,10678,10680,10683],{"class":1097,"line":1922},[1095,10672,4889],{"class":1135},[1095,10674,10675],{"class":1139},"hits",[1095,10677,1143],{"class":1135},[1095,10679,1146],{"class":1125},[1095,10681,10682],{"class":2002}," hits",[1095,10684,1172],{"class":1125},[1095,10686,10687,10689,10692,10694,10696,10699],{"class":1097,"line":1927},[1095,10688,4889],{"class":1135},[1095,10690,10691],{"class":1139},"misses",[1095,10693,1143],{"class":1135},[1095,10695,1146],{"class":1125},[1095,10697,10698],{"class":2002}," misses",[1095,10700,1172],{"class":1125},[1095,10702,10703,10705,10707,10709,10711,10713,10716,10719,10722,10724,10726,10728,10730,10732],{"class":1097,"line":1932},[1095,10704,4889],{"class":1135},[1095,10706,10344],{"class":1139},[1095,10708,1143],{"class":1135},[1095,10710,1146],{"class":1125},[1095,10712,10652],{"class":2002},[1095,10714,10715],{"class":2932},"/",[1095,10717,10718],{"class":2002}," total ",[1095,10720,10721],{"class":1998},"if",[1095,10723,10718],{"class":2002},[1095,10725,10079],{"class":2932},[1095,10727,4201],{"class":1202},[1095,10729,9990],{"class":1998},[1095,10731,4201],{"class":1202},[1095,10733,1172],{"class":1125},[1095,10735,10736],{"class":1097,"line":1937},[1095,10737,6490],{"class":1125},[1095,10739,10740,10742,10744],{"class":1097,"line":1943},[1095,10741,10483],{"class":1998},[1095,10743,10486],{"class":3422},[1095,10745,2837],{"class":1125},[1095,10747,10748,10750,10752,10754,10756,10758,10760,10762],{"class":1097,"line":1949},[1095,10749,2995],{"class":1998},[1095,10751,3137],{"class":1125},[1095,10753,1143],{"class":1135},[1095,10755,10344],{"class":1139},[1095,10757,1143],{"class":1135},[1095,10759,1146],{"class":1125},[1095,10761,4201],{"class":1202},[1095,10763,1227],{"class":1125},[1095,10765,10766],{"class":1097,"line":1955},[1095,10767,1432],{"class":2002},[1095,10769,10770,10772,10775,10777,10779],{"class":1097,"line":1961},[1095,10771,2862],{"class":2829},[1095,10773,10774],{"class":2916}," get_active_user_count",[1095,10776,2080],{"class":1125},[1095,10778,2872],{"class":2871},[1095,10780,2875],{"class":1125},[1095,10782,10783,10785,10788],{"class":1097,"line":8015},[1095,10784,2943],{"class":2842},[1095,10786,10787],{"class":2848},"Get count of active users",[1095,10789,2949],{"class":2842},[1095,10791,10792,10794],{"class":1097,"line":8031},[1095,10793,10407],{"class":1998},[1095,10795,2837],{"class":1125},[1095,10797,10798],{"class":1097,"line":8044},[1095,10799,10800],{"class":1101},"            # Count active sessions\n",[1095,10802,10803,10805,10807,10809,10811,10813,10815,10817,10819,10821],{"class":1097,"line":8064},[1095,10804,10536],{"class":1998},[1095,10806,5454],{"class":2002},[1095,10808,2067],{"class":1125},[1095,10810,6282],{"class":2002},[1095,10812,2067],{"class":1125},[1095,10814,2976],{"class":2002},[1095,10816,2067],{"class":1125},[1095,10818,6291],{"class":2002},[1095,10820,1999],{"class":1998},[1095,10822,10823],{"class":2002}," Session\n",[1095,10825,10826,10828,10830,10832,10835,10837],{"class":1097,"line":8083},[1095,10827,10536],{"class":1998},[1095,10829,5454],{"class":2002},[1095,10831,2067],{"class":1125},[1095,10833,10834],{"class":2002},"utils ",[1095,10836,1999],{"class":1998},[1095,10838,10839],{"class":2002}," timezone\n",[1095,10841,10842],{"class":1097,"line":8088},[1095,10843,9748],{"class":2002},[1095,10845,10846,10849,10851,10854,10856,10858,10860,10862],{"class":1097,"line":8093},[1095,10847,10848],{"class":2002},"            active_sessions ",[1095,10850,3134],{"class":1125},[1095,10852,10853],{"class":2002}," Session",[1095,10855,2067],{"class":1125},[1095,10857,6315],{"class":2070},[1095,10859,2067],{"class":1125},[1095,10861,6320],{"class":2076},[1095,10863,6590],{"class":1125},[1095,10865,10866,10869,10871,10874,10876,10879],{"class":1097,"line":8098},[1095,10867,10868],{"class":3612},"                expire_date__gte",[1095,10870,3134],{"class":1125},[1095,10872,10873],{"class":2076},"timezone",[1095,10875,2067],{"class":1125},[1095,10877,10878],{"class":2076},"now",[1095,10880,3426],{"class":1125},[1095,10882,10883,10886,10889],{"class":1097,"line":8103},[1095,10884,10885],{"class":1125},"            ).",[1095,10887,10888],{"class":2076},"count",[1095,10890,3426],{"class":1125},[1095,10892,10893],{"class":1097,"line":8116},[1095,10894,9748],{"class":2002},[1095,10896,10897,10899],{"class":1097,"line":8121},[1095,10898,2995],{"class":1998},[1095,10900,10901],{"class":2002}," active_sessions\n",[1095,10903,10904,10906,10908],{"class":1097,"line":8139},[1095,10905,10483],{"class":1998},[1095,10907,10486],{"class":3422},[1095,10909,2837],{"class":1125},[1095,10911,10912,10914],{"class":1097,"line":8149},[1095,10913,2995],{"class":1998},[1095,10915,9639],{"class":1202},[1095,10917,10918],{"class":1097,"line":8155},[1095,10919,1432],{"class":2002},[1095,10921,10922,10924,10927,10929,10931],{"class":1097,"line":8171},[1095,10923,2862],{"class":2829},[1095,10925,10926],{"class":2916}," should_scale_up",[1095,10928,2080],{"class":1125},[1095,10930,2872],{"class":2871},[1095,10932,2875],{"class":1125},[1095,10934,10935,10937,10940],{"class":1097,"line":8194},[1095,10936,2943],{"class":2842},[1095,10938,10939],{"class":2848},"Determine if scaling up is needed",[1095,10941,2949],{"class":2842},[1095,10943,10944,10947,10949,10951,10953,10956],{"class":1097,"line":8211},[1095,10945,10946],{"class":2002},"        metrics ",[1095,10948,3134],{"class":1125},[1095,10950,3478],{"class":1121},[1095,10952,2067],{"class":1125},[1095,10954,10955],{"class":2076},"get_scaling_metrics",[1095,10957,3426],{"class":1125},[1095,10959,10960],{"class":1097,"line":8223},[1095,10961,1586],{"class":2002},[1095,10963,10964],{"class":1097,"line":8240},[1095,10965,10966],{"class":1101},"        # Scale up conditions\n",[1095,10968,10969,10972,10974],{"class":1097,"line":8257},[1095,10970,10971],{"class":2002},"        conditions ",[1095,10973,3134],{"class":1125},[1095,10975,3462],{"class":1125},[1095,10977,10978,10981,10983,10985,10987,10989,10991,10994,10997],{"class":1097,"line":8269},[1095,10979,10980],{"class":2002},"            metrics",[1095,10982,5603],{"class":1125},[1095,10984,1143],{"class":1135},[1095,10986,10113],{"class":1139},[1095,10988,1143],{"class":1135},[1095,10990,9784],{"class":1125},[1095,10992,10993],{"class":2932}," >",[1095,10995,10996],{"class":1202}," 80",[1095,10998,1172],{"class":1125},[1095,11000,11001,11003,11005,11007,11009,11011,11013,11015,11018],{"class":1097,"line":8286},[1095,11002,10980],{"class":2002},[1095,11004,5603],{"class":1125},[1095,11006,1143],{"class":1135},[1095,11008,10294],{"class":1139},[1095,11010,1143],{"class":1135},[1095,11012,9784],{"class":1125},[1095,11014,10993],{"class":2932},[1095,11016,11017],{"class":1202}," 85",[1095,11019,1172],{"class":1125},[1095,11021,11022,11024,11026,11028,11030,11032,11034,11036,11039],{"class":1097,"line":8299},[1095,11023,10980],{"class":2002},[1095,11025,5603],{"class":1125},[1095,11027,1143],{"class":1135},[1095,11029,10247],{"class":1139},[1095,11031,1143],{"class":1135},[1095,11033,9784],{"class":1125},[1095,11035,10993],{"class":2932},[1095,11037,11038],{"class":1202}," 2.0",[1095,11040,1172],{"class":1125},[1095,11042,11043,11045,11047,11049,11051,11053,11055,11057,11060],{"class":1097,"line":8312},[1095,11044,10980],{"class":2002},[1095,11046,5603],{"class":1125},[1095,11048,1143],{"class":1135},[1095,11050,10263],{"class":1139},[1095,11052,1143],{"class":1135},[1095,11054,9784],{"class":1125},[1095,11056,10993],{"class":2932},[1095,11058,11059],{"class":1202}," 0.05",[1095,11061,1172],{"class":1125},[1095,11063,11064,11066,11068,11070,11072,11074,11076,11078,11080],{"class":1097,"line":8320},[1095,11065,10980],{"class":2002},[1095,11067,5603],{"class":1125},[1095,11069,1143],{"class":1135},[1095,11071,10231],{"class":1139},[1095,11073,1143],{"class":1135},[1095,11075,9784],{"class":1125},[1095,11077,10993],{"class":2932},[1095,11079,4634],{"class":1202},[1095,11081,1172],{"class":1125},[1095,11083,11084,11086,11088,11090,11092,11094,11096,11098,11100],{"class":1097,"line":8347},[1095,11085,10980],{"class":2002},[1095,11087,5603],{"class":1125},[1095,11089,1143],{"class":1135},[1095,11091,10310],{"class":1139},[1095,11093,1143],{"class":1135},[1095,11095,9784],{"class":1125},[1095,11097,10993],{"class":2932},[1095,11099,10996],{"class":1202},[1095,11101,1172],{"class":1125},[1095,11103,11104],{"class":1097,"line":8353},[1095,11105,3509],{"class":1125},[1095,11107,11108],{"class":1097,"line":8370},[1095,11109,1586],{"class":2002},[1095,11111,11112],{"class":1097,"line":8385},[1095,11113,11114],{"class":1101},"        # Scale up if any 2 conditions are met\n",[1095,11116,11117,11119,11122,11124,11127,11129,11132],{"class":1097,"line":8390},[1095,11118,3018],{"class":1998},[1095,11120,11121],{"class":2865}," sum",[1095,11123,2080],{"class":1125},[1095,11125,11126],{"class":2076},"conditions",[1095,11128,3580],{"class":1125},[1095,11130,11131],{"class":2932}," >=",[1095,11133,9124],{"class":1202},[1095,11135,11136],{"class":1097,"line":8395},[1095,11137,1432],{"class":2002},[1095,11139,11140,11142,11145,11147,11149],{"class":1097,"line":8401},[1095,11141,2862],{"class":2829},[1095,11143,11144],{"class":2916}," should_scale_down",[1095,11146,2080],{"class":1125},[1095,11148,2872],{"class":2871},[1095,11150,2875],{"class":1125},[1095,11152,11153,11155,11158],{"class":1097,"line":8416},[1095,11154,2943],{"class":2842},[1095,11156,11157],{"class":2848},"Determine if scaling down is possible",[1095,11159,2949],{"class":2842},[1095,11161,11162,11164,11166,11168,11170,11172],{"class":1097,"line":8438},[1095,11163,10946],{"class":2002},[1095,11165,3134],{"class":1125},[1095,11167,3478],{"class":1121},[1095,11169,2067],{"class":1125},[1095,11171,10955],{"class":2076},[1095,11173,3426],{"class":1125},[1095,11175,11176],{"class":1097,"line":8453},[1095,11177,1586],{"class":2002},[1095,11179,11180],{"class":1097,"line":8465},[1095,11181,11182],{"class":1101},"        # Scale down conditions (all must be met)\n",[1095,11184,11185,11187,11189],{"class":1097,"line":8481},[1095,11186,10971],{"class":2002},[1095,11188,3134],{"class":1125},[1095,11190,3462],{"class":1125},[1095,11192,11193,11195,11197,11199,11201,11203,11205,11208,11211],{"class":1097,"line":8497},[1095,11194,10980],{"class":2002},[1095,11196,5603],{"class":1125},[1095,11198,1143],{"class":1135},[1095,11200,10113],{"class":1139},[1095,11202,1143],{"class":1135},[1095,11204,9784],{"class":1125},[1095,11206,11207],{"class":2932}," \u003C",[1095,11209,11210],{"class":1202}," 30",[1095,11212,1172],{"class":1125},[1095,11214,11215,11217,11219,11221,11223,11225,11227,11229,11232],{"class":1097,"line":8508},[1095,11216,10980],{"class":2002},[1095,11218,5603],{"class":1125},[1095,11220,1143],{"class":1135},[1095,11222,10294],{"class":1139},[1095,11224,1143],{"class":1135},[1095,11226,9784],{"class":1125},[1095,11228,11207],{"class":2932},[1095,11230,11231],{"class":1202}," 40",[1095,11233,1172],{"class":1125},[1095,11235,11236,11238,11240,11242,11244,11246,11248,11250,11253],{"class":1097,"line":8523},[1095,11237,10980],{"class":2002},[1095,11239,5603],{"class":1125},[1095,11241,1143],{"class":1135},[1095,11243,10247],{"class":1139},[1095,11245,1143],{"class":1135},[1095,11247,9784],{"class":1125},[1095,11249,11207],{"class":2932},[1095,11251,11252],{"class":1202}," 0.5",[1095,11254,1172],{"class":1125},[1095,11256,11257,11259,11261,11263,11265,11267,11269,11271,11274],{"class":1097,"line":8535},[1095,11258,10980],{"class":2002},[1095,11260,5603],{"class":1125},[1095,11262,1143],{"class":1135},[1095,11264,10263],{"class":1139},[1095,11266,1143],{"class":1135},[1095,11268,9784],{"class":1125},[1095,11270,11207],{"class":2932},[1095,11272,11273],{"class":1202}," 0.01",[1095,11275,1172],{"class":1125},[1095,11277,11278,11280,11282,11284,11286,11288,11290,11292,11295],{"class":1097,"line":8546},[1095,11279,10980],{"class":2002},[1095,11281,5603],{"class":1125},[1095,11283,1143],{"class":1135},[1095,11285,10231],{"class":1139},[1095,11287,1143],{"class":1135},[1095,11289,9784],{"class":1125},[1095,11291,11207],{"class":2932},[1095,11293,11294],{"class":1202}," 100",[1095,11296,1172],{"class":1125},[1095,11298,11299],{"class":1097,"line":8553},[1095,11300,3509],{"class":1125},[1095,11302,11303],{"class":1097,"line":8576},[1095,11304,1586],{"class":2002},[1095,11306,11307,11309,11312,11314,11316],{"class":1097,"line":8581},[1095,11308,3018],{"class":1998},[1095,11310,11311],{"class":2865}," all",[1095,11313,2080],{"class":1125},[1095,11315,11126],{"class":2076},[1095,11317,3037],{"class":1125},[1095,11319,11320],{"class":1097,"line":8597},[1095,11321,1109],{"emptyLinePlaceholder":1108},[1095,11323,11324],{"class":1097,"line":8611},[1095,11325,11326],{"class":1101},"# Global metrics collector\n",[1095,11328,11330,11333,11335,11337],{"class":1097,"line":11329},152,[1095,11331,11332],{"class":2002},"scaling_metrics ",[1095,11334,3134],{"class":1125},[1095,11336,9533],{"class":2076},[1095,11338,3426],{"class":1125},[1095,11340,11342],{"class":1097,"line":11341},153,[1095,11343,1109],{"emptyLinePlaceholder":1108},[1095,11345,11347],{"class":1097,"line":11346},154,[1095,11348,11349],{"class":1101},"# Middleware to collect metrics\n",[1095,11351,11353,11355,11358],{"class":1097,"line":11352},155,[1095,11354,2830],{"class":2829},[1095,11356,11357],{"class":2833}," ScalingMetricsMiddleware",[1095,11359,2837],{"class":1125},[1095,11361,11363,11365,11368],{"class":1097,"line":11362},156,[1095,11364,6196],{"class":2842},[1095,11366,11367],{"class":2848},"Middleware to collect scaling metrics",[1095,11369,2949],{"class":2842},[1095,11371,11373],{"class":1097,"line":11372},157,[1095,11374,1432],{"class":2002},[1095,11376,11378,11380,11382,11384,11386,11388,11391],{"class":1097,"line":11377},158,[1095,11379,2862],{"class":2829},[1095,11381,2866],{"class":2865},[1095,11383,2080],{"class":1125},[1095,11385,2872],{"class":2871},[1095,11387,1206],{"class":1125},[1095,11389,11390],{"class":2926}," get_response",[1095,11392,2875],{"class":1125},[1095,11394,11396,11398,11400,11403,11405],{"class":1097,"line":11395},159,[1095,11397,2880],{"class":1121},[1095,11399,2067],{"class":1125},[1095,11401,11402],{"class":2070},"get_response",[1095,11404,1126],{"class":1125},[1095,11406,11407],{"class":2002}," get_response\n",[1095,11409,11411],{"class":1097,"line":11410},160,[1095,11412,1432],{"class":2002},[1095,11414,11416,11418,11421,11423,11425,11427,11430],{"class":1097,"line":11415},161,[1095,11417,2862],{"class":2829},[1095,11419,11420],{"class":2865}," __call__",[1095,11422,2080],{"class":1125},[1095,11424,2872],{"class":2871},[1095,11426,1206],{"class":1125},[1095,11428,11429],{"class":2926}," request",[1095,11431,2875],{"class":1125},[1095,11433,11435,11438,11440,11442,11444,11446],{"class":1097,"line":11434},162,[1095,11436,11437],{"class":2002},"        start_time ",[1095,11439,3134],{"class":1125},[1095,11441,10217],{"class":2002},[1095,11443,2067],{"class":1125},[1095,11445,9729],{"class":2076},[1095,11447,3426],{"class":1125},[1095,11449,11451],{"class":1097,"line":11450},163,[1095,11452,1586],{"class":2002},[1095,11454,11456,11458,11460,11462,11464,11466,11468,11471],{"class":1097,"line":11455},164,[1095,11457,7044],{"class":2002},[1095,11459,3134],{"class":1125},[1095,11461,3478],{"class":1121},[1095,11463,2067],{"class":1125},[1095,11465,11402],{"class":2076},[1095,11467,2080],{"class":1125},[1095,11469,11470],{"class":2076},"request",[1095,11472,3037],{"class":1125},[1095,11474,11476],{"class":1097,"line":11475},165,[1095,11477,1586],{"class":2002},[1095,11479,11481,11484,11486,11488,11490,11492,11494,11497],{"class":1097,"line":11480},166,[1095,11482,11483],{"class":2002},"        response_time ",[1095,11485,3134],{"class":1125},[1095,11487,10217],{"class":2002},[1095,11489,2067],{"class":1125},[1095,11491,9729],{"class":2076},[1095,11493,9736],{"class":1125},[1095,11495,11496],{"class":2932}," -",[1095,11498,11499],{"class":2002}," start_time\n",[1095,11501,11503,11506,11508,11511],{"class":1097,"line":11502},167,[1095,11504,11505],{"class":2002},"        scaling_metrics",[1095,11507,2067],{"class":1125},[1095,11509,11510],{"class":2076},"record_request",[1095,11512,6590],{"class":1125},[1095,11514,11516,11519,11521,11523],{"class":1097,"line":11515},168,[1095,11517,11518],{"class":3612},"            response_time",[1095,11520,3134],{"class":1125},[1095,11522,9766],{"class":2076},[1095,11524,1172],{"class":1125},[1095,11526,11528,11531,11533,11536,11538,11541],{"class":1097,"line":11527},169,[1095,11529,11530],{"class":3612},"            status_code",[1095,11532,3134],{"class":1125},[1095,11534,11535],{"class":2076},"response",[1095,11537,2067],{"class":1125},[1095,11539,11540],{"class":2070},"status_code",[1095,11542,1172],{"class":1125},[1095,11544,11546,11549,11551,11553,11555],{"class":1097,"line":11545},170,[1095,11547,11548],{"class":3612},"            endpoint",[1095,11550,3134],{"class":1125},[1095,11552,11470],{"class":2076},[1095,11554,2067],{"class":1125},[1095,11556,11557],{"class":2070},"path\n",[1095,11559,11561],{"class":1097,"line":11560},171,[1095,11562,7335],{"class":1125},[1095,11564,11566],{"class":1097,"line":11565},172,[1095,11567,1586],{"class":2002},[1095,11569,11571,11573],{"class":1097,"line":11570},173,[1095,11572,3018],{"class":1998},[1095,11574,7734],{"class":2002},[1026,11576,11577],{},"This comprehensive scaling and load balancing guide provides all the tools and strategies needed to build highly scalable Django applications that can handle massive traffic loads efficiently.",[11579,11580,11581],"style",{},"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 .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}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 .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}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 .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 .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}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 .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 .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 .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}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 .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}",{"title":1090,"searchDepth":1098,"depth":1105,"links":11583},[11584,11588,11592,11596,11600],{"id":1032,"depth":1105,"text":1033,"children":11585},[11586,11587],{"id":1037,"depth":1112,"text":1038},{"id":1082,"depth":1112,"text":1083},{"id":1385,"depth":1105,"text":1386,"children":11589},[11590,11591],{"id":1389,"depth":1112,"text":1390},{"id":1966,"depth":1112,"text":1967},{"id":1978,"depth":1105,"text":1979,"children":11593},[11594,11595],{"id":1982,"depth":1112,"text":1983},{"id":3900,"depth":1112,"text":3901},{"id":4496,"depth":1105,"text":793,"children":11597},[11598,11599],{"id":4499,"depth":1112,"text":4500},{"id":5435,"depth":1112,"text":5436},{"id":6702,"depth":1105,"text":6703,"children":11601},[11602,11603,11604],{"id":6706,"depth":1112,"text":6707},{"id":8616,"depth":1112,"text":8617},{"id":9439,"depth":1112,"text":9440},"md",null,{},{"title":763,"description":1028},"pJFqKYwIrA15VojbQiX9cKISOZwNYOs4qcdocqckQIA",[11611,11613],{"title":759,"path":760,"stem":761,"description":11612,"children":-1},"Cloud deployment transforms Django applications from single-server setups to globally distributed, auto-scaling, and highly available systems. This comprehensive guide covers everything Django developers need to know about deploying to major cloud platforms, from basic concepts to advanced architectures, cost optimization, and production best practices.",{"title":767,"path":768,"stem":769,"description":11614,"children":-1},"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.",1772474954329]