diff --git a/app/Http/Controllers/AdminInterface.php b/app/Http/Controllers/AdminInterface.php index f25ae640220beb7df3c7edc213150821253dcbae..711a616aff021daa169201d6a1f4b7158458195c 100644 --- a/app/Http/Controllers/AdminInterface.php +++ b/app/Http/Controllers/AdminInterface.php @@ -16,18 +16,20 @@ class AdminInterface extends Controller // Now we gonna check which stats we can find $stati = array(); - foreach($names as $name){ + foreach ($names as $name) { $stats = Redis::hgetall($name . ".stats"); - if(sizeof($stats) > 0){ + if (sizeof($stats) > 0) { $fetcherStatus = Redis::get($name); $stati[$name]["status"] = $fetcherStatus; - foreach($stats as $pid => $value){ - if(strstr($value, ";")){ + foreach ($stats as $pid => $value) { + if (strstr($value, ";")) { $value = explode(";", $value); $connection = json_decode(base64_decode($value[0]), true); - foreach($connection as $key => $val){ - if(strstr($key, "_time")) + foreach ($connection as $key => $val) { + if (strstr($key, "_time")) { $stati[$name]["fetcher"][$pid]["connection"][$key] = $val; + } + } $stati[$name]["fetcher"][$pid]["poptime"] = $value[1]; } @@ -37,21 +39,21 @@ class AdminInterface extends Controller // So now we can generate Median Times for every Fetcher $fetcherCount = 0; - foreach($stati as $engineName => $engineStats){ + foreach ($stati as $engineName => $engineStats) { $connection = array(); $poptime = 0; $fetcherCount += sizeof($engineStats["fetcher"]); - foreach($engineStats["fetcher"] as $pid => $stats){ - foreach($stats["connection"] as $key => $value){ - if(!isset($connection[$key])){ + foreach ($engineStats["fetcher"] as $pid => $stats) { + foreach ($stats["connection"] as $key => $value) { + if (!isset($connection[$key])) { $connection[$key] = $value; - }else{ + } else { $connection[$key] += $value; } } $poptime += floatval($stats["poptime"]); } - foreach($connection as $key => $value){ + foreach ($connection as $key => $value) { $connection[$key] /= sizeof($engineStats["fetcher"]); } $poptime /= sizeof($engineStats["fetcher"]); @@ -70,13 +72,14 @@ class AdminInterface extends Controller return $response; } - private function getSearchEngineNames(){ + private function getSearchEngineNames() + { $url = config_path() . "/sumas.xml"; $xml = simplexml_load_file($url); $sumas = $xml->xpath("suma"); $names = array(); - foreach($sumas as $suma){ + foreach ($sumas as $suma) { $names[] = $suma["name"]->__toString(); } return $names; @@ -85,30 +88,43 @@ class AdminInterface extends Controller public function count(Request $request) { $days = intval($request->input('days', 28)); - if(!is_int($days) || $days <= 0) $days = 28; - $logToday = "mg3.log"; - if (file_exists("/var/log/metager/" . $logToday)) { - $logToday = file("/var/log/metager/" . $logToday); + $interface = $request->input('interface', 'all'); + if (!is_int($days) || $days <= 0) { + $days = 28; + } + + $logToday = "/var/log/metager/mg3.log"; + + if (file_exists($logToday)) { + if ($interface === "all") { + $logToday = exec("cat $logToday | wc -l"); + } else { + $logToday = exec("cat $logToday | grep interface=" . $interface . " | wc -l"); + } } else { return redirect(''); } - $oldLogs = []; - $yesterday = 0; - $rekordTag = 0; + $oldLogs = []; + $rekordTag = 0; $rekordTagDate = ""; - $size = 0; - $count = 0; + $size = 0; + $count = 0; for ($i = 1; $i <= $days; $i++) { $logDate = "/var/log/metager/archive/mg3.log.$i"; if (file_exists($logDate)) { - $sameTime = exec("grep -n '" . date('H') . ":" . date('i') . ":' $logDate | tail -1 | cut -f1 -d':'"); - $insgesamt = exec("wc -l $logDate | cut -f1 -d' '"); + if ($interface === "all") { + $sameTime = exec("awk -v hour=\"" . date('H') . "\" -v minute=\"" . date('i') . "\" -v second=\"" . date('s') . "\" -f " . app_path('get_dates.awk') . " " . $logDate . " | wc -l"); + $insgesamt = exec("wc -l $logDate | cut -f1 -d' '"); + } else { + $sameTime = exec("awk -v hour=\"" . date('H') . "\" -v minute=\"" . date('i') . "\" -v second=\"" . date('s') . "\" -f " . app_path('get_dates.awk') . " " . $logDate . " | grep interface=" . $interface . " | wc -l"); + $insgesamt = exec("cat $logDate | grep interface=" . $interface . " | wc -l"); + } if ($insgesamt > $rekordTag) { - $rekordTag = $insgesamt; + $rekordTag = $insgesamt; $rekordTagSameTime = $sameTime; - $rekordTagDate = date("d.m.Y", mktime(date("H"), date("i"), date("s"), date("m"), date("d") - $i, date("Y"))); + $rekordTagDate = date("d.m.Y", mktime(date("H"), date("i"), date("s"), date("m"), date("d") - $i, date("Y"))); } - $oldLogs[$i]['sameTime'] = number_format(floatval($sameTime), 0, ",", "."); + $oldLogs[$i]['sameTime'] = number_format(floatval($sameTime), 0, ",", "."); $oldLogs[$i]['insgesamt'] = number_format(floatval($insgesamt), 0, ",", "."); # Nun noch den median: $count += $insgesamt; @@ -120,34 +136,34 @@ class AdminInterface extends Controller } } - if($request->input('out', 'web') === "web"){ + if ($request->input('out', 'web') === "web") { return view('admin.count') ->with('title', 'Suchanfragen - MetaGer') - ->with('today', number_format(floatval(sizeof($logToday)), 0, ",", ".")) + ->with('today', number_format(floatval($logToday), 0, ",", ".")) ->with('oldLogs', $oldLogs) ->with('rekordCount', number_format(floatval($rekordTag), 0, ",", ".")) ->with('rekordTagSameTime', number_format(floatval($rekordTagSameTime), 0, ",", ".")) ->with('rekordDate', $rekordTagDate) ->with('days', $days); - }else{ - $result = ""; - foreach($oldLogs as $key => $value){ - $resultTmp = '"' . date("D, d M y", mktime(date("H"),date("i"), date("s"), date("m"), date("d")-$key, date("Y"))) . '",'; - $resultTmp .= '"' . $value['sameTime'] . '",'; - $resultTmp .= '"' . $value['insgesamt'] . '",'; - $resultTmp .= '"' . $value['median'] . '"' . "\r\n"; - $result = $resultTmp . $result; - } - return response($result, 200) - ->header('Content-Type', 'text/csv') - ->header('Content-Disposition', 'attachment; filename="count.csv"'); + } else { + $result = ""; + foreach ($oldLogs as $key => $value) { + $resultTmp = '"' . date("D, d M y", mktime(date("H"), date("i"), date("s"), date("m"), date("d") - $key, date("Y"))) . '",'; + $resultTmp .= '"' . $value['sameTime'] . '",'; + $resultTmp .= '"' . $value['insgesamt'] . '",'; + $resultTmp .= '"' . $value['median'] . '"' . "\r\n"; + $result = $resultTmp . $result; + } + return response($result, 200) + ->header('Content-Type', 'text/csv') + ->header('Content-Disposition', 'attachment; filename="count.csv"'); } } public function check() { - $q = ""; + $q = ""; $redis = Redis::connection('redisLogs'); if ($redis) { $q = $redis->lrange("logs.search", -1, -1)[0]; diff --git a/app/get_dates.awk b/app/get_dates.awk new file mode 100644 index 0000000000000000000000000000000000000000..0024c7b7a2eab5142c6e82592c7d90fed792b7d3 --- /dev/null +++ b/app/get_dates.awk @@ -0,0 +1,9 @@ +BEGIN { + end_t = mktime("2019 02 25 " hour " " minute " " second) + FS="[: \\]]" +} + +{ + now = mktime("2019 02 25 " $4 " " $5 " " $6) + if(now <= end_t) {print} +} diff --git a/resources/views/admin/count.blade.php b/resources/views/admin/count.blade.php index 494cffc8e193546b0ebfd0c77c9ae20eb9b51262..db77f65ceffc81bdc2ceb10729b5185e9a24906e 100644 --- a/resources/views/admin/count.blade.php +++ b/resources/views/admin/count.blade.php @@ -3,9 +3,30 @@ @section('title', $title ) @section('content') - <h2>{{ exec("uptime") }}</h2> + <p>{{ exec("uptime") }}</p> + @if( isset($rekordDate) && isset($rekordTagSameTime) && isset($rekordCount) ) + <p>Rekord am {{ $rekordDate }} zur gleichen Zeit <span class="text-info">{{ $rekordTagSameTime }}</span> - insgesamt <span class="text-danger">{{ $rekordCount }}</span></p> + @endif + <p>Mittelwert der letzten {{ sizeof($oldLogs) }} Tage: {{ $oldLogs[sizeof($oldLogs)]['median'] }}</p> <table class="table table-striped"> - <caption>Daten der letzten <form method="POST"><input type="number" name="days" value="{{$days}}" /> Tage <button type="submit" class="btn btn-sm btn-default">Aktualisieren</button><button type="submit" name="out" value="csv" class="btn btn-sm btn-default">Als CSV exportieren</button></form></caption> + <caption> + <form method="POST" style="display: flex; align-items: center;"> + <div class="form-group" style="max-width: 100px; margin-right: 8px;"> + <label for="days">Tage</label> + <input class="form-control" type="number" id="days" name="days" value="{{$days}}" /> + </div> + <div class="form-group" style="max-width: 100px; margin-right: 8px;"> + <label for="interface">Sprache</label> + <select class="form-control" name="interface" id="interface"><option value="all" {{ (Request::input('interface', 'all') == "all" ? "selected" : "")}}>Alle</option><option value="de" {{ (Request::input('interface', 'all') == "de" ? "selected" : "")}}>DE</option><option value="en" {{ (Request::input('interface', 'all') == "en" ? "selected" : "")}}>EN</option></select> + </div> + <div id="refresh" style="margin-top: 11px; margin-right: 8px;"> + <button type="submit" class="btn btn-sm btn-default">Aktualisieren</button> + </div> + <div id="export" style="margin-top: 11px;"> + <button type="submit" name="out" value="csv" class="btn btn-sm btn-default">Als CSV exportieren</button> + </div> + </form> + </caption> <tr> <th>Datum</th> <th>Suchanfragen zur gleichen Zeit</th> @@ -14,7 +35,7 @@ </tr> @if( isset($today) ) <tr> - <td>{{ date("D, d M y", mktime(date("H"),date("i"), date("s"), date("m"), date("d"), date("Y"))) }}</td> + <td>{{ Carbon::now()->format('D, d.m.Y') }}</td> <td>{{ $today }}</td> <td>???</td> <td>???</td> @@ -22,14 +43,12 @@ @endif @foreach($oldLogs as $key => $value) <tr> - <td>{{ date("D, d M y", mktime(date("H"),date("i"), date("s"), date("m"), date("d")-$key, date("Y"))) }}</td> + <td>{{ Carbon::now()->subDays($key)->format('D, d.m.Y') }}</td> <td>{{ $value['sameTime'] }}</td> <td>{{ $value['insgesamt'] }}</td> <td>{{ $value['median'] }}</td> </tr> @endforeach </table> - @if( isset($rekordDate) && isset($rekordTagSameTime) && isset($rekordCount) ) - <h3>Rekord am {{ $rekordDate }} zur gleichen Zeit <span class="text-info">{{ $rekordTagSameTime }}</span> - insgesamt <span class="text-danger">{{ $rekordCount }}</span></h3> - @endif + @endsection