Files
2025-04-09 21:36:51 +02:00

198 lines
7.3 KiB
Perl

#!/usr/bin/perl -w
use strict;
use warnings;
use XML::LibXML;
use File::Find qw(find finddepth);
use File::Slurp;
use Data::Printer;
use DBI;
my $dbh = DBI->connect("DBI:mysql:etv_mls:TS-NAS", 'TEST', '1234')
#my $dbh = DBI->connect('DBI:mysql:prod:ares', 'root', 'jagger')
or die "Couldn't connect to database: " . DBI->errstr;
#my @s1 = $dbh->selectall_arrayref("SHOW TABLE STATUS FROM `ats`;", { Slice => {} });
my $s1 = $dbh->selectcol_arrayref("SELECT Dateiname, fileid FROM versatakt_Dateien", { Columns=>[1,2] });
my %dateien = @$s1;
my $versaflow1 = "/media/versashare/versaflow1/Protocol/";
my $versaflow2 = "/media/versashare/versaflow2/Protocol/";
my $versaflow3 = "/media/versashare/versaflow3/Protocol/";
sub dowork {
my ($ordner, $maschine ) = @_;
my @m = split($/, `find $ordner -type f`);
for my $i ( @m ) {
my @temp = split(/\//, $i );
my $cnt = scalar @temp;
my $da = $temp[ $cnt - 1 ];
if ( !defined $dateien{$da} ) {
my $inhalt = read_file( $i );
chomp $inhalt;
my $val = readwritexml($inhalt, $maschine); # gibt die values für den insert wieder
$dbh->do("INSERT ignore into versatakt(Maschine, Program, Fehler, Einlauf, Auslauf, Flux, Vhm1, Lm1, Vhm2, Lm2) Values $val") ;
$dbh->do("INSERT INTO versatakt_Dateien (Dateiname, maschine) VALUES ( ?, ? )", undef, $_, $maschine );
print "$temp[ $cnt - 1 ] verarbeitet\n";
}
}
}
dowork($versaflow1, 'Versaflow 1');
dowork($versaflow2, 'Versaflow 2');
dowork($versaflow3, 'Versaflow 3');
#sudo mount -t cifs -o username=js000387,password=passwort //gs-archiv.win.mlands.com/versaflow$ /media/versashare
sub readwritexml() {
my ($fh, $masch ) = @_;
my $values = "";
my $xml = XML::LibXML->new();
my $tree = $xml->load_xml(string => $fh);
my @nodes = $tree->findnodes("ERSA/child::*");
for my $no (@nodes)
{
my $programm = "";
my $fehler = "";
my $einlauf = "";
my $auslauf = "",
my $fm1 = "";
my $vm11 = "";
my $lm1 = "";
my $vm41 = "";
my $lm2 = "";
my @nodes = $no->nonBlankChildNodes();
for my $n ( @nodes )
{
my $typ = $n->getAttribute("LoetProtElementTyp");
$typ =~ s/_Gm_ZeitPcbImModul//g;
$typ =~ s/Zeitpunkt//g;
if ( $n->getAttribute("LoetProtElementTyp") eq "Programm" && $n->getAttribute("LoetProtElementIstwert") ne "" ) {
$programm = $n->getAttribute("LoetProtElementIstwert");
}
if ( $n->getAttribute("LoetProtElementTyp") eq "Fehler") {
$fehler = $n->getAttribute("LoetProtElementIstwert");
}
if ( $n->getAttribute("LoetProtElementTyp") eq "EinlaufZeitpunkt") {
$einlauf = convertdate($n->getAttribute("LoetProtElementIstwert"));
}
if ( $n->getAttribute("LoetProtElementTyp") eq "AuslaufZeitpunkt") {
$auslauf = convertdate($n->getAttribute("LoetProtElementIstwert"));
}
if ( $n->getAttribute("LoetProtElementTyp") eq "Fm1__Gm_ZeitPcbImModul") {
$fm1 = $n->getAttribute("LoetProtElementIstwert");
}
if ( $n->getAttribute("LoetProtElementTyp") eq "Vm11_Gm_ZeitPcbImModul") {
$vm11 = $n->getAttribute("LoetProtElementIstwert");
}
if ( $n->getAttribute("LoetProtElementTyp") eq "Lm1__Gm_ZeitPcbImModul") {
$lm1 = $n->getAttribute("LoetProtElementIstwert");
}
if ( $n->getAttribute("LoetProtElementTyp") eq "Vm41_Gm_ZeitPcbImModul") {
$vm41 = $n->getAttribute("LoetProtElementIstwert");
}
if ( $n->getAttribute("LoetProtElementTyp") eq "Lm2__Gm_ZeitPcbImModul") {
$lm2 = $n->getAttribute("LoetProtElementIstwert");
}
}
$values .= "('$masch', '$programm', $fehler, '$einlauf', '$auslauf', $fm1, $vm11, $lm1, $vm41, $lm2),";
}
$values =~ s/,$//;
return $values;
}
sub convertdate() {
my ($date) = @_;
my @t1 = split(/ /, $date);
my @t2 = split(/\./, $t1[0] );
return "$t2[2]-$t2[1]-$t2[0] $t1[1]";
}
$dbh->disconnect;
# use POSIX;
# use Filesys::SmbClient;
# my $smb = new Filesys::SmbClient(username => "opawilly",
# password => "power4me",
# workgroup => "workgroup",
# debug => 0);
# # Maschinen bestimmen
# my $fd = $smb->opendir("smb://opawilly/H\$/Test/Versaflow");
# while (my $f = $smb->readdir_struct($fd)) {
# my $versa = "";
# if ($f->[0] == SMBC_DIR && $f->[1] ne '.' && $f->[1] ne '..' ) {
# $versa = $f->[1];
# print "Maschine ",$f->[1],"\n";
# my $jahr = "";
# my $fdm = $smb->opendir("smb://opawilly/H\$/Test/Versaflow/$versa/Protocol");
# while (my $f1 = $smb->readdir_struct($fdm)) {
# if ($f1->[0] == SMBC_DIR && $f1->[1] ne '.' && $f1->[1] ne '..' ) {
# $jahr = $f1->[1];
# print "Jahr ",$f1->[1],"\n";
# my $monat = "";
# my $fdj = $smb->opendir("smb://opawilly/H\$/Test/Versaflow/$versa/Protocol/$jahr");
# # ordnerstruktur enthält Monate
# while (my $f2 = $smb->readdir_struct($fdj)) {
# if ($f2->[0] == SMBC_DIR && $f2->[1] ne '.' && $f2->[1] ne '..' ) {
# $monat = $f2->[1];
# print "Monat ",$f2->[1],"\n";
# # Dateien oder Tage bestimmen
# my $fdmo = $smb->opendir("smb://opawilly/H\$/Test/Versaflow/$versa/Protocol/$jahr/$monat");
# while (my $f3 = $smb->readdir_struct($fdmo)) {
# if ($f3->[0] == SMBC_FILE ) {
# print "$versa Datei ",$f3->[1],"\n";
# my $fh = $smb->open("smb://opawilly/H\$/Test/Versaflow/$versa/Protocol/$jahr/$monat/$f3->[1]", '0666')
# or print "Can't read file:", $!, "\n";
# readwritexml($fh);
# } elsif ($f3->[0] == SMBC_DIR ) {
# # ordnerstruktur enthält Tage
# my $fdmoda = $smb->opendir("smb://opawilly/H\$/Test/Versaflow/$versa/Protocol/$jahr/$monat/$f3->[1]");
# while (my $f4 = $smb->readdir_struct($fdmoda)) {
# if ($f4->[0] == SMBC_FILE ) {
# print "$versa Datei ",$f4->[1],"\n";
# my $fh = $smb->open("smb://opawilly/H\$/Test/Versaflow/$versa/Protocol/$jahr/$monat/$f3->[1]/$f4->[1]", '0666')
# or print "Can't read file:", $!, "\n";
# readwritexml( <$fh> );
# }
# }
# }
# }
# }
# }
# }
# }
# } elsif ($f->[0] == SMBC_FILE) {
# print "File ",$f->[1],"\n";
# }
# }
#smbclient \\\\opawilly\\H$ -U opawilly pass