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