diff --git a/src/App/Page.php b/src/App/Page.php
index e22625212..965c04915 100644
--- a/src/App/Page.php
+++ b/src/App/Page.php
@@ -253,6 +253,11 @@ class Page implements ArrayAccess
'$touch_icon' => $touch_icon,
'$block_public' => intval($config->get('system', 'block_public')),
'$stylesheets' => $this->stylesheets,
+ '$likeError' => $l10n->t('Like not successfull'),
+ '$dislikeError' => $l10n->t('Dislike not successfull'),
+ '$announceError' => $l10n->t('Sharing not successfull'),
+ '$srvError' => $l10n->t('Backend error'),
+ '$netError' => $l10n->t('Network error'),
]) . $this->page['htmlhead'];
}
diff --git a/src/Core/System.php b/src/Core/System.php
index 107303d6a..bf3f247dd 100644
--- a/src/Core/System.php
+++ b/src/Core/System.php
@@ -445,34 +445,28 @@ class System
*/
public static function getLoadAvg(bool $get_processes = true): array
{
+ $load_arr = sys_getloadavg();
+ if (empty($load_arr)) {
+ return [];
+ }
+
+ $load = [
+ 'average1' => $load_arr[0],
+ 'average5' => $load_arr[1],
+ 'average15' => $load_arr[2],
+ 'runnable' => 0,
+ 'scheduled' => 0
+ ];
+
if ($get_processes && @is_readable('/proc/loadavg')) {
$content = @file_get_contents('/proc/loadavg');
- if (empty($content)) {
- $content = shell_exec('uptime | sed "s/.*averages*: //" | sed "s/,//g"');
+ if (!empty($content) && preg_match("#([.\d]+)\s([.\d]+)\s([.\d]+)\s(\d+)/(\d+)#", $content, $matches)) {
+ $load['runnable'] = (float)$matches[4];
+ $load['scheduled'] = (float)$matches[5];
}
}
- if (empty($content) || !preg_match("#([.\d]+)\s([.\d]+)\s([.\d]+)\s(\d+)/(\d+)#", $content, $matches)) {
- $load_arr = sys_getloadavg();
- if (empty($load_arr)) {
- return [];
- }
- return [
- 'average1' => $load_arr[0],
- 'average5' => $load_arr[1],
- 'average15' => $load_arr[2],
- 'runnable' => 0,
- 'scheduled' => 0
- ];
- }
-
- return [
- 'average1' => (float)$matches[1],
- 'average5' => (float)$matches[2],
- 'average15' => (float)$matches[3],
- 'runnable' => (float)$matches[4],
- 'scheduled' => (float)$matches[5]
- ];
+ return $load;
}
/**
diff --git a/src/Core/Worker.php b/src/Core/Worker.php
index 9d1fde85c..70ba0ffe4 100644
--- a/src/Core/Worker.php
+++ b/src/Core/Worker.php
@@ -662,16 +662,24 @@ class Worker
DBA::close($r);
}
+ $stamp = (float)microtime(true);
+ $used = 0;
+ $sleep = 0;
+ $data = DBA::p("SHOW PROCESSLIST");
+ while ($row = DBA::fetch($data)) {
+ if ($row['Command'] != 'Sleep') {
+ ++$used;
+ } else {
+ ++$sleep;
+ }
+ }
+ DBA::close($data);
+ self::$db_duration += (microtime(true) - $stamp);
+
// If $max is set we will use the processlist to determine the current number of connections
// The processlist only shows entries of the current user
if ($max != 0) {
- $stamp = (float)microtime(true);
- $r = DBA::p('SHOW PROCESSLIST');
- self::$db_duration += (microtime(true) - $stamp);
- $used = DBA::numRows($r);
- DBA::close($r);
-
- Logger::info('Connection usage (user values)', ['usage' => $used, 'max' => $max]);
+ Logger::info('Connection usage (user values)', ['working' => $used, 'sleeping' => $sleep, 'max' => $max]);
$level = ($used / $max) * 100;
@@ -695,11 +703,11 @@ class Worker
if (!DBA::isResult($r)) {
return false;
}
- $used = intval($r['Value']);
+ $used = max($used, intval($r['Value'])) - $sleep;
if ($used == 0) {
return false;
}
- Logger::info('Connection usage (system values)', ['used' => $used, 'max' => $max]);
+ Logger::info('Connection usage (system values)', ['working' => $used, 'sleeping' => $sleep, 'max' => $max]);
$level = $used / $max * 100;
diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po
index 52888018b..3c45d3670 100644
--- a/view/lang/C/messages.po
+++ b/view/lang/C/messages.po
@@ -673,7 +673,27 @@ msgid ""
"notifications."
msgstr ""
-#: src/App/Page.php:320
+#: src/App/Page.php:256
+msgid "Like not successfull"
+msgstr ""
+
+#: src/App/Page.php:257
+msgid "Dislike not successfull"
+msgstr ""
+
+#: src/App/Page.php:258
+msgid "Sharing not successfull"
+msgstr ""
+
+#: src/App/Page.php:259
+msgid "Backend error"
+msgstr ""
+
+#: src/App/Page.php:260
+msgid "Network error"
+msgstr ""
+
+#: src/App/Page.php:325
msgid "toggle mobile"
msgstr ""
diff --git a/view/theme/frio/js/theme.js b/view/theme/frio/js/theme.js
index 60aa88ba5..9196858bb 100644
--- a/view/theme/frio/js/theme.js
+++ b/view/theme/frio/js/theme.js
@@ -764,12 +764,95 @@ function htmlToText(htmlString) {
* @param {boolean} un Whether to perform an activity removal instead of creation
*/
function doActivityItemAction(ident, verb, un) {
- if (verb.indexOf("attend") === 0) {
- $(".item-" + ident + " .button-event:not(#" + verb + "-" + ident + ")").removeClass("active");
+ _verb = un ? 'un' + verb : verb;
+ var thumbsClass = '';
+ switch (verb) {
+ case 'like':
+ thumbsClass = 'fa-thumbs-up';
+ break;
+ case 'dislike':
+ thumbsClass = 'fa-thumbs-down';
+ break;
+ case 'announce':
+ thumbsClass = 'fa-retweet';
}
- $("#" + verb + "-" + ident).toggleClass("active");
-
- doActivityItem(ident, verb, un);
+ if (verb.indexOf('announce') === 0 ) {
+ // Share-Button(s)
+ // remove share-symbol, to replace it by rotator
+ $('button[id^=shareMenuOptions-' + ident.toString() + '] i:first-child').removeClass('fa-share');
+ $('button[id^=announce-' + ident.toString() + '] i:first-child').removeClass('fa-retweet');
+ // avoid multiple rotators on like/share-button if klicked multiple times.
+ if ($('img[id^=waitfor-' + verb + '-' + ident.toString() + ']').length == 0) {
+ // append rotator to the shareMenu-button for small media
+ $('')
+ .attr({id: 'waitfor-' + verb + '-' + ident.toString(), src: 'images/rotator.gif'})
+ .addClass('fa')
+ .appendTo($('button[id^=shareMenuOptions-' + ident.toString() + '] i:first-child' ));
+ }
+ }
+ $('button[id^=' + verb + '-' + ident.toString() + '] i:first-child').removeClass(thumbsClass);
+ // if verb is announce, then one rotator is added above to the shareMedia-dropdown button
+ if ($('button:not(button.dropdown-toggle) img#waitfor-' + verb + '-' + ident.toString()).length == 0) {
+ $('')
+ .attr({id: 'waitfor-' + verb + '-' + ident.toString(), src: 'images/rotator.gif'})
+ .addClass('fa')
+ .appendTo($('button[id^=' + verb + '-' + ident.toString() + '] i:first-child'));
+ }
+ $.post('item/' + ident.toString() + '/activity/' + _verb)
+ .success(function(data){
+ $('img[id^=waitfor-' + verb + '-' + ident.toString() + ']').remove();
+ if (data.status == 'ok') {
+ if (data.verb == 'un' + verb) {
+ // like/dislike buttons
+ $('button[id^=' + verb + '-' + ident.toString() + ']' )
+ .removeClass('active')
+ .attr('onclick', 'doActivityItemAction(' + ident +', "' + verb + '",false )');
+ // link in share-menu
+ $('a[id^=' + verb + '-' + ident.toString() + ']' )
+ .removeClass('active')
+ .attr('href', 'javascript:doActivityItemAction(' + ident +', "' + verb + '",false )');
+ $('a[id^=' + verb + '-' + ident.toString() + '] i:first-child' ).addClass('fa-retweet').removeClass('fa-ban');
+ } else {
+ // like/dislike buttons
+ $('button[id^=' + verb + '-' + ident.toString() + ']' )
+ .addClass('active')
+ .attr('onclick', 'doActivityItemAction(' + ident + ', "' + verb + '", true )');
+ // link in share-menu
+ $('a[id^=' + verb + '-' + ident.toString() + ']' )
+ .addClass('active')
+ .attr('href', 'javascript:doActivityItemAction(' + ident + ', "' + verb + '", true )');
+ $('a[id^=' + verb + '-' + ident.toString() + '] i:first-child' ).removeClass('fa-retweet').addClass('fa-ban');
+ }
+ $('button[id^=' + verb + '-' + ident.toString() + '] i:first-child').addClass(thumbsClass).show();
+ if (verb.indexOf('announce') === 0 ) {
+ // ShareMenuButton
+ $('button[id^=shareMenuOptions-' + ident.toString() + '] i:first-child').addClass('fa-share');
+ if (data.verb == 'un' + verb) {
+ $('button[id^=shareMenuOptions-' + ident.toString() + ']').removeClass('active');
+ } else {
+ $('button[id^=shareMenuOptions-' + ident.toString() + ']').addClass('active');
+ }
+ }
+ } else {
+ /* server-response was not ok. Database-problems or some changes in
+ * data?
+ * reset all buttons
+ */
+ $('img[id^=waitfor-' + verb + '-' + ident.toString() + ']').remove();
+ $('button[id^=shareMenuOptions-' + ident.toString() + '] i:first-child').addClass('fa-share');
+ $('button[id^=' + verb + '-' + ident.toString() + '] i:first-child').addClass(thumbsClass);
+ $('a[id^=' + verb + '-' + ident.toString() + '] i:first-child').addClass(thumbsClass);
+ $.jGrowl(aActErr[verb] + '
(' + aErrType['srvErr'] + ')', {sticky: false, theme: 'info', life: 5000});
+ }
+ })
+ .error(function(data){
+ // Server could not be reached successfully
+ $('img[id^=waitfor-' + verb + '-' + ident.toString() + ']').remove();
+ $('button[id^=shareMenuOptions-' + ident.toString() + '] i:first-child').addClass('fa-share');
+ $('button[id^=' + verb + '-' + ident.toString() + '] i:first-child').addClass(thumbsClass);
+ $('a[id^=' + verb + '-' + ident.toString() + '] i:first-child').addClass(thumbsClass);
+ $.jGrowl(aActErr[verb] + '
(' + aErrType['netErr'] + ')', {sticky: false, theme: 'info', life: 5000});
+ });
}
// Decodes a hexadecimally encoded binary string
diff --git a/view/theme/frio/templates/js_strings.tpl b/view/theme/frio/templates/js_strings.tpl
index c27921afd..39445a0ac 100644
--- a/view/theme/frio/templates/js_strings.tpl
+++ b/view/theme/frio/templates/js_strings.tpl
@@ -10,4 +10,13 @@ They are loaded into the html