Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
open-source
MetaGer
Commits
7602cfdb
Commit
7602cfdb
authored
May 09, 2017
by
Dominik Hebeler
Browse files
Erstes Admin Interface für die Üebrwachung der Fetcher
parent
a20dd547
Changes
3
Hide whitespace changes
Inline
Side-by-side
app/Http/Controllers/AdminInterface.php
View file @
7602cfdb
...
...
@@ -4,40 +4,85 @@ namespace App\Http\Controllers;
use
Illuminate\Http\Request
;
use
Illuminate\Support\Facades\Redis
;
use
Response
;
class
AdminInterface
extends
Controller
{
public
function
index
(
Request
$request
)
{
$time
=
$request
->
input
(
'time'
,
60
);
$localFetcher
=
file_get_contents
(
action
(
"AdminInterface@getFetcherStatus"
));
die
(
var_dump
(
$localFetcher
));
}
# Zunächst einmal die Redis-Verbindung:
$redis
=
Redis
::
connection
(
'redisLogs'
);
public
function
getFetcherStatus
()
{
// Let's get the stats for this server.
// First we need to check, which Fetcher could be available by parsing the sumas.xml
$names
=
$this
->
getSearchEngineNames
();
# Dann lesen wir alle Server aus:
$member
=
$redis
->
smembers
(
'logs.worker'
);
$today
=
strtotime
(
date
(
DATE_RFC822
,
mktime
(
0
,
0
,
0
,
date
(
"m"
),
date
(
"d"
),
date
(
"Y"
))));
$beginningTime
=
strtotime
(
date
(
DATE_RFC822
,
mktime
(
date
(
"H"
),
date
(
"i"
)
-
$time
,
date
(
"s"
),
date
(
"m"
),
date
(
"d"
),
date
(
"Y"
))))
-
$today
;
# Jetzt besorgen wir uns die Daten für jeden Server:
$data
=
[];
foreach
(
$member
as
$mem
)
{
$tmp
=
$redis
->
hgetall
(
'logs.worker.'
.
$mem
);
ksort
(
$tmp
,
SORT_NUMERIC
);
$tmp2
=
[];
foreach
(
$tmp
as
$el
=>
$value
)
{
if
(
$el
>=
$beginningTime
)
{
$data
[
$mem
][
$el
]
=
$value
;
// Now we gonna check which stats we can find
$stati
=
array
();
foreach
(
$names
as
$name
){
$stats
=
Redis
::
hgetall
(
$name
.
".stats"
);
if
(
sizeof
(
$stats
)
>
0
){
$fetcherStatus
=
Redis
::
get
(
$name
);
$stati
[
$name
][
"status"
]
=
$fetcherStatus
;
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"
))
$stati
[
$name
][
"fetcher"
][
$pid
][
"connection"
][
$key
]
=
$val
;
}
$stati
[
$name
][
"fetcher"
][
$pid
][
"poptime"
]
=
$value
[
1
];
}
}
}
}
// So now we can generate Median Times for every Fetcher
foreach
(
$stati
as
$engineName
=>
$engineStats
){
$connection
=
array
();
$poptime
=
0
;
foreach
(
$engineStats
[
"fetcher"
]
as
$pid
=>
$stats
){
foreach
(
$stats
[
"connection"
]
as
$key
=>
$value
){
if
(
!
isset
(
$connection
[
$key
])){
$connection
[
$key
]
=
$value
;
}
else
{
$connection
[
$key
]
+=
$value
;
}
}
$poptime
+=
floatval
(
$stats
[
"poptime"
]);
}
foreach
(
$connection
as
$key
=>
$value
){
$connection
[
$key
]
/=
sizeof
(
$engineStats
[
"fetcher"
]);
}
$poptime
/=
sizeof
(
$engineStats
[
"fetcher"
]);
$stati
[
$engineName
][
"median-connection"
]
=
$connection
;
$stati
[
$engineName
][
"median-poptime"
]
=
$poptime
;
}
#$data = [ 5 => "majm", 2 => "mngsn", 7 => "akljsd"];
#arsort($data);
return
view
(
'admin.admin'
)
->
with
(
'data'
,
$data
)
->
with
(
'title'
,
"Admin-Interface-MetaGer"
)
->
with
(
'time'
,
$time
);
->
with
(
'title'
,
'Fetcher Status'
)
->
with
(
'stati'
,
$stati
);
$stati
=
json_encode
(
$stati
);
$response
=
Response
::
make
(
$stati
,
200
);
$response
->
header
(
"Content-Type"
,
"application/json"
);
return
$response
;
}
private
function
getSearchEngineNames
(){
$url
=
config_path
()
.
"/sumas.xml"
;
$xml
=
simplexml_load_file
(
$url
);
$sumas
=
$xml
->
xpath
(
"suma"
);
$names
=
array
();
foreach
(
$sumas
as
$suma
){
$names
[]
=
$suma
[
"name"
]
->
__toString
();
}
return
$names
;
}
public
function
count
()
...
...
resources/views/admin/admin.blade.php
View file @
7602cfdb
...
...
@@ -3,71 +3,24 @@
@
section
(
'title'
,
$title
)
@
section
(
'content'
)
@
foreach
(
$data
as
$serverName
=>
$dataPoints
)
<
div
>
<
h1
>
{{
$serverName
}}
</
h1
>
<
svg
width
=
"100%"
height
=
"500px"
>
<!--
Zunächst
die
Achsen
:
-->
<!--
Y
-
Achse
-->
<
line
x1
=
"1%"
y1
=
"0"
x2
=
"1%"
y2
=
"95%"
style
=
"stroke:rgb(0,0,0);stroke-width:3"
/>
<
line
x1
=
"1%"
y1
=
"0"
x2
=
"0"
y2
=
"3%"
style
=
"stroke:rgb(0,0,0);stroke-width:3"
/>
<
line
x1
=
"1%"
y1
=
"0"
x2
=
"2%"
y2
=
"3%"
style
=
"stroke:rgb(0,0,0);stroke-width:3"
/>
<!--
Beschriftungen
der
Y
-
Achse
-->
@
for
(
$y
=
((
95
-
0
)
/
10
);
$y
<
((
95
-
0
)
/
10
)
*
10
;
$y
=
$y
+
((
95
-
0
)
/
10
)
)
<
line
x1
=
"0.5%"
y1
=
"{{
$y
}}%"
x2
=
"1.5%"
y2
=
"{{
$y
}}%"
style
=
"stroke:rgb(0,0,0);stroke-width:1"
/>
<
text
x
=
"1.8%"
y
=
"{{
$y
}}%"
fill
=
"black"
style
=
"font-size:10px;"
>
{{
100
-
((
$y
/
95
)
*
100
)
}}
</
text
>
@
endfor
<
text
x
=
"3%"
y
=
"2%"
fill
=
"red"
>
Anzahl
Worker
:
x
</
text
>
<!--
X
-
Achse
-->
<
line
x1
=
"1%"
y1
=
"95%"
x2
=
"99%"
y2
=
"95%"
style
=
"stroke:rgb(0,0,0);stroke-width:3"
/>
<
line
x1
=
"99%"
y1
=
"95%"
x2
=
"98%"
y2
=
"92%"
style
=
"stroke:rgb(0,0,0);stroke-width:3"
/>
<
line
x1
=
"99%"
y1
=
"95%"
x2
=
"98%"
y2
=
"98%"
style
=
"stroke:rgb(0,0,0);stroke-width:3"
/>
<!--
Beschriftungen
der
X
-
Achse
-->
<?
php
$last
=
0
;
for
(
$x
=
(((
99
-
1
)
/
$time
)
+
1
);
$x
<
98.9
;
$x
=
(
$x
+
((
99
-
1
)
/
$time
)))
{
echo
'<line x1="'
.
$x
.
'%" y1="93%" x2="'
.
$x
.
'%" y2="97%" style="stroke:rgb(0,0,0);stroke-width:1" />'
;
if
((
$x
-
$last
)
>=
3
)
{
echo
'<text x="'
.
(
$x
-
1
)
.
'%" y="99%" fill="black" style="font-size:8px;">'
.
date
(
"H:i"
,
mktime
(
date
(
"H"
),
date
(
"i"
)
-
(
$time
-
((
$x
-
1
)
/
98
)
*
$time
),
date
(
"s"
),
date
(
"m"
),
date
(
"d"
),
date
(
"Y"
)))
.
'</text>'
;
$last
=
$x
;
}
}
?>
<text
x=
"95%"
y=
"90%"
fill=
"red"
>
Zeit (h): y
</text>
<!-- Nun die Datenpunkte: -->
<?php
$count
=
0
;
$maximum
=
0
;
$maximumY
=
0
;
foreach
(
$dataPoints
as
$key
=>
$value
)
{
if
(
$count
>
0
)
{
$start
=
strtotime
(
date
(
DATE_RFC822
,
mktime
(
date
(
"H"
),
date
(
"i"
)
-
$time
,
date
(
"s"
),
date
(
"m"
),
date
(
"d"
),
date
(
"Y"
))))
-
strtotime
(
date
(
DATE_RFC822
,
mktime
(
0
,
0
,
0
,
date
(
"m"
),
date
(
"d"
),
date
(
"Y"
))));
$lastkey
=
$oldKey
-
$start
;
$newkey
=
$key
-
$start
;
$x1
=
((
$lastkey
/
(
$time
*
60
))
*
98
)
+
1
;
$x2
=
((
$newkey
/
(
$time
*
60
))
*
98
)
+
1
;
$y1
=
95
-
((
$oldVal
/
100
)
*
95
);
$y2
=
95
-
((
$value
/
100
)
*
95
);
if
(
$value
>
$maximum
)
{
$maximum
=
$value
;
$maximumY
=
$y2
;
}
echo
'<line x1="'
.
$x1
.
'%" y1="'
.
$y1
.
'%" x2="'
.
$x2
.
'%" y2="'
.
$y2
.
'%" style="stroke:rgb(0,0,0);stroke-width:1" />'
;
}
$oldKey
=
$key
;
$oldVal
=
$value
;
$count
++
;
}
?>
<!-- Und noch eine Linie für das Maximum: -->
<line
x1=
"1%"
y1=
"{{ $maximumY }}%"
x2=
"99%"
y2=
"{{ $maximumY }}%"
style=
"stroke:rgb(255,0,0);stroke-width:1"
stroke-dasharray=
"5,5"
d=
"M5 20 l215 0"
/>
</svg>
</div>
@endforeach
<
table
class
=
"table table-bordered"
>
<
thead
>
<
th
>
Name
</
th
>
<
th
>
Status
</
th
>
<
th
>
Fetcher
Anzahl
</
th
>
<
th
>
Abfragedauer
</
th
>
<
th
>
Abfragelast
</
th
>
</
thead
>
<
tbody
>
@
foreach
(
$stati
as
$engineName
=>
$engineStats
)
<
tr
>
<
td
>
{{
$engineName
}}
</
td
>
<
td
>
{{
$engineStats
[
"status"
]}}
</
td
>
<
td
>
{{
sizeof
(
$engineStats
[
"fetcher"
])}}
</
td
>
<
td
>
{{
$engineStats
[
"median-connection"
][
"total_time"
]}}
s
</
td
>
<
td
>
{{
$engineStats
[
"median-poptime"
]}}
</
td
>
</
tr
>
@
endforeach
</
tbody
>
</
table
>
@
endsection
\ No newline at end of file
routes/web.php
View file @
7602cfdb
...
...
@@ -129,8 +129,9 @@ Route::group(
Route
::
get
(
'zitat-suche'
,
'ZitatController@zitatSuche'
);
Route
::
group
([
'middleware'
=>
[
'referer.check'
],
'prefix'
=>
'admin'
],
function
()
{
Route
::
group
([
/*
'middleware' => ['referer.check'],
*/
'prefix'
=>
'admin'
],
function
()
{
Route
::
get
(
'/'
,
'AdminInterface@index'
);
Route
::
get
(
'fetcher-status'
,
"AdminInterface@getFetcherStatus"
);
Route
::
get
(
'count'
,
'AdminInterface@count'
);
Route
::
get
(
'check'
,
'AdminInterface@check'
);
Route
::
get
(
'engines'
,
'AdminInterface@engines'
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment