{"sha":"a36a5e8943fb8405dcaffe75cfef1814d4b2da42","node_id":"C_kwDOCUrhr9oAKGEzNmE1ZTg5NDNmYjg0MDVkY2FmZmU3NWNmZWYxODE0ZDRiMmRhNDI","commit":{"author":{"name":"Nicolas Borboën","email":"ponsfrilus@gmail.com","date":"2026-04-16T08:59:50Z"},"committer":{"name":"Nicolas Borboën","email":"ponsfrilus@gmail.com","date":"2026-04-16T08:59:50Z"},"message":"[monitoring] PHP Errors dashboard","tree":{"sha":"d8f6f54b494655906230fd8d305820d6f09fa7aa","url":"https://api.github.com/repos/epfl-si/wp-ops/git/trees/d8f6f54b494655906230fd8d305820d6f09fa7aa"},"url":"https://api.github.com/repos/epfl-si/wp-ops/git/commits/a36a5e8943fb8405dcaffe75cfef1814d4b2da42","comment_count":0,"verification":{"verified":true,"reason":"valid","signature":"-----BEGIN PGP SIGNATURE-----\n\niQJJBAABCgAzFiEEF+L2AiKijST4yerZ8De4We8+GdIFAmngpQYVHHBvbnNmcmls\ndXNAZ21haWwuY29tAAoJEPA3uFnvPhnSwagP/2PAB95O4J0R9rxbNnh6DNytNkkg\nIFkt8efDvwUkTDfaQ5wjBkGScPJdsOHEAeEvu9DG1rpggv5GK9Sw7KduPiWvkp+l\nrOUhjgRnV7DUuHKdNdq+cTG2wxVUoEjBtkHiMHDurKQE4jk3PLy7mGSbwKvJwy+h\n2VBeg6ZdGb3F6qJXK7R6qts3UO6WDusvxgNw853qNn5KcA/ff7gqDsASoA8ZF68J\nAelAZ++AI6LzubT8u2YMESLwRE16+uIe2hP2udgatlYr0YCA799xLn6xl91cfxoI\nTlxvjJGB2ExYDQug/TPTIyo1vg0NdYm5WRLGwuQMoQ24m6RtvOEHoXvwf+aFHwF1\nMHdbgkupbUFknW/Q8JCBQcUKgP1M3VPuKyfUpkMQJ+KIvx7fFLmMdCqV1F37VyzM\n+71orWhbKh+GPXztPWYWCatSJbeCcblnY989BbbdLouKNQONoefHNAHzg/VyIoqS\ntOFLCfIQkczePP1aUhji1J7o9ykcQFnLbFLcSq8bVjrR7m2un4zXvisXdnTrG5rO\nQHHDIW7QDQpcyyCHld9Ad7K6BcunMElcR4UT123KBQrxIKzo2CmDaqM3ra+Mv7LT\nckF/god1pVik28glywpI2OHxVkr4VgaIW62HlnQFE094utW6m3e4QCLqf05huZt5\nf24+VFAIKM8Yq5bj\n=25/G\n-----END PGP SIGNATURE-----","payload":"tree d8f6f54b494655906230fd8d305820d6f09fa7aa\nparent 90ed73debb892e8e182bcc69a7788187f91e7776\nauthor Nicolas Borboën <ponsfrilus@gmail.com> 1776329990 +0200\ncommitter Nicolas Borboën <ponsfrilus@gmail.com> 1776329990 +0200\n\n[monitoring] PHP Errors dashboard\n","verified_at":"2026-04-16T10:32:42Z"}},"url":"https://api.github.com/repos/epfl-si/wp-ops/commits/a36a5e8943fb8405dcaffe75cfef1814d4b2da42","html_url":"https://github.com/epfl-si/wp-ops/commit/a36a5e8943fb8405dcaffe75cfef1814d4b2da42","comments_url":"https://api.github.com/repos/epfl-si/wp-ops/commits/a36a5e8943fb8405dcaffe75cfef1814d4b2da42/comments","author":{"login":"ponsfrilus","id":176002,"node_id":"MDQ6VXNlcjE3NjAwMg==","avatar_url":"https://avatars.githubusercontent.com/u/176002?v=4","gravatar_id":"","url":"https://api.github.com/users/ponsfrilus","html_url":"https://github.com/ponsfrilus","followers_url":"https://api.github.com/users/ponsfrilus/followers","following_url":"https://api.github.com/users/ponsfrilus/following{/other_user}","gists_url":"https://api.github.com/users/ponsfrilus/gists{/gist_id}","starred_url":"https://api.github.com/users/ponsfrilus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ponsfrilus/subscriptions","organizations_url":"https://api.github.com/users/ponsfrilus/orgs","repos_url":"https://api.github.com/users/ponsfrilus/repos","events_url":"https://api.github.com/users/ponsfrilus/events{/privacy}","received_events_url":"https://api.github.com/users/ponsfrilus/received_events","type":"User","user_view_type":"public","site_admin":false},"committer":{"login":"ponsfrilus","id":176002,"node_id":"MDQ6VXNlcjE3NjAwMg==","avatar_url":"https://avatars.githubusercontent.com/u/176002?v=4","gravatar_id":"","url":"https://api.github.com/users/ponsfrilus","html_url":"https://github.com/ponsfrilus","followers_url":"https://api.github.com/users/ponsfrilus/followers","following_url":"https://api.github.com/users/ponsfrilus/following{/other_user}","gists_url":"https://api.github.com/users/ponsfrilus/gists{/gist_id}","starred_url":"https://api.github.com/users/ponsfrilus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ponsfrilus/subscriptions","organizations_url":"https://api.github.com/users/ponsfrilus/orgs","repos_url":"https://api.github.com/users/ponsfrilus/repos","events_url":"https://api.github.com/users/ponsfrilus/events{/privacy}","received_events_url":"https://api.github.com/users/ponsfrilus/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"90ed73debb892e8e182bcc69a7788187f91e7776","url":"https://api.github.com/repos/epfl-si/wp-ops/commits/90ed73debb892e8e182bcc69a7788187f91e7776","html_url":"https://github.com/epfl-si/wp-ops/commit/90ed73debb892e8e182bcc69a7788187f91e7776"}],"stats":{"total":379,"additions":379,"deletions":0},"files":[{"sha":"67aa614572325a127813a4a212e6727a9f85d0e5","filename":"ansible/roles/wordpress-namespace/templates/grafana/PHP-Errors.json","status":"added","additions":379,"deletions":0,"changes":379,"blob_url":"https://github.com/epfl-si/wp-ops/blob/a36a5e8943fb8405dcaffe75cfef1814d4b2da42/ansible%2Froles%2Fwordpress-namespace%2Ftemplates%2Fgrafana%2FPHP-Errors.json","raw_url":"https://github.com/epfl-si/wp-ops/raw/a36a5e8943fb8405dcaffe75cfef1814d4b2da42/ansible%2Froles%2Fwordpress-namespace%2Ftemplates%2Fgrafana%2FPHP-Errors.json","contents_url":"https://api.github.com/repos/epfl-si/wp-ops/contents/ansible%2Froles%2Fwordpress-namespace%2Ftemplates%2Fgrafana%2FPHP-Errors.json?ref=a36a5e8943fb8405dcaffe75cfef1814d4b2da42","patch":"@@ -0,0 +1,379 @@\n+{% raw %}\n+{\n+  \"annotations\": {\n+    \"list\": [\n+      {\n+        \"builtIn\": 1,\n+        \"datasource\": {\n+          \"type\": \"grafana\",\n+          \"uid\": \"-- Grafana --\"\n+        },\n+        \"enable\": true,\n+        \"hide\": true,\n+        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n+        \"name\": \"Annotations & Alerts\",\n+        \"type\": \"dashboard\"\n+      }\n+    ]\n+  },\n+  \"editable\": true,\n+  \"fiscalYearStartMonth\": 0,\n+  \"graphTooltip\": 0,\n+  \"id\": 251,\n+  \"links\": [],\n+  \"panels\": [\n+    {\n+      \"datasource\": {\n+        \"type\": \"prometheus\",\n+        \"uid\": \"73a57e8b-7679-4a18-915c-292f143448c7\"\n+      },\n+      \"fieldConfig\": {\n+        \"defaults\": {\n+          \"color\": {\n+            \"mode\": \"palette-classic\"\n+          },\n+          \"custom\": {\n+            \"axisBorderShow\": false,\n+            \"axisCenteredZero\": false,\n+            \"axisColorMode\": \"text\",\n+            \"axisLabel\": \"\",\n+            \"axisPlacement\": \"auto\",\n+            \"axisSoftMin\": 0,\n+            \"barAlignment\": 0,\n+            \"barWidthFactor\": 0.6,\n+            \"drawStyle\": \"line\",\n+            \"fillOpacity\": 0,\n+            \"gradientMode\": \"none\",\n+            \"hideFrom\": {\n+              \"legend\": false,\n+              \"tooltip\": false,\n+              \"viz\": false\n+            },\n+            \"insertNulls\": false,\n+            \"lineInterpolation\": \"linear\",\n+            \"lineWidth\": 1,\n+            \"pointSize\": 5,\n+            \"scaleDistribution\": {\n+              \"type\": \"linear\"\n+            },\n+            \"showPoints\": \"auto\",\n+            \"showValues\": false,\n+            \"spanNulls\": false,\n+            \"stacking\": {\n+              \"group\": \"A\",\n+              \"mode\": \"none\"\n+            },\n+            \"thresholdsStyle\": {\n+              \"mode\": \"off\"\n+            }\n+          },\n+          \"mappings\": [],\n+          \"thresholds\": {\n+            \"mode\": \"absolute\",\n+            \"steps\": [\n+              {\n+                \"color\": \"green\",\n+                \"value\": 0\n+              },\n+              {\n+                \"color\": \"red\",\n+                \"value\": 80\n+              }\n+            ]\n+          },\n+          \"unit\": \"bytes\"\n+        },\n+        \"overrides\": []\n+      },\n+      \"gridPos\": {\n+        \"h\": 8,\n+        \"w\": 24,\n+        \"x\": 0,\n+        \"y\": 0\n+      },\n+      \"id\": 2,\n+      \"options\": {\n+        \"legend\": {\n+          \"calcs\": [],\n+          \"displayMode\": \"list\",\n+          \"placement\": \"bottom\",\n+          \"showLegend\": true\n+        },\n+        \"tooltip\": {\n+          \"hideZeros\": false,\n+          \"mode\": \"single\",\n+          \"sort\": \"none\"\n+        }\n+      },\n+      \"pluginVersion\": \"12.3.0\",\n+      \"targets\": [\n+        {\n+          \"datasource\": {\n+            \"type\": \"prometheus\",\n+            \"uid\": \"73a57e8b-7679-4a18-915c-292f143448c7\"\n+          },\n+          \"editorMode\": \"code\",\n+          {% endraw %}\n+          \"expr\": \"container_memory_usage_bytes{namespace=\\\"{{ inventory_namespace }}\\\",container=\\\"php\\\"}\",\n+          {% raw %}\n+          \"legendFormat\": \"{{pod}}\",\n+          \"range\": true,\n+          \"refId\": \"A\"\n+        }\n+      ],\n+      \"title\": \"PHP Containers memory usage\",\n+      \"type\": \"timeseries\"\n+    },\n+    {\n+      \"datasource\": {\n+        \"type\": \"prometheus\",\n+        \"uid\": \"73a57e8b-7679-4a18-915c-292f143448c7\"\n+      },\n+      \"fieldConfig\": {\n+        \"defaults\": {\n+          \"color\": {\n+            \"mode\": \"palette-classic\"\n+          },\n+          \"custom\": {\n+            \"axisBorderShow\": false,\n+            \"axisCenteredZero\": false,\n+            \"axisColorMode\": \"text\",\n+            \"axisLabel\": \"\",\n+            \"axisPlacement\": \"auto\",\n+            \"axisSoftMin\": 0,\n+            \"barAlignment\": 0,\n+            \"barWidthFactor\": 0.6,\n+            \"drawStyle\": \"line\",\n+            \"fillOpacity\": 0,\n+            \"gradientMode\": \"none\",\n+            \"hideFrom\": {\n+              \"legend\": false,\n+              \"tooltip\": false,\n+              \"viz\": false\n+            },\n+            \"insertNulls\": false,\n+            \"lineInterpolation\": \"linear\",\n+            \"lineWidth\": 1,\n+            \"pointSize\": 5,\n+            \"scaleDistribution\": {\n+              \"type\": \"linear\"\n+            },\n+            \"showPoints\": \"auto\",\n+            \"showValues\": false,\n+            \"spanNulls\": false,\n+            \"stacking\": {\n+              \"group\": \"A\",\n+              \"mode\": \"none\"\n+            },\n+            \"thresholdsStyle\": {\n+              \"mode\": \"off\"\n+            }\n+          },\n+          \"mappings\": [],\n+          \"thresholds\": {\n+            \"mode\": \"absolute\",\n+            \"steps\": [\n+              {\n+                \"color\": \"green\",\n+                \"value\": 0\n+              },\n+              {\n+                \"color\": \"red\",\n+                \"value\": 80\n+              }\n+            ]\n+          }\n+        },\n+        \"overrides\": []\n+      },\n+      \"gridPos\": {\n+        \"h\": 8,\n+        \"w\": 24,\n+        \"x\": 0,\n+        \"y\": 8\n+      },\n+      \"id\": 3,\n+      \"options\": {\n+        \"legend\": {\n+          \"calcs\": [],\n+          \"displayMode\": \"list\",\n+          \"placement\": \"bottom\",\n+          \"showLegend\": true\n+        },\n+        \"tooltip\": {\n+          \"hideZeros\": false,\n+          \"mode\": \"single\",\n+          \"sort\": \"none\"\n+        }\n+      },\n+      \"pluginVersion\": \"12.3.0\",\n+      \"targets\": [\n+        {\n+          \"datasource\": {\n+            \"type\": \"prometheus\",\n+            \"uid\": \"73a57e8b-7679-4a18-915c-292f143448c7\"\n+          },\n+          \"editorMode\": \"code\",\n+          {% endraw %}\n+          \"expr\": \"rate(container_cpu_usage_seconds_total{namespace=\\\"{{ inventory_namespace }}\\\",container=\\\"php\\\"}[5m])\",\n+          {% raw %}\n+          \"legendFormat\": \"{{pod}}\",\n+          \"range\": true,\n+          \"refId\": \"A\"\n+        }\n+      ],\n+      \"title\": \"PHP Containers CPU usage\",\n+      \"type\": \"timeseries\"\n+    },\n+    {\n+      \"datasource\": {\n+        \"uid\": \"Loki (Application)\"\n+      },\n+      \"fieldConfig\": {\n+        \"defaults\": {\n+          \"color\": {\n+            \"mode\": \"palette-classic\"\n+          },\n+          \"custom\": {\n+            \"axisBorderShow\": false,\n+            \"axisCenteredZero\": false,\n+            \"axisColorMode\": \"text\",\n+            \"axisLabel\": \"\",\n+            \"axisPlacement\": \"auto\",\n+            \"barAlignment\": 0,\n+            \"barWidthFactor\": 0.6,\n+            \"drawStyle\": \"line\",\n+            \"fillOpacity\": 0,\n+            \"gradientMode\": \"none\",\n+            \"hideFrom\": {\n+              \"legend\": false,\n+              \"tooltip\": false,\n+              \"viz\": false\n+            },\n+            \"insertNulls\": false,\n+            \"lineInterpolation\": \"linear\",\n+            \"lineWidth\": 1,\n+            \"pointSize\": 5,\n+            \"scaleDistribution\": {\n+              \"type\": \"linear\"\n+            },\n+            \"showPoints\": \"auto\",\n+            \"showValues\": false,\n+            \"spanNulls\": false,\n+            \"stacking\": {\n+              \"group\": \"A\",\n+              \"mode\": \"none\"\n+            },\n+            \"thresholdsStyle\": {\n+              \"mode\": \"off\"\n+            }\n+          },\n+          \"mappings\": [],\n+          \"thresholds\": {\n+            \"mode\": \"absolute\",\n+            \"steps\": [\n+              {\n+                \"color\": \"green\",\n+                \"value\": 0\n+              },\n+              {\n+                \"color\": \"red\",\n+                \"value\": 80\n+              }\n+            ]\n+          }\n+        },\n+        \"overrides\": []\n+      },\n+      \"gridPos\": {\n+        \"h\": 17,\n+        \"w\": 24,\n+        \"x\": 0,\n+        \"y\": 16\n+      },\n+      \"id\": 1,\n+      \"options\": {\n+        \"legend\": {\n+          \"calcs\": [],\n+          \"displayMode\": \"list\",\n+          \"placement\": \"bottom\",\n+          \"showLegend\": true\n+        },\n+        \"tooltip\": {\n+          \"hideZeros\": false,\n+          \"mode\": \"single\",\n+          \"sort\": \"none\"\n+        }\n+      },\n+      \"pluginVersion\": \"12.3.0\",\n+      \"targets\": [\n+        {\n+          \"direction\": \"backward\",\n+          \"editorMode\": \"code\",\n+          \"expr\": \"sum by (err_msg) (\\n  count_over_time(\\n    {kubernetes_pod_name=~\\\"wp-nginx-(.*)\\\"}\\n    | json\\n    | kubernetes_labels_app=\\\"wp-nginx\\\"\\n    | message=~\\\".*PHP Fatal error.*\\\"\\n    | pattern `[<datetime>] WARNING: [<pool>] child <process> said into stdout: \\\"[<_>] PHP Fatal error:  <err_msg> in <file> on line <line>\\\"`\\n  [5m])\\n)\",\n+          \"queryType\": \"range\",\n+          \"refId\": \"A\"\n+        }\n+      ],\n+      \"title\": \"PHP Fatal error over time\",\n+      \"type\": \"timeseries\"\n+    },\n+    {\n+      \"datasource\": {\n+        \"uid\": \"Loki (Application)\"\n+      },\n+      \"fieldConfig\": {\n+        \"defaults\": {},\n+        \"overrides\": []\n+      },\n+      \"gridPos\": {\n+        \"h\": 17,\n+        \"w\": 24,\n+        \"x\": 0,\n+        \"y\": 33\n+      },\n+      \"id\": 4,\n+      \"options\": {\n+        \"dedupStrategy\": \"none\",\n+        \"enableInfiniteScrolling\": false,\n+        \"enableLogDetails\": true,\n+        \"showControls\": false,\n+        \"showTime\": false,\n+        \"sortOrder\": \"Descending\",\n+        \"wrapLogMessage\": false\n+      },\n+      \"pluginVersion\": \"12.3.0\",\n+      \"targets\": [\n+        {\n+          \"direction\": \"backward\",\n+          \"editorMode\": \"code\",\n+          \"expr\": \"{kubernetes_pod_name=~\\\"wp-nginx-(.*)\\\"}\\n| json\\n| kubernetes_labels_app=`wp-nginx`\\n| message=~`.*PHP Fatal error.*`\\n| line_format `{{.message}}`\\n| pattern `[<datetime>] WARNING: [<pool>] child <process> said into stdout: \\\"[<_>] PHP Fatal error:  <err_msg> in <file> on line <line>\\\"`\\n| line_format `{{.datetime}} {{.err_msg}} ({{.file}}:{{.line}})`\",\n+          \"queryType\": \"range\",\n+          \"refId\": \"A\"\n+        }\n+      ],\n+      \"title\": \"PHP Fatal error\",\n+      \"type\": \"logs\"\n+    }\n+  ],\n+  \"preload\": false,\n+  \"schemaVersion\": 42,\n+  \"tags\": [\n+    \"WordPress\",\n+    \"PHP\",\n+    \"Errors\"\n+  ],\n+  \"templating\": {\n+    \"list\": []\n+  },\n+  \"time\": {\n+    \"from\": \"now-6h\",\n+    \"to\": \"now\"\n+  },\n+  \"timepicker\": {},\n+  \"timezone\": \"browser\",\n+  \"title\": \"PHP Errors\",\n+  \"uid\": \"nb2m7cz\",\n+  \"version\": 8\n+}\n+{% endraw %}"}]}