X-Git-Url: https://jfr.im/git/irc/unrealircd/unrealircd-webpanel.git/blobdiff_plain/e6274ac9bcb1feb95cb8ddab30143e63512321d0..cd26522ba6ff68c18e1504b022ca92f4d01827be:/Classes/class-checkup.php
diff --git a/Classes/class-checkup.php b/Classes/class-checkup.php
index 37905ae..07d0955 100644
--- a/Classes/class-checkup.php
+++ b/Classes/class-checkup.php
@@ -1,132 +1,293 @@
0,
- "usermodes" => 0,
- "modules" => 0,
- "other" => 0,
- ];
- public $problems = [
- "chanmodes" => [],
- "usermodes" => [],
- "modules" => [],
- "other" => [],
- ];
-
- public $serverlist = [];
-
- /**
- * Construct0r
- */
- function __construct()
- {
- global $rpc;
-
- $this->serverlist = $rpc->server()->getAll();
- $this->chanmode_check();
- $this->usermode_check();
- //$this->module_check();
-
- }
-
- /**
- * Checks channel modes of servers against other servers
- * @return void
- */
- function chanmode_check() : void
- {
- foreach($this->serverlist as $s) // cycle through each server
- {
- /* make a single string from the array of groups */
- $ourchmodes = "";
- foreach ($s->server->features->chanmodes as $set)
- for ($i=0; isset($set[$i]); $i++)
- strcat($ourchmodes,$set[$i]);
-
- /* take a look at every other server... yep, we do this for every server */
- foreach ($this->serverlist as $serv)
- {
- /* except for ourselves lol */
- if ($serv->id == $s->id)
- continue;
-
- /* hmm if it's not unreal, skip it too */
- if (!strstr($serv->server->features->software,"UnrealIRCd"))
- continue;
-
- /* make a single string from the array of groups but for them this time */
- $theirchmodes = "";
- foreach ($serv->server->features->chanmodes as $set)
- for ($i=0; isset($set[$i]); $i++)
- strcat($theirchmodes,$set[$i]);
-
- /* check ours against theirs */
- for ($i=0; isset($ourchmodes[$i]) && $m = $ourchmodes[$i]; $i++)
- {
- /* if we have a mode that they don't have */
- if (!strstr($theirchmodes, $m))
- {
- ++$this->num_of_problems['chanmodes'];
- $this->problems['chanmodes'][] = "Channel mode $m is present on $s->name but missing on $serv->name";
- }
- }
- }
- }
- }
-
- /**
- * Checks user modes of servers against other servers
- * @return void
- */
- function usermode_check() : void
- {
- /* make a single string from the array of groups */
- $ourumodes = $s->server->features->usermodes;
-
- /* take a look at every other server... yep, we do this for every server */
- foreach ($this->serverlist as $serv)
- {
- /* except for ourselves lol */
- if ($serv->id == $s->id)
- continue;
-
- /* hmm if it's not unreal, skip it too */
- if (!strstr($serv->server->features->software,"UnrealIRCd"))
- continue;
-
- $theirumodes = $serv->server->features->usermodes;
-
- /* check ours against theirs */
- for ($i=0; isset($ourumodes[$i]) && $m = $ourumodes[$i]; $i++)
- {
- /* if we have a mode that they don't have */
- if (!strstr($theirumodes, $m))
- {
- ++$this->num_of_problems['usermodes'];
- $this->problems['usermodes'][] = "User mode $m is present on $s->name but missing on $serv->name";
- }
- }
- }
- }
-
- /**
- * Checks modules of servers against other servers
- * @return void
- */
- function module_check() : void
- {
- global $rpc;
- $modlist = [];
- $modarray = [];
- foreach ($this->serverlist as $serv)
- $modlist[$serv->name] = json_decode(json_encode($rpc->server()->module_list($serv->id)->list), true);
-
- echo highlight_string(var_export($modlist,true));
- }
+ const SCORE_PERFECT = 0;
+ const SCORE_NOT_BAD = 1;
+ const SCORE_COULD_BE_BETTER = 10;
+ const SCORE_NEEDS_ATTENTION = 25;
+ const SCORE_VERY_BAD = 50;
+
+ public $num_of_problems = [
+ "chanmodes" => 0,
+ "usermodes" => 0,
+ "modules" => 0,
+ "servers" => 0,
+ "other" => 0,
+ ];
+ public $problems = [
+ "chanmodes" => [],
+ "usermodes" => [],
+ "modules" => [],
+ "servers" => [],
+ "other" => [],
+ ];
+
+ public $serverlist = [];
+
+ /**
+ * Construct0r
+ */
+ function __construct()
+ {
+ global $rpc;
+
+ $this->serverlist = $rpc->server()->getAll();
+ $this->chanmode_check();
+ $this->usermode_check();
+ $this->module_check();
+ $this->server_check();
+
+ }
+
+ public function total()
+ {
+ $count = 0;
+ foreach ($this->num_of_problems as $problem)
+ $count += $problem;
+ return $count;
+ }
+
+ public function equivalate()
+ {
+ $total = $this->total();
+ if ($total == self::SCORE_PERFECT)
+ return "Perfect";
+ elseif ($total < self::SCORE_COULD_BE_BETTER)
+ return "Not Bad";
+ elseif ($total < self::SCORE_NEEDS_ATTENTION)
+ return "Could Be Better";
+ elseif ($total < self::SCORE_VERY_BAD)
+ return "Needs Attention";
+ else return "Very Poor";
+ }
+ public function badgestyle()
+ {
+ $total = $this->total();
+ if ($total == self::SCORE_PERFECT)
+ return "success";
+ elseif ($total < self::SCORE_COULD_BE_BETTER)
+ return "info";
+ elseif ($total < self::SCORE_NEEDS_ATTENTION)
+ return "warning";
+ elseif ($total < self::SCORE_VERY_BAD)
+ return "danger";
+ else return "dark";
+
+ }
+
+ /**
+ * Checks channel modes of servers against other servers
+ * @return void
+ */
+ function chanmode_check() : void
+ {
+ foreach($this->serverlist as $s) // cycle through each server
+ {
+ /* hmm if it's not unreal, skip it too */
+ if (!isset($s->server->features->software) || !strstr($s->server->features->software,"UnrealIRCd"))
+ continue;
+ /* make a single string from the array of groups */
+ $ourchmodes = "";
+ foreach ($s->server->features->chanmodes as $set)
+ for ($i=0; isset($set[$i]); $i++)
+ strcat($ourchmodes,$set[$i]);
+
+ /* take a look at every other server... yep, we do this for every server */
+ foreach ($this->serverlist as $serv)
+ {
+ /* except for ourselves lol */
+ if ($serv->id == $s->id)
+ continue;
+
+ /* hmm if it's not unreal, skip it too */
+ if (!isset($serv->server->features->software) || !strstr($serv->server->features->software,"UnrealIRCd"))
+ continue;
+
+ /* make a single string from the array of groups but for them this time */
+ $theirchmodes = "";
+ foreach ($serv->server->features->chanmodes as $set)
+ for ($i=0; isset($set[$i]); $i++)
+ strcat($theirchmodes,$set[$i]);
+
+ /* check ours against theirs */
+ for ($i=0; isset($ourchmodes[$i]) && $m = $ourchmodes[$i]; $i++)
+ {
+ /* if we have a mode that they don't have */
+ if (!strstr($theirchmodes, $m))
+ {
+ ++$this->num_of_problems['chanmodes'];
+ $this->problems['chanmodes'][] = "Channel mode Found '.$this->total().' problems in total.$m
is present on $s->name
but missing on $serv->name
";
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Checks user modes of servers against other servers
+ * @return void
+ */
+ function usermode_check() : void
+ {
+ foreach($this->serverlist as $s)
+ {
+ /* hmm if it's not unreal, skip it too */
+ if (!isset($s->server->features->software) || !strstr($s->server->features->software,"UnrealIRCd"))
+ continue;
+ /* make a single string from the array of groups */
+ $ourumodes = $s->server->features->usermodes;
+
+ /* take a look at every other server... yep, we do this for every server */
+ foreach ($this->serverlist as $serv)
+ {
+ /* except for ourselves lol */
+ if ($serv->id == $s->id)
+ continue;
+
+ /* hmm if it's not unreal, skip it too */
+ if (!isset($serv->server->features->software) || !strstr($serv->server->features->software,"UnrealIRCd"))
+ continue;
+
+ $theirumodes = $serv->server->features->usermodes;
+
+ /* check ours against theirs */
+ for ($i=0; isset($ourumodes[$i]) && $m = $ourumodes[$i]; $i++)
+ {
+ /* if we have a mode that they don't have */
+ if (!strstr($theirumodes, $m))
+ {
+ ++$this->num_of_problems['usermodes'];
+ $this->problems['usermodes'][] = "User mode $m
is present on $s->name
but missing on $serv->name
";
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Checks modules of servers against other servers
+ * @return void
+ */
+ function module_check() : void
+ {
+ global $rpc;
+ foreach ($this->serverlist as $s)
+ {
+ /* hmm if it's not unreal, skip it too */
+ if (!isset($s->server->features->software) || !strstr($s->server->features->software,"UnrealIRCd"))
+ continue;
+ $ourmods = sort_mods(json_decode(json_encode(@$rpc->server()->module_list($s->id)->list), true));
+
+ // doesn't support that yet
+ if (empty($ourmods))
+ continue;
+
+ foreach ($this->serverlist as $serv)
+ {
+ /* except for ourselves lol */
+ if ($serv->id == $s->id)
+ continue;
+
+ /* hmm if it's not unreal, skip it too */
+ if (!isset($serv->server->features->software) || !strstr($serv->server->features->software,"UnrealIRCd"))
+ continue;
+
+ $theirmods = sort_mods(json_decode(json_encode(@$rpc->server()->module_list($serv->id)->list), true));
+
+ // doesn't support that yet
+ if (empty($theirmods))
+ continue;
+ // we only check if theirs doesn't match ours
+ foreach ($theirmods as $name => $version)
+ {
+ if (!isset($ourmods[$name])) // we don't have that module
+ {
+ ++$this->num_of_problems['modules'];
+ $this->problems['modules'][] = "Module $name
exists on $serv->name
but not $s->name
";
+ }
+ else if ((int)$version > (int)$ourmods[$name])
+ {
+ ++$this->num_of_problems['modules'];
+ $this->problems['modules'][] = "Module $name
on $serv->name
is newer than on $s->name
";
+ }
+ }
+ }
+ }
+ }
+
+ function server_check() : void
+ {
+ global $rpc;
+ foreach ($this->serverlist as $s)
+ {
+ /* hmm if it's not unreal, skip it too */
+ if (!isset($s->server->features->software) || !strstr($s->server->features->software,"UnrealIRCd"))
+ continue;
+ // protocol checking
+ $ours = (int)$s->server->features->protocol;
+ foreach ($this->serverlist as $serv)
+ {
+ if (!isset($serv->server->features->software) || !strstr($serv->server->features->software,"UnrealIRCd"))
+ continue;
+
+ $theirs = (int)$serv->server->features->protocol;
+
+ if ($ours < $theirs)
+ {
+ ++$this->num_of_problems['servers'];
+ $this->problems['servers'][] = "Protocol mismatch: $serv->name
using protocol $theirs
but $s->name
using protocol $ours
. Click for upgrade documentation.";
+ }
+ }
+
+ // EOL checking
+ $tok = explode('-', $s->server->features->software);
+ if ((int)$tok[1] < 6)
+ {
+ ++$this->num_of_problems['servers'];
+ $this->problems['servers'][] = "EOL: $s->name
(".$s->server->features->software.") is running old unsupported software which is no longer receiving security updates. Click here for upgrade documentation.";
+ }
+ }
+ }
+ /* Print a widget easy! */
+ function __toString()
+ {
+ return '
+
+
+ Network Health
'.$this->equivalate().'
+
$value |