drop opentelemetry
This commit is contained in:
@@ -298,8 +298,6 @@ class Article extends Handler_Protected {
|
||||
* @return array{'formatted': string, 'entries': array<int, array<string, mixed>>}
|
||||
*/
|
||||
static function _format_enclosures(int $id, bool $always_display_enclosures, string $article_content, bool $hide_images = false): array {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$enclosures = self::_get_enclosures($id);
|
||||
$enclosures_formatted = "";
|
||||
|
||||
@@ -326,7 +324,6 @@ class Article extends Handler_Protected {
|
||||
$enclosures_formatted, $enclosures, $id, $always_display_enclosures, $article_content, $hide_images);
|
||||
|
||||
if (!empty($enclosures_formatted)) {
|
||||
$span->end();
|
||||
return [
|
||||
'formatted' => $enclosures_formatted,
|
||||
'entries' => []
|
||||
@@ -370,7 +367,6 @@ class Article extends Handler_Protected {
|
||||
}
|
||||
}
|
||||
|
||||
$span->end();
|
||||
return $rv;
|
||||
}
|
||||
|
||||
@@ -378,8 +374,6 @@ class Article extends Handler_Protected {
|
||||
* @return array<int, string>
|
||||
*/
|
||||
static function _get_tags(int $id, int $owner_uid = 0, ?string $tag_cache = null): array {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$a_id = $id;
|
||||
|
||||
if (!$owner_uid) $owner_uid = $_SESSION["uid"];
|
||||
@@ -427,7 +421,6 @@ class Article extends Handler_Protected {
|
||||
$sth->execute([$tags_str, $id, $owner_uid]);
|
||||
}
|
||||
|
||||
$span->end();
|
||||
return $tags;
|
||||
}
|
||||
|
||||
@@ -522,8 +515,6 @@ class Article extends Handler_Protected {
|
||||
* @return array<int, array<int, int|string>>
|
||||
*/
|
||||
static function _get_labels(int $id, ?int $owner_uid = null): array {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$rv = array();
|
||||
|
||||
if (!$owner_uid) $owner_uid = $_SESSION["uid"];
|
||||
@@ -569,8 +560,6 @@ class Article extends Handler_Protected {
|
||||
else
|
||||
Labels::update_cache($owner_uid, $id, array("no-labels" => 1));
|
||||
|
||||
$span->end();
|
||||
|
||||
return $rv;
|
||||
}
|
||||
|
||||
@@ -581,8 +570,6 @@ class Article extends Handler_Protected {
|
||||
* @return array<int, Article::ARTICLE_KIND_*|string>
|
||||
*/
|
||||
static function _get_image(array $enclosures, string $content, string $site_url, array $headline) {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$article_image = "";
|
||||
$article_stream = "";
|
||||
$article_kind = 0;
|
||||
@@ -603,6 +590,7 @@ class Article extends Handler_Protected {
|
||||
$tmpxpath = new DOMXPath($tmpdoc);
|
||||
$elems = $tmpxpath->query('(//img[@src]|//video[@poster]|//iframe[contains(@src , "youtube.com/embed/")])');
|
||||
|
||||
/** @var DOMElement $e */
|
||||
foreach ($elems as $e) {
|
||||
if ($e->nodeName == "iframe") {
|
||||
$matches = [];
|
||||
@@ -660,8 +648,6 @@ class Article extends Handler_Protected {
|
||||
if ($article_stream && $cache->exists(sha1($article_stream)))
|
||||
$article_stream = $cache->get_url(sha1($article_stream));
|
||||
|
||||
$span->end();
|
||||
|
||||
return [$article_image, $article_stream, $article_kind];
|
||||
}
|
||||
|
||||
@@ -675,8 +661,6 @@ class Article extends Handler_Protected {
|
||||
if (count($article_ids) == 0)
|
||||
return [];
|
||||
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$entries = ORM::for_table('ttrss_entries')
|
||||
->table_alias('e')
|
||||
->join('ttrss_user_entries', ['ref_id', '=', 'id'], 'ue')
|
||||
@@ -696,8 +680,6 @@ class Article extends Handler_Protected {
|
||||
}
|
||||
}
|
||||
|
||||
$span->end();
|
||||
|
||||
return array_unique($rv);
|
||||
}
|
||||
|
||||
@@ -709,8 +691,6 @@ class Article extends Handler_Protected {
|
||||
if (count($article_ids) == 0)
|
||||
return [];
|
||||
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$entries = ORM::for_table('ttrss_entries')
|
||||
->table_alias('e')
|
||||
->join('ttrss_user_entries', ['ref_id', '=', 'id'], 'ue')
|
||||
@@ -723,8 +703,6 @@ class Article extends Handler_Protected {
|
||||
array_push($rv, $entry->feed_id);
|
||||
}
|
||||
|
||||
$span->end();
|
||||
|
||||
return array_unique($rv);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,8 +145,6 @@ class Counters {
|
||||
* @return array<int, array<string, int|string>>
|
||||
*/
|
||||
private static function get_feeds(?array $feed_ids = null): array {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$ret = [];
|
||||
|
||||
$pdo = Db::pdo();
|
||||
@@ -212,8 +210,6 @@ class Counters {
|
||||
|
||||
}
|
||||
|
||||
$span->end();
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@@ -221,8 +217,6 @@ class Counters {
|
||||
* @return array<int, array<string, int|string>>
|
||||
*/
|
||||
private static function get_global(): array {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$ret = [
|
||||
[
|
||||
"id" => "global-unread",
|
||||
@@ -239,8 +233,6 @@ class Counters {
|
||||
"counter" => $subcribed_feeds
|
||||
]);
|
||||
|
||||
$span->end();
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@@ -248,8 +240,6 @@ class Counters {
|
||||
* @return array<int, array<string, int|string>>
|
||||
*/
|
||||
private static function get_virt(): array {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$ret = [];
|
||||
|
||||
foreach ([Feeds::FEED_ARCHIVED, Feeds::FEED_STARRED, Feeds::FEED_PUBLISHED,
|
||||
@@ -295,7 +285,6 @@ class Counters {
|
||||
}
|
||||
}
|
||||
|
||||
$span->end();
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@@ -304,8 +293,6 @@ class Counters {
|
||||
* @return array<int, array<string, int|string>>
|
||||
*/
|
||||
static function get_labels(?array $label_ids = null): array {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$ret = [];
|
||||
|
||||
$pdo = Db::pdo();
|
||||
@@ -356,7 +343,6 @@ class Counters {
|
||||
array_push($ret, $cv);
|
||||
}
|
||||
|
||||
$span->end();
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
class Digest
|
||||
{
|
||||
static function send_headlines_digests(): void {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$user_limit = 15; // amount of users to process (e.g. emails to send out)
|
||||
$limit = 1000; // maximum amount of headlines to include
|
||||
|
||||
@@ -77,7 +75,6 @@ class Digest
|
||||
}
|
||||
}
|
||||
|
||||
$span->end();
|
||||
Debug::log("All done.");
|
||||
}
|
||||
|
||||
|
||||
@@ -221,11 +221,7 @@ class DiskCache implements Cache_Adapter {
|
||||
}
|
||||
|
||||
public function remove(string $filename): bool {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
$span->setAttribute('file.name', $filename);
|
||||
|
||||
$rc = $this->adapter->remove($filename);
|
||||
$span->end();
|
||||
|
||||
return $rc;
|
||||
}
|
||||
@@ -251,9 +247,6 @@ class DiskCache implements Cache_Adapter {
|
||||
}
|
||||
|
||||
public function exists(string $filename): bool {
|
||||
$span = OpenTelemetry\API\Trace\Span::getCurrent();
|
||||
$span->addEvent("DiskCache::exists: $filename");
|
||||
|
||||
$rc = $this->adapter->exists(basename($filename));
|
||||
|
||||
return $rc;
|
||||
@@ -263,11 +256,7 @@ class DiskCache implements Cache_Adapter {
|
||||
* @return int|false -1 if the file doesn't exist, false if an error occurred, size in bytes otherwise
|
||||
*/
|
||||
public function get_size(string $filename) {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
$span->setAttribute('file.name', $filename);
|
||||
|
||||
$rc = $this->adapter->get_size(basename($filename));
|
||||
$span->end();
|
||||
|
||||
return $rc;
|
||||
}
|
||||
@@ -278,11 +267,7 @@ class DiskCache implements Cache_Adapter {
|
||||
* @return int|false Bytes written or false if an error occurred.
|
||||
*/
|
||||
public function put(string $filename, $data) {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
$rc = $this->adapter->put(basename($filename), $data);
|
||||
$span->end();
|
||||
|
||||
return $rc;
|
||||
return $this->adapter->put(basename($filename), $data);
|
||||
}
|
||||
|
||||
/** @deprecated we can't assume cached files are local, and other storages
|
||||
@@ -326,17 +311,12 @@ class DiskCache implements Cache_Adapter {
|
||||
}
|
||||
|
||||
public function send(string $filename) {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
$span->setAttribute('file.name', $filename);
|
||||
|
||||
$filename = basename($filename);
|
||||
|
||||
if (!$this->exists($filename)) {
|
||||
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
|
||||
echo "File not found.";
|
||||
|
||||
$span->setAttribute('error', '404 not found');
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -346,8 +326,6 @@ class DiskCache implements Cache_Adapter {
|
||||
if (($_SERVER['HTTP_IF_MODIFIED_SINCE'] ?? '') == $gmt_modified || ($_SERVER['HTTP_IF_NONE_MATCH'] ?? '') == $file_mtime) {
|
||||
header('HTTP/1.1 304 Not Modified');
|
||||
|
||||
$span->setAttribute('error', '304 not modified');
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -365,9 +343,6 @@ class DiskCache implements Cache_Adapter {
|
||||
header("Content-type: text/plain");
|
||||
|
||||
print "Stored file has disallowed content type ($mimetype)";
|
||||
|
||||
$span->setAttribute('error', '400 disallowed content type');
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -389,13 +364,7 @@ class DiskCache implements Cache_Adapter {
|
||||
|
||||
header_remove("Pragma");
|
||||
|
||||
$span->setAttribute('mimetype', $mimetype);
|
||||
|
||||
$rc = $this->adapter->send($filename);
|
||||
|
||||
$span->end();
|
||||
|
||||
return $rc;
|
||||
return $this->adapter->send($filename);
|
||||
}
|
||||
|
||||
public function get_full_path(string $filename): string {
|
||||
@@ -424,13 +393,9 @@ class DiskCache implements Cache_Adapter {
|
||||
// plugins work on original source URLs used before caching
|
||||
// NOTE: URLs should be already absolutized because this is called after sanitize()
|
||||
static public function rewrite_urls(string $str): string {
|
||||
$span = OpenTelemetry\API\Trace\Span::getCurrent();
|
||||
$span->addEvent("DiskCache::rewrite_urls");
|
||||
|
||||
$res = trim($str);
|
||||
|
||||
if (!$res) {
|
||||
$span->end();
|
||||
return '';
|
||||
}
|
||||
|
||||
@@ -439,13 +404,12 @@ class DiskCache implements Cache_Adapter {
|
||||
$xpath = new DOMXPath($doc);
|
||||
$cache = DiskCache::instance("images");
|
||||
|
||||
$entries = $xpath->query('(//img[@src]|//source[@src|@srcset]|//video[@poster|@src])');
|
||||
|
||||
$need_saving = false;
|
||||
|
||||
foreach ($entries as $entry) {
|
||||
$span->addEvent("entry: " . $entry->tagName);
|
||||
$entries = $xpath->query('(//img[@src]|//source[@src|@srcset]|//video[@poster|@src])');
|
||||
|
||||
/** @var DOMElement $entry */
|
||||
foreach ($entries as $entry) {
|
||||
foreach (array('src', 'poster') as $attr) {
|
||||
if ($entry->hasAttribute($attr)) {
|
||||
$url = $entry->getAttribute($attr);
|
||||
|
||||
@@ -62,9 +62,6 @@ class Feeds extends Handler_Protected {
|
||||
|
||||
$disable_cache = false;
|
||||
|
||||
$span = Tracer::start(__METHOD__);
|
||||
$span->setAttribute('func.args', json_encode(func_get_args()));
|
||||
|
||||
$reply = [];
|
||||
$rgba_cache = [];
|
||||
$topmost_article_ids = [];
|
||||
@@ -166,7 +163,6 @@ class Feeds extends Handler_Protected {
|
||||
$reply['search_query'] = [$search, $search_language];
|
||||
$reply['vfeed_group_enabled'] = $vfeed_group_enabled;
|
||||
|
||||
$span->addEvent('plugin_menu_items');
|
||||
|
||||
$plugin_menu_items = "";
|
||||
PluginHost::getInstance()->chain_hooks_callback(PluginHost::HOOK_HEADLINE_TOOLBAR_SELECT_MENU_ITEM2,
|
||||
@@ -200,13 +196,10 @@ class Feeds extends Handler_Protected {
|
||||
},
|
||||
$feed, $cat_view, $qfh_ret);
|
||||
|
||||
$span->addEvent('articles');
|
||||
|
||||
$headlines_count = 0;
|
||||
|
||||
if ($result instanceof PDOStatement) {
|
||||
while ($line = $result->fetch(PDO::FETCH_ASSOC)) {
|
||||
$span->addEvent('article: ' . $line['id']);
|
||||
|
||||
++$headlines_count;
|
||||
|
||||
@@ -366,8 +359,6 @@ class Feeds extends Handler_Protected {
|
||||
//setting feed headline background color, needs to change text color based on dark/light
|
||||
$fav_color = $line['favicon_avg_color'] ?? false;
|
||||
|
||||
$span->addEvent("colors");
|
||||
|
||||
require_once "colors.php";
|
||||
|
||||
if (!isset($rgba_cache[$feed_id])) {
|
||||
@@ -382,8 +373,6 @@ class Feeds extends Handler_Protected {
|
||||
$line['feed_bg_color'] = 'rgba(' . implode(",", $rgba_cache[$feed_id]) . ',0.3)';
|
||||
}
|
||||
|
||||
$span->addEvent("HOOK_RENDER_ARTICLE_CDM");
|
||||
|
||||
PluginHost::getInstance()->chain_hooks_callback(PluginHost::HOOK_RENDER_ARTICLE_CDM,
|
||||
function ($result, $plugin) use (&$line) {
|
||||
$line = $result;
|
||||
@@ -461,8 +450,6 @@ class Feeds extends Handler_Protected {
|
||||
}
|
||||
}
|
||||
|
||||
$span->end();
|
||||
|
||||
return array($topmost_article_ids, $headlines_count, $feed, $disable_cache, $reply);
|
||||
}
|
||||
|
||||
@@ -926,10 +913,6 @@ class Feeds extends Handler_Protected {
|
||||
* @throws PDOException
|
||||
*/
|
||||
static function _get_counters($feed, bool $is_cat = false, bool $unread_only = false, ?int $owner_uid = null): int {
|
||||
$span = OpenTelemetry\API\Trace\Span::getCurrent();
|
||||
|
||||
$span->addEvent(__METHOD__ . ": $feed ($is_cat)");
|
||||
|
||||
$n_feed = (int) $feed;
|
||||
$need_entries = false;
|
||||
|
||||
@@ -952,14 +935,11 @@ class Feeds extends Handler_Protected {
|
||||
$handler = PluginHost::getInstance()->get_feed_handler($feed_id);
|
||||
if (implements_interface($handler, 'IVirtualFeed')) {
|
||||
/** @var IVirtualFeed $handler */
|
||||
//$span->end();
|
||||
return $handler->get_unread($feed_id);
|
||||
} else {
|
||||
//$span->end();
|
||||
return 0;
|
||||
}
|
||||
} else if ($n_feed == Feeds::FEED_RECENTLY_READ) {
|
||||
//$span->end();
|
||||
return 0;
|
||||
// tags
|
||||
} else if ($feed != "0" && $n_feed == 0) {
|
||||
@@ -973,7 +953,6 @@ class Feeds extends Handler_Protected {
|
||||
$row = $sth->fetch();
|
||||
|
||||
// Handle 'SUM()' returning null if there are no results
|
||||
//$span->end();
|
||||
return $row["count"] ?? 0;
|
||||
|
||||
} else if ($n_feed == Feeds::FEED_STARRED) {
|
||||
@@ -1007,7 +986,6 @@ class Feeds extends Handler_Protected {
|
||||
|
||||
$label_id = Labels::feed_to_label_id($feed);
|
||||
|
||||
//$span->end();
|
||||
return self::_get_label_unread($label_id, $owner_uid);
|
||||
}
|
||||
|
||||
@@ -1027,7 +1005,6 @@ class Feeds extends Handler_Protected {
|
||||
$sth->execute([$owner_uid]);
|
||||
$row = $sth->fetch();
|
||||
|
||||
//$span->end();
|
||||
return $row["unread"];
|
||||
|
||||
} else {
|
||||
@@ -1040,7 +1017,6 @@ class Feeds extends Handler_Protected {
|
||||
$sth->execute([$feed, $owner_uid]);
|
||||
$row = $sth->fetch();
|
||||
|
||||
//$span->end();
|
||||
return $row["unread"];
|
||||
}
|
||||
}
|
||||
@@ -1433,10 +1409,6 @@ class Feeds extends Handler_Protected {
|
||||
* @return array<int, mixed> $result, $feed_title, $feed_site_url, $last_error, $last_updated, $highlight_words, $first_id, $is_vfeed, $query_error_override
|
||||
*/
|
||||
static function _get_headlines($params): array {
|
||||
|
||||
$span = Tracer::start(__METHOD__);
|
||||
$span->setAttribute('func.args', json_encode(func_get_args()));
|
||||
|
||||
$pdo = Db::pdo();
|
||||
|
||||
// WARNING: due to highly dynamic nature of this query its going to quote parameters
|
||||
@@ -1928,8 +1900,6 @@ class Feeds extends Handler_Protected {
|
||||
$res = $pdo->query($query);
|
||||
}
|
||||
|
||||
$span->end();
|
||||
|
||||
return array($res, $feed_title, $feed_site_url, $last_error, $last_updated, $search_words, $first_id, $vfeed_query_part != "", $query_error_override);
|
||||
}
|
||||
|
||||
@@ -2048,6 +2018,7 @@ class Feeds extends Handler_Protected {
|
||||
$entries = $xpath->query('/html/*[self::head or self::body]/link[@rel="alternate" and '.
|
||||
'(contains(@type,"rss") or contains(@type,"atom"))]|/html/*[self::head or self::body]/link[@rel="feed"]');
|
||||
|
||||
/** @var DOMElement|null $entry */
|
||||
foreach ($entries as $entry) {
|
||||
if ($entry->hasAttribute('href')) {
|
||||
$title = $entry->getAttribute('title');
|
||||
|
||||
@@ -342,16 +342,8 @@ class PluginHost {
|
||||
*/
|
||||
function chain_hooks_callback(string $hook, Closure $callback, &...$args): void {
|
||||
$method = strtolower((string)$hook);
|
||||
$span = OpenTelemetry\API\Trace\Span::getCurrent();
|
||||
$span->addEvent("chain_hooks_callback: $hook");
|
||||
|
||||
foreach ($this->get_hooks((string)$hook) as $plugin) {
|
||||
//Debug::log("invoking: " . get_class($plugin) . "->$hook()", Debug::$LOG_VERBOSE);
|
||||
|
||||
//$p_span = Tracer::start("$hook - " . get_class($plugin));
|
||||
|
||||
$span->addEvent("$hook - " . get_class($plugin));
|
||||
|
||||
try {
|
||||
if ($callback($plugin->$method(...$args), $plugin))
|
||||
break;
|
||||
@@ -360,11 +352,7 @@ class PluginHost {
|
||||
} catch (Error $err) {
|
||||
user_error($err, E_USER_WARNING);
|
||||
}
|
||||
|
||||
//$p_span->end();
|
||||
}
|
||||
|
||||
//$span->end();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -430,9 +418,6 @@ class PluginHost {
|
||||
* @param PluginHost::KIND_* $kind
|
||||
*/
|
||||
function load_all(int $kind, ?int $owner_uid = null, bool $skip_init = false): void {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
$span->setAttribute('func.args', json_encode(func_get_args()));
|
||||
|
||||
$plugins = [...(glob("plugins/*") ?: []), ...(glob("plugins.local/*") ?: [])];
|
||||
$plugins = array_filter($plugins, "is_dir");
|
||||
$plugins = array_map("basename", $plugins);
|
||||
@@ -440,17 +425,12 @@ class PluginHost {
|
||||
asort($plugins);
|
||||
|
||||
$this->load(join(",", $plugins), (int)$kind, $owner_uid, $skip_init);
|
||||
|
||||
$span->end();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PluginHost::KIND_* $kind
|
||||
*/
|
||||
function load(string $classlist, int $kind, ?int $owner_uid = null, bool $skip_init = false): void {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
$span->setAttribute('func.args', json_encode(func_get_args()));
|
||||
|
||||
$plugins = explode(",", $classlist);
|
||||
|
||||
$this->owner_uid = (int) $owner_uid;
|
||||
@@ -459,8 +439,6 @@ class PluginHost {
|
||||
$class = trim($class);
|
||||
$class_file = strtolower(basename(clean($class)));
|
||||
|
||||
$span->addEvent("$class_file: load");
|
||||
|
||||
// try system plugin directory first
|
||||
$file = Config::get_self_dir() . "/plugins/$class_file/init.php";
|
||||
|
||||
@@ -485,8 +463,6 @@ class PluginHost {
|
||||
}
|
||||
|
||||
$_SESSION["safe_mode"] = 1;
|
||||
|
||||
$span->setAttribute('error', 'plugin is blacklisted');
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -497,8 +473,6 @@ class PluginHost {
|
||||
|
||||
} catch (Error $err) {
|
||||
user_error($err, E_USER_WARNING);
|
||||
|
||||
$span->setAttribute('error', $err);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -508,8 +482,6 @@ class PluginHost {
|
||||
|
||||
if ($plugin_api < self::API_VERSION) {
|
||||
user_error("Plugin $class is not compatible with current API version (need: " . self::API_VERSION . ", got: $plugin_api)", E_USER_WARNING);
|
||||
|
||||
$span->setAttribute('error', 'plugin is not compatible with API version');
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -518,8 +490,6 @@ class PluginHost {
|
||||
_bind_textdomain_codeset($class, "UTF-8");
|
||||
}
|
||||
|
||||
$span->addEvent("$class_file: initialize");
|
||||
|
||||
try {
|
||||
switch ($kind) {
|
||||
case $this::KIND_SYSTEM:
|
||||
@@ -549,7 +519,6 @@ class PluginHost {
|
||||
}
|
||||
|
||||
$this->load_data();
|
||||
$span->end();
|
||||
}
|
||||
|
||||
function is_system(Plugin $plugin): bool {
|
||||
@@ -638,17 +607,12 @@ class PluginHost {
|
||||
}
|
||||
|
||||
private function load_data(): void {
|
||||
$span = OpenTelemetry\API\Trace\Span::getCurrent();
|
||||
$span->addEvent('load plugin data');
|
||||
|
||||
if ($this->owner_uid && !$this->data_loaded && Config::get_schema_version() > 100) {
|
||||
$sth = $this->pdo->prepare("SELECT name, content FROM ttrss_plugin_storage
|
||||
WHERE owner_uid = ?");
|
||||
$sth->execute([$this->owner_uid]);
|
||||
|
||||
while ($line = $sth->fetch()) {
|
||||
$span->addEvent($line["name"] . ': unserialize');
|
||||
|
||||
$this->storage[$line["name"]] = unserialize($line["content"]);
|
||||
}
|
||||
|
||||
@@ -658,9 +622,6 @@ class PluginHost {
|
||||
|
||||
private function save_data(string $plugin): void {
|
||||
if ($this->owner_uid) {
|
||||
$span = OpenTelemetry\API\Trace\Span::getCurrent();
|
||||
$span->addEvent(__METHOD__ . ": $plugin");
|
||||
|
||||
if (!$this->pdo_data)
|
||||
$this->pdo_data = Db::instance()->pdo_connect();
|
||||
|
||||
|
||||
@@ -1077,9 +1077,6 @@ class Pref_Feeds extends Handler_Protected {
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
private function feedlist_init_cat(int $cat_id): array {
|
||||
$span = OpenTelemetry\API\Trace\Span::getCurrent();
|
||||
$span->addEvent(__METHOD__ . ": $cat_id");
|
||||
|
||||
return [
|
||||
'id' => 'CAT:' . $cat_id,
|
||||
'items' => array(),
|
||||
@@ -1094,9 +1091,6 @@ class Pref_Feeds extends Handler_Protected {
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
private function feedlist_init_feed(int $feed_id, ?string $title = null, bool $unread = false, string $error = '', string $updated = ''): array {
|
||||
$span = OpenTelemetry\API\Trace\Span::getCurrent();
|
||||
$span->addEvent(__METHOD__ . ": $feed_id");
|
||||
|
||||
if (!$title)
|
||||
$title = Feeds::_get_title($feed_id, false);
|
||||
|
||||
|
||||
@@ -106,8 +106,6 @@ class RPC extends Handler_Protected {
|
||||
}
|
||||
|
||||
function getAllCounters(): void {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
@$seq = (int) $_REQUEST['seq'];
|
||||
|
||||
$feed_id_count = (int) ($_REQUEST["feed_id_count"] ?? -1);
|
||||
@@ -134,7 +132,6 @@ class RPC extends Handler_Protected {
|
||||
'seq' => $seq
|
||||
];
|
||||
|
||||
$span->end();
|
||||
print json_encode($reply);
|
||||
}
|
||||
|
||||
@@ -176,8 +173,6 @@ class RPC extends Handler_Protected {
|
||||
}
|
||||
|
||||
function sanityCheck(): void {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$_SESSION["hasSandbox"] = self::_param_to_bool($_REQUEST["hasSandbox"] ?? false);
|
||||
$_SESSION["clientTzOffset"] = clean($_REQUEST["clientTzOffset"]);
|
||||
|
||||
@@ -209,8 +204,6 @@ class RPC extends Handler_Protected {
|
||||
} else {
|
||||
print Errors::to_json($error, $error_params);
|
||||
}
|
||||
|
||||
$span->end();
|
||||
}
|
||||
|
||||
/*function completeLabels() {
|
||||
@@ -254,8 +247,6 @@ class RPC extends Handler_Protected {
|
||||
}
|
||||
|
||||
static function updaterandomfeed_real(): void {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$default_interval = (int) Prefs::get_default(Prefs::DEFAULT_UPDATE_INTERVAL);
|
||||
|
||||
// Test if the feed need a update (update interval exceded).
|
||||
@@ -344,8 +335,6 @@ class RPC extends Handler_Protected {
|
||||
} else {
|
||||
print json_encode(array("message" => "NOTHING_TO_UPDATE"));
|
||||
}
|
||||
|
||||
$span->end();
|
||||
}
|
||||
|
||||
function updaterandomfeed(): void {
|
||||
@@ -401,8 +390,6 @@ class RPC extends Handler_Protected {
|
||||
}
|
||||
|
||||
function log(): void {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$msg = clean($_REQUEST['msg'] ?? "");
|
||||
$file = basename(clean($_REQUEST['file'] ?? ""));
|
||||
$line = (int) clean($_REQUEST['line'] ?? 0);
|
||||
@@ -414,13 +401,9 @@ class RPC extends Handler_Protected {
|
||||
|
||||
echo json_encode(array("message" => "HOST_ERROR_LOGGED"));
|
||||
}
|
||||
|
||||
$span->end();
|
||||
}
|
||||
|
||||
function checkforupdates(): void {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$rv = ["changeset" => [], "plugins" => []];
|
||||
|
||||
$version = Config::get_version(false);
|
||||
@@ -446,8 +429,6 @@ class RPC extends Handler_Protected {
|
||||
$rv["plugins"] = Pref_Prefs::_get_updated_plugins();
|
||||
}
|
||||
|
||||
$span->end();
|
||||
|
||||
print json_encode($rv);
|
||||
}
|
||||
|
||||
@@ -455,8 +436,6 @@ class RPC extends Handler_Protected {
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
private function _make_init_params(): array {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$params = array();
|
||||
|
||||
foreach ([Prefs::ON_CATCHUP_SHOW_NEXT_FEED, Prefs::HIDE_READ_FEEDS,
|
||||
@@ -509,8 +488,6 @@ class RPC extends Handler_Protected {
|
||||
$params["icon_blank"] = $this->image_to_base64("images/blank_icon.gif");
|
||||
$params["labels"] = Labels::get_all($_SESSION["uid"]);
|
||||
|
||||
$span->end();
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
@@ -530,8 +507,6 @@ class RPC extends Handler_Protected {
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
static function _make_runtime_info(): array {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$data = array();
|
||||
|
||||
$pdo = Db::pdo();
|
||||
@@ -597,8 +572,6 @@ class RPC extends Handler_Protected {
|
||||
}
|
||||
}
|
||||
|
||||
$span->end();
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
@@ -69,8 +69,6 @@ class RSSUtils {
|
||||
* @param array<string, false|string> $options
|
||||
*/
|
||||
static function update_daemon_common(int $limit = 0, array $options = []): int {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
if (!$limit) $limit = Config::get(Config::DAEMON_FEED_LIMIT);
|
||||
|
||||
if (Config::get_schema_version() != Config::SCHEMA_VERSION) {
|
||||
@@ -312,8 +310,6 @@ class RSSUtils {
|
||||
// Send feed digests by email if needed.
|
||||
Digest::send_headlines_digests();
|
||||
|
||||
$span->end();
|
||||
|
||||
return $nf;
|
||||
}
|
||||
|
||||
@@ -380,9 +376,6 @@ class RSSUtils {
|
||||
|
||||
static function update_rss_feed(int $feed, bool $no_cache = false, bool $html_output = false) : bool {
|
||||
|
||||
$span = Tracer::start(__METHOD__);
|
||||
$span->setAttribute('func.args', json_encode(func_get_args()));
|
||||
|
||||
Debug::enable_html($html_output);
|
||||
Debug::log("start", Debug::LOG_VERBOSE);
|
||||
|
||||
@@ -418,19 +411,16 @@ class RSSUtils {
|
||||
if ($user) {
|
||||
if ($user->access_level == UserHelper::ACCESS_LEVEL_READONLY) {
|
||||
Debug::log("error: denied update for $feed: permission denied by owner access level");
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// this would indicate database corruption of some kind
|
||||
Debug::log("error: owner not found for feed: $feed");
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
} else {
|
||||
Debug::log("error: feeds table record not found for feed: $feed");
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -589,7 +579,6 @@ class RSSUtils {
|
||||
$feed_obj->save();
|
||||
}
|
||||
|
||||
$span->end();
|
||||
return $error_message == "";
|
||||
}
|
||||
|
||||
@@ -731,7 +720,6 @@ class RSSUtils {
|
||||
]);
|
||||
|
||||
$feed_obj->save();
|
||||
$span->end();
|
||||
return true; // no articles
|
||||
}
|
||||
|
||||
@@ -740,8 +728,6 @@ class RSSUtils {
|
||||
$tstart = time();
|
||||
|
||||
foreach ($items as $item) {
|
||||
$a_span = Tracer::start('article');
|
||||
|
||||
$pdo->beginTransaction();
|
||||
|
||||
Debug::log(Debug::SEPARATOR, Debug::LOG_VERBOSE);
|
||||
@@ -1327,7 +1313,6 @@ class RSSUtils {
|
||||
Debug::log("article processed.", Debug::LOG_VERBOSE);
|
||||
|
||||
$pdo->commit();
|
||||
$a_span->end();
|
||||
}
|
||||
|
||||
Debug::log(Debug::SEPARATOR, Debug::LOG_VERBOSE);
|
||||
@@ -1368,12 +1353,10 @@ class RSSUtils {
|
||||
unset($rss);
|
||||
|
||||
Debug::log("update failed.", Debug::LOG_VERBOSE);
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
Debug::log("update done.", Debug::LOG_VERBOSE);
|
||||
$span->end();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1446,6 +1429,7 @@ class RSSUtils {
|
||||
|
||||
$entries = $xpath->query('(//img[@src]|//source[@src|@srcset]|//video[@poster|@src])');
|
||||
|
||||
/** @var DOMElement $entry */
|
||||
foreach ($entries as $entry) {
|
||||
foreach (array('src', 'poster') as $attr) {
|
||||
if ($entry->hasAttribute($attr) && strpos($entry->getAttribute($attr), "data:") !== 0) {
|
||||
@@ -1538,8 +1522,6 @@ class RSSUtils {
|
||||
* @return array<int, array<string, string>> An array of filter action arrays with keys "type" and "param"
|
||||
*/
|
||||
static function get_article_filters(array $filters, string $title, string $content, string $link, string $author, array $tags, ?array &$matched_rules = null, ?array &$matched_filters = null): array {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
|
||||
$matches = array();
|
||||
|
||||
foreach ($filters as $filter) {
|
||||
@@ -1626,8 +1608,6 @@ class RSSUtils {
|
||||
}
|
||||
}
|
||||
|
||||
$span->end();
|
||||
|
||||
return $matches;
|
||||
}
|
||||
|
||||
@@ -2033,20 +2013,21 @@ class RSSUtils {
|
||||
$xpath = new DOMXPath($doc);
|
||||
|
||||
$base = $xpath->query('/html/head/base[@href]');
|
||||
|
||||
/** @var DOMElement $b */
|
||||
foreach ($base as $b) {
|
||||
$url = UrlHelper::rewrite_relative($url, $b->getAttribute("href"));
|
||||
break;
|
||||
}
|
||||
|
||||
$entries = $xpath->query('/html/head/link[@rel="shortcut icon" or @rel="icon" or @rel="alternate icon"]');
|
||||
if (count($entries) > 0) {
|
||||
foreach ($entries as $entry) {
|
||||
$favicon_url = UrlHelper::rewrite_relative($url, $entry->getAttribute("href"));
|
||||
|
||||
if ($favicon_url)
|
||||
array_push($favicon_urls, $favicon_url);
|
||||
/** @var DOMElement $entry */
|
||||
foreach ($entries as $entry) {
|
||||
$favicon_url = UrlHelper::rewrite_relative($url, $entry->getAttribute("href"));
|
||||
|
||||
}
|
||||
if ($favicon_url)
|
||||
array_push($favicon_urls, $favicon_url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ class Sanitizer {
|
||||
$entries = $xpath->query('//*');
|
||||
|
||||
foreach ($entries as $entry) {
|
||||
/** @var DOMElement $entry */
|
||||
|
||||
if (!in_array($entry->nodeName, $allowed_elements)) {
|
||||
$entry->parentNode->removeChild($entry);
|
||||
}
|
||||
@@ -63,9 +65,6 @@ class Sanitizer {
|
||||
* @return false|string The HTML, or false if an error occurred.
|
||||
*/
|
||||
public static function sanitize(string $str, ?bool $force_remove_images = false, ?int $owner = null, ?string $site_url = null, ?array $highlight_words = null, ?int $article_id = null) {
|
||||
$span = OpenTelemetry\API\Trace\Span::getCurrent();
|
||||
$span->addEvent("Sanitizer::sanitize");
|
||||
|
||||
if (!$owner && isset($_SESSION["uid"]))
|
||||
$owner = $_SESSION["uid"];
|
||||
|
||||
@@ -81,6 +80,7 @@ class Sanitizer {
|
||||
|
||||
$entries = $xpath->query('(//a[@href]|//img[@src]|//source[@srcset|@src]|//video[@poster])');
|
||||
|
||||
/** @var DOMElement $entry */
|
||||
foreach ($entries as $entry) {
|
||||
|
||||
if ($entry->hasAttribute('href')) {
|
||||
@@ -143,6 +143,8 @@ class Sanitizer {
|
||||
}
|
||||
|
||||
$entries = $xpath->query('//iframe');
|
||||
|
||||
/** @var DOMElement $entry */
|
||||
foreach ($entries as $entry) {
|
||||
if (!self::iframe_whitelisted($entry)) {
|
||||
$entry->setAttribute('sandbox', 'allow-scripts');
|
||||
|
||||
@@ -1,216 +0,0 @@
|
||||
<?php
|
||||
|
||||
use OpenTelemetry\API\Trace\Propagation\TraceContextPropagator;
|
||||
use OpenTelemetry\API\Trace\SpanContextInterface;
|
||||
use OpenTelemetry\API\Trace\SpanInterface;
|
||||
use OpenTelemetry\API\Trace\SpanKind;
|
||||
use OpenTelemetry\API\Trace\TraceFlags;
|
||||
use OpenTelemetry\API\Trace\TraceStateInterface;
|
||||
use OpenTelemetry\Context\ContextInterface;
|
||||
use OpenTelemetry\Context\ContextKey;
|
||||
use OpenTelemetry\Context\ContextKeyInterface;
|
||||
use OpenTelemetry\Context\ImplicitContextKeyedInterface;
|
||||
use OpenTelemetry\Context\ScopeInterface;
|
||||
use OpenTelemetry\Contrib\Otlp\OtlpHttpTransportFactory;
|
||||
use OpenTelemetry\Contrib\Otlp\SpanExporter;
|
||||
use OpenTelemetry\SDK\Common\Attribute\Attributes;
|
||||
use OpenTelemetry\SDK\Resource\ResourceInfo;
|
||||
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
|
||||
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
|
||||
use OpenTelemetry\SDK\Trace\Sampler\ParentBased;
|
||||
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
|
||||
use OpenTelemetry\SDK\Trace\TracerProvider;
|
||||
use OpenTelemetry\SemConv\ResourceAttributes;
|
||||
|
||||
class DummyContextInterface implements ContextInterface {
|
||||
|
||||
/** @var DummyContextInterface */
|
||||
private static $instance;
|
||||
|
||||
public function __construct() {
|
||||
self::$instance = $this;
|
||||
}
|
||||
|
||||
/** @phpstan-ignore-next-line */
|
||||
public static function createKey(string $key): ContextKeyInterface { return new ContextKey(); }
|
||||
|
||||
public static function getCurrent(): ContextInterface { return self::$instance; }
|
||||
|
||||
public function activate(): ScopeInterface { return new DummyScopeInterface(); }
|
||||
|
||||
public function with(ContextKeyInterface $key, $value): ContextInterface { return $this; }
|
||||
|
||||
public function withContextValue(ImplicitContextKeyedInterface $value): ContextInterface { return $this; }
|
||||
|
||||
public function get(ContextKeyInterface $key) { return new ContextKey(); }
|
||||
|
||||
}
|
||||
|
||||
class DummySpanContextInterface implements SpanContextInterface {
|
||||
|
||||
/** @var DummySpanContextInterface $instance */
|
||||
private static $instance;
|
||||
|
||||
public function __construct() {
|
||||
self::$instance = $this;
|
||||
}
|
||||
|
||||
public static function createFromRemoteParent(string $traceId, string $spanId, int $traceFlags = TraceFlags::DEFAULT, ?TraceStateInterface $traceState = null): SpanContextInterface { return self::$instance; }
|
||||
|
||||
public static function getInvalid(): SpanContextInterface { return self::$instance; }
|
||||
|
||||
public static function create(string $traceId, string $spanId, int $traceFlags = TraceFlags::DEFAULT, ?TraceStateInterface $traceState = null): SpanContextInterface { return self::$instance; }
|
||||
|
||||
public function getTraceId(): string { return ""; }
|
||||
|
||||
public function getTraceIdBinary(): string { return ""; }
|
||||
|
||||
public function getSpanId(): string { return ""; }
|
||||
|
||||
public function getSpanIdBinary(): string { return ""; }
|
||||
|
||||
public function getTraceFlags(): int { return 0; }
|
||||
|
||||
public function getTraceState(): ?TraceStateInterface { return null; }
|
||||
|
||||
public function isValid(): bool { return false; }
|
||||
|
||||
public function isRemote(): bool { return false; }
|
||||
|
||||
public function isSampled(): bool { return false; }
|
||||
}
|
||||
|
||||
class DummyScopeInterface implements ScopeInterface {
|
||||
public function detach(): int { return 0; }
|
||||
}
|
||||
|
||||
class DummySpanInterface implements SpanInterface {
|
||||
|
||||
/** @var DummySpanInterface $instance */
|
||||
private static $instance;
|
||||
|
||||
public function __construct() {
|
||||
self::$instance = $this;
|
||||
}
|
||||
|
||||
public static function fromContext(ContextInterface $context): SpanInterface { return self::$instance; }
|
||||
|
||||
public static function getCurrent(): SpanInterface { return self::$instance; }
|
||||
|
||||
public static function getInvalid(): SpanInterface { return self::$instance; }
|
||||
|
||||
public static function wrap(SpanContextInterface $spanContext): SpanInterface { return self::$instance; }
|
||||
|
||||
public function getContext(): SpanContextInterface { return new DummySpanContextInterface(); }
|
||||
|
||||
public function isRecording(): bool { return false; }
|
||||
|
||||
/** @phpstan-ignore-next-line */
|
||||
public function setAttribute(string $key, $value): SpanInterface { return self::$instance; }
|
||||
|
||||
/** @phpstan-ignore-next-line */
|
||||
public function setAttributes(iterable $attributes): SpanInterface { return self::$instance; }
|
||||
|
||||
/** @phpstan-ignore-next-line */
|
||||
public function addEvent(string $name, iterable $attributes = [], ?int $timestamp = null): SpanInterface { return $this; }
|
||||
|
||||
/** @phpstan-ignore-next-line */
|
||||
public function recordException(Throwable $exception, iterable $attributes = []): SpanInterface { return $this; }
|
||||
|
||||
public function updateName(string $name): SpanInterface { return $this; }
|
||||
|
||||
public function setStatus(string $code, ?string $description = null): SpanInterface { return $this; }
|
||||
|
||||
public function end(?int $endEpochNanos = null): void { }
|
||||
|
||||
public function activate(): ScopeInterface { return new DummyScopeInterface(); }
|
||||
|
||||
public function storeInContext(ContextInterface $context): ContextInterface { return new DummyContextInterface(); }
|
||||
|
||||
}
|
||||
|
||||
class Tracer {
|
||||
/** @var Tracer $instance */
|
||||
private static $instance = null;
|
||||
|
||||
/** @var OpenTelemetry\SDK\Trace\TracerProviderInterface $tracerProvider */
|
||||
private $tracerProvider = null;
|
||||
|
||||
/** @var OpenTelemetry\API\Trace\TracerInterface $tracer */
|
||||
private $tracer = null;
|
||||
|
||||
public function __construct() {
|
||||
$OPENTELEMETRY_ENDPOINT = Config::get(Config::OPENTELEMETRY_ENDPOINT);
|
||||
|
||||
if ($OPENTELEMETRY_ENDPOINT) {
|
||||
$transport = (new OtlpHttpTransportFactory())->create($OPENTELEMETRY_ENDPOINT, 'application/x-protobuf');
|
||||
$exporter = new SpanExporter($transport);
|
||||
|
||||
$resource = ResourceInfoFactory::emptyResource()->merge(
|
||||
ResourceInfo::create(Attributes::create(
|
||||
[ResourceAttributes::SERVICE_NAME => Config::get(Config::OPENTELEMETRY_SERVICE)]
|
||||
), ResourceAttributes::SCHEMA_URL),
|
||||
);
|
||||
|
||||
$this->tracerProvider = TracerProvider::builder()
|
||||
->addSpanProcessor(new SimpleSpanProcessor($exporter))
|
||||
->setResource($resource)
|
||||
->setSampler(new ParentBased(new AlwaysOnSampler()))
|
||||
->build();
|
||||
|
||||
$this->tracer = $this->tracerProvider->getTracer('io.opentelemetry.contrib.php');
|
||||
|
||||
$context = TraceContextPropagator::getInstance()->extract(getallheaders());
|
||||
|
||||
$span = $this->tracer->spanBuilder($_SESSION['name'] ?? 'not logged in')
|
||||
->setParent($context)
|
||||
->setSpanKind(SpanKind::KIND_SERVER)
|
||||
->setAttribute('php.request', json_encode($_REQUEST))
|
||||
->setAttribute('php.server', json_encode($_SERVER))
|
||||
->setAttribute('php.session', json_encode($_SESSION ?? []))
|
||||
->startSpan();
|
||||
|
||||
$scope = $span->activate();
|
||||
|
||||
register_shutdown_function(function() use ($span, $scope) {
|
||||
$span->end();
|
||||
$scope->detach();
|
||||
$this->tracerProvider->shutdown();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @return OpenTelemetry\API\Trace\SpanInterface
|
||||
*/
|
||||
private function _start(string $name) {
|
||||
if ($this->tracer != null) {
|
||||
$span = $this->tracer
|
||||
->spanBuilder($name)
|
||||
->setSpanKind(SpanKind::KIND_SERVER)
|
||||
->startSpan();
|
||||
|
||||
$span->activate();
|
||||
} else {
|
||||
$span = new DummySpanInterface();
|
||||
}
|
||||
|
||||
return $span;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @return OpenTelemetry\API\Trace\SpanInterface
|
||||
*/
|
||||
public static function start(string $name) {
|
||||
return self::get_instance()->_start($name);
|
||||
}
|
||||
|
||||
public static function get_instance() : Tracer {
|
||||
if (self::$instance == null)
|
||||
self::$instance = new self();
|
||||
|
||||
return self::$instance;
|
||||
}
|
||||
}
|
||||
@@ -202,8 +202,6 @@ class UrlHelper {
|
||||
* @return false|string
|
||||
*/
|
||||
static function resolve_redirects(string $url, int $timeout) {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
$span->setAttribute('func.args', json_encode(func_get_args()));
|
||||
$client = self::get_client();
|
||||
|
||||
try {
|
||||
@@ -218,14 +216,11 @@ class UrlHelper {
|
||||
],
|
||||
]);
|
||||
} catch (Exception $ex) {
|
||||
$span->setAttribute('error', (string) $ex);
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
// If a history header value doesn't exist there was no redirection and the original URL is fine.
|
||||
$history_header = $response->getHeader(GuzzleHttp\RedirectMiddleware::HISTORY_HEADER);
|
||||
$span->end();
|
||||
return ($history_header ? end($history_header) : $url);
|
||||
}
|
||||
|
||||
@@ -238,8 +233,6 @@ class UrlHelper {
|
||||
public static function fetch($options /* previously: 0: $url , 1: $type = false, 2: $login = false, 3: $pass = false,
|
||||
4: $post_query = false, 5: $timeout = false, 6: $timestamp = 0, 7: $useragent = false, 8: $encoding = false,
|
||||
9: $auth_type = "basic" */) {
|
||||
$span = Tracer::start(__METHOD__);
|
||||
$span->setAttribute('func.args', json_encode(func_get_args()));
|
||||
|
||||
self::$fetch_last_error = "";
|
||||
self::$fetch_last_error_code = -1;
|
||||
@@ -299,8 +292,6 @@ class UrlHelper {
|
||||
|
||||
if (!$url) {
|
||||
self::$fetch_last_error = 'Requested URL failed extended validation.';
|
||||
$span->setAttribute('error', self::$fetch_last_error);
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -309,8 +300,6 @@ class UrlHelper {
|
||||
|
||||
if (!$ip_addr || strpos($ip_addr, '127.') === 0) {
|
||||
self::$fetch_last_error = "URL hostname failed to resolve or resolved to a loopback address ($ip_addr)";
|
||||
$span->setAttribute('error', self::$fetch_last_error);
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -392,8 +381,6 @@ class UrlHelper {
|
||||
} catch (\LengthException $ex) {
|
||||
// Either 'Content-Length' indicated the download limit would be exceeded, or the transfer actually exceeded the download limit.
|
||||
self::$fetch_last_error = $ex->getMessage();
|
||||
$span->setAttribute('error', self::$fetch_last_error);
|
||||
$span->end();
|
||||
return false;
|
||||
} catch (GuzzleHttp\Exception\GuzzleException $ex) {
|
||||
self::$fetch_last_error = $ex->getMessage();
|
||||
@@ -407,7 +394,6 @@ class UrlHelper {
|
||||
// to attempt compatibility with unusual configurations.
|
||||
if ($login && $pass && self::$fetch_last_error_code === 403 && $auth_type !== 'any') {
|
||||
$options['auth_type'] = 'any';
|
||||
$span->end();
|
||||
return self::fetch($options);
|
||||
}
|
||||
|
||||
@@ -424,15 +410,11 @@ class UrlHelper {
|
||||
if (($errno === \CURLE_WRITE_ERROR || $errno === \CURLE_BAD_CONTENT_ENCODING) &&
|
||||
$ex->getRequest()->getHeaderLine('accept-encoding') !== 'none') {
|
||||
$options['encoding'] = 'none';
|
||||
$span->end();
|
||||
return self::fetch($options);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$span->setAttribute('error', self::$fetch_last_error);
|
||||
$span->end();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -449,8 +431,6 @@ class UrlHelper {
|
||||
// This shouldn't be necessary given the checks that occur during potential redirects, but we'll do it anyway.
|
||||
if (!self::validate(self::$fetch_effective_url, true)) {
|
||||
self::$fetch_last_error = "URL received after redirection failed extended validation.";
|
||||
$span->setAttribute('error', self::$fetch_last_error);
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -459,8 +439,6 @@ class UrlHelper {
|
||||
if (!self::$fetch_effective_ip_addr || strpos(self::$fetch_effective_ip_addr, '127.') === 0) {
|
||||
self::$fetch_last_error = 'URL hostname received after redirection failed to resolve or resolved to a loopback address (' .
|
||||
self::$fetch_effective_ip_addr . ')';
|
||||
$span->setAttribute('error', self::$fetch_last_error);
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -468,12 +446,9 @@ class UrlHelper {
|
||||
|
||||
if (!$body) {
|
||||
self::$fetch_last_error = 'Successful response, but no content was received.';
|
||||
$span->setAttribute('error', self::$fetch_last_error);
|
||||
$span->end();
|
||||
return false;
|
||||
}
|
||||
|
||||
$span->end();
|
||||
return $body;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user