Files
scripts/delmasterwid.pl
2025-04-09 21:36:51 +02:00

154 lines
5.0 KiB
Perl

#!/usr/bin/perl -w
use strict;
use warnings;
use DBI;
use Data::Printer;
# use JSON;
use Getopt::Long;
use File::Slurp qw(:std);
use Term::ANSIColor;
my $inhalt; # Refrenztdaten aus der JSON Datei
my $write = 0; # Parameter zum schreiben der Datei
my $fileexist = 1; # Existiert die angegene Datei nicht wird sie zu 0 und eine Meldung erscheint
my $db = "prod"; # Datenbankparameter
my $user = "root"; # Datenbankuser
my $pass = "jagger"; # Datenbankpasswort
my $file = "delmasterlog"; # Referenzdatei
my $server = "ares"; # Datenbankserver
my $result = ""; # ergebnis des Vergleichens
my $wid = "";
my %h = ('wid' => \$wid, 'db' => \$db, 'user' => \$user, 'pass' => \$pass, 'file' => \$file, 'server' => \$server);
my $tref;
my @tabletmp;
GetOptions (\%h, 'wid=s', 'db=s', 'user=s', 'pass=s', 'file=s', 'server=s');
if ( $wid eq "" || $db eq "" || $user eq "" || $user eq "" || $server eq "" ) {
print "löschen eines Masterrecords und alles dazugehörige\n";
print "es fehlen folgende Parameter\n";
print "\n";
print "--wid -w Werksident" if ($wid eq "");
print "--server -s = Datenbankserver\n" if ($server eq "");
print "--db -d = Datenbankname\n" if ($db eq "");
print "--user -u = Datenbankuser\n" if ($user eq "");
print "--pass -p = Datenbankpasswort\n" if ($pass eq "");
print "--file -f = Datei mit Pfadangabe als Referenz\n" if ($file eq "");
exit;
}
my $dbh = DBI->connect("DBI:mysql:$db:$server", $user, $pass)
#my $dbh = DBI->connect('DBI:mysql:prod:ares', 'root', 'jagger')
or die "Couldn't connect to database: " . DBI->errstr;
my $master = $dbh->selectrow_hashref("SELECT wid FROM prv_master WHERE wid = ?", undef, $wid);
my $masterxt = $dbh->selectrow_hashref("SELECT wid FROM prv_masterxt WHERE wid = ?", undef, $wid);
my $addr = $dbh->selectrow_hashref("SELECT wid FROM prv_addr WHERE wid = ?", undef, $wid);
my $park = $dbh->selectrow_hashref("SELECT wid FROM prv_park WHERE wid = ?", undef, $wid);
my $mount = $dbh->selectall_arrayref("SELECT master FROM prv_mount WHERE master = ?", { Slice => {} }, $wid);
my $mountcnt = @$mount;
my $chkpnt = $dbh->selectall_arrayref("SELECT cpid FROM prv_chkpnt WHERE wid = ?", { Slice => {} }, $wid);
my $chkpntcnt = @$chkpnt;
my $panel = $dbh->selectall_arrayref("SELECT panelid FROM prv_panel WHERE wid = ?", { Slice => {} }, $wid);
my $panelcnt = @$panel;
my $exec = $dbh->selectall_arrayref("SELECT execid FROM prv_exec WHERE wid = ?", { Slice => {} }, $wid);
my $execcnt = @$exec;
print "\nPRV Server: $server\n";
if ( defined $master->{wid} ) {
print "prv_master: $master->{wid} gefunden\n";
} else {
print "prv_master: nicht gefunden\nBeendet";
exit;
};
if ( defined $masterxt->{wid} ) {
print "prv_masterxt: $wid gefunden\n";
};
if ( defined $addr->{wid} ) {
print "prv_addr: $wid gefunden\n";
};
if ( defined $park->{wid} ) {
print "prv_park: $wid gefunden\n";
};
if ( $mountcnt > 0 ) {
print "prv_mount: $mountcnt Master gefunden\n";
};
if ( $chkpntcnt > 0 ) {
print "prv_chkpnt: $chkpntcnt gefunden\n";
};
if ( $panelcnt > 0 ) {
print "prv_panel: $panelcnt gefunden\n";
};
if ( $execcnt > 0 ) {
print "prv_exec: $execcnt gefunden\n";
};
print "Einträge löschen? j/N ";
chomp( my $del = <STDIN> );
if ( lc $del eq "j" ) {
$dbh->do("DELETE FROM prv_master WHERE wid = ?", undef, $wid);
print "prv_master: $wid gelöscht\n";
if ( defined $masterxt->{wid} ) {
$dbh->do("DELETE FROM prv_masterxt WHERE wid = ?", undef, $wid);
print "prv_masterxt: $wid gelöscht\n";
};
if ( defined $addr->{wid} ) {
$dbh->do("DELETE FROM prv_addr WHERE wid = ?", undef, $wid);
print "prv_addr: $wid gelöscht\n";
};
if ( defined $park->{wid} ) {
$dbh->do("DELETE FROM prv_park WHERE wid = ?", undef, $wid);
print "prv_park: $wid gelöscht\n";
};
if ( $mountcnt > 0 ) {
$dbh->do("DELETE FROM prv_mount WHERE wid = ?", undef, $wid);
print "prv_mount: $mountcnt Master gelöscht\n";
};
if ( $chkpntcnt > 0 ) {
$dbh->do("DELETE FROM prv_mount WHERE wid = ?", undef, $wid);
print "prv_chkpnt: $chkpntcnt gelöscht\n";
};
if ( $panelcnt > 0 ) {
for my $p ( @$panel) {
$dbh->do("DELETE FROM prv_panel WHERE panelid = ?", undef, $p->{panelid});
$dbh->do("DELETE FROM prv_panelmaster WHERE panelid = ?", undef, $wid);
}
print "prv_panel: $panelcnt gelöscht\n";
};
if ( $execcnt > 0 ) {
$dbh->do("DELETE FROM prv_exec WHERE wid = ?", undef, $wid);
print "prv_exec: $execcnt gelöscht\n";
};
} else {
print "Löschen abgebrochen\n";
}
# if ( $write == 1 || $fileexist == 0 ) {
# append_file($file, encode_json(\@tabletmp) );
# print "Die angegebene Datei existiert nicht und wird erstellt\n" if ( $fileexist == 0 );
# print "Datei $file wurde geschrieben\n";
# } else {
# print $result eq "" ? "Alles bestens, keine Unterschiede gefunden\n" : $result;
# }
$dbh->disconnect;
1;