#!/usr/bin/perl -w # $Id$ use strict; use warnings; use JSON; use POSIX qw(mktime strftime); use DBI; my ($limit,$tnYear,$datadir,$dbf,$dsn,$sth,$dbh,$sql,@dbInfo,$dbInfo); # define limits for outdated data $limit = "datetime('now', '-13 months')"; $tnYear = strftime("%Y", localtime)-2; # delete all entries (current Year -2) # database connection print "Establishing database connection..."; $datadir = "./data"; $dbf = "$datadir/fhem_statistics_2017.sqlite"; $dsn = "dbi:SQLite:dbname=$dbf"; $dbh = DBI->connect($dsn,"","", { RaiseError => 1, ShowErrorStatement => 1 }) || die "Cannot connect: $DBI::errstr"; print "connected.\n"; # delete records older than limit print "Deleting records...\n"; $dbh->do("DELETE FROM jsonNodes where lastSeen < $limit"); # delete outdated statistics data for submissionsPerDay print "Deleting submissionsPerDay in $tnYear\n"; $sql = q(SELECT * from jsonNodes where uniqueID = 'databaseInfo'); $sth = $dbh->prepare( $sql ); $sth->execute(); @dbInfo = $sth->fetchrow_array(); $dbInfo = decode_json $dbInfo[3]; delete $dbInfo->{'submissionsPerDay'}{$tnYear}; $dbInfo = encode_json $dbInfo; $sth = $dbh->prepare(q{INSERT OR REPLACE INTO jsonNodes(uniqueID,json) VALUES(?,?)}); $sth->execute('databaseInfo',$dbInfo); $sth->finish(); # shrink database print "Shrinking database.\n"; $dbh->do("VACUUM"); # Done. $dbh->disconnect(); print "Done.\n"; 1;