1
0
mirror of https://github.com/beestat/app.git synced 2025-12-29 16:20:41 -05:00
beestat/api/cora/api_log2.php
Jon Ziebell 790aaf354e Fixed #265 - Change logging from push to pull
Deceptively simple commit message. This is a massive change that completely reworks the most fundamental part of the API. Not only does it remove the push logging, it also restructures logging to give better insight into what happens during an API call.
2020-03-15 08:12:28 -04:00

59 lines
1.6 KiB
PHP

<?php
namespace cora;
/**
* Stores a log of API requests and responses. Intended usage is to process
* the request to the end (exception or not) and then log it.
*
* @author Jon Ziebell
*/
final class api_log2 extends crud {
/**
* Insert an item into the api_log resource. Force the IP to the request IP
* and disallow overriding the timestamp.
*
* @param array $attributes The attributes to insert.
*
* @return int The ID of the inserted row.
*/
public function create($attributes) {
// Insert using the transactionless connection.
$database = database::get_transactionless_instance();
return $database->create($this->resource, $attributes);
}
/**
* Get the number of requests since a given timestamp for a given IP
* address. Handy for rate limiting.
*
* @param string $ip_address The IP to look at.
* @param int $timestamp The timestamp to check from.
*
* @return int The number of requests on or after $timestamp.
*/
public function get_number_requests_since($ip_address, $timestamp) {
$ip_address_escaped = $this->database->escape(ip2long($ip_address));
$timestamp_escaped = $this->database->escape(
date('Y-m-d H:i:s', $timestamp)
);
$query = '
select
count(*) `number_requests_since`
from
`api_log2`
where
`ip_address` = ' . $ip_address_escaped . '
and `timestamp` >= ' . $timestamp_escaped . '
';
$result = $this->database->query($query);
$row = $result->fetch_assoc();
return $row['number_requests_since'];
}
}