summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apis/clientlog.inc.php38
-rw-r--r--apis/cron.inc.php6
-rw-r--r--apis/update.inc.php49
-rw-r--r--inc/database.inc.php2
-rw-r--r--install/content.sql2
-rw-r--r--install/schema.sql359
-rw-r--r--lang/de/templates/statistics/clientlist.json2
7 files changed, 277 insertions, 181 deletions
diff --git a/apis/clientlog.inc.php b/apis/clientlog.inc.php
index 01a470f0..842e3469 100644
--- a/apis/clientlog.inc.php
+++ b/apis/clientlog.inc.php
@@ -31,6 +31,7 @@ if ($type{0} === '~') {
}
}
$NOW = time();
+ $old = Database::queryFirst('SELECT logintime, lastseen FROM machine WHERE machineuuid = :uuid', array('uuid' => $uuid));
// Handle event type
if ($type === '~poweron') {
// Poweron & hw stats
@@ -45,6 +46,7 @@ if ($type{0} === '~') {
$valid = array('UNKNOWN', 'UNSUPPORTED', 'DISABLED', 'ENABLED');
if (!in_array($kvmstate, $valid)) $kvmstate = 'UNKNOWN';
$cpumodel = Request::post('cpumodel', '', 'string');
+ $systemmodel = Request::post('systemmodel', '', 'string');
$id44mb = Request::post('id44mb', 0, 'integer');
if ($id44mb < 0 || $id44mb > 10240000) $id44mb = 0;
$badsectors = Request::post('badsectors', 0, 'integer');
@@ -54,29 +56,43 @@ if ($type{0} === '~') {
$hostname = '';
}
$data = Request::post('data', '', 'string');
- // See if we have a lingering session, create statistic entry if so
if ($uptime < 120) {
- $old = Database::queryFirst('SELECT logintime, lastseen FROM machine WHERE machineuuid = :uuid', array('uuid' => $uuid));
+ // See if we have a lingering session, create statistic entry if so
if ($old !== false && (int)$old['logintime'] !== 0) {
$sessionLength = $old['lastseen'] - $old['logintime'];
if ($sessionLength > 0) {
$start = $old['logintime'];
if ($start === 0) $start = $NOW;
- Database::exec('INSERT INTO statistic (dateline, typeid, clientip, username, data)'
- . " VALUES (:start, '.session-length', :clientip, '', :length)", array(
+ Database::exec('INSERT INTO statistic (dateline, typeid, machineuuid, clientip, username, data)'
+ . " VALUES (:start, '~session-length', :uuid, :clientip, '', :length)", array(
'start' => $start,
+ 'uuid' => $uuid,
'clientip' => $ip,
'length' => $sessionLength
));
}
}
+ // Write poweroff period length to statistic table
+ if ($old !== false) {
+ $lastSeen = $old['lastseen'] + 300;
+ $offtime = ($NOW - $uptime) - $lastSeen;
+ if ($offtime > 600 && $offtime < 86400 * 90) {
+ Database::exec('INSERT INTO statistic (dateline, typeid, machineuuid, clientip, username, data)'
+ . " VALUES (:shutdown, '~offline-length', :uuid, :clientip, '', :length)", array(
+ 'shutdown' => $lastSeen,
+ 'uuid' => $uuid,
+ 'clientip' => $ip,
+ 'length' => $offtime
+ ));
+ }
+ }
}
// Create/update machine entry
Database::exec('INSERT INTO machine '
. '(machineuuid, macaddr, clientip, firstseen, lastseen, logintime, position, lastboot, realcores, mbram,'
. ' kvmstate, cpumodel, id44mb, badsectors, data, hostname) VALUES '
. "(:uuid, :macaddr, :clientip, :firstseen, :lastseen, 0, '', :lastboot, :realcores, :mbram,"
- . ' :kvmstate, :cpumodel, :id44mb, :badsectors, :data, :hostname)'
+ . ' :kvmstate, :cpumodel, :systemmodel, :id44mb, :badsectors, :data, :hostname)'
. ' ON DUPLICATE KEY UPDATE'
. ' macaddr = VALUES(macaddr),'
. ' clientip = VALUES(clientip),'
@@ -87,6 +103,7 @@ if ($type{0} === '~') {
. ' mbram = VALUES(mbram),'
. ' kvmstate = VALUES(kvmstate),'
. ' cpumodel = VALUES(cpumodel),'
+ . ' systemmodel = VALUES(systemmodel),'
. ' id44mb = VALUES(id44mb),'
. ' badsectors = VALUES(badsectors),'
. ' data = VALUES(data),'
@@ -101,16 +118,18 @@ if ($type{0} === '~') {
'mbram' => $mbram,
'kvmstate' => $kvmstate,
'cpumodel' => $cpumodel,
+ 'systemmodel'=> $systemmodel,
'id44mb' => $id44mb,
'badsectors' => $badsectors,
'data' => $data,
'hostname' => $hostname,
));
+ // Write statistics data
+
} else if ($type === '~runstate') {
// Usage (occupied/free)
$sessionLength = 0;
$used = Request::post('used', 0, 'integer');
- $old = Database::queryFirst('SELECT logintime, lastseen FROM machine WHERE machineuuid = :uuid', array('uuid' => $uuid));
if ($old === false) die("Unknown machine.\n");
settype($old['logintime'], 'integer');
settype($old['lastseen'], 'integer');
@@ -146,9 +165,10 @@ if ($type{0} === '~') {
if ($sessionLength > 0) {
$start = $old['logintime'];
if ($start === 0) $start = $NOW;
- Database::exec('INSERT INTO statistic (dateline, typeid, clientip, username, data)'
- . " VALUES (:start, '.session-length', :clientip, '', :length)", array(
+ Database::exec('INSERT INTO statistic (dateline, typeid, machineuuid, clientip, username, data)'
+ . " VALUES (:start, '~session-length', :uuid, :clientip, '', :length)", array(
'start' => $start,
+ 'uuid' => $uuid,
'clientip' => $ip,
'length' => $sessionLength
));
@@ -161,7 +181,7 @@ if ($type{0} === '~') {
$start = $old['logintime'];
if ($start === 0) $start = $NOW;
Database::exec('INSERT INTO statistic (dateline, typeid, clientip, username, data)'
- . " VALUES (:start, '.session-length', :clientip, '', :length)", array(
+ . " VALUES (:start, '~session-length', :clientip, '', :length)", array(
'start' => $start,
'clientip' => $ip,
'length' => $sessionLength
diff --git a/apis/cron.inc.php b/apis/cron.inc.php
index 3553abdb..318fb67f 100644
--- a/apis/cron.inc.php
+++ b/apis/cron.inc.php
@@ -23,6 +23,12 @@ case 3:
case 4:
Database::exec("DELETE FROM callback WHERE (UNIX_TIMESTAMP() - dateline) > 86400");
break;
+case 5:
+ Database::exec("DELETE FROM statistic WHERE (UNIX_TIMESTAMP() - dateline) > 86400 * 90");
+ break;
+case 6:
+ Database::exec("DELETE FROM machine WHERE (UNIX_TIMESTAMP() - lastseen) > 86400 * 365");
+ break;
}
Trigger::checkCallbacks();
diff --git a/apis/update.inc.php b/apis/update.inc.php
index 134e7ad8..a7212961 100644
--- a/apis/update.inc.php
+++ b/apis/update.inc.php
@@ -226,7 +226,7 @@ function update_8()
// #######################
// ##### 2015-05-21
-// Add statistics table, for future logging of eg.
+// Add statistics table, for logging of session length and idle times
function update_9()
{
Database::exec("CREATE TABLE IF NOT EXISTS `statistic` (
@@ -242,4 +242,49 @@ function update_9()
KEY `clientip` (`clientip`,`dateline`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8");
return true;
-} \ No newline at end of file
+}
+
+// #######################
+// ##### 2015-12-21
+// Add machine uuid column to statistics table
+function update_10()
+{
+ if (!tableHasColumn('statistic', 'machineuuid')) {
+ Database::exec('ALTER TABLE statistic'
+ . ' ADD COLUMN `machineuuid` varchar(36) CHARACTER SET ascii DEFAULT NULL AFTER clientip,'
+ . ' ADD INDEX `machineuuid` (`machineuuid`,`dateline`)');
+ }
+ Database::exec("CREATE TABLE IF NOT EXISTS `machine` (
+ `machineuuid` char(36) CHARACTER SET ascii NOT NULL,
+ `roomid` int(10) unsigned DEFAULT NULL,
+ `macaddr` char(17) CHARACTER SET ascii NOT NULL,
+ `clientip` varchar(45) CHARACTER SET ascii NOT NULL,
+ `firstseen` int(10) unsigned NOT NULL,
+ `lastseen` int(10) unsigned NOT NULL,
+ `logintime` int(10) unsigned NOT NULL,
+ `position` varchar(40) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
+ `lastboot` int(10) unsigned NOT NULL,
+ `realcores` smallint(5) unsigned NOT NULL,
+ `mbram` int(10) unsigned NOT NULL,
+ `kvmstate` enum('UNKNOWN','UNSUPPORTED','DISABLED','ENABLED') NOT NULL,
+ `cpumodel` varchar(120) NOT NULL,
+ `systemmodel` varchar(120) NOT NULL DEFAULT '',
+ `id44mb` int(10) unsigned NOT NULL,
+ `badsectors` int(10) unsigned NOT NULL,
+ `data` mediumtext NOT NULL,
+ `hostname` varchar(200) NOT NULL DEFAULT '',
+ `notes` text,
+ PRIMARY KEY (`machineuuid`),
+ KEY `macaddr` (`macaddr`),
+ KEY `clientip` (`clientip`),
+ KEY `realcores` (`realcores`),
+ KEY `mbram` (`mbram`),
+ KEY `kvmstate` (`kvmstate`),
+ KEY `id44mb` (`id44mb`),
+ KEY `roomid` (`roomid`),
+ KEY `lastseen` (`lastseen`),
+ KEY `cpumodel` (`cpumodel`),
+ KEY `systemmodel` (`systemmodel`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8");
+ return true;
+}
diff --git a/inc/database.inc.php b/inc/database.inc.php
index 3bd42636..6addb931 100644
--- a/inc/database.inc.php
+++ b/inc/database.inc.php
@@ -20,7 +20,7 @@ class Database
*/
public static function getExpectedSchemaVersion()
{
- return 10;
+ return 11;
}
public static function needSchemaUpdate()
diff --git a/install/content.sql b/install/content.sql
index d5c5f2ac..bf54a711 100644
--- a/install/content.sql
+++ b/install/content.sql
@@ -1,2 +1,2 @@
-INSERT INTO property (name, dateline, value) VALUES ('webif-version', 0, 10);
+INSERT INTO property (name, dateline, value) VALUES ('webif-version', 0, 11);
diff --git a/install/schema.sql b/install/schema.sql
index 2cc68861..c4ca99c5 100644
--- a/install/schema.sql
+++ b/install/schema.sql
@@ -1,167 +1,192 @@
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET time_zone = "+00:00";
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8 */;
-
-
-CREATE TABLE `callback` (
- `taskid` varchar(40) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
- `dateline` int(10) unsigned NOT NULL,
- `cbfunction` varchar(16) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
- `args` text NOT NULL,
- PRIMARY KEY (`taskid`,`cbfunction`),
- KEY `dateline` (`dateline`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `cat_setting` (
- `catid` int(10) unsigned NOT NULL,
- `sortval` smallint(5) unsigned NOT NULL,
- PRIMARY KEY (`catid`),
- KEY `sortval` (`sortval`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `clientlog` (
- `logid` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `dateline` int(10) unsigned NOT NULL,
- `logtypeid` varchar(30) NOT NULL,
- `clientip` varchar(40) NOT NULL,
- `description` varchar(255) NOT NULL,
- `extra` text NOT NULL,
- PRIMARY KEY (`logid`),
- KEY `dateline` (`dateline`),
- KEY `logtypeid` (`logtypeid`,`dateline`),
- KEY `clientip` (`clientip`,`dateline`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `configtgz` (
- `configid` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `title` varchar(200) NOT NULL,
- `filepath` varchar(255) NOT NULL,
- `status` enum('OK','OUTDATED','MISSING') NOT NULL DEFAULT 'MISSING',
- PRIMARY KEY (`configid`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `configtgz_module` (
- `moduleid` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `title` varchar(200) NOT NULL,
- `moduletype` varchar(16) NOT NULL,
- `filepath` varchar(250) NOT NULL,
- `contents` text NOT NULL,
- `version` int(10) unsigned NOT NULL DEFAULT '0',
- `status` enum('OK','MISSING','OUTDATED') NOT NULL DEFAULT 'MISSING',
- PRIMARY KEY (`moduleid`),
- KEY `title` (`title`),
- KEY `moduletype` (`moduletype`,`title`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `configtgz_x_module` (
- `configid` int(10) unsigned NOT NULL,
- `moduleid` int(10) unsigned NOT NULL,
- PRIMARY KEY (`configid`,`moduleid`),
- KEY `moduleid` (`moduleid`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `eventlog` (
- `logid` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `dateline` int(10) unsigned NOT NULL,
- `logtypeid` varchar(30) NOT NULL,
- `description` varchar(255) NOT NULL,
- `extra` text NOT NULL,
- PRIMARY KEY (`logid`),
- KEY `dateline` (`dateline`),
- KEY `logtypeid` (`logtypeid`,`dateline`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `news` (
- `newsid` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `dateline` int(10) unsigned NOT NULL,
- `title` varchar(200) DEFAULT NULL,
- `content` text,
- PRIMARY KEY (`newsid`),
- KEY `dateline` (`dateline`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `permission` (
- `mask` int(10) unsigned NOT NULL,
- `identifier` varchar(32) NOT NULL,
- PRIMARY KEY (`mask`),
- UNIQUE KEY `identifier` (`identifier`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `property` (
- `name` varchar(50) NOT NULL,
- `dateline` int(10) unsigned NOT NULL DEFAULT '0',
- `value` text NOT NULL,
- PRIMARY KEY (`name`),
- KEY `dateline` (`dateline`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `setting` (
- `setting` varchar(28) NOT NULL,
- `catid` int(10) unsigned NOT NULL,
- `defaultvalue` text NOT NULL,
- `permissions` int(10) unsigned NOT NULL,
- `validator` varchar(250) NOT NULL DEFAULT '',
- PRIMARY KEY (`setting`),
- KEY `catid` (`catid`,`setting`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `setting_distro` (
- `distroid` int(10) unsigned NOT NULL,
- `setting` varchar(28) NOT NULL,
- `value` text NOT NULL,
- `displayvalue` text NOT NULL,
- PRIMARY KEY (`distroid`,`setting`),
- KEY `setting` (`setting`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `setting_global` (
- `setting` varchar(28) NOT NULL,
- `value` text NOT NULL,
- `displayvalue` text NOT NULL,
- PRIMARY KEY (`setting`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `statistic` (
- `logid` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `dateline` int(10) unsigned NOT NULL,
- `typeid` varchar(30) NOT NULL,
- `clientip` varchar(40) NOT NULL,
- `username` varchar(255) NOT NULL,
- `data` varchar(255) NOT NULL,
- PRIMARY KEY (`logid`),
- KEY `dateline` (`dateline`),
- KEY `logtypeid` (`typeid`,`dateline`),
- KEY `clientip` (`clientip`,`dateline`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `user` (
- `userid` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `login` varchar(100) NOT NULL,
- `passwd` varchar(150) NOT NULL,
- `fullname` varchar(100) DEFAULT NULL,
- `phone` varchar(100) DEFAULT NULL,
- `email` varchar(100) DEFAULT NULL,
- `permissions` int(10) unsigned NOT NULL,
- `lasteventid` int(10) unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`userid`),
- UNIQUE KEY `login` (`login`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-
-ALTER TABLE `configtgz_x_module`
- ADD CONSTRAINT `configtgz_x_module_ibfk_1` FOREIGN KEY (`configid`) REFERENCES `configtgz` (`configid`) ON DELETE CASCADE,
- ADD CONSTRAINT `configtgz_x_module_ibfk_2` FOREIGN KEY (`moduleid`) REFERENCES `configtgz_module` (`moduleid`);
-
-ALTER TABLE `setting`
- ADD CONSTRAINT `setting_ibfk_1` FOREIGN KEY (`catid`) REFERENCES `cat_setting` (`catid`) ON UPDATE CASCADE;
-
-ALTER TABLE `setting_distro`
- ADD CONSTRAINT `setting_distro_ibfk_1` FOREIGN KEY (`setting`) REFERENCES `setting` (`setting`) ON DELETE CASCADE ON UPDATE CASCADE;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+SET time_zone = "+00:00";
+
+CREATE TABLE `callback` (
+ `taskid` varchar(40) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
+ `dateline` int(10) unsigned NOT NULL,
+ `cbfunction` varchar(16) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
+ `args` text NOT NULL,
+ PRIMARY KEY (`taskid`,`cbfunction`),
+ KEY `dateline` (`dateline`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `cat_setting` (
+ `catid` int(10) unsigned NOT NULL,
+ `sortval` smallint(5) unsigned NOT NULL,
+ PRIMARY KEY (`catid`),
+ KEY `sortval` (`sortval`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `clientlog` (
+ `logid` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `dateline` int(10) unsigned NOT NULL,
+ `logtypeid` varchar(30) NOT NULL,
+ `clientip` varchar(40) NOT NULL,
+ `description` varchar(255) NOT NULL,
+ `extra` text NOT NULL,
+ PRIMARY KEY (`logid`),
+ KEY `dateline` (`dateline`),
+ KEY `logtypeid` (`logtypeid`,`dateline`),
+ KEY `clientip` (`clientip`,`dateline`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `configtgz` (
+ `configid` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `title` varchar(200) NOT NULL,
+ `filepath` varchar(255) NOT NULL,
+ `status` enum('OK','OUTDATED','MISSING') NOT NULL DEFAULT 'MISSING',
+ PRIMARY KEY (`configid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `configtgz_module` (
+ `moduleid` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `title` varchar(200) NOT NULL,
+ `moduletype` varchar(16) NOT NULL,
+ `filepath` varchar(250) NOT NULL,
+ `contents` text NOT NULL,
+ `version` int(10) unsigned NOT NULL DEFAULT '0',
+ `status` enum('OK','MISSING','OUTDATED') NOT NULL DEFAULT 'MISSING',
+ PRIMARY KEY (`moduleid`),
+ KEY `title` (`title`),
+ KEY `moduletype` (`moduletype`,`title`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `configtgz_x_module` (
+ `configid` int(10) unsigned NOT NULL,
+ `moduleid` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`configid`,`moduleid`),
+ KEY `moduleid` (`moduleid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `eventlog` (
+ `logid` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `dateline` int(10) unsigned NOT NULL,
+ `logtypeid` varchar(30) NOT NULL,
+ `description` varchar(255) NOT NULL,
+ `extra` text NOT NULL,
+ PRIMARY KEY (`logid`),
+ KEY `dateline` (`dateline`),
+ KEY `logtypeid` (`logtypeid`,`dateline`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `machine` (
+ `machineuuid` char(36) CHARACTER SET ascii NOT NULL,
+ `roomid` int(10) unsigned DEFAULT NULL,
+ `macaddr` char(17) CHARACTER SET ascii NOT NULL,
+ `clientip` varchar(45) CHARACTER SET ascii NOT NULL,
+ `firstseen` int(10) unsigned NOT NULL,
+ `lastseen` int(10) unsigned NOT NULL,
+ `logintime` int(10) unsigned NOT NULL,
+ `position` varchar(40) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
+ `lastboot` int(10) unsigned NOT NULL,
+ `realcores` smallint(5) unsigned NOT NULL,
+ `mbram` int(10) unsigned NOT NULL,
+ `kvmstate` enum('UNKNOWN','UNSUPPORTED','DISABLED','ENABLED') NOT NULL,
+ `cpumodel` varchar(120) NOT NULL,
+ `systemmodel` varchar(120) NOT NULL DEFAULT '',
+ `id44mb` int(10) unsigned NOT NULL,
+ `badsectors` int(10) unsigned NOT NULL,
+ `data` mediumtext NOT NULL,
+ `hostname` varchar(200) NOT NULL DEFAULT '',
+ `notes` text,
+ PRIMARY KEY (`machineuuid`),
+ KEY `macaddr` (`macaddr`),
+ KEY `clientip` (`clientip`),
+ KEY `realcores` (`realcores`),
+ KEY `mbram` (`mbram`),
+ KEY `kvmstate` (`kvmstate`),
+ KEY `id44mb` (`id44mb`),
+ KEY `roomid` (`roomid`),
+ KEY `lastseen` (`lastseen`),
+ KEY `cpumodel` (`cpumodel`),
+ KEY `systemmodel` (`systemmodel`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `news` (
+ `newsid` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `dateline` int(10) unsigned NOT NULL,
+ `title` varchar(200) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`newsid`),
+ KEY `dateline` (`dateline`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `permission` (
+ `mask` int(10) unsigned NOT NULL,
+ `identifier` varchar(32) NOT NULL,
+ PRIMARY KEY (`mask`),
+ UNIQUE KEY `identifier` (`identifier`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `property` (
+ `name` varchar(50) NOT NULL,
+ `dateline` int(10) unsigned NOT NULL DEFAULT '0',
+ `value` text NOT NULL,
+ PRIMARY KEY (`name`),
+ KEY `dateline` (`dateline`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `setting` (
+ `setting` varchar(28) NOT NULL,
+ `catid` int(10) unsigned NOT NULL,
+ `defaultvalue` text NOT NULL,
+ `permissions` int(10) unsigned NOT NULL,
+ `validator` varchar(250) NOT NULL DEFAULT '',
+ PRIMARY KEY (`setting`),
+ KEY `catid` (`catid`,`setting`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `setting_distro` (
+ `distroid` int(10) unsigned NOT NULL,
+ `setting` varchar(28) NOT NULL,
+ `value` text NOT NULL,
+ `displayvalue` text NOT NULL,
+ PRIMARY KEY (`distroid`,`setting`),
+ KEY `setting` (`setting`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `setting_global` (
+ `setting` varchar(28) NOT NULL,
+ `value` text NOT NULL,
+ `displayvalue` text NOT NULL,
+ PRIMARY KEY (`setting`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `statistic` (
+ `logid` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `dateline` int(10) unsigned NOT NULL,
+ `typeid` varchar(30) NOT NULL,
+ `machineuuid` varchar(36) CHARACTER SET ascii DEFAULT NULL,
+ `clientip` varchar(40) NOT NULL,
+ `username` varchar(255) NOT NULL,
+ `data` varchar(255) NOT NULL,
+ PRIMARY KEY (`logid`),
+ KEY `dateline` (`dateline`),
+ KEY `logtypeid` (`typeid`,`dateline`),
+ KEY `clientip` (`clientip`,`dateline`),
+ KEY `machineuuid` (`machineuuid`,`dateline`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `user` (
+ `userid` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `login` varchar(100) NOT NULL,
+ `passwd` varchar(150) NOT NULL,
+ `fullname` varchar(100) DEFAULT NULL,
+ `phone` varchar(100) DEFAULT NULL,
+ `email` varchar(100) DEFAULT NULL,
+ `permissions` int(10) unsigned NOT NULL,
+ `lasteventid` int(10) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`userid`),
+ UNIQUE KEY `login` (`login`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+ALTER TABLE `configtgz_x_module`
+ ADD CONSTRAINT `configtgz_x_module_ibfk_1` FOREIGN KEY (`configid`) REFERENCES `configtgz` (`configid`) ON DELETE CASCADE,
+ ADD CONSTRAINT `configtgz_x_module_ibfk_2` FOREIGN KEY (`moduleid`) REFERENCES `configtgz_module` (`moduleid`);
+
+ALTER TABLE `setting`
+ ADD CONSTRAINT `setting_ibfk_1` FOREIGN KEY (`catid`) REFERENCES `cat_setting` (`catid`) ON UPDATE CASCADE;
+
+ALTER TABLE `setting_distro`
+ ADD CONSTRAINT `setting_distro_ibfk_1` FOREIGN KEY (`setting`) REFERENCES `setting` (`setting`) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/lang/de/templates/statistics/clientlist.json b/lang/de/templates/statistics/clientlist.json
index 8d9c4cbe..a1022e69 100644
--- a/lang/de/templates/statistics/clientlist.json
+++ b/lang/de/templates/statistics/clientlist.json
@@ -4,7 +4,7 @@
"lang_cpuModel": "CPU",
"lang_gbRam": "RAM",
"lang_kvmSupport": "64\u2009Bit G\u00e4ste",
- "lang_lastSeen": "Zuletzt gesehn",
+ "lang_lastSeen": "Zuletzt gesehen",
"lang_machine": "Rechner",
"lang_machineIdle": "Der Rechner ist eingeschaltet und wird zur Zeit nicht benutzt",
"lang_machineOccupied": "Der Rechner ist eingeschaltet und wird benutzt",