[{"data":1,"prerenderedAt":6208},["ShallowReactive",2],{"navigation":3,"/cookbook/memory-management":259,"/cookbook/memory-management-surround":6203},[4,16,56,104,140,151,235,239,243,247,251,255],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","/getting-started","1.getting-started",[9,12],{"title":10,"path":6,"stem":11},"Introduction","1.getting-started/index",{"title":13,"path":14,"stem":15},"Installation","/getting-started/installation","1.getting-started/1.installation",{"title":17,"path":18,"stem":19,"children":20},"Essentials","/essentials","2.essentials",[21,24,28,32,36,40,44,48,52],{"title":22,"path":18,"stem":23},"Core concepts","2.essentials/index",{"title":25,"path":26,"stem":27},"Routing","/essentials/routing","2.essentials/1.routing",{"title":29,"path":30,"stem":31},"Authentication","/essentials/authentication","2.essentials/2.authentication",{"title":33,"path":34,"stem":35},"Identity & User Store","/essentials/identity","2.essentials/3.identity",{"title":37,"path":38,"stem":39},"Requests & Responses","/essentials/requests-responses","2.essentials/4.requests-responses",{"title":41,"path":42,"stem":43},"Controllers","/essentials/controllers","2.essentials/5.controllers",{"title":45,"path":46,"stem":47},"Database","/essentials/database","2.essentials/6.database",{"title":49,"path":50,"stem":51},"Validation","/essentials/validation","2.essentials/7.validation",{"title":53,"path":54,"stem":55},"Migrations","/essentials/migrations","2.essentials/8.migrations",{"title":57,"path":58,"stem":59,"children":60},"Features","/features","3.features",[61,64,68,72,76,80,84,88,92,96,100],{"title":62,"path":58,"stem":63},"Built‑in Capabilities","3.features/index",{"title":65,"path":66,"stem":67},"Caching","/features/caching","3.features/caching",{"title":69,"path":70,"stem":71},"CORS & CSRF","/features/cors-csrf","3.features/cors-csrf",{"title":73,"path":74,"stem":75},"Distributed Locks","/features/distributed-locks","3.features/distributed-locks",{"title":77,"path":78,"stem":79},"Events & Listeners","/features/events","3.features/events",{"title":81,"path":82,"stem":83},"Field Selection","/features/field-selection","3.features/field-selection",{"title":85,"path":86,"stem":87},"File Uploads","/features/file-uploads","3.features/file-uploads",{"title":89,"path":90,"stem":91},"Notifications","/features/notifications","3.features/notifications",{"title":93,"path":94,"stem":95},"Queues & Jobs","/features/queues-jobs","3.features/queues-jobs",{"title":97,"path":98,"stem":99},"Rate Limiting","/features/rate-limiting","3.features/rate-limiting",{"title":101,"path":102,"stem":103},"Task Scheduling","/features/scheduling","3.features/scheduling",{"title":105,"path":106,"stem":107,"children":108},"Advanced","/advanced","4.advanced",[109,112,116,120,124,128,132,136],{"title":110,"path":106,"stem":111},"Techniques and Patterns","4.advanced/index",{"title":113,"path":114,"stem":115},"Configuration","/advanced/configuration","4.advanced/configuration",{"title":117,"path":118,"stem":119},"Dependency Injection","/advanced/dependency-injection","4.advanced/dependency-injection",{"title":121,"path":122,"stem":123},"Middleware","/advanced/middleware","4.advanced/middleware",{"title":125,"path":126,"stem":127},"Performance","/advanced/performance","4.advanced/performance",{"title":129,"path":130,"stem":131},"Repositories","/advanced/repositories","4.advanced/repositories",{"title":133,"path":134,"stem":135},"Service Providers","/advanced/service-providers","4.advanced/service-providers",{"title":137,"path":138,"stem":139},"Testing","/advanced/testing","4.advanced/testing",{"title":141,"path":142,"stem":143,"children":144},"Overview","/tooling","5.tooling",[145,147],{"title":141,"path":142,"stem":146},"5.tooling/index",{"title":148,"path":149,"stem":150},"AI Skills","/tooling/ai-skills","5.tooling/1.ai-skills",{"title":152,"path":153,"stem":154,"children":155},"Cookbook","/cookbook","6.cookbook",[156,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215,219,223,227,231],{"title":157,"path":153,"stem":158},"Recipes & How‑Tos","6.cookbook/index",{"title":160,"path":161,"stem":162},"Routing Recipes","/cookbook/routing","6.cookbook/1.routing",{"title":164,"path":165,"stem":166},"Caching Recipes","/cookbook/caching","6.cookbook/10.caching",{"title":168,"path":169,"stem":170},"Queue Infrastructure","/cookbook/queues-and-jobs","6.cookbook/11.queues-and-jobs",{"title":172,"path":173,"stem":174},"Notification Channels & Templates","/cookbook/notifications","6.cookbook/13.notifications",{"title":176,"path":177,"stem":178},"Storage","/cookbook/storage","6.cookbook/15.storage",{"title":180,"path":181,"stem":182},"Image Processing Examples","/cookbook/image-processing","6.cookbook/16.image-processing",{"title":184,"path":185,"stem":186},"Permissions and Authorization","/cookbook/permissions-and-authorization","6.cookbook/18.permissions-and-authorization",{"title":188,"path":189,"stem":190},"Session Analytics","/cookbook/sessions-analytics","6.cookbook/19.sessions-analytics",{"title":192,"path":193,"stem":194},"Writing Middleware","/cookbook/middleware","6.cookbook/2.middleware",{"title":196,"path":197,"stem":198},"API Metrics","/cookbook/api-metrics","6.cookbook/20.api-metrics",{"title":200,"path":201,"stem":202},"Performance Deep Dive","/cookbook/performance","6.cookbook/21.performance",{"title":204,"path":205,"stem":206},"Memory Management","/cookbook/memory-management","6.cookbook/22.memory-management",{"title":208,"path":209,"stem":210},"Writing Console Commands","/cookbook/console-commands","6.cookbook/23.console-commands",{"title":212,"path":213,"stem":214},"Glueful Extensions","/cookbook/extensions","6.cookbook/25.extensions",{"title":216,"path":217,"stem":218},"Error Handling Guide","/cookbook/error-handling","6.cookbook/4.error-handling",{"title":220,"path":221,"stem":222},"Security Guide","/cookbook/security","6.cookbook/5.security",{"title":224,"path":225,"stem":226},"Service Options Resolver","/cookbook/configuration","6.cookbook/6.configuration",{"title":228,"path":229,"stem":230},"Logging","/cookbook/logging","6.cookbook/7.logging",{"title":232,"path":233,"stem":234},"Database Advanced Features","/cookbook/database","6.cookbook/8.database",{"title":236,"path":237,"stem":238},"API Reference","/api-reference","7.api-reference",{"title":240,"path":241,"stem":242},"CLI Reference","/cli-reference","8.cli-reference",{"title":244,"path":245,"stem":246},"Extensions","/extensions","9.extensions",{"title":248,"path":249,"stem":250},"Contributing","/contributing","contributing",{"title":252,"path":253,"stem":254},"Release Notes","/releases","releases",{"title":256,"path":257,"stem":258},"Release Archive","/releases-archive","releases-archive",{"id":260,"title":204,"body":261,"description":6197,"extension":6198,"links":6199,"meta":6200,"navigation":357,"path":205,"seo":6201,"stem":206,"__hash__":6202},"docs/6.cookbook/22.memory-management.md",{"type":262,"value":263,"toc":6144},"minimark",[264,268,273,276,280,309,313,564,568,571,708,712,726,759,763,930,934,937,940,966,970,1313,1317,1322,1429,1433,1555,1559,1661,1664,1842,1846,1988,1992,1995,1999,2002,2099,2103,2110,2276,2280,2290,2541,2545,2552,2641,2645,2648,2651,2671,2674,2694,2918,2924,2928,2978,2982,2985,2988,3081,3085,3267,3271,3413,3417,3544,3548,3582,3586,3589,3592,3615,3618,3621,3835,3839,3845,3993,3997,4006,4084,4088,4101,4104,4356,4360,4375,4379,4383,4416,4420,4452,4456,4710,4713,4717,4721,4724,4728,4871,4875,5146,5150,5264,5268,5271,5275,5428,5432,5437,5744,5749,5791,5795,5854,5858,6137,6140],[265,266,267],"p",{},"This guide consolidates Glueful's memory-management and observability tools into a single reference: real-time memory monitoring and alerting, memory-efficient iteration over large datasets, object pooling, chunked database processing, the lazy service container, and request tracing.",[269,270,272],"h2",{"id":271},"memory-manager","Memory Manager",[265,274,275],{},"The Memory Manager provides advanced memory monitoring, tracking, and management capabilities with configurable thresholds and automatic garbage collection.",[277,278,57],"h3",{"id":279},"features",[281,282,283,291,297,303],"ul",{},[284,285,286,290],"li",{},[287,288,289],"strong",{},"Real-time Memory Monitoring",": Track current, peak, and limit usage",[284,292,293,296],{},[287,294,295],{},"Automatic Garbage Collection",": Trigger collection based on configurable thresholds",[284,298,299,302],{},[287,300,301],{},"Memory State Tracking",": Monitor allocation patterns and system health",[284,304,305,308],{},[287,306,307],{},"Configurable Alerts",": Set custom thresholds for different memory states",[277,310,312],{"id":311},"basic-usage","Basic Usage",[314,315,320],"pre",{"className":316,"code":317,"language":318,"meta":319,"style":319},"language-php shiki shiki-themes material-theme-lighter github-light github-dark monokai","use Glueful\\Performance\\MemoryManager;\n\n// Resolve from the container (or construct with an optional logger/context)\n$memoryManager = app($context, MemoryManager::class);\n\n// Monitor memory usage (logs + runs GC when thresholds are exceeded)\n$usage = $memoryManager->monitor();\necho \"Current: {$usage['formatted']['current']}, Peak: {$usage['formatted']['peak']}\";\n\n// Check memory state\nif ($memoryManager->isMemoryCritical()) {\n    // Handle critical memory situation\n    $memoryManager->forceGarbageCollection();\n}\n","php","",[321,322,323,352,359,366,406,411,417,442,503,508,514,537,543,558],"code",{"__ignoreMap":319},[324,325,328,332,336,340,342,344,348],"span",{"class":326,"line":327},"line",1,[324,329,331],{"class":330},"shWJe","use",[324,333,335],{"class":334},"s91G_"," Glueful",[324,337,339],{"class":338},"sv8o3","\\",[324,341,125],{"class":334},[324,343,339],{"class":338},[324,345,347],{"class":346},"seZir","MemoryManager",[324,349,351],{"class":350},"swvn1",";\n",[324,353,355],{"class":326,"line":354},2,[324,356,358],{"emptyLinePlaceholder":357},true,"\n",[324,360,362],{"class":326,"line":361},3,[324,363,365],{"class":364},"ss7Ak","// Resolve from the container (or construct with an optional logger/context)\n",[324,367,369,372,376,380,384,387,390,393,397,400,403],{"class":326,"line":368},4,[324,370,371],{"class":350},"$",[324,373,375],{"class":374},"ss--_","memoryManager ",[324,377,379],{"class":378},"sGXK2","=",[324,381,383],{"class":382},"sD0ED"," app",[324,385,386],{"class":350},"($",[324,388,389],{"class":374},"context",[324,391,392],{"class":350},",",[324,394,396],{"class":395},"s_MOj"," MemoryManager",[324,398,399],{"class":378},"::",[324,401,402],{"class":330},"class",[324,404,405],{"class":350},");\n",[324,407,409],{"class":326,"line":408},5,[324,410,358],{"emptyLinePlaceholder":357},[324,412,414],{"class":326,"line":413},6,[324,415,416],{"class":364},"// Monitor memory usage (logs + runs GC when thresholds are exceeded)\n",[324,418,420,422,425,427,430,433,436,439],{"class":326,"line":419},7,[324,421,371],{"class":350},[324,423,424],{"class":374},"usage ",[324,426,379],{"class":378},[324,428,429],{"class":350}," $",[324,431,432],{"class":374},"memoryManager",[324,434,435],{"class":378},"->",[324,437,438],{"class":382},"monitor",[324,440,441],{"class":350},"();\n",[324,443,445,449,453,457,460,462,465,468,471,474,477,480,483,485,487,489,491,493,495,498,501],{"class":326,"line":444},8,[324,446,448],{"class":447},"sMLJd","echo",[324,450,452],{"class":451},"siCPE"," \"",[324,454,456],{"class":455},"sLACW","Current: ",[324,458,459],{"class":451},"{",[324,461,371],{"class":350},[324,463,464],{"class":374},"usage",[324,466,467],{"class":451},"['",[324,469,470],{"class":455},"formatted",[324,472,473],{"class":451},"']['",[324,475,476],{"class":455},"current",[324,478,479],{"class":451},"']}",[324,481,482],{"class":455},", Peak: ",[324,484,459],{"class":451},[324,486,371],{"class":350},[324,488,464],{"class":374},[324,490,467],{"class":451},[324,492,470],{"class":455},[324,494,473],{"class":451},[324,496,497],{"class":455},"peak",[324,499,500],{"class":451},"']}\"",[324,502,351],{"class":350},[324,504,506],{"class":326,"line":505},9,[324,507,358],{"emptyLinePlaceholder":357},[324,509,511],{"class":326,"line":510},10,[324,512,513],{"class":364},"// Check memory state\n",[324,515,517,521,524,526,528,531,534],{"class":326,"line":516},11,[324,518,520],{"class":519},"sRxSC","if",[324,522,523],{"class":350}," ($",[324,525,432],{"class":374},[324,527,435],{"class":378},[324,529,530],{"class":382},"isMemoryCritical",[324,532,533],{"class":350},"())",[324,535,536],{"class":350}," {\n",[324,538,540],{"class":326,"line":539},12,[324,541,542],{"class":364},"    // Handle critical memory situation\n",[324,544,546,549,551,553,556],{"class":326,"line":545},13,[324,547,548],{"class":350},"    $",[324,550,432],{"class":374},[324,552,435],{"class":378},[324,554,555],{"class":382},"forceGarbageCollection",[324,557,441],{"class":350},[324,559,561],{"class":326,"line":560},14,[324,562,563],{"class":350},"}\n",[277,565,567],{"id":566},"configuration-options","Configuration Options",[265,569,570],{},"Thresholds are read from configuration (defaults shown), not from the constructor:",[314,572,574],{"className":316,"code":573,"language":318,"meta":319,"style":319},"// config/app.php → 'performance' (or the MEMORY_* environment overrides)\n'performance' => [\n    'memory' => [\n        'monitoring' => [\n            'enabled' => true,\n            'alert_threshold' => 0.8,     // MEMORY_ALERT_THRESHOLD — high-usage alert at 80%\n            'critical_threshold' => 0.9,  // MEMORY_CRITICAL_THRESHOLD — critical at 90%\n        ],\n    ],\n],\n",[321,575,576,581,597,611,625,644,670,693,698,703],{"__ignoreMap":319},[324,577,578],{"class":326,"line":327},[324,579,580],{"class":364},"// config/app.php → 'performance' (or the MEMORY_* environment overrides)\n",[324,582,583,586,589,591,594],{"class":326,"line":354},[324,584,585],{"class":451},"'",[324,587,588],{"class":455},"performance",[324,590,585],{"class":451},[324,592,593],{"class":378}," =>",[324,595,596],{"class":350}," [\n",[324,598,599,602,605,607,609],{"class":326,"line":361},[324,600,601],{"class":451},"    '",[324,603,604],{"class":455},"memory",[324,606,585],{"class":451},[324,608,593],{"class":378},[324,610,596],{"class":350},[324,612,613,616,619,621,623],{"class":326,"line":368},[324,614,615],{"class":451},"        '",[324,617,618],{"class":455},"monitoring",[324,620,585],{"class":451},[324,622,593],{"class":378},[324,624,596],{"class":350},[324,626,627,630,633,635,637,641],{"class":326,"line":408},[324,628,629],{"class":451},"            '",[324,631,632],{"class":455},"enabled",[324,634,585],{"class":451},[324,636,593],{"class":378},[324,638,640],{"class":639},"sMTiH"," true",[324,642,643],{"class":350},",\n",[324,645,646,648,651,653,655,659,662,665,667],{"class":326,"line":413},[324,647,629],{"class":451},[324,649,650],{"class":455},"alert_threshold",[324,652,585],{"class":451},[324,654,593],{"class":378},[324,656,658],{"class":657},"sYThS"," 0",[324,660,661],{"class":639},".",[324,663,664],{"class":657},"8",[324,666,392],{"class":350},[324,668,669],{"class":364},"     // MEMORY_ALERT_THRESHOLD — high-usage alert at 80%\n",[324,671,672,674,677,679,681,683,685,688,690],{"class":326,"line":419},[324,673,629],{"class":451},[324,675,676],{"class":455},"critical_threshold",[324,678,585],{"class":451},[324,680,593],{"class":378},[324,682,658],{"class":657},[324,684,661],{"class":639},[324,686,687],{"class":657},"9",[324,689,392],{"class":350},[324,691,692],{"class":364},"  // MEMORY_CRITICAL_THRESHOLD — critical at 90%\n",[324,694,695],{"class":326,"line":444},[324,696,697],{"class":350},"        ],\n",[324,699,700],{"class":326,"line":505},[324,701,702],{"class":350},"    ],\n",[324,704,705],{"class":326,"line":510},[324,706,707],{"class":350},"],\n",[277,709,711],{"id":710},"memory-states","Memory States",[265,713,714,717,718,721,722,725],{},[321,715,716],{},"monitor()"," compares current usage (",[321,719,720],{},"percentage"," = usage ÷ ",[321,723,724],{},"memory_limit",") against the\nconfigured thresholds:",[281,727,728,736,748],{},[284,729,730,733,734],{},[287,731,732],{},"Normal",": Usage below ",[321,735,650],{},[284,737,738,741,742,744,745],{},[287,739,740],{},"High",": Usage at/above ",[321,743,650],{}," (logged; optional GC) — see ",[321,746,747],{},"isMemoryHighUsage()",[284,749,750,741,753,755,756],{},[287,751,752],{},"Critical",[321,754,676],{}," — see ",[321,757,758],{},"isMemoryCritical()",[277,760,762],{"id":761},"advanced-features","Advanced Features",[314,764,766],{"className":316,"code":765,"language":318,"meta":319,"style":319},"// Inspect the active memory limit\n$limit = $memoryManager->getMemoryLimit();              // bytes\n$human = $memoryManager->getFormattedMemoryLimit();     // e.g. \"512 MB\"\n\n// Force garbage collection\n$memoryManager->forceGarbageCollection();\n\n// Get current memory statistics (current/peak/limit/percentage + formatted values)\n$stats = $memoryManager->getCurrentUsage();\nprint_r($stats);\n\n// Quick threshold checks\n$high     = $memoryManager->isMemoryHighUsage();\n$critical = $memoryManager->isMemoryCritical();\n",[321,767,768,773,797,820,824,829,841,845,850,870,882,886,891,911],{"__ignoreMap":319},[324,769,770],{"class":326,"line":327},[324,771,772],{"class":364},"// Inspect the active memory limit\n",[324,774,775,777,780,782,784,786,788,791,794],{"class":326,"line":354},[324,776,371],{"class":350},[324,778,779],{"class":374},"limit ",[324,781,379],{"class":378},[324,783,429],{"class":350},[324,785,432],{"class":374},[324,787,435],{"class":378},[324,789,790],{"class":382},"getMemoryLimit",[324,792,793],{"class":350},"();",[324,795,796],{"class":364},"              // bytes\n",[324,798,799,801,804,806,808,810,812,815,817],{"class":326,"line":361},[324,800,371],{"class":350},[324,802,803],{"class":374},"human ",[324,805,379],{"class":378},[324,807,429],{"class":350},[324,809,432],{"class":374},[324,811,435],{"class":378},[324,813,814],{"class":382},"getFormattedMemoryLimit",[324,816,793],{"class":350},[324,818,819],{"class":364},"     // e.g. \"512 MB\"\n",[324,821,822],{"class":326,"line":368},[324,823,358],{"emptyLinePlaceholder":357},[324,825,826],{"class":326,"line":408},[324,827,828],{"class":364},"// Force garbage collection\n",[324,830,831,833,835,837,839],{"class":326,"line":413},[324,832,371],{"class":350},[324,834,432],{"class":374},[324,836,435],{"class":378},[324,838,555],{"class":382},[324,840,441],{"class":350},[324,842,843],{"class":326,"line":419},[324,844,358],{"emptyLinePlaceholder":357},[324,846,847],{"class":326,"line":444},[324,848,849],{"class":364},"// Get current memory statistics (current/peak/limit/percentage + formatted values)\n",[324,851,852,854,857,859,861,863,865,868],{"class":326,"line":505},[324,853,371],{"class":350},[324,855,856],{"class":374},"stats ",[324,858,379],{"class":378},[324,860,429],{"class":350},[324,862,432],{"class":374},[324,864,435],{"class":378},[324,866,867],{"class":382},"getCurrentUsage",[324,869,441],{"class":350},[324,871,872,875,877,880],{"class":326,"line":510},[324,873,874],{"class":447},"print_r",[324,876,386],{"class":350},[324,878,879],{"class":374},"stats",[324,881,405],{"class":350},[324,883,884],{"class":326,"line":516},[324,885,358],{"emptyLinePlaceholder":357},[324,887,888],{"class":326,"line":539},[324,889,890],{"class":364},"// Quick threshold checks\n",[324,892,893,895,898,900,902,904,906,909],{"class":326,"line":545},[324,894,371],{"class":350},[324,896,897],{"class":374},"high     ",[324,899,379],{"class":378},[324,901,429],{"class":350},[324,903,432],{"class":374},[324,905,435],{"class":378},[324,907,908],{"class":382},"isMemoryHighUsage",[324,910,441],{"class":350},[324,912,913,915,918,920,922,924,926,928],{"class":326,"line":560},[324,914,371],{"class":350},[324,916,917],{"class":374},"critical ",[324,919,379],{"class":378},[324,921,429],{"class":350},[324,923,432],{"class":374},[324,925,435],{"class":378},[324,927,530],{"class":382},[324,929,441],{"class":350},[269,931,933],{"id":932},"memory-alerting-service","Memory Alerting Service",[265,935,936],{},"The Memory Alerting Service provides intelligent memory monitoring with configurable thresholds, alert channels, and automatic escalation.",[277,938,57],{"id":939},"features-1",[281,941,942,948,954,960],{},[284,943,944,947],{},[287,945,946],{},"Multi-Channel Alerting",": Email, Slack, webhook notifications",[284,949,950,953],{},[287,951,952],{},"Intelligent Throttling",": Prevent alert spam with configurable intervals",[284,955,956,959],{},[287,957,958],{},"Escalation Policies",": Automatic escalation for critical situations",[284,961,962,965],{},[287,963,964],{},"Historical Tracking",": Maintain alert history and patterns",[277,967,969],{"id":968},"basic-setup","Basic Setup",[314,971,973],{"className":316,"code":972,"language":318,"meta":319,"style":319},"use Glueful\\Performance\\MemoryAlertingService;\n\n$alertService = new MemoryAlertingService([\n    'channels' => [\n        'email' => [\n            'enabled' => true,\n            'recipients' => ['admin@example.com', 'ops@example.com'],\n            'threshold' => 'warning'\n        ],\n        'slack' => [\n            'enabled' => true,\n            'webhook_url' => 'https://hooks.slack.com/...',\n            'channel' => '#alerts',\n            'threshold' => 'critical'\n        ]\n    ],\n    'thresholds' => [\n        'warning' => 75,   // 75% memory usage\n        'critical' => 90,  // 90% memory usage\n        'emergency' => 95  // 95% memory usage\n    ]\n]);\n\n// Check memory and send alerts if needed\n$alertService->checkAndAlert();\n",[321,974,975,992,996,1014,1027,1040,1054,1087,1106,1110,1123,1137,1157,1177,1194,1200,1205,1219,1238,1257,1275,1281,1287,1292,1298],{"__ignoreMap":319},[324,976,977,979,981,983,985,987,990],{"class":326,"line":327},[324,978,331],{"class":330},[324,980,335],{"class":334},[324,982,339],{"class":338},[324,984,125],{"class":334},[324,986,339],{"class":338},[324,988,989],{"class":346},"MemoryAlertingService",[324,991,351],{"class":350},[324,993,994],{"class":326,"line":354},[324,995,358],{"emptyLinePlaceholder":357},[324,997,998,1000,1003,1005,1008,1011],{"class":326,"line":361},[324,999,371],{"class":350},[324,1001,1002],{"class":374},"alertService ",[324,1004,379],{"class":378},[324,1006,1007],{"class":330}," new",[324,1009,1010],{"class":395}," MemoryAlertingService",[324,1012,1013],{"class":350},"([\n",[324,1015,1016,1018,1021,1023,1025],{"class":326,"line":368},[324,1017,601],{"class":451},[324,1019,1020],{"class":455},"channels",[324,1022,585],{"class":451},[324,1024,593],{"class":378},[324,1026,596],{"class":350},[324,1028,1029,1031,1034,1036,1038],{"class":326,"line":408},[324,1030,615],{"class":451},[324,1032,1033],{"class":455},"email",[324,1035,585],{"class":451},[324,1037,593],{"class":378},[324,1039,596],{"class":350},[324,1041,1042,1044,1046,1048,1050,1052],{"class":326,"line":413},[324,1043,629],{"class":451},[324,1045,632],{"class":455},[324,1047,585],{"class":451},[324,1049,593],{"class":378},[324,1051,640],{"class":639},[324,1053,643],{"class":350},[324,1055,1056,1058,1061,1063,1065,1068,1070,1073,1075,1077,1080,1083,1085],{"class":326,"line":419},[324,1057,629],{"class":451},[324,1059,1060],{"class":455},"recipients",[324,1062,585],{"class":451},[324,1064,593],{"class":378},[324,1066,1067],{"class":350}," [",[324,1069,585],{"class":451},[324,1071,1072],{"class":455},"admin@example.com",[324,1074,585],{"class":451},[324,1076,392],{"class":350},[324,1078,1079],{"class":451}," '",[324,1081,1082],{"class":455},"ops@example.com",[324,1084,585],{"class":451},[324,1086,707],{"class":350},[324,1088,1089,1091,1094,1096,1098,1100,1103],{"class":326,"line":444},[324,1090,629],{"class":451},[324,1092,1093],{"class":455},"threshold",[324,1095,585],{"class":451},[324,1097,593],{"class":378},[324,1099,1079],{"class":451},[324,1101,1102],{"class":455},"warning",[324,1104,1105],{"class":451},"'\n",[324,1107,1108],{"class":326,"line":505},[324,1109,697],{"class":350},[324,1111,1112,1114,1117,1119,1121],{"class":326,"line":510},[324,1113,615],{"class":451},[324,1115,1116],{"class":455},"slack",[324,1118,585],{"class":451},[324,1120,593],{"class":378},[324,1122,596],{"class":350},[324,1124,1125,1127,1129,1131,1133,1135],{"class":326,"line":516},[324,1126,629],{"class":451},[324,1128,632],{"class":455},[324,1130,585],{"class":451},[324,1132,593],{"class":378},[324,1134,640],{"class":639},[324,1136,643],{"class":350},[324,1138,1139,1141,1144,1146,1148,1150,1153,1155],{"class":326,"line":539},[324,1140,629],{"class":451},[324,1142,1143],{"class":455},"webhook_url",[324,1145,585],{"class":451},[324,1147,593],{"class":378},[324,1149,1079],{"class":451},[324,1151,1152],{"class":455},"https://hooks.slack.com/...",[324,1154,585],{"class":451},[324,1156,643],{"class":350},[324,1158,1159,1161,1164,1166,1168,1170,1173,1175],{"class":326,"line":545},[324,1160,629],{"class":451},[324,1162,1163],{"class":455},"channel",[324,1165,585],{"class":451},[324,1167,593],{"class":378},[324,1169,1079],{"class":451},[324,1171,1172],{"class":455},"#alerts",[324,1174,585],{"class":451},[324,1176,643],{"class":350},[324,1178,1179,1181,1183,1185,1187,1189,1192],{"class":326,"line":560},[324,1180,629],{"class":451},[324,1182,1093],{"class":455},[324,1184,585],{"class":451},[324,1186,593],{"class":378},[324,1188,1079],{"class":451},[324,1190,1191],{"class":455},"critical",[324,1193,1105],{"class":451},[324,1195,1197],{"class":326,"line":1196},15,[324,1198,1199],{"class":350},"        ]\n",[324,1201,1203],{"class":326,"line":1202},16,[324,1204,702],{"class":350},[324,1206,1208,1210,1213,1215,1217],{"class":326,"line":1207},17,[324,1209,601],{"class":451},[324,1211,1212],{"class":455},"thresholds",[324,1214,585],{"class":451},[324,1216,593],{"class":378},[324,1218,596],{"class":350},[324,1220,1222,1224,1226,1228,1230,1233,1235],{"class":326,"line":1221},18,[324,1223,615],{"class":451},[324,1225,1102],{"class":455},[324,1227,585],{"class":451},[324,1229,593],{"class":378},[324,1231,1232],{"class":657}," 75",[324,1234,392],{"class":350},[324,1236,1237],{"class":364},"   // 75% memory usage\n",[324,1239,1241,1243,1245,1247,1249,1252,1254],{"class":326,"line":1240},19,[324,1242,615],{"class":451},[324,1244,1191],{"class":455},[324,1246,585],{"class":451},[324,1248,593],{"class":378},[324,1250,1251],{"class":657}," 90",[324,1253,392],{"class":350},[324,1255,1256],{"class":364},"  // 90% memory usage\n",[324,1258,1260,1262,1265,1267,1269,1272],{"class":326,"line":1259},20,[324,1261,615],{"class":451},[324,1263,1264],{"class":455},"emergency",[324,1266,585],{"class":451},[324,1268,593],{"class":378},[324,1270,1271],{"class":657}," 95",[324,1273,1274],{"class":364},"  // 95% memory usage\n",[324,1276,1278],{"class":326,"line":1277},21,[324,1279,1280],{"class":350},"    ]\n",[324,1282,1284],{"class":326,"line":1283},22,[324,1285,1286],{"class":350},"]);\n",[324,1288,1290],{"class":326,"line":1289},23,[324,1291,358],{"emptyLinePlaceholder":357},[324,1293,1295],{"class":326,"line":1294},24,[324,1296,1297],{"class":364},"// Check memory and send alerts if needed\n",[324,1299,1301,1303,1306,1308,1311],{"class":326,"line":1300},25,[324,1302,371],{"class":350},[324,1304,1305],{"class":374},"alertService",[324,1307,435],{"class":378},[324,1309,1310],{"class":382},"checkAndAlert",[324,1312,441],{"class":350},[277,1314,1316],{"id":1315},"alert-channels","Alert Channels",[1318,1319,1321],"h4",{"id":1320},"email-alerts","Email Alerts",[314,1323,1325],{"className":316,"code":1324,"language":318,"meta":319,"style":319},"$emailConfig = [\n    'enabled' => true,\n    'recipients' => ['admin@example.com'],\n    'threshold' => 'warning',\n    'throttle_minutes' => 15,\n    'template' => 'memory_alert'\n];\n",[321,1326,1327,1338,1352,1372,1390,1406,1424],{"__ignoreMap":319},[324,1328,1329,1331,1334,1336],{"class":326,"line":327},[324,1330,371],{"class":350},[324,1332,1333],{"class":374},"emailConfig ",[324,1335,379],{"class":378},[324,1337,596],{"class":350},[324,1339,1340,1342,1344,1346,1348,1350],{"class":326,"line":354},[324,1341,601],{"class":451},[324,1343,632],{"class":455},[324,1345,585],{"class":451},[324,1347,593],{"class":378},[324,1349,640],{"class":639},[324,1351,643],{"class":350},[324,1353,1354,1356,1358,1360,1362,1364,1366,1368,1370],{"class":326,"line":361},[324,1355,601],{"class":451},[324,1357,1060],{"class":455},[324,1359,585],{"class":451},[324,1361,593],{"class":378},[324,1363,1067],{"class":350},[324,1365,585],{"class":451},[324,1367,1072],{"class":455},[324,1369,585],{"class":451},[324,1371,707],{"class":350},[324,1373,1374,1376,1378,1380,1382,1384,1386,1388],{"class":326,"line":368},[324,1375,601],{"class":451},[324,1377,1093],{"class":455},[324,1379,585],{"class":451},[324,1381,593],{"class":378},[324,1383,1079],{"class":451},[324,1385,1102],{"class":455},[324,1387,585],{"class":451},[324,1389,643],{"class":350},[324,1391,1392,1394,1397,1399,1401,1404],{"class":326,"line":408},[324,1393,601],{"class":451},[324,1395,1396],{"class":455},"throttle_minutes",[324,1398,585],{"class":451},[324,1400,593],{"class":378},[324,1402,1403],{"class":657}," 15",[324,1405,643],{"class":350},[324,1407,1408,1410,1413,1415,1417,1419,1422],{"class":326,"line":413},[324,1409,601],{"class":451},[324,1411,1412],{"class":455},"template",[324,1414,585],{"class":451},[324,1416,593],{"class":378},[324,1418,1079],{"class":451},[324,1420,1421],{"class":455},"memory_alert",[324,1423,1105],{"class":451},[324,1425,1426],{"class":326,"line":419},[324,1427,1428],{"class":350},"];\n",[1318,1430,1432],{"id":1431},"slack-alerts","Slack Alerts",[314,1434,1436],{"className":316,"code":1435,"language":318,"meta":319,"style":319},"$slackConfig = [\n    'enabled' => true,\n    'webhook_url' => 'https://hooks.slack.com/services/...',\n    'channel' => '#alerts',\n    'username' => 'Glueful Monitor',\n    'threshold' => 'critical',\n    'throttle_minutes' => 5\n];\n",[321,1437,1438,1449,1463,1482,1500,1520,1538,1551],{"__ignoreMap":319},[324,1439,1440,1442,1445,1447],{"class":326,"line":327},[324,1441,371],{"class":350},[324,1443,1444],{"class":374},"slackConfig ",[324,1446,379],{"class":378},[324,1448,596],{"class":350},[324,1450,1451,1453,1455,1457,1459,1461],{"class":326,"line":354},[324,1452,601],{"class":451},[324,1454,632],{"class":455},[324,1456,585],{"class":451},[324,1458,593],{"class":378},[324,1460,640],{"class":639},[324,1462,643],{"class":350},[324,1464,1465,1467,1469,1471,1473,1475,1478,1480],{"class":326,"line":361},[324,1466,601],{"class":451},[324,1468,1143],{"class":455},[324,1470,585],{"class":451},[324,1472,593],{"class":378},[324,1474,1079],{"class":451},[324,1476,1477],{"class":455},"https://hooks.slack.com/services/...",[324,1479,585],{"class":451},[324,1481,643],{"class":350},[324,1483,1484,1486,1488,1490,1492,1494,1496,1498],{"class":326,"line":368},[324,1485,601],{"class":451},[324,1487,1163],{"class":455},[324,1489,585],{"class":451},[324,1491,593],{"class":378},[324,1493,1079],{"class":451},[324,1495,1172],{"class":455},[324,1497,585],{"class":451},[324,1499,643],{"class":350},[324,1501,1502,1504,1507,1509,1511,1513,1516,1518],{"class":326,"line":408},[324,1503,601],{"class":451},[324,1505,1506],{"class":455},"username",[324,1508,585],{"class":451},[324,1510,593],{"class":378},[324,1512,1079],{"class":451},[324,1514,1515],{"class":455},"Glueful Monitor",[324,1517,585],{"class":451},[324,1519,643],{"class":350},[324,1521,1522,1524,1526,1528,1530,1532,1534,1536],{"class":326,"line":413},[324,1523,601],{"class":451},[324,1525,1093],{"class":455},[324,1527,585],{"class":451},[324,1529,593],{"class":378},[324,1531,1079],{"class":451},[324,1533,1191],{"class":455},[324,1535,585],{"class":451},[324,1537,643],{"class":350},[324,1539,1540,1542,1544,1546,1548],{"class":326,"line":419},[324,1541,601],{"class":451},[324,1543,1396],{"class":455},[324,1545,585],{"class":451},[324,1547,593],{"class":378},[324,1549,1550],{"class":657}," 5\n",[324,1552,1553],{"class":326,"line":444},[324,1554,1428],{"class":350},[1318,1556,1558],{"id":1557},"webhook-alerts","Webhook Alerts",[314,1560,1562],{"className":316,"code":1561,"language":318,"meta":319,"style":319},"$webhookConfig = [\n    'enabled' => true,\n    'url' => 'https://your-monitoring-system.com/alerts',\n    'threshold' => 'warning',\n    'timeout' => 30,\n    'retry_attempts' => 3\n];\n",[321,1563,1564,1575,1589,1609,1627,1643,1657],{"__ignoreMap":319},[324,1565,1566,1568,1571,1573],{"class":326,"line":327},[324,1567,371],{"class":350},[324,1569,1570],{"class":374},"webhookConfig ",[324,1572,379],{"class":378},[324,1574,596],{"class":350},[324,1576,1577,1579,1581,1583,1585,1587],{"class":326,"line":354},[324,1578,601],{"class":451},[324,1580,632],{"class":455},[324,1582,585],{"class":451},[324,1584,593],{"class":378},[324,1586,640],{"class":639},[324,1588,643],{"class":350},[324,1590,1591,1593,1596,1598,1600,1602,1605,1607],{"class":326,"line":361},[324,1592,601],{"class":451},[324,1594,1595],{"class":455},"url",[324,1597,585],{"class":451},[324,1599,593],{"class":378},[324,1601,1079],{"class":451},[324,1603,1604],{"class":455},"https://your-monitoring-system.com/alerts",[324,1606,585],{"class":451},[324,1608,643],{"class":350},[324,1610,1611,1613,1615,1617,1619,1621,1623,1625],{"class":326,"line":368},[324,1612,601],{"class":451},[324,1614,1093],{"class":455},[324,1616,585],{"class":451},[324,1618,593],{"class":378},[324,1620,1079],{"class":451},[324,1622,1102],{"class":455},[324,1624,585],{"class":451},[324,1626,643],{"class":350},[324,1628,1629,1631,1634,1636,1638,1641],{"class":326,"line":408},[324,1630,601],{"class":451},[324,1632,1633],{"class":455},"timeout",[324,1635,585],{"class":451},[324,1637,593],{"class":378},[324,1639,1640],{"class":657}," 30",[324,1642,643],{"class":350},[324,1644,1645,1647,1650,1652,1654],{"class":326,"line":413},[324,1646,601],{"class":451},[324,1648,1649],{"class":455},"retry_attempts",[324,1651,585],{"class":451},[324,1653,593],{"class":378},[324,1655,1656],{"class":657}," 3\n",[324,1658,1659],{"class":326,"line":419},[324,1660,1428],{"class":350},[277,1662,958],{"id":1663},"escalation-policies",[314,1665,1667],{"className":316,"code":1666,"language":318,"meta":319,"style":319},"$escalationConfig = [\n    'enabled' => true,\n    'levels' => [\n        1 => ['email' => ['admin@example.com']],\n        2 => ['email' => ['manager@example.com'], 'slack' => true],\n        3 => ['webhook' => 'https://pager-duty.com/...']\n    ],\n    'escalation_intervals' => [5, 15, 30] // minutes\n];\n",[321,1668,1669,1680,1694,1707,1735,1776,1804,1808,1838],{"__ignoreMap":319},[324,1670,1671,1673,1676,1678],{"class":326,"line":327},[324,1672,371],{"class":350},[324,1674,1675],{"class":374},"escalationConfig ",[324,1677,379],{"class":378},[324,1679,596],{"class":350},[324,1681,1682,1684,1686,1688,1690,1692],{"class":326,"line":354},[324,1683,601],{"class":451},[324,1685,632],{"class":455},[324,1687,585],{"class":451},[324,1689,593],{"class":378},[324,1691,640],{"class":639},[324,1693,643],{"class":350},[324,1695,1696,1698,1701,1703,1705],{"class":326,"line":361},[324,1697,601],{"class":451},[324,1699,1700],{"class":455},"levels",[324,1702,585],{"class":451},[324,1704,593],{"class":378},[324,1706,596],{"class":350},[324,1708,1709,1712,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732],{"class":326,"line":368},[324,1710,1711],{"class":657},"        1",[324,1713,593],{"class":378},[324,1715,1067],{"class":350},[324,1717,585],{"class":451},[324,1719,1033],{"class":455},[324,1721,585],{"class":451},[324,1723,593],{"class":378},[324,1725,1067],{"class":350},[324,1727,585],{"class":451},[324,1729,1072],{"class":455},[324,1731,585],{"class":451},[324,1733,1734],{"class":350},"]],\n",[324,1736,1737,1740,1742,1744,1746,1748,1750,1752,1754,1756,1759,1761,1764,1766,1768,1770,1772,1774],{"class":326,"line":408},[324,1738,1739],{"class":657},"        2",[324,1741,593],{"class":378},[324,1743,1067],{"class":350},[324,1745,585],{"class":451},[324,1747,1033],{"class":455},[324,1749,585],{"class":451},[324,1751,593],{"class":378},[324,1753,1067],{"class":350},[324,1755,585],{"class":451},[324,1757,1758],{"class":455},"manager@example.com",[324,1760,585],{"class":451},[324,1762,1763],{"class":350},"],",[324,1765,1079],{"class":451},[324,1767,1116],{"class":455},[324,1769,585],{"class":451},[324,1771,593],{"class":378},[324,1773,640],{"class":639},[324,1775,707],{"class":350},[324,1777,1778,1781,1783,1785,1787,1790,1792,1794,1796,1799,1801],{"class":326,"line":413},[324,1779,1780],{"class":657},"        3",[324,1782,593],{"class":378},[324,1784,1067],{"class":350},[324,1786,585],{"class":451},[324,1788,1789],{"class":455},"webhook",[324,1791,585],{"class":451},[324,1793,593],{"class":378},[324,1795,1079],{"class":451},[324,1797,1798],{"class":455},"https://pager-duty.com/...",[324,1800,585],{"class":451},[324,1802,1803],{"class":350},"]\n",[324,1805,1806],{"class":326,"line":419},[324,1807,702],{"class":350},[324,1809,1810,1812,1815,1817,1819,1821,1824,1826,1828,1830,1832,1835],{"class":326,"line":444},[324,1811,601],{"class":451},[324,1813,1814],{"class":455},"escalation_intervals",[324,1816,585],{"class":451},[324,1818,593],{"class":378},[324,1820,1067],{"class":350},[324,1822,1823],{"class":657},"5",[324,1825,392],{"class":350},[324,1827,1403],{"class":657},[324,1829,392],{"class":350},[324,1831,1640],{"class":657},[324,1833,1834],{"class":350},"]",[324,1836,1837],{"class":364}," // minutes\n",[324,1839,1840],{"class":326,"line":505},[324,1841,1428],{"class":350},[277,1843,1845],{"id":1844},"advanced-configuration","Advanced Configuration",[314,1847,1849],{"className":316,"code":1848,"language":318,"meta":319,"style":319},"$advancedConfig = [\n    'history_retention_days' => 30,\n    'alert_cooldown_minutes' => 10,\n    'batch_alerts' => true,\n    'include_system_info' => true,\n    'custom_metrics' => [\n        'cpu_usage' => true,\n        'disk_usage' => true,\n        'active_connections' => true\n    ]\n];\n",[321,1850,1851,1862,1877,1893,1908,1923,1936,1951,1966,1980,1984],{"__ignoreMap":319},[324,1852,1853,1855,1858,1860],{"class":326,"line":327},[324,1854,371],{"class":350},[324,1856,1857],{"class":374},"advancedConfig ",[324,1859,379],{"class":378},[324,1861,596],{"class":350},[324,1863,1864,1866,1869,1871,1873,1875],{"class":326,"line":354},[324,1865,601],{"class":451},[324,1867,1868],{"class":455},"history_retention_days",[324,1870,585],{"class":451},[324,1872,593],{"class":378},[324,1874,1640],{"class":657},[324,1876,643],{"class":350},[324,1878,1879,1881,1884,1886,1888,1891],{"class":326,"line":361},[324,1880,601],{"class":451},[324,1882,1883],{"class":455},"alert_cooldown_minutes",[324,1885,585],{"class":451},[324,1887,593],{"class":378},[324,1889,1890],{"class":657}," 10",[324,1892,643],{"class":350},[324,1894,1895,1897,1900,1902,1904,1906],{"class":326,"line":368},[324,1896,601],{"class":451},[324,1898,1899],{"class":455},"batch_alerts",[324,1901,585],{"class":451},[324,1903,593],{"class":378},[324,1905,640],{"class":639},[324,1907,643],{"class":350},[324,1909,1910,1912,1915,1917,1919,1921],{"class":326,"line":408},[324,1911,601],{"class":451},[324,1913,1914],{"class":455},"include_system_info",[324,1916,585],{"class":451},[324,1918,593],{"class":378},[324,1920,640],{"class":639},[324,1922,643],{"class":350},[324,1924,1925,1927,1930,1932,1934],{"class":326,"line":413},[324,1926,601],{"class":451},[324,1928,1929],{"class":455},"custom_metrics",[324,1931,585],{"class":451},[324,1933,593],{"class":378},[324,1935,596],{"class":350},[324,1937,1938,1940,1943,1945,1947,1949],{"class":326,"line":419},[324,1939,615],{"class":451},[324,1941,1942],{"class":455},"cpu_usage",[324,1944,585],{"class":451},[324,1946,593],{"class":378},[324,1948,640],{"class":639},[324,1950,643],{"class":350},[324,1952,1953,1955,1958,1960,1962,1964],{"class":326,"line":444},[324,1954,615],{"class":451},[324,1956,1957],{"class":455},"disk_usage",[324,1959,585],{"class":451},[324,1961,593],{"class":378},[324,1963,640],{"class":639},[324,1965,643],{"class":350},[324,1967,1968,1970,1973,1975,1977],{"class":326,"line":505},[324,1969,615],{"class":451},[324,1971,1972],{"class":455},"active_connections",[324,1974,585],{"class":451},[324,1976,593],{"class":378},[324,1978,1979],{"class":639}," true\n",[324,1981,1982],{"class":326,"line":510},[324,1983,1280],{"class":350},[324,1985,1986],{"class":326,"line":516},[324,1987,1428],{"class":350},[269,1989,1991],{"id":1990},"memory-efficient-iterators","Memory Efficient Iterators",[265,1993,1994],{},"Memory efficient iterators for processing large datasets without loading everything into memory.",[277,1996,1998],{"id":1997},"streamingiterator","StreamingIterator",[265,2000,2001],{},"Wrap any iterable, generator, or array and stream it through a bounded in-memory buffer:",[314,2003,2005],{"className":316,"code":2004,"language":318,"meta":319,"style":319},"use Glueful\\Performance\\StreamingIterator;\n\n// Second argument is the buffer size (items held in memory at once); default 100.\n$iterator = new StreamingIterator($dataSource, 1000);\n\nforeach ($iterator as $item) {\n    processItem($item);\n}\n",[321,2006,2007,2023,2027,2032,2058,2062,2084,2095],{"__ignoreMap":319},[324,2008,2009,2011,2013,2015,2017,2019,2021],{"class":326,"line":327},[324,2010,331],{"class":330},[324,2012,335],{"class":334},[324,2014,339],{"class":338},[324,2016,125],{"class":334},[324,2018,339],{"class":338},[324,2020,1998],{"class":346},[324,2022,351],{"class":350},[324,2024,2025],{"class":326,"line":354},[324,2026,358],{"emptyLinePlaceholder":357},[324,2028,2029],{"class":326,"line":361},[324,2030,2031],{"class":364},"// Second argument is the buffer size (items held in memory at once); default 100.\n",[324,2033,2034,2036,2039,2041,2043,2046,2048,2051,2053,2056],{"class":326,"line":368},[324,2035,371],{"class":350},[324,2037,2038],{"class":374},"iterator ",[324,2040,379],{"class":378},[324,2042,1007],{"class":330},[324,2044,2045],{"class":395}," StreamingIterator",[324,2047,386],{"class":350},[324,2049,2050],{"class":374},"dataSource",[324,2052,392],{"class":350},[324,2054,2055],{"class":657}," 1000",[324,2057,405],{"class":350},[324,2059,2060],{"class":326,"line":408},[324,2061,358],{"emptyLinePlaceholder":357},[324,2063,2064,2067,2069,2071,2074,2076,2079,2082],{"class":326,"line":413},[324,2065,2066],{"class":519},"foreach",[324,2068,523],{"class":350},[324,2070,2038],{"class":374},[324,2072,2073],{"class":378},"as",[324,2075,429],{"class":350},[324,2077,2078],{"class":374},"item",[324,2080,2081],{"class":350},")",[324,2083,536],{"class":350},[324,2085,2086,2089,2091,2093],{"class":326,"line":419},[324,2087,2088],{"class":382},"    processItem",[324,2090,386],{"class":350},[324,2092,2078],{"class":374},[324,2094,405],{"class":350},[324,2096,2097],{"class":326,"line":444},[324,2098,563],{"class":350},[277,2100,2102],{"id":2101},"lazy-database-streaming","Lazy database streaming",[265,2104,2105,2106,2109],{},"Stream a large result set row by row instead of fetching it all at once — pass an executed PDO statement to ",[321,2107,2108],{},"MemoryEfficientIterators::databaseResults()",", which yields rows in batches:",[314,2111,2113],{"className":316,"code":2112,"language":318,"meta":319,"style":319},"use Glueful\\Performance\\MemoryEfficientIterators;\n\n$stmt = $connection->getPDO()->prepare('SELECT * FROM events WHERE created_at >= ?');\n$stmt->execute([$since]);\n\n// Generator — fetches `$fetchSize` rows at a time (default 100), never the whole set.\nforeach (MemoryEfficientIterators::databaseResults($stmt, 500) as $row) {\n    processItem($row);\n}\n",[321,2114,2115,2132,2136,2196,2216,2220,2225,2262,2272],{"__ignoreMap":319},[324,2116,2117,2119,2121,2123,2125,2127,2130],{"class":326,"line":327},[324,2118,331],{"class":330},[324,2120,335],{"class":334},[324,2122,339],{"class":338},[324,2124,125],{"class":334},[324,2126,339],{"class":338},[324,2128,2129],{"class":346},"MemoryEfficientIterators",[324,2131,351],{"class":350},[324,2133,2134],{"class":326,"line":354},[324,2135,358],{"emptyLinePlaceholder":357},[324,2137,2138,2140,2143,2145,2147,2150,2152,2155,2158,2160,2163,2166,2168,2171,2174,2177,2180,2183,2186,2189,2192,2194],{"class":326,"line":361},[324,2139,371],{"class":350},[324,2141,2142],{"class":374},"stmt ",[324,2144,379],{"class":378},[324,2146,429],{"class":350},[324,2148,2149],{"class":374},"connection",[324,2151,435],{"class":378},[324,2153,2154],{"class":382},"getPDO",[324,2156,2157],{"class":350},"()",[324,2159,435],{"class":378},[324,2161,2162],{"class":382},"prepare",[324,2164,2165],{"class":350},"(",[324,2167,585],{"class":451},[324,2169,2170],{"class":330},"SELECT",[324,2172,2173],{"class":378}," *",[324,2175,2176],{"class":330}," FROM",[324,2178,2179],{"class":455}," events ",[324,2181,2182],{"class":330},"WHERE",[324,2184,2185],{"class":455}," created_at ",[324,2187,2188],{"class":378},">=",[324,2190,2191],{"class":455}," ?",[324,2193,585],{"class":451},[324,2195,405],{"class":350},[324,2197,2198,2200,2203,2205,2208,2211,2214],{"class":326,"line":368},[324,2199,371],{"class":350},[324,2201,2202],{"class":374},"stmt",[324,2204,435],{"class":378},[324,2206,2207],{"class":382},"execute",[324,2209,2210],{"class":350},"([$",[324,2212,2213],{"class":374},"since",[324,2215,1286],{"class":350},[324,2217,2218],{"class":326,"line":408},[324,2219,358],{"emptyLinePlaceholder":357},[324,2221,2222],{"class":326,"line":413},[324,2223,2224],{"class":364},"// Generator — fetches `$fetchSize` rows at a time (default 100), never the whole set.\n",[324,2226,2227,2229,2232,2234,2236,2239,2241,2243,2245,2248,2250,2253,2255,2258,2260],{"class":326,"line":419},[324,2228,2066],{"class":519},[324,2230,2231],{"class":350}," (",[324,2233,2129],{"class":395},[324,2235,399],{"class":378},[324,2237,2238],{"class":382},"databaseResults",[324,2240,386],{"class":350},[324,2242,2202],{"class":374},[324,2244,392],{"class":350},[324,2246,2247],{"class":657}," 500",[324,2249,2081],{"class":350},[324,2251,2252],{"class":378}," as",[324,2254,429],{"class":350},[324,2256,2257],{"class":374},"row",[324,2259,2081],{"class":350},[324,2261,536],{"class":350},[324,2263,2264,2266,2268,2270],{"class":326,"line":444},[324,2265,2088],{"class":382},[324,2267,386],{"class":350},[324,2269,2257],{"class":374},[324,2271,405],{"class":350},[324,2273,2274],{"class":326,"line":505},[324,2275,563],{"class":350},[277,2277,2279],{"id":2278},"mapping-filtering-without-buffering","Mapping & filtering without buffering",[265,2281,2282,2285,2286,2289],{},[321,2283,2284],{},"map()"," and ",[321,2287,2288],{},"filter()"," return generators, so transforms and predicates apply lazily as you iterate — no intermediate array is built:",[314,2291,2293],{"className":316,"code":2292,"language":318,"meta":319,"style":319},"use Glueful\\Performance\\MemoryEfficientIterators;\n\n$active = MemoryEfficientIterators::filter(\n    $dataSource,\n    fn ($item) => $item['status'] === 'active' && $item['score'] > 50,\n);\n\nforeach ($active as $item) {\n    processActiveHighScoreItem($item);\n}\n\n// Compose helpers — stream a file line by line, then map each line:\nforeach (MemoryEfficientIterators::map(\n    MemoryEfficientIterators::fileLineByLine('/path/to/large.csv'),\n    fn ($line) => str_getcsv($line),\n) as $columns) {\n    // ...\n}\n",[321,2294,2295,2311,2315,2335,2343,2409,2413,2417,2435,2446,2450,2454,2459,2474,2496,2517,2532,2537],{"__ignoreMap":319},[324,2296,2297,2299,2301,2303,2305,2307,2309],{"class":326,"line":327},[324,2298,331],{"class":330},[324,2300,335],{"class":334},[324,2302,339],{"class":338},[324,2304,125],{"class":334},[324,2306,339],{"class":338},[324,2308,2129],{"class":346},[324,2310,351],{"class":350},[324,2312,2313],{"class":326,"line":354},[324,2314,358],{"emptyLinePlaceholder":357},[324,2316,2317,2319,2322,2324,2327,2329,2332],{"class":326,"line":361},[324,2318,371],{"class":350},[324,2320,2321],{"class":374},"active ",[324,2323,379],{"class":378},[324,2325,2326],{"class":395}," MemoryEfficientIterators",[324,2328,399],{"class":378},[324,2330,2331],{"class":382},"filter",[324,2333,2334],{"class":350},"(\n",[324,2336,2337,2339,2341],{"class":326,"line":368},[324,2338,548],{"class":350},[324,2340,2050],{"class":374},[324,2342,643],{"class":350},[324,2344,2345,2349,2351,2353,2355,2357,2359,2361,2364,2366,2369,2371,2373,2376,2378,2381,2383,2386,2388,2390,2392,2394,2397,2399,2401,2404,2407],{"class":326,"line":408},[324,2346,2348],{"class":2347},"srJo8","    fn",[324,2350,523],{"class":350},[324,2352,2078],{"class":374},[324,2354,2081],{"class":350},[324,2356,593],{"class":350},[324,2358,429],{"class":350},[324,2360,2078],{"class":374},[324,2362,2363],{"class":350},"[",[324,2365,585],{"class":451},[324,2367,2368],{"class":455},"status",[324,2370,585],{"class":451},[324,2372,1834],{"class":350},[324,2374,2375],{"class":378}," ===",[324,2377,1079],{"class":451},[324,2379,2380],{"class":455},"active",[324,2382,585],{"class":451},[324,2384,2385],{"class":378}," &&",[324,2387,429],{"class":350},[324,2389,2078],{"class":374},[324,2391,2363],{"class":350},[324,2393,585],{"class":451},[324,2395,2396],{"class":455},"score",[324,2398,585],{"class":451},[324,2400,1834],{"class":350},[324,2402,2403],{"class":378}," >",[324,2405,2406],{"class":657}," 50",[324,2408,643],{"class":350},[324,2410,2411],{"class":326,"line":413},[324,2412,405],{"class":350},[324,2414,2415],{"class":326,"line":419},[324,2416,358],{"emptyLinePlaceholder":357},[324,2418,2419,2421,2423,2425,2427,2429,2431,2433],{"class":326,"line":444},[324,2420,2066],{"class":519},[324,2422,523],{"class":350},[324,2424,2321],{"class":374},[324,2426,2073],{"class":378},[324,2428,429],{"class":350},[324,2430,2078],{"class":374},[324,2432,2081],{"class":350},[324,2434,536],{"class":350},[324,2436,2437,2440,2442,2444],{"class":326,"line":505},[324,2438,2439],{"class":382},"    processActiveHighScoreItem",[324,2441,386],{"class":350},[324,2443,2078],{"class":374},[324,2445,405],{"class":350},[324,2447,2448],{"class":326,"line":510},[324,2449,563],{"class":350},[324,2451,2452],{"class":326,"line":516},[324,2453,358],{"emptyLinePlaceholder":357},[324,2455,2456],{"class":326,"line":539},[324,2457,2458],{"class":364},"// Compose helpers — stream a file line by line, then map each line:\n",[324,2460,2461,2463,2465,2467,2469,2472],{"class":326,"line":545},[324,2462,2066],{"class":519},[324,2464,2231],{"class":350},[324,2466,2129],{"class":395},[324,2468,399],{"class":378},[324,2470,2471],{"class":382},"map",[324,2473,2334],{"class":350},[324,2475,2476,2479,2481,2484,2486,2488,2491,2493],{"class":326,"line":560},[324,2477,2478],{"class":395},"    MemoryEfficientIterators",[324,2480,399],{"class":378},[324,2482,2483],{"class":382},"fileLineByLine",[324,2485,2165],{"class":350},[324,2487,585],{"class":451},[324,2489,2490],{"class":455},"/path/to/large.csv",[324,2492,585],{"class":451},[324,2494,2495],{"class":350},"),\n",[324,2497,2498,2500,2502,2504,2506,2508,2511,2513,2515],{"class":326,"line":1196},[324,2499,2348],{"class":2347},[324,2501,523],{"class":350},[324,2503,326],{"class":374},[324,2505,2081],{"class":350},[324,2507,593],{"class":350},[324,2509,2510],{"class":447}," str_getcsv",[324,2512,386],{"class":350},[324,2514,326],{"class":374},[324,2516,2495],{"class":350},[324,2518,2519,2521,2523,2525,2528,2530],{"class":326,"line":1202},[324,2520,2081],{"class":350},[324,2522,2252],{"class":378},[324,2524,429],{"class":350},[324,2526,2527],{"class":374},"columns",[324,2529,2081],{"class":350},[324,2531,536],{"class":350},[324,2533,2534],{"class":326,"line":1207},[324,2535,2536],{"class":364},"    // ...\n",[324,2538,2539],{"class":326,"line":1221},[324,2540,563],{"class":350},[277,2542,2544],{"id":2543},"chunked-processing","Chunked processing",[265,2546,2547,2548,2551],{},"For chunk-at-a-time work (e.g. bulk inserts), ",[321,2549,2550],{},"processInChunks()"," calls your callback once per chunk:",[314,2553,2555],{"className":316,"code":2554,"language":318,"meta":319,"style":319},"use Glueful\\Performance\\MemoryEfficientIterators;\n\nMemoryEfficientIterators::processInChunks($dataSource, function (array $chunk) {\n    // $chunk holds up to the chunk size (default 1000) items\n    bulkInsert($chunk);\n}, chunkSize: 1000);\n",[321,2556,2557,2573,2577,2609,2614,2625],{"__ignoreMap":319},[324,2558,2559,2561,2563,2565,2567,2569,2571],{"class":326,"line":327},[324,2560,331],{"class":330},[324,2562,335],{"class":334},[324,2564,339],{"class":338},[324,2566,125],{"class":334},[324,2568,339],{"class":338},[324,2570,2129],{"class":346},[324,2572,351],{"class":350},[324,2574,2575],{"class":326,"line":354},[324,2576,358],{"emptyLinePlaceholder":357},[324,2578,2579,2581,2583,2586,2588,2590,2592,2595,2597,2600,2602,2605,2607],{"class":326,"line":361},[324,2580,2129],{"class":395},[324,2582,399],{"class":378},[324,2584,2585],{"class":382},"processInChunks",[324,2587,386],{"class":350},[324,2589,2050],{"class":374},[324,2591,392],{"class":350},[324,2593,2594],{"class":2347}," function",[324,2596,2231],{"class":350},[324,2598,2599],{"class":330},"array",[324,2601,429],{"class":350},[324,2603,2604],{"class":374},"chunk",[324,2606,2081],{"class":350},[324,2608,536],{"class":350},[324,2610,2611],{"class":326,"line":368},[324,2612,2613],{"class":364},"    // $chunk holds up to the chunk size (default 1000) items\n",[324,2615,2616,2619,2621,2623],{"class":326,"line":408},[324,2617,2618],{"class":382},"    bulkInsert",[324,2620,386],{"class":350},[324,2622,2604],{"class":374},[324,2624,405],{"class":350},[324,2626,2627,2630,2634,2637,2639],{"class":326,"line":413},[324,2628,2629],{"class":350},"},",[324,2631,2633],{"class":2632},"sQqfL"," chunkSize",[324,2635,2636],{"class":350},":",[324,2638,2055],{"class":657},[324,2640,405],{"class":350},[269,2642,2644],{"id":2643},"memory-pool","Memory Pool",[265,2646,2647],{},"Object storage and reuse system to reduce memory allocation overhead.",[277,2649,57],{"id":2650},"features-2",[281,2652,2653,2659,2665],{},[284,2654,2655,2658],{},[287,2656,2657],{},"Object Pooling",": Reuse expensive objects by key",[284,2660,2661,2664],{},[287,2662,2663],{},"Bounded Size",": LRU eviction removes least-recently-used entries when the pool is full",[284,2666,2667,2670],{},[287,2668,2669],{},"Statistics",": Monitor pool usage and efficiency",[277,2672,312],{"id":2673},"basic-usage-1",[265,2675,2676,2679,2680,2683,2684,2683,2687,2683,2690,2693],{},[321,2677,2678],{},"MemoryPool"," is a bounded, keyed object store for reusing expensive-to-build objects within a process. Construct it with a maximum size, then ",[321,2681,2682],{},"add","/",[321,2685,2686],{},"get",[321,2688,2689],{},"has",[321,2691,2692],{},"remove"," objects by key:",[314,2695,2697],{"className":316,"code":2696,"language":318,"meta":319,"style":319},"use Glueful\\Performance\\MemoryPool;\n\n$pool = new MemoryPool(maxSize: 100);\n\n// Store an object under a key (evicts the least-recently-used entry if the pool is full)\n$pool->add('report:' . $id, $expensiveReport);\n\n// Reuse it later instead of rebuilding\nif ($pool->has('report:' . $id)) {\n    $report = $pool->get('report:' . $id);\n}\n\n$pool->remove('report:' . $id);   // drop one entry\n$pool->clear();                    // drop everything\n",[321,2698,2699,2715,2719,2745,2749,2754,2791,2795,2800,2831,2864,2868,2872,2902],{"__ignoreMap":319},[324,2700,2701,2703,2705,2707,2709,2711,2713],{"class":326,"line":327},[324,2702,331],{"class":330},[324,2704,335],{"class":334},[324,2706,339],{"class":338},[324,2708,125],{"class":334},[324,2710,339],{"class":338},[324,2712,2678],{"class":346},[324,2714,351],{"class":350},[324,2716,2717],{"class":326,"line":354},[324,2718,358],{"emptyLinePlaceholder":357},[324,2720,2721,2723,2726,2728,2730,2733,2735,2738,2740,2743],{"class":326,"line":361},[324,2722,371],{"class":350},[324,2724,2725],{"class":374},"pool ",[324,2727,379],{"class":378},[324,2729,1007],{"class":330},[324,2731,2732],{"class":395}," MemoryPool",[324,2734,2165],{"class":350},[324,2736,2737],{"class":2632},"maxSize",[324,2739,2636],{"class":350},[324,2741,2742],{"class":657}," 100",[324,2744,405],{"class":350},[324,2746,2747],{"class":326,"line":368},[324,2748,358],{"emptyLinePlaceholder":357},[324,2750,2751],{"class":326,"line":408},[324,2752,2753],{"class":364},"// Store an object under a key (evicts the least-recently-used entry if the pool is full)\n",[324,2755,2756,2758,2761,2763,2765,2767,2769,2772,2774,2777,2779,2782,2784,2786,2789],{"class":326,"line":413},[324,2757,371],{"class":350},[324,2759,2760],{"class":374},"pool",[324,2762,435],{"class":378},[324,2764,2682],{"class":382},[324,2766,2165],{"class":350},[324,2768,585],{"class":451},[324,2770,2771],{"class":455},"report:",[324,2773,585],{"class":451},[324,2775,2776],{"class":378}," .",[324,2778,429],{"class":350},[324,2780,2781],{"class":374},"id",[324,2783,392],{"class":350},[324,2785,429],{"class":350},[324,2787,2788],{"class":374},"expensiveReport",[324,2790,405],{"class":350},[324,2792,2793],{"class":326,"line":419},[324,2794,358],{"emptyLinePlaceholder":357},[324,2796,2797],{"class":326,"line":444},[324,2798,2799],{"class":364},"// Reuse it later instead of rebuilding\n",[324,2801,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820,2822,2824,2826,2829],{"class":326,"line":505},[324,2803,520],{"class":519},[324,2805,523],{"class":350},[324,2807,2760],{"class":374},[324,2809,435],{"class":378},[324,2811,2689],{"class":382},[324,2813,2165],{"class":350},[324,2815,585],{"class":451},[324,2817,2771],{"class":455},[324,2819,585],{"class":451},[324,2821,2776],{"class":378},[324,2823,429],{"class":350},[324,2825,2781],{"class":374},[324,2827,2828],{"class":350},"))",[324,2830,536],{"class":350},[324,2832,2833,2835,2838,2840,2842,2844,2846,2848,2850,2852,2854,2856,2858,2860,2862],{"class":326,"line":510},[324,2834,548],{"class":350},[324,2836,2837],{"class":374},"report ",[324,2839,379],{"class":378},[324,2841,429],{"class":350},[324,2843,2760],{"class":374},[324,2845,435],{"class":378},[324,2847,2686],{"class":382},[324,2849,2165],{"class":350},[324,2851,585],{"class":451},[324,2853,2771],{"class":455},[324,2855,585],{"class":451},[324,2857,2776],{"class":378},[324,2859,429],{"class":350},[324,2861,2781],{"class":374},[324,2863,405],{"class":350},[324,2865,2866],{"class":326,"line":516},[324,2867,563],{"class":350},[324,2869,2870],{"class":326,"line":539},[324,2871,358],{"emptyLinePlaceholder":357},[324,2873,2874,2876,2878,2880,2882,2884,2886,2888,2890,2892,2894,2896,2899],{"class":326,"line":545},[324,2875,371],{"class":350},[324,2877,2760],{"class":374},[324,2879,435],{"class":378},[324,2881,2692],{"class":382},[324,2883,2165],{"class":350},[324,2885,585],{"class":451},[324,2887,2771],{"class":455},[324,2889,585],{"class":451},[324,2891,2776],{"class":378},[324,2893,429],{"class":350},[324,2895,2781],{"class":374},[324,2897,2898],{"class":350},");",[324,2900,2901],{"class":364},"   // drop one entry\n",[324,2903,2904,2906,2908,2910,2913,2915],{"class":326,"line":560},[324,2905,371],{"class":350},[324,2907,2760],{"class":374},[324,2909,435],{"class":378},[324,2911,2912],{"class":382},"clear",[324,2914,793],{"class":350},[324,2916,2917],{"class":364},"                    // drop everything\n",[265,2919,2920,2921,2923],{},"When the pool reaches ",[321,2922,2737],{},", the least-recently-used entries are evicted to make room, so it bounds memory automatically.",[277,2925,2927],{"id":2926},"pool-statistics","Pool statistics",[314,2929,2931],{"className":316,"code":2930,"language":318,"meta":319,"style":319},"$stats = $pool->getStats();   // array of pool-usage metrics (size, capacity, hit/miss counters)\n$keys  = $pool->getKeys();    // the keys currently held\n",[321,2932,2933,2955],{"__ignoreMap":319},[324,2934,2935,2937,2939,2941,2943,2945,2947,2950,2952],{"class":326,"line":327},[324,2936,371],{"class":350},[324,2938,856],{"class":374},[324,2940,379],{"class":378},[324,2942,429],{"class":350},[324,2944,2760],{"class":374},[324,2946,435],{"class":378},[324,2948,2949],{"class":382},"getStats",[324,2951,793],{"class":350},[324,2953,2954],{"class":364},"   // array of pool-usage metrics (size, capacity, hit/miss counters)\n",[324,2956,2957,2959,2962,2964,2966,2968,2970,2973,2975],{"class":326,"line":354},[324,2958,371],{"class":350},[324,2960,2961],{"class":374},"keys  ",[324,2963,379],{"class":378},[324,2965,429],{"class":350},[324,2967,2760],{"class":374},[324,2969,435],{"class":378},[324,2971,2972],{"class":382},"getKeys",[324,2974,793],{"class":350},[324,2976,2977],{"class":364},"    // the keys currently held\n",[269,2979,2981],{"id":2980},"memory-monitor-command","Memory Monitor Command",[265,2983,2984],{},"CLI tool for monitoring and analyzing memory usage patterns.",[277,2986,312],{"id":2987},"basic-usage-2",[314,2989,2993],{"className":2990,"code":2991,"language":2992,"meta":319,"style":319},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","# Real-time memory monitoring\nphp glueful system:memory\n\n# Monitor with custom interval\nphp glueful system:memory --interval=5\n\n# Monitor an external command's memory usage\nphp glueful system:memory \"php artisan-like-task\"\n\n# Log metrics to a CSV file\nphp glueful system:memory --log --csv-file=memory_report.csv\n","bash",[321,2994,2995,3000,3011,3015,3020,3033,3037,3042,3058,3062,3067],{"__ignoreMap":319},[324,2996,2997],{"class":326,"line":327},[324,2998,2999],{"class":364},"# Real-time memory monitoring\n",[324,3001,3002,3005,3008],{"class":326,"line":354},[324,3003,318],{"class":3004},"sR7ES",[324,3006,3007],{"class":455}," glueful",[324,3009,3010],{"class":455}," system:memory\n",[324,3012,3013],{"class":326,"line":361},[324,3014,358],{"emptyLinePlaceholder":357},[324,3016,3017],{"class":326,"line":368},[324,3018,3019],{"class":364},"# Monitor with custom interval\n",[324,3021,3022,3024,3026,3029],{"class":326,"line":408},[324,3023,318],{"class":3004},[324,3025,3007],{"class":455},[324,3027,3028],{"class":455}," system:memory",[324,3030,3032],{"class":3031},"sFhLe"," --interval=5\n",[324,3034,3035],{"class":326,"line":413},[324,3036,358],{"emptyLinePlaceholder":357},[324,3038,3039],{"class":326,"line":419},[324,3040,3041],{"class":364},"# Monitor an external command's memory usage\n",[324,3043,3044,3046,3048,3050,3052,3055],{"class":326,"line":444},[324,3045,318],{"class":3004},[324,3047,3007],{"class":455},[324,3049,3028],{"class":455},[324,3051,452],{"class":451},[324,3053,3054],{"class":455},"php artisan-like-task",[324,3056,3057],{"class":451},"\"\n",[324,3059,3060],{"class":326,"line":505},[324,3061,358],{"emptyLinePlaceholder":357},[324,3063,3064],{"class":326,"line":510},[324,3065,3066],{"class":364},"# Log metrics to a CSV file\n",[324,3068,3069,3071,3073,3075,3078],{"class":326,"line":516},[324,3070,318],{"class":3004},[324,3072,3007],{"class":455},[324,3074,3028],{"class":455},[324,3076,3077],{"class":3031}," --log",[324,3079,3080],{"class":3031}," --csv-file=memory_report.csv\n",[277,3082,3084],{"id":3083},"command-options","Command Options",[314,3086,3088],{"className":2990,"code":3087,"language":2992,"meta":319,"style":319},"# Monitoring options\n--interval=N, -i    # Check interval in seconds (default: 1)\n--duration=N, -d    # Monitor for N seconds (0 = unlimited, default)\n--threshold=N, -t   # Alert threshold in MB (default: 128)\n--watch, -w         # Watch mode with real-time updates\n\n# Output options\n--format=FORMAT, -f # Output format: table, json, plain (default: table)\n--log, -l           # Log memory usage to a CSV file\n--csv-file=FILE, -c # CSV file path (default: memory-usage.csv)\n\n# Analysis options\n--analysis, -a      # Perform memory analysis and leak detection\n--profile, -p       # Enable detailed memory profiling\n--trends            # Show memory usage trends and statistics\n--summary, -s       # Show memory summary and recommendations\n--alert-script=PATH # Script to run when the threshold is exceeded\n",[321,3089,3090,3095,3111,3126,3141,3152,3156,3161,3177,3188,3204,3208,3213,3224,3235,3243,3254],{"__ignoreMap":319},[324,3091,3092],{"class":326,"line":327},[324,3093,3094],{"class":364},"# Monitoring options\n",[324,3096,3097,3100,3102,3105,3108],{"class":326,"line":354},[324,3098,3099],{"class":374},"--interval",[324,3101,379],{"class":378},[324,3103,3104],{"class":455},"N,",[324,3106,3107],{"class":3004}," -i",[324,3109,3110],{"class":364},"    # Check interval in seconds (default: 1)\n",[324,3112,3113,3116,3118,3120,3123],{"class":326,"line":361},[324,3114,3115],{"class":374},"--duration",[324,3117,379],{"class":378},[324,3119,3104],{"class":455},[324,3121,3122],{"class":3004}," -d",[324,3124,3125],{"class":364},"    # Monitor for N seconds (0 = unlimited, default)\n",[324,3127,3128,3131,3133,3135,3138],{"class":326,"line":368},[324,3129,3130],{"class":374},"--threshold",[324,3132,379],{"class":378},[324,3134,3104],{"class":455},[324,3136,3137],{"class":3004}," -t",[324,3139,3140],{"class":364},"   # Alert threshold in MB (default: 128)\n",[324,3142,3143,3146,3149],{"class":326,"line":408},[324,3144,3145],{"class":3004},"--watch,",[324,3147,3148],{"class":3031}," -w",[324,3150,3151],{"class":364},"         # Watch mode with real-time updates\n",[324,3153,3154],{"class":326,"line":413},[324,3155,358],{"emptyLinePlaceholder":357},[324,3157,3158],{"class":326,"line":419},[324,3159,3160],{"class":364},"# Output options\n",[324,3162,3163,3166,3168,3171,3174],{"class":326,"line":444},[324,3164,3165],{"class":374},"--format",[324,3167,379],{"class":378},[324,3169,3170],{"class":455},"FORMAT,",[324,3172,3173],{"class":3004}," -f",[324,3175,3176],{"class":364}," # Output format: table, json, plain (default: table)\n",[324,3178,3179,3182,3185],{"class":326,"line":505},[324,3180,3181],{"class":3004},"--log,",[324,3183,3184],{"class":3031}," -l",[324,3186,3187],{"class":364},"           # Log memory usage to a CSV file\n",[324,3189,3190,3193,3195,3198,3201],{"class":326,"line":510},[324,3191,3192],{"class":374},"--csv-file",[324,3194,379],{"class":378},[324,3196,3197],{"class":455},"FILE,",[324,3199,3200],{"class":3004}," -c",[324,3202,3203],{"class":364}," # CSV file path (default: memory-usage.csv)\n",[324,3205,3206],{"class":326,"line":516},[324,3207,358],{"emptyLinePlaceholder":357},[324,3209,3210],{"class":326,"line":539},[324,3211,3212],{"class":364},"# Analysis options\n",[324,3214,3215,3218,3221],{"class":326,"line":545},[324,3216,3217],{"class":3004},"--analysis,",[324,3219,3220],{"class":3031}," -a",[324,3222,3223],{"class":364},"      # Perform memory analysis and leak detection\n",[324,3225,3226,3229,3232],{"class":326,"line":560},[324,3227,3228],{"class":3004},"--profile,",[324,3230,3231],{"class":3031}," -p",[324,3233,3234],{"class":364},"       # Enable detailed memory profiling\n",[324,3236,3237,3240],{"class":326,"line":1196},[324,3238,3239],{"class":3004},"--trends",[324,3241,3242],{"class":364},"            # Show memory usage trends and statistics\n",[324,3244,3245,3248,3251],{"class":326,"line":1202},[324,3246,3247],{"class":3004},"--summary,",[324,3249,3250],{"class":3031}," -s",[324,3252,3253],{"class":364},"       # Show memory summary and recommendations\n",[324,3255,3256,3259,3261,3264],{"class":326,"line":1207},[324,3257,3258],{"class":374},"--alert-script",[324,3260,379],{"class":378},[324,3262,3263],{"class":455},"PATH",[324,3265,3266],{"class":364}," # Script to run when the threshold is exceeded\n",[277,3268,3270],{"id":3269},"real-time-monitoring","Real-time Monitoring",[314,3272,3274],{"className":2990,"code":3273,"language":2992,"meta":319,"style":319},"# Display live memory usage\nphp glueful system:memory --interval=1 --format=table\n\n┌─────────────────┬──────────────┬─────────────┬─────────────┐\n│ Time            │ Current (MB) │ Peak (MB)   │ Limit (MB)  │\n├─────────────────┼──────────────┼─────────────┼─────────────┤\n│ 2023-10-15 14:30│ 245.7       │ 267.3       │ 512.0       │\n│ 2023-10-15 14:31│ 248.2       │ 267.3       │ 512.0       │\n│ 2023-10-15 14:32│ 251.8       │ 267.3       │ 512.0       │\n└─────────────────┴──────────────┴─────────────┴─────────────┘\n",[321,3275,3276,3281,3295,3299,3304,3332,3337,3364,3386,3408],{"__ignoreMap":319},[324,3277,3278],{"class":326,"line":327},[324,3279,3280],{"class":364},"# Display live memory usage\n",[324,3282,3283,3285,3287,3289,3292],{"class":326,"line":354},[324,3284,318],{"class":3004},[324,3286,3007],{"class":455},[324,3288,3028],{"class":455},[324,3290,3291],{"class":3031}," --interval=1",[324,3293,3294],{"class":3031}," --format=table\n",[324,3296,3297],{"class":326,"line":361},[324,3298,358],{"emptyLinePlaceholder":357},[324,3300,3301],{"class":326,"line":368},[324,3302,3303],{"class":3004},"┌─────────────────┬──────────────┬─────────────┬─────────────┐\n",[324,3305,3306,3309,3312,3315,3318,3321,3324,3327,3329],{"class":326,"line":408},[324,3307,3308],{"class":3004},"│",[324,3310,3311],{"class":455}," Time",[324,3313,3314],{"class":455},"            │",[324,3316,3317],{"class":455}," Current",[324,3319,3320],{"class":374}," (MB) │ Peak (",[324,3322,3323],{"class":3004},"MB",[324,3325,3326],{"class":374},")   │ Limit (",[324,3328,3323],{"class":3004},[324,3330,3331],{"class":374},")  │\n",[324,3333,3334],{"class":326,"line":413},[324,3335,3336],{"class":3004},"├─────────────────┼──────────────┼─────────────┼─────────────┤\n",[324,3338,3339,3341,3344,3347,3350,3353,3356,3358,3361],{"class":326,"line":419},[324,3340,3308],{"class":3004},[324,3342,3343],{"class":455}," 2023-10-15",[324,3345,3346],{"class":455}," 14:30│",[324,3348,3349],{"class":657}," 245.7",[324,3351,3352],{"class":455},"       │",[324,3354,3355],{"class":657}," 267.3",[324,3357,3352],{"class":455},[324,3359,3360],{"class":657}," 512.0",[324,3362,3363],{"class":455},"       │\n",[324,3365,3366,3368,3370,3373,3376,3378,3380,3382,3384],{"class":326,"line":444},[324,3367,3308],{"class":3004},[324,3369,3343],{"class":455},[324,3371,3372],{"class":455}," 14:31│",[324,3374,3375],{"class":657}," 248.2",[324,3377,3352],{"class":455},[324,3379,3355],{"class":657},[324,3381,3352],{"class":455},[324,3383,3360],{"class":657},[324,3385,3363],{"class":455},[324,3387,3388,3390,3392,3395,3398,3400,3402,3404,3406],{"class":326,"line":505},[324,3389,3308],{"class":3004},[324,3391,3343],{"class":455},[324,3393,3394],{"class":455}," 14:32│",[324,3396,3397],{"class":657}," 251.8",[324,3399,3352],{"class":455},[324,3401,3355],{"class":657},[324,3403,3352],{"class":455},[324,3405,3360],{"class":657},[324,3407,3363],{"class":455},[324,3409,3410],{"class":326,"line":510},[324,3411,3412],{"class":3004},"└─────────────────┴──────────────┴─────────────┴─────────────┘\n",[277,3414,3416],{"id":3415},"memory-analysis","Memory Analysis",[314,3418,3420],{"className":2990,"code":3419,"language":2992,"meta":319,"style":319},"# Run for a fixed duration and log metrics to CSV\nphp glueful system:memory --duration=300 --log --csv-file=analysis.csv\n\n# Perform analysis and leak detection\nphp glueful system:memory --analysis --summary\n\nMemory Usage Analysis Report\n============================\nAverage Usage: 245.7 MB\nPeak Usage: 312.4 MB\nMemory Efficiency: 87.3%\nPotential Issues: 2 memory spikes detected\n",[321,3421,3422,3427,3443,3447,3452,3466,3470,3484,3489,3502,3514,3524],{"__ignoreMap":319},[324,3423,3424],{"class":326,"line":327},[324,3425,3426],{"class":364},"# Run for a fixed duration and log metrics to CSV\n",[324,3428,3429,3431,3433,3435,3438,3440],{"class":326,"line":354},[324,3430,318],{"class":3004},[324,3432,3007],{"class":455},[324,3434,3028],{"class":455},[324,3436,3437],{"class":3031}," --duration=300",[324,3439,3077],{"class":3031},[324,3441,3442],{"class":3031}," --csv-file=analysis.csv\n",[324,3444,3445],{"class":326,"line":361},[324,3446,358],{"emptyLinePlaceholder":357},[324,3448,3449],{"class":326,"line":368},[324,3450,3451],{"class":364},"# Perform analysis and leak detection\n",[324,3453,3454,3456,3458,3460,3463],{"class":326,"line":408},[324,3455,318],{"class":3004},[324,3457,3007],{"class":455},[324,3459,3028],{"class":455},[324,3461,3462],{"class":3031}," --analysis",[324,3464,3465],{"class":3031}," --summary\n",[324,3467,3468],{"class":326,"line":413},[324,3469,358],{"emptyLinePlaceholder":357},[324,3471,3472,3475,3478,3481],{"class":326,"line":419},[324,3473,3474],{"class":3004},"Memory",[324,3476,3477],{"class":455}," Usage",[324,3479,3480],{"class":455}," Analysis",[324,3482,3483],{"class":455}," Report\n",[324,3485,3486],{"class":326,"line":444},[324,3487,3488],{"class":455},"============================\n",[324,3490,3491,3494,3497,3499],{"class":326,"line":505},[324,3492,3493],{"class":3004},"Average",[324,3495,3496],{"class":455}," Usage:",[324,3498,3349],{"class":657},[324,3500,3501],{"class":455}," MB\n",[324,3503,3504,3507,3509,3512],{"class":326,"line":510},[324,3505,3506],{"class":3004},"Peak",[324,3508,3496],{"class":455},[324,3510,3511],{"class":657}," 312.4",[324,3513,3501],{"class":455},[324,3515,3516,3518,3521],{"class":326,"line":516},[324,3517,3474],{"class":3004},[324,3519,3520],{"class":455}," Efficiency:",[324,3522,3523],{"class":455}," 87.3%\n",[324,3525,3526,3529,3532,3535,3538,3541],{"class":326,"line":539},[324,3527,3528],{"class":3004},"Potential",[324,3530,3531],{"class":455}," Issues:",[324,3533,3534],{"class":657}," 2",[324,3536,3537],{"class":455}," memory",[324,3539,3540],{"class":455}," spikes",[324,3542,3543],{"class":455}," detected\n",[277,3545,3547],{"id":3546},"integration-with-monitoring-systems","Integration with Monitoring Systems",[314,3549,3551],{"className":2990,"code":3550,"language":2992,"meta":319,"style":319},"# Run an external alert script when the threshold (in MB) is exceeded\nphp glueful system:memory \\\n    --threshold=256 \\\n    --alert-script=/usr/local/bin/notify-ops.sh\n",[321,3552,3553,3558,3570,3577],{"__ignoreMap":319},[324,3554,3555],{"class":326,"line":327},[324,3556,3557],{"class":364},"# Run an external alert script when the threshold (in MB) is exceeded\n",[324,3559,3560,3562,3564,3566],{"class":326,"line":354},[324,3561,318],{"class":3004},[324,3563,3007],{"class":455},[324,3565,3028],{"class":455},[324,3567,3569],{"class":3568},"sQeA1"," \\\n",[324,3571,3572,3575],{"class":326,"line":361},[324,3573,3574],{"class":3031},"    --threshold=256",[324,3576,3569],{"class":3568},[324,3578,3579],{"class":326,"line":368},[324,3580,3581],{"class":3031},"    --alert-script=/usr/local/bin/notify-ops.sh\n",[269,3583,3585],{"id":3584},"chunked-database-processor","Chunked Database Processor",[265,3587,3588],{},"Process large database result sets in memory-efficient chunks.",[277,3590,57],{"id":3591},"features-3",[281,3593,3594,3600,3606],{},[284,3595,3596,3599],{},[287,3597,3598],{},"Chunked Processing",": Process large datasets without memory issues",[284,3601,3602,3605],{},[287,3603,3604],{},"Configurable Chunk Sizes",": Set a default chunk size on the constructor, or override per call",[284,3607,3608,3611,3612,3614],{},[287,3609,3610],{},"Multiple Sources",": Process a raw ",[321,3613,2170],{}," query (PDO/mysqli) or iterate a table by id",[277,3616,312],{"id":3617},"basic-usage-3",[265,3619,3620],{},"The constructor takes the database connection and an optional default chunk size. The\nper-call chunk size is the last argument of each processing method, overriding the default.",[314,3622,3624],{"className":316,"code":3623,"language":318,"meta":319,"style":319},"use Glueful\\Performance\\ChunkedDatabaseProcessor;\n\n// Second argument is the default chunk size (default 1000)\n$processor = new ChunkedDatabaseProcessor($connection, 1000);\n\n// Process a SELECT query in chunks. The processor callback receives each chunk\n// (an array of rows) and its return values are collected into the result array.\n$results = $processor->processSelectQuery(\n    'SELECT * FROM large_table WHERE active = ?',\n    function (array $rows) {\n        foreach ($rows as $row) {\n            updateUserRecord($row);\n        }\n        return count($rows);\n    },\n    [1],   // query parameters\n    500    // chunk size for this call (overrides the default)\n);\n",[321,3625,3626,3643,3647,3652,3676,3680,3685,3690,3711,3737,3755,3775,3786,3791,3805,3810,3823,3831],{"__ignoreMap":319},[324,3627,3628,3630,3632,3634,3636,3638,3641],{"class":326,"line":327},[324,3629,331],{"class":330},[324,3631,335],{"class":334},[324,3633,339],{"class":338},[324,3635,125],{"class":334},[324,3637,339],{"class":338},[324,3639,3640],{"class":346},"ChunkedDatabaseProcessor",[324,3642,351],{"class":350},[324,3644,3645],{"class":326,"line":354},[324,3646,358],{"emptyLinePlaceholder":357},[324,3648,3649],{"class":326,"line":361},[324,3650,3651],{"class":364},"// Second argument is the default chunk size (default 1000)\n",[324,3653,3654,3656,3659,3661,3663,3666,3668,3670,3672,3674],{"class":326,"line":368},[324,3655,371],{"class":350},[324,3657,3658],{"class":374},"processor ",[324,3660,379],{"class":378},[324,3662,1007],{"class":330},[324,3664,3665],{"class":395}," ChunkedDatabaseProcessor",[324,3667,386],{"class":350},[324,3669,2149],{"class":374},[324,3671,392],{"class":350},[324,3673,2055],{"class":657},[324,3675,405],{"class":350},[324,3677,3678],{"class":326,"line":408},[324,3679,358],{"emptyLinePlaceholder":357},[324,3681,3682],{"class":326,"line":413},[324,3683,3684],{"class":364},"// Process a SELECT query in chunks. The processor callback receives each chunk\n",[324,3686,3687],{"class":326,"line":419},[324,3688,3689],{"class":364},"// (an array of rows) and its return values are collected into the result array.\n",[324,3691,3692,3694,3697,3699,3701,3704,3706,3709],{"class":326,"line":444},[324,3693,371],{"class":350},[324,3695,3696],{"class":374},"results ",[324,3698,379],{"class":378},[324,3700,429],{"class":350},[324,3702,3703],{"class":374},"processor",[324,3705,435],{"class":378},[324,3707,3708],{"class":382},"processSelectQuery",[324,3710,2334],{"class":350},[324,3712,3713,3715,3717,3719,3721,3724,3726,3729,3731,3733,3735],{"class":326,"line":505},[324,3714,601],{"class":451},[324,3716,2170],{"class":330},[324,3718,2173],{"class":378},[324,3720,2176],{"class":330},[324,3722,3723],{"class":455}," large_table ",[324,3725,2182],{"class":330},[324,3727,3728],{"class":455}," active ",[324,3730,379],{"class":378},[324,3732,2191],{"class":455},[324,3734,585],{"class":451},[324,3736,643],{"class":350},[324,3738,3739,3742,3744,3746,3748,3751,3753],{"class":326,"line":510},[324,3740,3741],{"class":2347},"    function",[324,3743,2231],{"class":350},[324,3745,2599],{"class":330},[324,3747,429],{"class":350},[324,3749,3750],{"class":374},"rows",[324,3752,2081],{"class":350},[324,3754,536],{"class":350},[324,3756,3757,3760,3762,3765,3767,3769,3771,3773],{"class":326,"line":516},[324,3758,3759],{"class":519},"        foreach",[324,3761,523],{"class":350},[324,3763,3764],{"class":374},"rows ",[324,3766,2073],{"class":378},[324,3768,429],{"class":350},[324,3770,2257],{"class":374},[324,3772,2081],{"class":350},[324,3774,536],{"class":350},[324,3776,3777,3780,3782,3784],{"class":326,"line":539},[324,3778,3779],{"class":382},"            updateUserRecord",[324,3781,386],{"class":350},[324,3783,2257],{"class":374},[324,3785,405],{"class":350},[324,3787,3788],{"class":326,"line":545},[324,3789,3790],{"class":350},"        }\n",[324,3792,3793,3796,3799,3801,3803],{"class":326,"line":560},[324,3794,3795],{"class":519},"        return",[324,3797,3798],{"class":447}," count",[324,3800,386],{"class":350},[324,3802,3750],{"class":374},[324,3804,405],{"class":350},[324,3806,3807],{"class":326,"line":1196},[324,3808,3809],{"class":350},"    },\n",[324,3811,3812,3815,3818,3820],{"class":326,"line":1202},[324,3813,3814],{"class":350},"    [",[324,3816,3817],{"class":657},"1",[324,3819,1763],{"class":350},[324,3821,3822],{"class":364},"   // query parameters\n",[324,3824,3825,3828],{"class":326,"line":1207},[324,3826,3827],{"class":657},"    500",[324,3829,3830],{"class":364},"    // chunk size for this call (overrides the default)\n",[324,3832,3833],{"class":326,"line":1221},[324,3834,405],{"class":350},[277,3836,3838],{"id":3837},"processing-a-table-by-id","Processing a Table by Id",[265,3840,3841,3844],{},[321,3842,3843],{},"processTableInChunks()"," iterates a table in id-ordered chunks, applying optional\nequality conditions. Each chunk is passed to the processor callback.",[314,3846,3848],{"className":316,"code":3847,"language":318,"meta":319,"style":319},"$results = $processor->processTableInChunks(\n    'users',\n    function (array $rows) {\n        foreach ($rows as $user) {\n            sendNotification($user);\n        }\n        return count($rows);\n    },\n    'id',                    // id column to paginate on\n    ['status' => 'active'],  // equality conditions\n    500                      // chunk size (overrides the default)\n);\n",[321,3849,3850,3869,3880,3896,3915,3926,3930,3942,3946,3959,3982,3989],{"__ignoreMap":319},[324,3851,3852,3854,3856,3858,3860,3862,3864,3867],{"class":326,"line":327},[324,3853,371],{"class":350},[324,3855,3696],{"class":374},[324,3857,379],{"class":378},[324,3859,429],{"class":350},[324,3861,3703],{"class":374},[324,3863,435],{"class":378},[324,3865,3866],{"class":382},"processTableInChunks",[324,3868,2334],{"class":350},[324,3870,3871,3873,3876,3878],{"class":326,"line":354},[324,3872,601],{"class":451},[324,3874,3875],{"class":455},"users",[324,3877,585],{"class":451},[324,3879,643],{"class":350},[324,3881,3882,3884,3886,3888,3890,3892,3894],{"class":326,"line":361},[324,3883,3741],{"class":2347},[324,3885,2231],{"class":350},[324,3887,2599],{"class":330},[324,3889,429],{"class":350},[324,3891,3750],{"class":374},[324,3893,2081],{"class":350},[324,3895,536],{"class":350},[324,3897,3898,3900,3902,3904,3906,3908,3911,3913],{"class":326,"line":368},[324,3899,3759],{"class":519},[324,3901,523],{"class":350},[324,3903,3764],{"class":374},[324,3905,2073],{"class":378},[324,3907,429],{"class":350},[324,3909,3910],{"class":374},"user",[324,3912,2081],{"class":350},[324,3914,536],{"class":350},[324,3916,3917,3920,3922,3924],{"class":326,"line":408},[324,3918,3919],{"class":382},"            sendNotification",[324,3921,386],{"class":350},[324,3923,3910],{"class":374},[324,3925,405],{"class":350},[324,3927,3928],{"class":326,"line":413},[324,3929,3790],{"class":350},[324,3931,3932,3934,3936,3938,3940],{"class":326,"line":419},[324,3933,3795],{"class":519},[324,3935,3798],{"class":447},[324,3937,386],{"class":350},[324,3939,3750],{"class":374},[324,3941,405],{"class":350},[324,3943,3944],{"class":326,"line":444},[324,3945,3809],{"class":350},[324,3947,3948,3950,3952,3954,3956],{"class":326,"line":505},[324,3949,601],{"class":451},[324,3951,2781],{"class":455},[324,3953,585],{"class":451},[324,3955,392],{"class":350},[324,3957,3958],{"class":364},"                    // id column to paginate on\n",[324,3960,3961,3963,3965,3967,3969,3971,3973,3975,3977,3979],{"class":326,"line":510},[324,3962,3814],{"class":350},[324,3964,585],{"class":451},[324,3966,2368],{"class":455},[324,3968,585],{"class":451},[324,3970,593],{"class":378},[324,3972,1079],{"class":451},[324,3974,2380],{"class":455},[324,3976,585],{"class":451},[324,3978,1763],{"class":350},[324,3980,3981],{"class":364},"  // equality conditions\n",[324,3983,3984,3986],{"class":326,"line":516},[324,3985,3827],{"class":657},[324,3987,3988],{"class":364},"                      // chunk size (overrides the default)\n",[324,3990,3991],{"class":326,"line":539},[324,3992,405],{"class":350},[277,3994,3996],{"id":3995},"chunk-size","Chunk Size",[265,3998,3999,4000,4003,4004,2636],{},"The chunk size is the only tunable. Set a default on the constructor and override it\nper call via the last argument of ",[321,4001,4002],{},"processSelectQuery()"," / ",[321,4005,3843],{},[314,4007,4009],{"className":316,"code":4008,"language":318,"meta":319,"style":319},"// Default of 2000 rows per chunk for every call on this instance\n$processor = new ChunkedDatabaseProcessor($connection, 2000);\n\n// Override to 250 for a single, heavier-per-row job\n$processor->processSelectQuery($query, $callback, $params, 250);\n",[321,4010,4011,4016,4039,4043,4048],{"__ignoreMap":319},[324,4012,4013],{"class":326,"line":327},[324,4014,4015],{"class":364},"// Default of 2000 rows per chunk for every call on this instance\n",[324,4017,4018,4020,4022,4024,4026,4028,4030,4032,4034,4037],{"class":326,"line":354},[324,4019,371],{"class":350},[324,4021,3658],{"class":374},[324,4023,379],{"class":378},[324,4025,1007],{"class":330},[324,4027,3665],{"class":395},[324,4029,386],{"class":350},[324,4031,2149],{"class":374},[324,4033,392],{"class":350},[324,4035,4036],{"class":657}," 2000",[324,4038,405],{"class":350},[324,4040,4041],{"class":326,"line":361},[324,4042,358],{"emptyLinePlaceholder":357},[324,4044,4045],{"class":326,"line":368},[324,4046,4047],{"class":364},"// Override to 250 for a single, heavier-per-row job\n",[324,4049,4050,4052,4054,4056,4058,4060,4063,4065,4067,4070,4072,4074,4077,4079,4082],{"class":326,"line":408},[324,4051,371],{"class":350},[324,4053,3703],{"class":374},[324,4055,435],{"class":378},[324,4057,3708],{"class":382},[324,4059,386],{"class":350},[324,4061,4062],{"class":374},"query",[324,4064,392],{"class":350},[324,4066,429],{"class":350},[324,4068,4069],{"class":374},"callback",[324,4071,392],{"class":350},[324,4073,429],{"class":350},[324,4075,4076],{"class":374},"params",[324,4078,392],{"class":350},[324,4080,4081],{"class":657}," 250",[324,4083,405],{"class":350},[269,4085,4087],{"id":4086},"lazy-container","Lazy Container",[265,4089,4090,4091,4094,4095,4098,4099,661],{},"Deferred object creation container for improved memory efficiency and performance.\nIt exposes just two methods: ",[321,4092,4093],{},"register()"," to bind a factory closure under an id, and\n",[321,4096,4097],{},"get()"," to resolve it. The factory runs the first time the id is requested, and the\nresulting instance is cached and returned on every subsequent ",[321,4100,4097],{},[277,4102,312],{"id":4103},"basic-usage-4",[314,4105,4107],{"className":316,"code":4106,"language":318,"meta":319,"style":319},"use Glueful\\Performance\\LazyContainer;\n\n$container = new LazyContainer();\n\n// Register factory closures\n$container->register('database', function () use ($config) {\n    return new DatabaseConnection($config);\n});\n\n$container->register('userService', function () use ($container) {\n    return new UserService($container->get('database'));\n});\n\n// Objects are created only when first accessed, then cached\n$userService = $container->get('userService'); // 'database' is built here, on first use\n$sameService = $container->get('userService'); // returns the cached instance\n",[321,4108,4109,4126,4130,4146,4150,4155,4195,4211,4216,4220,4255,4283,4287,4291,4296,4326],{"__ignoreMap":319},[324,4110,4111,4113,4115,4117,4119,4121,4124],{"class":326,"line":327},[324,4112,331],{"class":330},[324,4114,335],{"class":334},[324,4116,339],{"class":338},[324,4118,125],{"class":334},[324,4120,339],{"class":338},[324,4122,4123],{"class":346},"LazyContainer",[324,4125,351],{"class":350},[324,4127,4128],{"class":326,"line":354},[324,4129,358],{"emptyLinePlaceholder":357},[324,4131,4132,4134,4137,4139,4141,4144],{"class":326,"line":361},[324,4133,371],{"class":350},[324,4135,4136],{"class":374},"container ",[324,4138,379],{"class":378},[324,4140,1007],{"class":330},[324,4142,4143],{"class":395}," LazyContainer",[324,4145,441],{"class":350},[324,4147,4148],{"class":326,"line":368},[324,4149,358],{"emptyLinePlaceholder":357},[324,4151,4152],{"class":326,"line":408},[324,4153,4154],{"class":364},"// Register factory closures\n",[324,4156,4157,4159,4162,4164,4167,4169,4171,4174,4176,4178,4180,4183,4186,4188,4191,4193],{"class":326,"line":413},[324,4158,371],{"class":350},[324,4160,4161],{"class":374},"container",[324,4163,435],{"class":378},[324,4165,4166],{"class":382},"register",[324,4168,2165],{"class":350},[324,4170,585],{"class":451},[324,4172,4173],{"class":455},"database",[324,4175,585],{"class":451},[324,4177,392],{"class":350},[324,4179,2594],{"class":2347},[324,4181,4182],{"class":350}," ()",[324,4184,4185],{"class":330}," use",[324,4187,523],{"class":350},[324,4189,4190],{"class":374},"config",[324,4192,2081],{"class":350},[324,4194,536],{"class":350},[324,4196,4197,4200,4202,4205,4207,4209],{"class":326,"line":419},[324,4198,4199],{"class":519},"    return",[324,4201,1007],{"class":330},[324,4203,4204],{"class":395}," DatabaseConnection",[324,4206,386],{"class":350},[324,4208,4190],{"class":374},[324,4210,405],{"class":350},[324,4212,4213],{"class":326,"line":444},[324,4214,4215],{"class":350},"});\n",[324,4217,4218],{"class":326,"line":505},[324,4219,358],{"emptyLinePlaceholder":357},[324,4221,4222,4224,4226,4228,4230,4232,4234,4237,4239,4241,4243,4245,4247,4249,4251,4253],{"class":326,"line":510},[324,4223,371],{"class":350},[324,4225,4161],{"class":374},[324,4227,435],{"class":378},[324,4229,4166],{"class":382},[324,4231,2165],{"class":350},[324,4233,585],{"class":451},[324,4235,4236],{"class":455},"userService",[324,4238,585],{"class":451},[324,4240,392],{"class":350},[324,4242,2594],{"class":2347},[324,4244,4182],{"class":350},[324,4246,4185],{"class":330},[324,4248,523],{"class":350},[324,4250,4161],{"class":374},[324,4252,2081],{"class":350},[324,4254,536],{"class":350},[324,4256,4257,4259,4261,4264,4266,4268,4270,4272,4274,4276,4278,4280],{"class":326,"line":516},[324,4258,4199],{"class":519},[324,4260,1007],{"class":330},[324,4262,4263],{"class":395}," UserService",[324,4265,386],{"class":350},[324,4267,4161],{"class":374},[324,4269,435],{"class":378},[324,4271,2686],{"class":382},[324,4273,2165],{"class":350},[324,4275,585],{"class":451},[324,4277,4173],{"class":455},[324,4279,585],{"class":451},[324,4281,4282],{"class":350},"));\n",[324,4284,4285],{"class":326,"line":539},[324,4286,4215],{"class":350},[324,4288,4289],{"class":326,"line":545},[324,4290,358],{"emptyLinePlaceholder":357},[324,4292,4293],{"class":326,"line":560},[324,4294,4295],{"class":364},"// Objects are created only when first accessed, then cached\n",[324,4297,4298,4300,4303,4305,4307,4309,4311,4313,4315,4317,4319,4321,4323],{"class":326,"line":1196},[324,4299,371],{"class":350},[324,4301,4302],{"class":374},"userService ",[324,4304,379],{"class":378},[324,4306,429],{"class":350},[324,4308,4161],{"class":374},[324,4310,435],{"class":378},[324,4312,2686],{"class":382},[324,4314,2165],{"class":350},[324,4316,585],{"class":451},[324,4318,4236],{"class":455},[324,4320,585],{"class":451},[324,4322,2898],{"class":350},[324,4324,4325],{"class":364}," // 'database' is built here, on first use\n",[324,4327,4328,4330,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353],{"class":326,"line":1202},[324,4329,371],{"class":350},[324,4331,4332],{"class":374},"sameService ",[324,4334,379],{"class":378},[324,4336,429],{"class":350},[324,4338,4161],{"class":374},[324,4340,435],{"class":378},[324,4342,2686],{"class":382},[324,4344,2165],{"class":350},[324,4346,585],{"class":451},[324,4348,4236],{"class":455},[324,4350,585],{"class":451},[324,4352,2898],{"class":350},[324,4354,4355],{"class":364}," // returns the cached instance\n",[277,4357,4359],{"id":4358},"notes","Notes",[281,4361,4362,4368],{},[284,4363,4364,4365,4367],{},"There is no auto-wiring, aliasing, tagging, or statistics API — the container simply\ninstantiates each registered factory lazily on the first ",[321,4366,4097],{}," and memoizes the result.",[284,4369,4370,4371,4374],{},"Express dependencies by resolving them from the container inside the factory closure\n(as shown with ",[321,4372,4373],{},"$container->get('database')"," above).",[269,4376,4378],{"id":4377},"best-practices","Best Practices",[277,4380,4382],{"id":4381},"memory-management-guidelines","Memory Management Guidelines",[4384,4385,4386,4392,4398,4404,4410],"ol",{},[284,4387,4388,4391],{},[287,4389,4390],{},"Monitor Continuously",": Use real-time monitoring for production systems",[284,4393,4394,4397],{},[287,4395,4396],{},"Set Appropriate Thresholds",": Configure warnings before critical situations",[284,4399,4400,4403],{},[287,4401,4402],{},"Use Object Pooling",": Reuse expensive objects when possible",[284,4405,4406,4409],{},[287,4407,4408],{},"Process in Chunks",": Handle large datasets with chunked processing",[284,4411,4412,4415],{},[287,4413,4414],{},"Lazy Load Resources",": Create objects only when needed",[277,4417,4419],{"id":4418},"performance-optimization","Performance Optimization",[4384,4421,4422,4428,4434,4440,4446],{},[284,4423,4424,4427],{},[287,4425,4426],{},"Choose Right Tools",": Select appropriate iterator for your use case",[284,4429,4430,4433],{},[287,4431,4432],{},"Configure Limits",": Set memory limits for all processing tasks",[284,4435,4436,4439],{},[287,4437,4438],{},"Enable Alerting",": Get notified before problems occur",[284,4441,4442,4445],{},[287,4443,4444],{},"Track Metrics",": Monitor memory patterns and trends",[284,4447,4448,4451],{},[287,4449,4450],{},"Regular Cleanup",": Implement automated cleanup processes",[277,4453,4455],{"id":4454},"common-patterns","Common Patterns",[314,4457,4459],{"className":316,"code":4458,"language":318,"meta":319,"style":319},"// Combine multiple tools for optimal performance\n$container = new LazyContainer();\n$pool = new MemoryPool(maxSize: 10);\n$processor = new ChunkedDatabaseProcessor($connection, 1000);\n\n// Reuse an expensive-to-build worker across chunks via the keyed pool\n$processor->processSelectQuery($query, function (array $rows) use ($pool) {\n    if (!$pool->has('worker')) {\n        $pool->add('worker', new BatchWorker());\n    }\n\n    $worker = $pool->get('worker');\n    $worker->processBatch($rows);\n\n    return count($rows);\n}, $params);\n",[321,4460,4461,4466,4480,4502,4524,4528,4533,4571,4602,4631,4636,4640,4667,4684,4688,4700],{"__ignoreMap":319},[324,4462,4463],{"class":326,"line":327},[324,4464,4465],{"class":364},"// Combine multiple tools for optimal performance\n",[324,4467,4468,4470,4472,4474,4476,4478],{"class":326,"line":354},[324,4469,371],{"class":350},[324,4471,4136],{"class":374},[324,4473,379],{"class":378},[324,4475,1007],{"class":330},[324,4477,4143],{"class":395},[324,4479,441],{"class":350},[324,4481,4482,4484,4486,4488,4490,4492,4494,4496,4498,4500],{"class":326,"line":361},[324,4483,371],{"class":350},[324,4485,2725],{"class":374},[324,4487,379],{"class":378},[324,4489,1007],{"class":330},[324,4491,2732],{"class":395},[324,4493,2165],{"class":350},[324,4495,2737],{"class":2632},[324,4497,2636],{"class":350},[324,4499,1890],{"class":657},[324,4501,405],{"class":350},[324,4503,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522],{"class":326,"line":368},[324,4505,371],{"class":350},[324,4507,3658],{"class":374},[324,4509,379],{"class":378},[324,4511,1007],{"class":330},[324,4513,3665],{"class":395},[324,4515,386],{"class":350},[324,4517,2149],{"class":374},[324,4519,392],{"class":350},[324,4521,2055],{"class":657},[324,4523,405],{"class":350},[324,4525,4526],{"class":326,"line":408},[324,4527,358],{"emptyLinePlaceholder":357},[324,4529,4530],{"class":326,"line":413},[324,4531,4532],{"class":364},"// Reuse an expensive-to-build worker across chunks via the keyed pool\n",[324,4534,4535,4537,4539,4541,4543,4545,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569],{"class":326,"line":419},[324,4536,371],{"class":350},[324,4538,3703],{"class":374},[324,4540,435],{"class":378},[324,4542,3708],{"class":382},[324,4544,386],{"class":350},[324,4546,4062],{"class":374},[324,4548,392],{"class":350},[324,4550,2594],{"class":2347},[324,4552,2231],{"class":350},[324,4554,2599],{"class":330},[324,4556,429],{"class":350},[324,4558,3750],{"class":374},[324,4560,2081],{"class":350},[324,4562,4185],{"class":330},[324,4564,523],{"class":350},[324,4566,2760],{"class":374},[324,4568,2081],{"class":350},[324,4570,536],{"class":350},[324,4572,4573,4576,4578,4581,4583,4585,4587,4589,4591,4593,4596,4598,4600],{"class":326,"line":444},[324,4574,4575],{"class":519},"    if",[324,4577,2231],{"class":350},[324,4579,4580],{"class":378},"!",[324,4582,371],{"class":350},[324,4584,2760],{"class":374},[324,4586,435],{"class":378},[324,4588,2689],{"class":382},[324,4590,2165],{"class":350},[324,4592,585],{"class":451},[324,4594,4595],{"class":455},"worker",[324,4597,585],{"class":451},[324,4599,2828],{"class":350},[324,4601,536],{"class":350},[324,4603,4604,4607,4609,4611,4613,4615,4617,4619,4621,4623,4625,4628],{"class":326,"line":505},[324,4605,4606],{"class":350},"        $",[324,4608,2760],{"class":374},[324,4610,435],{"class":378},[324,4612,2682],{"class":382},[324,4614,2165],{"class":350},[324,4616,585],{"class":451},[324,4618,4595],{"class":455},[324,4620,585],{"class":451},[324,4622,392],{"class":350},[324,4624,1007],{"class":330},[324,4626,4627],{"class":395}," BatchWorker",[324,4629,4630],{"class":350},"());\n",[324,4632,4633],{"class":326,"line":510},[324,4634,4635],{"class":350},"    }\n",[324,4637,4638],{"class":326,"line":516},[324,4639,358],{"emptyLinePlaceholder":357},[324,4641,4642,4644,4647,4649,4651,4653,4655,4657,4659,4661,4663,4665],{"class":326,"line":539},[324,4643,548],{"class":350},[324,4645,4646],{"class":374},"worker ",[324,4648,379],{"class":378},[324,4650,429],{"class":350},[324,4652,2760],{"class":374},[324,4654,435],{"class":378},[324,4656,2686],{"class":382},[324,4658,2165],{"class":350},[324,4660,585],{"class":451},[324,4662,4595],{"class":455},[324,4664,585],{"class":451},[324,4666,405],{"class":350},[324,4668,4669,4671,4673,4675,4678,4680,4682],{"class":326,"line":545},[324,4670,548],{"class":350},[324,4672,4595],{"class":374},[324,4674,435],{"class":378},[324,4676,4677],{"class":382},"processBatch",[324,4679,386],{"class":350},[324,4681,3750],{"class":374},[324,4683,405],{"class":350},[324,4685,4686],{"class":326,"line":560},[324,4687,358],{"emptyLinePlaceholder":357},[324,4689,4690,4692,4694,4696,4698],{"class":326,"line":1196},[324,4691,4199],{"class":519},[324,4693,3798],{"class":447},[324,4695,386],{"class":350},[324,4697,3750],{"class":374},[324,4699,405],{"class":350},[324,4701,4702,4704,4706,4708],{"class":326,"line":1202},[324,4703,2629],{"class":350},[324,4705,429],{"class":350},[324,4707,4076],{"class":374},[324,4709,405],{"class":350},[265,4711,4712],{},"This comprehensive memory management system provides all the tools needed to build memory-efficient, scalable applications with Glueful.",[269,4714,4716],{"id":4715},"tracing-and-observability","Tracing and Observability",[277,4718,4720],{"id":4719},"request-tracing","Request Tracing",[265,4722,4723],{},"Glueful includes built-in request tracing capabilities for monitoring request flows and performance bottlenecks.",[1318,4725,4727],{"id":4726},"tracing-middleware","Tracing Middleware",[314,4729,4731],{"className":316,"code":4730,"language":318,"meta":319,"style":319},"use Glueful\\Http\\Middleware\\TracingMiddleware;\n\n// Add tracing middleware to your application\n$app->add(new TracingMiddleware([\n    'enabled' => true,\n    'sample_rate' => 1.0,  // Trace 100% of requests\n    'trace_queries' => true,\n    'trace_cache' => true,\n    'trace_external_calls' => true\n]));\n",[321,4732,4733,4755,4759,4764,4785,4799,4823,4838,4853,4866],{"__ignoreMap":319},[324,4734,4735,4737,4739,4741,4744,4746,4748,4750,4753],{"class":326,"line":327},[324,4736,331],{"class":330},[324,4738,335],{"class":334},[324,4740,339],{"class":338},[324,4742,4743],{"class":334},"Http",[324,4745,339],{"class":338},[324,4747,121],{"class":334},[324,4749,339],{"class":338},[324,4751,4752],{"class":346},"TracingMiddleware",[324,4754,351],{"class":350},[324,4756,4757],{"class":326,"line":354},[324,4758,358],{"emptyLinePlaceholder":357},[324,4760,4761],{"class":326,"line":361},[324,4762,4763],{"class":364},"// Add tracing middleware to your application\n",[324,4765,4766,4768,4771,4773,4775,4777,4780,4783],{"class":326,"line":368},[324,4767,371],{"class":350},[324,4769,4770],{"class":374},"app",[324,4772,435],{"class":378},[324,4774,2682],{"class":382},[324,4776,2165],{"class":350},[324,4778,4779],{"class":330},"new",[324,4781,4782],{"class":395}," TracingMiddleware",[324,4784,1013],{"class":350},[324,4786,4787,4789,4791,4793,4795,4797],{"class":326,"line":408},[324,4788,601],{"class":451},[324,4790,632],{"class":455},[324,4792,585],{"class":451},[324,4794,593],{"class":378},[324,4796,640],{"class":639},[324,4798,643],{"class":350},[324,4800,4801,4803,4806,4808,4810,4813,4815,4818,4820],{"class":326,"line":413},[324,4802,601],{"class":451},[324,4804,4805],{"class":455},"sample_rate",[324,4807,585],{"class":451},[324,4809,593],{"class":378},[324,4811,4812],{"class":657}," 1",[324,4814,661],{"class":639},[324,4816,4817],{"class":657},"0",[324,4819,392],{"class":350},[324,4821,4822],{"class":364},"  // Trace 100% of requests\n",[324,4824,4825,4827,4830,4832,4834,4836],{"class":326,"line":419},[324,4826,601],{"class":451},[324,4828,4829],{"class":455},"trace_queries",[324,4831,585],{"class":451},[324,4833,593],{"class":378},[324,4835,640],{"class":639},[324,4837,643],{"class":350},[324,4839,4840,4842,4845,4847,4849,4851],{"class":326,"line":444},[324,4841,601],{"class":451},[324,4843,4844],{"class":455},"trace_cache",[324,4846,585],{"class":451},[324,4848,593],{"class":378},[324,4850,640],{"class":639},[324,4852,643],{"class":350},[324,4854,4855,4857,4860,4862,4864],{"class":326,"line":505},[324,4856,601],{"class":451},[324,4858,4859],{"class":455},"trace_external_calls",[324,4861,585],{"class":451},[324,4863,593],{"class":378},[324,4865,1979],{"class":639},[324,4867,4868],{"class":326,"line":510},[324,4869,4870],{"class":350},"]));\n",[1318,4872,4874],{"id":4873},"custom-tracing","Custom Tracing",[314,4876,4878],{"className":316,"code":4877,"language":318,"meta":319,"style":319},"use Glueful\\Tracing\\Tracer;\n\n// Start a trace span\n$span = Tracer::startSpan('user_lookup');\n\ntry {\n    $user = $userService->findById($userId);\n    $span->setTag('user_id', $userId);\n    $span->setTag('user_status', $user->status);\n} catch (Exception $e) {\n    $span->setTag('error', true);\n    $span->setTag('error_message', $e->getMessage());\n    throw $e;\n} finally {\n    $span->finish();\n}\n",[321,4879,4880,4898,4902,4907,4935,4939,4946,4971,4999,5030,5052,5077,5109,5120,5129,5142],{"__ignoreMap":319},[324,4881,4882,4884,4886,4888,4891,4893,4896],{"class":326,"line":327},[324,4883,331],{"class":330},[324,4885,335],{"class":334},[324,4887,339],{"class":338},[324,4889,4890],{"class":334},"Tracing",[324,4892,339],{"class":338},[324,4894,4895],{"class":346},"Tracer",[324,4897,351],{"class":350},[324,4899,4900],{"class":326,"line":354},[324,4901,358],{"emptyLinePlaceholder":357},[324,4903,4904],{"class":326,"line":361},[324,4905,4906],{"class":364},"// Start a trace span\n",[324,4908,4909,4911,4914,4916,4919,4921,4924,4926,4928,4931,4933],{"class":326,"line":368},[324,4910,371],{"class":350},[324,4912,4913],{"class":374},"span ",[324,4915,379],{"class":378},[324,4917,4918],{"class":395}," Tracer",[324,4920,399],{"class":378},[324,4922,4923],{"class":382},"startSpan",[324,4925,2165],{"class":350},[324,4927,585],{"class":451},[324,4929,4930],{"class":455},"user_lookup",[324,4932,585],{"class":451},[324,4934,405],{"class":350},[324,4936,4937],{"class":326,"line":408},[324,4938,358],{"emptyLinePlaceholder":357},[324,4940,4941,4944],{"class":326,"line":413},[324,4942,4943],{"class":519},"try",[324,4945,536],{"class":350},[324,4947,4948,4950,4953,4955,4957,4959,4961,4964,4966,4969],{"class":326,"line":419},[324,4949,548],{"class":350},[324,4951,4952],{"class":374},"user ",[324,4954,379],{"class":378},[324,4956,429],{"class":350},[324,4958,4236],{"class":374},[324,4960,435],{"class":378},[324,4962,4963],{"class":382},"findById",[324,4965,386],{"class":350},[324,4967,4968],{"class":374},"userId",[324,4970,405],{"class":350},[324,4972,4973,4975,4977,4979,4982,4984,4986,4989,4991,4993,4995,4997],{"class":326,"line":444},[324,4974,548],{"class":350},[324,4976,324],{"class":374},[324,4978,435],{"class":378},[324,4980,4981],{"class":382},"setTag",[324,4983,2165],{"class":350},[324,4985,585],{"class":451},[324,4987,4988],{"class":455},"user_id",[324,4990,585],{"class":451},[324,4992,392],{"class":350},[324,4994,429],{"class":350},[324,4996,4968],{"class":374},[324,4998,405],{"class":350},[324,5000,5001,5003,5005,5007,5009,5011,5013,5016,5018,5020,5022,5024,5026,5028],{"class":326,"line":505},[324,5002,548],{"class":350},[324,5004,324],{"class":374},[324,5006,435],{"class":378},[324,5008,4981],{"class":382},[324,5010,2165],{"class":350},[324,5012,585],{"class":451},[324,5014,5015],{"class":455},"user_status",[324,5017,585],{"class":451},[324,5019,392],{"class":350},[324,5021,429],{"class":350},[324,5023,3910],{"class":374},[324,5025,435],{"class":378},[324,5027,2368],{"class":374},[324,5029,405],{"class":350},[324,5031,5032,5035,5038,5040,5043,5045,5048,5050],{"class":326,"line":510},[324,5033,5034],{"class":350},"}",[324,5036,5037],{"class":519}," catch",[324,5039,2231],{"class":350},[324,5041,5042],{"class":395},"Exception",[324,5044,429],{"class":350},[324,5046,5047],{"class":374},"e",[324,5049,2081],{"class":350},[324,5051,536],{"class":350},[324,5053,5054,5056,5058,5060,5062,5064,5066,5069,5071,5073,5075],{"class":326,"line":516},[324,5055,548],{"class":350},[324,5057,324],{"class":374},[324,5059,435],{"class":378},[324,5061,4981],{"class":382},[324,5063,2165],{"class":350},[324,5065,585],{"class":451},[324,5067,5068],{"class":455},"error",[324,5070,585],{"class":451},[324,5072,392],{"class":350},[324,5074,640],{"class":639},[324,5076,405],{"class":350},[324,5078,5079,5081,5083,5085,5087,5089,5091,5094,5096,5098,5100,5102,5104,5107],{"class":326,"line":539},[324,5080,548],{"class":350},[324,5082,324],{"class":374},[324,5084,435],{"class":378},[324,5086,4981],{"class":382},[324,5088,2165],{"class":350},[324,5090,585],{"class":451},[324,5092,5093],{"class":455},"error_message",[324,5095,585],{"class":451},[324,5097,392],{"class":350},[324,5099,429],{"class":350},[324,5101,5047],{"class":374},[324,5103,435],{"class":378},[324,5105,5106],{"class":382},"getMessage",[324,5108,4630],{"class":350},[324,5110,5111,5114,5116,5118],{"class":326,"line":545},[324,5112,5113],{"class":519},"    throw",[324,5115,429],{"class":350},[324,5117,5047],{"class":374},[324,5119,351],{"class":350},[324,5121,5122,5124,5127],{"class":326,"line":560},[324,5123,5034],{"class":350},[324,5125,5126],{"class":519}," finally",[324,5128,536],{"class":350},[324,5130,5131,5133,5135,5137,5140],{"class":326,"line":1196},[324,5132,548],{"class":350},[324,5134,324],{"class":374},[324,5136,435],{"class":378},[324,5138,5139],{"class":382},"finish",[324,5141,441],{"class":350},[324,5143,5144],{"class":326,"line":1202},[324,5145,563],{"class":350},[1318,5147,5149],{"id":5148},"distributed-tracing","Distributed Tracing",[314,5151,5153],{"className":316,"code":5152,"language":318,"meta":319,"style":319},"// For microservices, bind a tracer adapter\nuse Glueful\\Tracing\\Adapters\\JaegerAdapter;\n\n$tracer = new JaegerAdapter([\n    'service_name' => 'glueful-api',\n    'jaeger_endpoint' => 'http://localhost:14268/api/traces'\n]);\n\nTracer::setAdapter($tracer);\n",[321,5154,5155,5160,5182,5186,5202,5222,5240,5244,5248],{"__ignoreMap":319},[324,5156,5157],{"class":326,"line":327},[324,5158,5159],{"class":364},"// For microservices, bind a tracer adapter\n",[324,5161,5162,5164,5166,5168,5170,5172,5175,5177,5180],{"class":326,"line":354},[324,5163,331],{"class":330},[324,5165,335],{"class":334},[324,5167,339],{"class":338},[324,5169,4890],{"class":334},[324,5171,339],{"class":338},[324,5173,5174],{"class":334},"Adapters",[324,5176,339],{"class":338},[324,5178,5179],{"class":346},"JaegerAdapter",[324,5181,351],{"class":350},[324,5183,5184],{"class":326,"line":361},[324,5185,358],{"emptyLinePlaceholder":357},[324,5187,5188,5190,5193,5195,5197,5200],{"class":326,"line":368},[324,5189,371],{"class":350},[324,5191,5192],{"class":374},"tracer ",[324,5194,379],{"class":378},[324,5196,1007],{"class":330},[324,5198,5199],{"class":395}," JaegerAdapter",[324,5201,1013],{"class":350},[324,5203,5204,5206,5209,5211,5213,5215,5218,5220],{"class":326,"line":408},[324,5205,601],{"class":451},[324,5207,5208],{"class":455},"service_name",[324,5210,585],{"class":451},[324,5212,593],{"class":378},[324,5214,1079],{"class":451},[324,5216,5217],{"class":455},"glueful-api",[324,5219,585],{"class":451},[324,5221,643],{"class":350},[324,5223,5224,5226,5229,5231,5233,5235,5238],{"class":326,"line":413},[324,5225,601],{"class":451},[324,5227,5228],{"class":455},"jaeger_endpoint",[324,5230,585],{"class":451},[324,5232,593],{"class":378},[324,5234,1079],{"class":451},[324,5236,5237],{"class":455},"http://localhost:14268/api/traces",[324,5239,1105],{"class":451},[324,5241,5242],{"class":326,"line":419},[324,5243,1286],{"class":350},[324,5245,5246],{"class":326,"line":444},[324,5247,358],{"emptyLinePlaceholder":357},[324,5249,5250,5252,5254,5257,5259,5262],{"class":326,"line":505},[324,5251,4895],{"class":395},[324,5253,399],{"class":378},[324,5255,5256],{"class":382},"setAdapter",[324,5258,386],{"class":350},[324,5260,5261],{"class":374},"tracer",[324,5263,405],{"class":350},[277,5265,5267],{"id":5266},"monitoring-dashboards","Monitoring Dashboards",[265,5269,5270],{},"Glueful provides guidance and examples for setting up monitoring dashboards using popular tools.",[1318,5272,5274],{"id":5273},"metrics-export","Metrics Export",[314,5276,5278],{"className":316,"code":5277,"language":318,"meta":319,"style":319},"// Export metrics for external monitoring systems\nuse Glueful\\Monitoring\\MetricsExporter;\n\n$exporter = new MetricsExporter([\n    'format' => 'prometheus',  // prometheus, grafana, datadog\n    'endpoint' => '/metrics',\n    'include_system_metrics' => true\n]);\n\n// Register metrics endpoint\nRouter::get('/metrics', [$exporter, 'export']);\n",[321,5279,5280,5285,5303,5307,5323,5346,5366,5379,5383,5387,5392],{"__ignoreMap":319},[324,5281,5282],{"class":326,"line":327},[324,5283,5284],{"class":364},"// Export metrics for external monitoring systems\n",[324,5286,5287,5289,5291,5293,5296,5298,5301],{"class":326,"line":354},[324,5288,331],{"class":330},[324,5290,335],{"class":334},[324,5292,339],{"class":338},[324,5294,5295],{"class":334},"Monitoring",[324,5297,339],{"class":338},[324,5299,5300],{"class":346},"MetricsExporter",[324,5302,351],{"class":350},[324,5304,5305],{"class":326,"line":361},[324,5306,358],{"emptyLinePlaceholder":357},[324,5308,5309,5311,5314,5316,5318,5321],{"class":326,"line":368},[324,5310,371],{"class":350},[324,5312,5313],{"class":374},"exporter ",[324,5315,379],{"class":378},[324,5317,1007],{"class":330},[324,5319,5320],{"class":395}," MetricsExporter",[324,5322,1013],{"class":350},[324,5324,5325,5327,5330,5332,5334,5336,5339,5341,5343],{"class":326,"line":408},[324,5326,601],{"class":451},[324,5328,5329],{"class":455},"format",[324,5331,585],{"class":451},[324,5333,593],{"class":378},[324,5335,1079],{"class":451},[324,5337,5338],{"class":455},"prometheus",[324,5340,585],{"class":451},[324,5342,392],{"class":350},[324,5344,5345],{"class":364},"  // prometheus, grafana, datadog\n",[324,5347,5348,5350,5353,5355,5357,5359,5362,5364],{"class":326,"line":413},[324,5349,601],{"class":451},[324,5351,5352],{"class":455},"endpoint",[324,5354,585],{"class":451},[324,5356,593],{"class":378},[324,5358,1079],{"class":451},[324,5360,5361],{"class":455},"/metrics",[324,5363,585],{"class":451},[324,5365,643],{"class":350},[324,5367,5368,5370,5373,5375,5377],{"class":326,"line":419},[324,5369,601],{"class":451},[324,5371,5372],{"class":455},"include_system_metrics",[324,5374,585],{"class":451},[324,5376,593],{"class":378},[324,5378,1979],{"class":639},[324,5380,5381],{"class":326,"line":444},[324,5382,1286],{"class":350},[324,5384,5385],{"class":326,"line":505},[324,5386,358],{"emptyLinePlaceholder":357},[324,5388,5389],{"class":326,"line":510},[324,5390,5391],{"class":364},"// Register metrics endpoint\n",[324,5393,5394,5397,5399,5401,5403,5405,5407,5409,5411,5414,5417,5419,5421,5424,5426],{"class":326,"line":516},[324,5395,5396],{"class":395},"Router",[324,5398,399],{"class":378},[324,5400,2686],{"class":382},[324,5402,2165],{"class":350},[324,5404,585],{"class":451},[324,5406,5361],{"class":455},[324,5408,585],{"class":451},[324,5410,392],{"class":350},[324,5412,5413],{"class":350}," [$",[324,5415,5416],{"class":374},"exporter",[324,5418,392],{"class":350},[324,5420,1079],{"class":451},[324,5422,5423],{"class":455},"export",[324,5425,585],{"class":451},[324,5427,1286],{"class":350},[1318,5429,5431],{"id":5430},"dashboard-configuration-examples","Dashboard Configuration Examples",[265,5433,5434],{},[287,5435,5436],{},"Grafana Dashboard JSON:",[314,5438,5442],{"className":5439,"code":5440,"language":5441,"meta":319,"style":319},"language-json shiki shiki-themes material-theme-lighter github-light github-dark monokai","{\n  \"dashboard\": {\n    \"title\": \"Glueful API Metrics\",\n    \"panels\": [\n      {\n        \"title\": \"Request Rate\",\n        \"type\": \"graph\",\n        \"targets\": [\n          {\n            \"expr\": \"rate(http_requests_total[5m])\",\n            \"legendFormat\": \"Requests/sec\"\n          }\n        ]\n      },\n      {\n        \"title\": \"Response Time\",\n        \"type\": \"graph\", \n        \"targets\": [\n          {\n            \"expr\": \"histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))\",\n            \"legendFormat\": \"95th percentile\"\n          }\n        ]\n      }\n    ]\n  }\n}\n","json",[321,5443,5444,5449,5466,5489,5502,5507,5528,5548,5561,5566,5588,5606,5611,5615,5620,5624,5643,5664,5676,5680,5699,5716,5720,5724,5729,5733,5739],{"__ignoreMap":319},[324,5445,5446],{"class":326,"line":327},[324,5447,5448],{"class":350},"{\n",[324,5450,5451,5455,5459,5462,5464],{"class":326,"line":354},[324,5452,5454],{"class":5453},"saDeg","  \"",[324,5456,5458],{"class":5457},"sEff5","dashboard",[324,5460,5461],{"class":5453},"\"",[324,5463,2636],{"class":350},[324,5465,536],{"class":350},[324,5467,5468,5471,5474,5476,5478,5481,5485,5487],{"class":326,"line":361},[324,5469,5470],{"class":5453},"    \"",[324,5472,5473],{"class":395},"title",[324,5475,5461],{"class":5453},[324,5477,2636],{"class":350},[324,5479,452],{"class":5480},"sh1VR",[324,5482,5484],{"class":5483},"sINAO","Glueful API Metrics",[324,5486,5461],{"class":5480},[324,5488,643],{"class":350},[324,5490,5491,5493,5496,5498,5500],{"class":326,"line":368},[324,5492,5470],{"class":5453},[324,5494,5495],{"class":395},"panels",[324,5497,5461],{"class":5453},[324,5499,2636],{"class":350},[324,5501,596],{"class":350},[324,5503,5504],{"class":326,"line":408},[324,5505,5506],{"class":350},"      {\n",[324,5508,5509,5512,5515,5517,5519,5521,5524,5526],{"class":326,"line":413},[324,5510,5511],{"class":5453},"        \"",[324,5513,5473],{"class":5514},"sTC9v",[324,5516,5461],{"class":5453},[324,5518,2636],{"class":350},[324,5520,452],{"class":5480},[324,5522,5523],{"class":5483},"Request Rate",[324,5525,5461],{"class":5480},[324,5527,643],{"class":350},[324,5529,5530,5532,5535,5537,5539,5541,5544,5546],{"class":326,"line":419},[324,5531,5511],{"class":5453},[324,5533,5534],{"class":5514},"type",[324,5536,5461],{"class":5453},[324,5538,2636],{"class":350},[324,5540,452],{"class":5480},[324,5542,5543],{"class":5483},"graph",[324,5545,5461],{"class":5480},[324,5547,643],{"class":350},[324,5549,5550,5552,5555,5557,5559],{"class":326,"line":444},[324,5551,5511],{"class":5453},[324,5553,5554],{"class":5514},"targets",[324,5556,5461],{"class":5453},[324,5558,2636],{"class":350},[324,5560,596],{"class":350},[324,5562,5563],{"class":326,"line":505},[324,5564,5565],{"class":350},"          {\n",[324,5567,5568,5571,5575,5577,5579,5581,5584,5586],{"class":326,"line":510},[324,5569,5570],{"class":5453},"            \"",[324,5572,5574],{"class":5573},"sogGa","expr",[324,5576,5461],{"class":5453},[324,5578,2636],{"class":350},[324,5580,452],{"class":5480},[324,5582,5583],{"class":5483},"rate(http_requests_total[5m])",[324,5585,5461],{"class":5480},[324,5587,643],{"class":350},[324,5589,5590,5592,5595,5597,5599,5601,5604],{"class":326,"line":516},[324,5591,5570],{"class":5453},[324,5593,5594],{"class":5573},"legendFormat",[324,5596,5461],{"class":5453},[324,5598,2636],{"class":350},[324,5600,452],{"class":5480},[324,5602,5603],{"class":5483},"Requests/sec",[324,5605,3057],{"class":5480},[324,5607,5608],{"class":326,"line":539},[324,5609,5610],{"class":350},"          }\n",[324,5612,5613],{"class":326,"line":545},[324,5614,1199],{"class":350},[324,5616,5617],{"class":326,"line":560},[324,5618,5619],{"class":350},"      },\n",[324,5621,5622],{"class":326,"line":1196},[324,5623,5506],{"class":350},[324,5625,5626,5628,5630,5632,5634,5636,5639,5641],{"class":326,"line":1202},[324,5627,5511],{"class":5453},[324,5629,5473],{"class":5514},[324,5631,5461],{"class":5453},[324,5633,2636],{"class":350},[324,5635,452],{"class":5480},[324,5637,5638],{"class":5483},"Response Time",[324,5640,5461],{"class":5480},[324,5642,643],{"class":350},[324,5644,5645,5647,5649,5651,5653,5655,5657,5659,5661],{"class":326,"line":1207},[324,5646,5511],{"class":5453},[324,5648,5534],{"class":5514},[324,5650,5461],{"class":5453},[324,5652,2636],{"class":350},[324,5654,452],{"class":5480},[324,5656,5543],{"class":5483},[324,5658,5461],{"class":5480},[324,5660,392],{"class":350},[324,5662,5663],{"class":374}," \n",[324,5665,5666,5668,5670,5672,5674],{"class":326,"line":1221},[324,5667,5511],{"class":5453},[324,5669,5554],{"class":5514},[324,5671,5461],{"class":5453},[324,5673,2636],{"class":350},[324,5675,596],{"class":350},[324,5677,5678],{"class":326,"line":1240},[324,5679,5565],{"class":350},[324,5681,5682,5684,5686,5688,5690,5692,5695,5697],{"class":326,"line":1259},[324,5683,5570],{"class":5453},[324,5685,5574],{"class":5573},[324,5687,5461],{"class":5453},[324,5689,2636],{"class":350},[324,5691,452],{"class":5480},[324,5693,5694],{"class":5483},"histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))",[324,5696,5461],{"class":5480},[324,5698,643],{"class":350},[324,5700,5701,5703,5705,5707,5709,5711,5714],{"class":326,"line":1277},[324,5702,5570],{"class":5453},[324,5704,5594],{"class":5573},[324,5706,5461],{"class":5453},[324,5708,2636],{"class":350},[324,5710,452],{"class":5480},[324,5712,5713],{"class":5483},"95th percentile",[324,5715,3057],{"class":5480},[324,5717,5718],{"class":326,"line":1283},[324,5719,5610],{"class":350},[324,5721,5722],{"class":326,"line":1289},[324,5723,1199],{"class":350},[324,5725,5726],{"class":326,"line":1294},[324,5727,5728],{"class":350},"      }\n",[324,5730,5731],{"class":326,"line":1300},[324,5732,1280],{"class":350},[324,5734,5736],{"class":326,"line":5735},26,[324,5737,5738],{"class":350},"  }\n",[324,5740,5742],{"class":326,"line":5741},27,[324,5743,563],{"class":350},[265,5745,5746],{},[287,5747,5748],{},"Prometheus Configuration:",[314,5750,5754],{"className":5751,"code":5752,"language":5753,"meta":319,"style":319},"language-yaml shiki shiki-themes material-theme-lighter github-light github-dark monokai","# prometheus.yml\nscrape_configs:\n  - job_name: 'glueful-api'\n    static_configs:\n      - targets: ['localhost:8000']\n    metrics_path: '/metrics'\n    scrape_interval: 15s\n","yaml",[321,5755,5756,5761,5766,5771,5776,5781,5786],{"__ignoreMap":319},[324,5757,5758],{"class":326,"line":327},[324,5759,5760],{},"# prometheus.yml\n",[324,5762,5763],{"class":326,"line":354},[324,5764,5765],{},"scrape_configs:\n",[324,5767,5768],{"class":326,"line":361},[324,5769,5770],{},"  - job_name: 'glueful-api'\n",[324,5772,5773],{"class":326,"line":368},[324,5774,5775],{},"    static_configs:\n",[324,5777,5778],{"class":326,"line":408},[324,5779,5780],{},"      - targets: ['localhost:8000']\n",[324,5782,5783],{"class":326,"line":413},[324,5784,5785],{},"    metrics_path: '/metrics'\n",[324,5787,5788],{"class":326,"line":419},[324,5789,5790],{},"    scrape_interval: 15s\n",[1318,5792,5794],{"id":5793},"key-metrics-to-monitor","Key Metrics to Monitor",[4384,5796,5797,5816,5835],{},[284,5798,5799,5802],{},[287,5800,5801],{},"Request Metrics",[281,5803,5804,5807,5810,5813],{},[284,5805,5806],{},"Request rate (requests/second)",[284,5808,5809],{},"Response time percentiles (50th, 95th, 99th)",[284,5811,5812],{},"Error rate by status code",[284,5814,5815],{},"Endpoint-specific performance",[284,5817,5818,5821],{},[287,5819,5820],{},"System Metrics",[281,5822,5823,5826,5829,5832],{},[284,5824,5825],{},"Memory usage and trends",[284,5827,5828],{},"CPU utilization",[284,5830,5831],{},"Database connection pool status",[284,5833,5834],{},"Cache hit/miss ratios",[284,5836,5837,5840],{},[287,5838,5839],{},"Business Metrics",[281,5841,5842,5845,5848,5851],{},[284,5843,5844],{},"User registration rate",[284,5846,5847],{},"API endpoint usage patterns",[284,5849,5850],{},"Feature adoption metrics",[284,5852,5853],{},"Performance budget compliance",[1318,5855,5857],{"id":5856},"alert-configuration","Alert Configuration",[314,5859,5861],{"className":316,"code":5860,"language":318,"meta":319,"style":319},"// Configure alerts for critical metrics\nuse Glueful\\Monitoring\\AlertManager;\n\n$alertManager = new AlertManager([\n    'channels' => ['email', 'slack', 'webhook'],\n    'rules' => [\n        [\n            'name' => 'High Response Time',\n            'condition' => 'avg_response_time > 500',  // ms\n            'duration' => '5m',\n            'severity' => 'warning'\n        ],\n        [\n            'name' => 'High Error Rate', \n            'condition' => 'error_rate > 5',           // %\n            'duration' => '2m',\n            'severity' => 'critical'\n        ]\n    ]\n]);\n",[321,5862,5863,5868,5885,5889,5905,5941,5954,5959,5979,6002,6022,6039,6043,6047,6068,6090,6109,6125,6129,6133],{"__ignoreMap":319},[324,5864,5865],{"class":326,"line":327},[324,5866,5867],{"class":364},"// Configure alerts for critical metrics\n",[324,5869,5870,5872,5874,5876,5878,5880,5883],{"class":326,"line":354},[324,5871,331],{"class":330},[324,5873,335],{"class":334},[324,5875,339],{"class":338},[324,5877,5295],{"class":334},[324,5879,339],{"class":338},[324,5881,5882],{"class":346},"AlertManager",[324,5884,351],{"class":350},[324,5886,5887],{"class":326,"line":361},[324,5888,358],{"emptyLinePlaceholder":357},[324,5890,5891,5893,5896,5898,5900,5903],{"class":326,"line":368},[324,5892,371],{"class":350},[324,5894,5895],{"class":374},"alertManager ",[324,5897,379],{"class":378},[324,5899,1007],{"class":330},[324,5901,5902],{"class":395}," AlertManager",[324,5904,1013],{"class":350},[324,5906,5907,5909,5911,5913,5915,5917,5919,5921,5923,5925,5927,5929,5931,5933,5935,5937,5939],{"class":326,"line":408},[324,5908,601],{"class":451},[324,5910,1020],{"class":455},[324,5912,585],{"class":451},[324,5914,593],{"class":378},[324,5916,1067],{"class":350},[324,5918,585],{"class":451},[324,5920,1033],{"class":455},[324,5922,585],{"class":451},[324,5924,392],{"class":350},[324,5926,1079],{"class":451},[324,5928,1116],{"class":455},[324,5930,585],{"class":451},[324,5932,392],{"class":350},[324,5934,1079],{"class":451},[324,5936,1789],{"class":455},[324,5938,585],{"class":451},[324,5940,707],{"class":350},[324,5942,5943,5945,5948,5950,5952],{"class":326,"line":413},[324,5944,601],{"class":451},[324,5946,5947],{"class":455},"rules",[324,5949,585],{"class":451},[324,5951,593],{"class":378},[324,5953,596],{"class":350},[324,5955,5956],{"class":326,"line":419},[324,5957,5958],{"class":350},"        [\n",[324,5960,5961,5963,5966,5968,5970,5972,5975,5977],{"class":326,"line":444},[324,5962,629],{"class":451},[324,5964,5965],{"class":455},"name",[324,5967,585],{"class":451},[324,5969,593],{"class":378},[324,5971,1079],{"class":451},[324,5973,5974],{"class":455},"High Response Time",[324,5976,585],{"class":451},[324,5978,643],{"class":350},[324,5980,5981,5983,5986,5988,5990,5992,5995,5997,5999],{"class":326,"line":505},[324,5982,629],{"class":451},[324,5984,5985],{"class":455},"condition",[324,5987,585],{"class":451},[324,5989,593],{"class":378},[324,5991,1079],{"class":451},[324,5993,5994],{"class":455},"avg_response_time > 500",[324,5996,585],{"class":451},[324,5998,392],{"class":350},[324,6000,6001],{"class":364},"  // ms\n",[324,6003,6004,6006,6009,6011,6013,6015,6018,6020],{"class":326,"line":510},[324,6005,629],{"class":451},[324,6007,6008],{"class":455},"duration",[324,6010,585],{"class":451},[324,6012,593],{"class":378},[324,6014,1079],{"class":451},[324,6016,6017],{"class":455},"5m",[324,6019,585],{"class":451},[324,6021,643],{"class":350},[324,6023,6024,6026,6029,6031,6033,6035,6037],{"class":326,"line":516},[324,6025,629],{"class":451},[324,6027,6028],{"class":455},"severity",[324,6030,585],{"class":451},[324,6032,593],{"class":378},[324,6034,1079],{"class":451},[324,6036,1102],{"class":455},[324,6038,1105],{"class":451},[324,6040,6041],{"class":326,"line":539},[324,6042,697],{"class":350},[324,6044,6045],{"class":326,"line":545},[324,6046,5958],{"class":350},[324,6048,6049,6051,6053,6055,6057,6059,6062,6064,6066],{"class":326,"line":560},[324,6050,629],{"class":451},[324,6052,5965],{"class":455},[324,6054,585],{"class":451},[324,6056,593],{"class":378},[324,6058,1079],{"class":451},[324,6060,6061],{"class":455},"High Error Rate",[324,6063,585],{"class":451},[324,6065,392],{"class":350},[324,6067,5663],{"class":374},[324,6069,6070,6072,6074,6076,6078,6080,6083,6085,6087],{"class":326,"line":1196},[324,6071,629],{"class":451},[324,6073,5985],{"class":455},[324,6075,585],{"class":451},[324,6077,593],{"class":378},[324,6079,1079],{"class":451},[324,6081,6082],{"class":455},"error_rate > 5",[324,6084,585],{"class":451},[324,6086,392],{"class":350},[324,6088,6089],{"class":364},"           // %\n",[324,6091,6092,6094,6096,6098,6100,6102,6105,6107],{"class":326,"line":1202},[324,6093,629],{"class":451},[324,6095,6008],{"class":455},[324,6097,585],{"class":451},[324,6099,593],{"class":378},[324,6101,1079],{"class":451},[324,6103,6104],{"class":455},"2m",[324,6106,585],{"class":451},[324,6108,643],{"class":350},[324,6110,6111,6113,6115,6117,6119,6121,6123],{"class":326,"line":1207},[324,6112,629],{"class":451},[324,6114,6028],{"class":455},[324,6116,585],{"class":451},[324,6118,593],{"class":378},[324,6120,1079],{"class":451},[324,6122,1191],{"class":455},[324,6124,1105],{"class":451},[324,6126,6127],{"class":326,"line":1221},[324,6128,1199],{"class":350},[324,6130,6131],{"class":326,"line":1240},[324,6132,1280],{"class":350},[324,6134,6135],{"class":326,"line":1259},[324,6136,1286],{"class":350},[265,6138,6139],{},"This comprehensive observability system provides complete visibility into your Glueful application's performance and behavior in production environments.",[6141,6142,6143],"style",{},"html pre.shiki code .shWJe, html code.shiki .shWJe{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .s91G_, html code.shiki .s91G_{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#F8F8F2}html pre.shiki code .sv8o3, html code.shiki .sv8o3{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#F8F8F2}html pre.shiki code .seZir, html code.shiki .seZir{--shiki-light:#90A4AE;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .ss7Ak, html code.shiki .ss7Ak{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sD0ED, html code.shiki .sD0ED{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .s_MOj, html code.shiki .s_MOj{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sMLJd, html code.shiki .sMLJd{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sRxSC, html code.shiki .sRxSC{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#F92672;--shiki-sepia-font-style:inherit}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 .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sMTiH, html code.shiki .sMTiH{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sYThS, html code.shiki .sYThS{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .srJo8, html code.shiki .srJo8{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sQqfL, html code.shiki .sQqfL{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#F8F8F2}html pre.shiki code .sR7ES, html code.shiki .sR7ES{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sFhLe, html code.shiki .sFhLe{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sQeA1, html code.shiki .sQeA1{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .saDeg, html code.shiki .saDeg{--shiki-light:#39ADB5;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sEff5, html code.shiki .sEff5{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sh1VR, html code.shiki .sh1VR{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2}html pre.shiki code .sINAO, html code.shiki .sINAO{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2}html pre.shiki code .sTC9v, html code.shiki .sTC9v{--shiki-light:#F76D47;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sogGa, html code.shiki .sogGa{--shiki-light:#E53935;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}",{"title":319,"searchDepth":327,"depth":354,"links":6145},[6146,6153,6160,6166,6171,6178,6184,6188,6193],{"id":271,"depth":354,"text":272,"children":6147},[6148,6149,6150,6151,6152],{"id":279,"depth":361,"text":57},{"id":311,"depth":361,"text":312},{"id":566,"depth":361,"text":567},{"id":710,"depth":361,"text":711},{"id":761,"depth":361,"text":762},{"id":932,"depth":354,"text":933,"children":6154},[6155,6156,6157,6158,6159],{"id":939,"depth":361,"text":57},{"id":968,"depth":361,"text":969},{"id":1315,"depth":361,"text":1316},{"id":1663,"depth":361,"text":958},{"id":1844,"depth":361,"text":1845},{"id":1990,"depth":354,"text":1991,"children":6161},[6162,6163,6164,6165],{"id":1997,"depth":361,"text":1998},{"id":2101,"depth":361,"text":2102},{"id":2278,"depth":361,"text":2279},{"id":2543,"depth":361,"text":2544},{"id":2643,"depth":354,"text":2644,"children":6167},[6168,6169,6170],{"id":2650,"depth":361,"text":57},{"id":2673,"depth":361,"text":312},{"id":2926,"depth":361,"text":2927},{"id":2980,"depth":354,"text":2981,"children":6172},[6173,6174,6175,6176,6177],{"id":2987,"depth":361,"text":312},{"id":3083,"depth":361,"text":3084},{"id":3269,"depth":361,"text":3270},{"id":3415,"depth":361,"text":3416},{"id":3546,"depth":361,"text":3547},{"id":3584,"depth":354,"text":3585,"children":6179},[6180,6181,6182,6183],{"id":3591,"depth":361,"text":57},{"id":3617,"depth":361,"text":312},{"id":3837,"depth":361,"text":3838},{"id":3995,"depth":361,"text":3996},{"id":4086,"depth":354,"text":4087,"children":6185},[6186,6187],{"id":4103,"depth":361,"text":312},{"id":4358,"depth":361,"text":4359},{"id":4377,"depth":354,"text":4378,"children":6189},[6190,6191,6192],{"id":4381,"depth":361,"text":4382},{"id":4418,"depth":361,"text":4419},{"id":4454,"depth":361,"text":4455},{"id":4715,"depth":354,"text":4716,"children":6194},[6195,6196],{"id":4719,"depth":361,"text":4720},{"id":5266,"depth":361,"text":5267},"Glueful's memory-management and observability tooling — the memory manager, alerting, efficient iterators, object pool, chunked DB processing, lazy container, and request tracing.","md",null,{},{"title":204,"description":6197},"XLCJE1ANHpPwHGJF6_C0f6UIScf6lJvZoRstvA2ShnA",[6204,6206],{"title":200,"path":201,"stem":202,"description":6205,"children":-1},"Glueful's performance surface — query optimization, query caching, profiling/analysis tools, the query logger, and response caching.",{"title":208,"path":209,"stem":210,"description":6207,"children":-1},"Build your own Glueful CLI commands on Symfony Console — the BaseCommand base class, DI-enabled services, registration, and authoring best practices.",1780958523455]