From 040bb0d7f4d43af66126abdc677fcea05afa058a Mon Sep 17 00:00:00 2001
From: Kevin Morris <kevr@0cost.org>
Date: Fri, 15 Oct 2021 13:19:07 -0700
Subject: [PATCH] Revert "feat(PHP): add aurweb Prometheus metrics"

This reverts commit 986fa9ee305ed113172f7f214d451a7af071ecc2.
---
 INSTALL                     |   8 +--
 web/html/index.php          |  29 --------
 web/html/metrics.php        |  16 -----
 web/lib/metricfuncs.inc.php | 129 ------------------------------------
 web/lib/routing.inc.php     |   3 +-
 5 files changed, 2 insertions(+), 183 deletions(-)
 delete mode 100644 web/html/metrics.php
 delete mode 100644 web/lib/metricfuncs.inc.php

diff --git a/INSTALL b/INSTALL
index b161edd2d..9bcd0759c 100644
--- a/INSTALL
+++ b/INSTALL
@@ -49,15 +49,9 @@ read the instructions below.
 
     # pacman -S python-mysql-connector python-pygit2 python-srcinfo python-sqlalchemy \
                 python-bleach python-markdown python-alembic python-jinja \
-                python-itsdangerous python-authlib python-httpx hypercorn \
-                composer
+                python-itsdangerous python-authlib python-httpx hypercorn
     # python3 setup.py install
 
-4a) Install `composer` dependencies while inside of aurweb's root:
-
-    $ cd /path/to/aurweb
-    /path/to/aurweb $ composer require promphp/prometheus_client_php
-
 5) Create a new MySQL database and a user and import the aurweb SQL schema:
 
     $ python -m aurweb.initdb
diff --git a/web/html/index.php b/web/html/index.php
index 82a44c55b..e57e7708e 100644
--- a/web/html/index.php
+++ b/web/html/index.php
@@ -3,39 +3,10 @@ set_include_path(get_include_path() . PATH_SEPARATOR . '../lib');
 
 include_once("aur.inc.php");
 include_once("pkgfuncs.inc.php");
-include_once("cachefuncs.inc.php");
-include_once("metricfuncs.inc.php");
 
 $path = $_SERVER['PATH_INFO'];
 $tokens = explode('/', $path);
 
-$query_string = $_SERVER['QUERY_STRING'];
-
-// If no options.cache is configured, we no-op metric storage operations.
-$is_cached = defined('EXTENSION_LOADED_APC') || defined('EXTENSION_LOADED_MEMCACHE');
-if ($is_cached) {
-	$method = $_SERVER['REQUEST_METHOD'];
-	// We'll always add +1 to our total request count to this $path,
-	// unless this path == /metrics.
-	if ($path !== "/metrics")
-		add_metric("http_requests_count", $method, $path);
-
-	// Extract $type out of $query_string, if we can.
-	$type = null;
-	$query = array();
-	if ($query_string)
-		parse_str($query_string, $query);
-	$type = $query['type'];
-
-	// Only store RPC metrics for valid types.
-	$good_types = [
-		"info", "multiinfo", "search", "msearch",
-		"suggest", "suggest-pkgbase", "get-comment-form"
-	];
-	if ($path === "/rpc" && in_array($type, $good_types))
-		add_metric("api_requests_count", $method, $path, $type);
-}
-
 if (config_get_bool('options', 'enable-maintenance') && (empty($tokens[1]) || ($tokens[1] != "css" && $tokens[1] != "images"))) {
 	if (!in_array($_SERVER['REMOTE_ADDR'], explode(" ", config_get('options', 'maintenance-exceptions')))) {
 		header("HTTP/1.0 503 Service Unavailable");
diff --git a/web/html/metrics.php b/web/html/metrics.php
deleted file mode 100644
index dfa860ed3..000000000
--- a/web/html/metrics.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Provide some variable Prometheus metrics. A new requests.route type
- * gets created for each request made and we keep a count using our
- * existing Memcached or APC configurable cache, with route
- * = {request_uri}?{query_string}.
- *
- * TL;DR -- The 'requests' counter is used to give variable requests
- * based on their request_uris and query_strings.
- **/
-include_once('metricfuncs.inc.php');
-
-// Render metrics based on options.cache storage.
-render_metrics();
-
-?>
diff --git a/web/lib/metricfuncs.inc.php b/web/lib/metricfuncs.inc.php
deleted file mode 100644
index acfc30d7d..000000000
--- a/web/lib/metricfuncs.inc.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-set_include_path(get_include_path() . PATH_SEPARATOR . '../lib');
-
-require __DIR__ . '/../../vendor/autoload.php';
-include_once("cachefuncs.inc.php");
-
-use \Prometheus\Storage\InMemory;
-use \Prometheus\CollectorRegistry;
-use \Prometheus\RenderTextFormat;
-
-// We always pass through an InMemory cache. This means that
-// metrics are only good while the php-fpm service is running
-// and will start again at 0 if it's restarted.
-$registry = new CollectorRegistry(new InMemory());
-
-function add_metric($anchor, $method, $path, $type = null) {
-
-	global $registry;
-	// We keep track of which routes we're interested in by storing
-	// a JSON-encoded list into the "prometheus_metrics" key,
-	// with each item being a JSON-encoded associative array
-	// in the form: {'path': <route>, 'query_string': <query_string>}.
-	$metrics = get_cache_value("prometheus_metrics");
-	$metrics = $metrics ? json_decode($metrics) : array();
-
-	$key = "$path:$type";
-
-	// If the current request $path isn't yet in $metrics create
-	// a new assoc array for it and push it into $metrics.
-	if (!in_array($key, $metrics)) {
-		$data = array(
-			'anchor' => $anchor,
-			'method' => $method,
-			'path' => $path,
-			'type' => $type
-		);
-		array_push($metrics, json_encode($data));
-	}
-
-	// Cache-wise, we also store the count values of each route
-	// through the "prometheus:<route>" key. Grab the cache value
-	// representing the current $path we're on (defaulted to 1).
-	$count = get_cache_value("prometheus:$key");
-	$count = $count ? $count + 1 : 1;
-
-	$labels = ["method", "route"];
-	if ($type)
-		array_push($labels, "type");
-
-	$gauge = $registry->getOrRegisterGauge(
-		'aurweb',
-		$anchor,
-		'A metric count for the aurweb platform.',
-		$labels
-	);
-
-	$label_values = [$data['method'], $data['path']];
-	if ($type)
-		array_push($label_values, $type);
-
-	$gauge->set($count, $label_values);
-
-	// Update cache values.
-	set_cache_value("prometheus:$key", $count, 0);
-	set_cache_value("prometheus_metrics", json_encode($metrics), 0);
-
-}
-
-function render_metrics() {
-	if (!defined('EXTENSION_LOADED_APC') && !defined('EXTENSION_LOADED_MEMCACHE')) {
-		error_log("The /metrics route requires a valid 'options.cache' "
-			. "configuration; no cache is configured.");
-		return http_response_code(417); // EXPECTATION_FAILED
-	}
-
-	global $registry;
-
-	// First, we grab the set of metrics we're interested in in the
-	// form of a cached JSON list, if we can.
-	$metrics = get_cache_value("prometheus_metrics");
-	if (!$metrics)
-		$metrics = array();
-	else
-		$metrics = json_decode($metrics);
-
-	// Now, we walk through each of those list values one by one,
-	// which happen to be JSON-serialized associative arrays,
-	// and process each metric via its associative array's contents:
-	// The route path and the query string.
-	// See web/html/index.php for the creation of such metrics.
-	foreach ($metrics as $metric) {
-		$data = json_decode($metric, true);
-
-		$anchor = $data['anchor'];
-		$path = $data['path'];
-		$type = $data['type'];
-		$key = "$path:$type";
-
-		$labels = ["method", "route"];
-		if ($type)
-			array_push($labels, "type");
-
-		$count = get_cache_value("prometheus:$key");
-		$gauge = $registry->getOrRegisterGauge(
-			'aurweb',
-			$anchor,
-			'A metric count for the aurweb platform.',
-			$labels
-		);
-
-		$label_values = [$data['method'], $data['path']];
-		if ($type)
-			array_push($label_values, $type);
-
-		$gauge->set($count, $label_values);
-	}
-
-	// Construct the results from RenderTextFormat renderer and
-	// registry's samples.
-	$renderer = new RenderTextFormat();
-	$result = $renderer->render($registry->getMetricFamilySamples());
-
-	// Output the results with the right content type header.
-	http_response_code(200); // OK
-	header('Content-Type: ' . RenderTextFormat::MIME_TYPE);
-	echo $result;
-}
-
-?>
diff --git a/web/lib/routing.inc.php b/web/lib/routing.inc.php
index 0f452f221..73c667d26 100644
--- a/web/lib/routing.inc.php
+++ b/web/lib/routing.inc.php
@@ -19,8 +19,7 @@ $ROUTES = array(
 	'/rss' => 'rss.php',
 	'/tos' => 'tos.php',
 	'/tu' => 'tu.php',
-    '/addvote' => 'addvote.php',
-    '/metrics' => 'metrics.php' // Prometheus Metrics
+	'/addvote' => 'addvote.php',
 );
 
 $PKG_PATH = '/packages';
-- 
GitLab