Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /var/www/web-klick.de/dsh/90_akt/DivBasicF/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : /var/www/web-klick.de/dsh/90_akt/DivBasicF/AutoItem.pm

package DivBasicF::AutoItem;

use strict;
use vars qw(@ISA);
use Data::Dumper;
use DivBasicF::ObjProcess;
@ISA = qw(DivBasicF::ObjProcess);

our $maxvalue = 0.1**43.4294;

#******************************************************************

sub init_idx { return("package,pkgend,pkgstart,program,syntax," .
                      "level,requestmode,result,remark"); }
sub tblrequ  { return("conn_requ"); }

#**********************************************************************

sub init_db {

   my $self         = shift;
   my $dbh          = shift;
   my $create_index = shift;
   my $requtbl      = $self->tblrequ();
   
   $dbh->do("create table if not exists $requtbl " .
            " (testitem text,level text,arch text,user text," .
            "requ text,relevance double)");
                      
   $dbh->do("$create_index $requtbl"."_testitem__idx on $requtbl (testitem)");
   $dbh->do("$create_index $requtbl"."_level__idx on $requtbl (level)");
#   $dbh->do("$create_index $requtbl"."_arch__idx on $requtbl (arch)"); 
             # fuehrt zu unguenstigem Query Plan, daher hier den Index NICHT anlegen!
   $dbh->do("$create_index $requtbl"."_user__idx on $requtbl (user)");
   $dbh->do("$create_index $requtbl"."_requ__idx on $requtbl (requ)");
   $dbh->do("$create_index $requtbl"."_relevance__idx on $requtbl (relevance)");

}

#******************************************************************

sub IDX {

   my $self = shift;

   my $o; my $r;
   my $dbh = $self->{'PARENT'}->dbh();

   my $package            = "package";
   my $testitem           = "testitem";
   my $requtbl            = $self->tblrequ();
   $dbh->do("delete from $requtbl where $testitem = '" . $self->{'package'} . "'");

   if ($self->{'program'} =~ /^package +(\S+?)\;/) {
      $self->{'package'} = $1;
   } 
   eval($self->{'program'});
   if ($@) {
      $self->{'result'}  = 9999;
      $self->{'remark'}  = "FATAL. $@";
      $self->{'requ'}    = {};
      $self->{'user'}    = "";
   } else {
      eval("\$o = \$self->{'package'}->new()");
      if ($@) {
         $self->{'result'} = 8000;
         $self->{'remark'} = "To be continued";
      } else {
         $self->{'result'} = $o->result();
         $self->{'remark'} = $o->remark();
         $self->{'requ'}   = {@{$o->requ()}};
         $self->{'user'}   = $o->user();
      }
   }   
      
   $self->{'requestmode'} = 0;
   $self->{'pkgstart'}    = $self->{'package'} . "::";
   $self->{'pkgend'}      = $self->{'package'} . "::zzzz";
   $self->{'level'}       = $self->{'package'};
   $self->{'level'}       =~ s/[^\:]//g;
   $self->{'level'}       = sprintf("%03u",length($self->{'level'})/2);
   my $pkg                = $self->{'package'};
   my $level              = sprintf("%03u",$self->{'level'} + 1);
   my $store              = $self->{'PARENT'}->tblstore();
   my $arch               = "";
   my $user               = "";
   $self->{'requ'}->{'ALL'} = 0.9999999 if (join("",values %{$self->{'requ'}}) =~ /^(11|1)$/);
#   if ($self->{'program'} =~ /sub +formular +/) { $self->{'requestmode'} = 2; }
#   if ($self->{'program'} =~ /\_REQUEST\_/)     { $self->{'requestmode'} = 1; }

#  Berechnung der neuen kumulierten Requirement-Relevanzen

   foreach $r (reverse sort { $self->{'requ'}->{$a} <=> $self->{'requ'}->{$b} }
                      keys %{$self->{'requ'}}) {
      $o = 1 - $self->{'requ'}->{$r};
      if ($o < $maxvalue) {
         $arch = $r if ($r =~ /^ARCH/);
         $user = $r if ($r =~ /^USER/);
      } else {
         $o = sprintf("%12.9f",-log($o));
         $dbh->do("insert into $requtbl ($testitem,level,arch,user,requ,relevance) "
          . " values ('$pkg','".$self->{'level'}."','$arch','$user','$r',$o)");
      }
   }
 
   delete ($self->{'PARENT'}->{'DBH'});
   
   return($self->{'package'});

   
}

#******************************************************************

#  to overload:

sub result { my $self = shift; return(0); }
sub remark { my $self = shift; return(""); }
sub user   { my $self = shift; return("");  }
sub requ   { my $self = shift; return([]); }

sub run    {

   my $self = shift; 
   $self->test_start(@_);

   my $o = <<'TEXT_ENDE';
sub run    {

   my $self = shift; 
   $self->test_start(@_);

   my $o = <<'TEXXT_ENDE';
---LOG---
TEXXT_ENDE

   $o =~ s/---LOG---/$o/;
   $o =~ s/TEXXT_ENDE(.*)\nTEXXT_ENDE/TEXT_ENDE$1\nTEXT_ENDE/s;
   $self->{'log'} = $o;

   $self->test_end();

}
TEXT_ENDE
             
   $o =~ s/---LOG---/$o/;
   $o =~ s/TEXXT_ENDE(.*)\nTEXXT_ENDE/TEXT_ENDE$1\nTEXT_ENDE/s;
   $self->{'log'} = $o;

   $self->test_end();

}
             
#******************************************************************

sub test_start {

   my $self = shift;
   my @pars = ();
   my $o; my @ee; my $o1;
   while (@_) {
      $o = shift(@_);
      next if (!$o);
      push(@pars,$o);
   }
   $self->{'requ'} = { @pars };
#   $self->{'requ'} = { @{$self->requ()}, @pars };
   foreach $o (keys %{$self->{'requ'}}) {
      if ($o =~ /^___(.*)___$/) {
         $self->{$o} = $self->{'requ'}->{$o};
         delete( $self->{'requ'}->{$o} );
      }
   }

}

#******************************************************************

sub test_end {

   my $self        = shift;
   $self->{'log'} .= shift;

   my $user1 = "xx"; 

   my $r = "";
   my $l; my $o; my $o1; my @ee; my $dbh; my $cursor; my $nr;
#   my $maxweight = $self->{'weight'} || 1;
   foreach $o (sort keys %{$self->{'requ'}}) {
      if ($o =~ /^user_(.*)$/i) {
         $user1 = $1;
      }
      $l = length($o) + 2;
      if ($l < 25) { $l = 25; }
      $o1 = $self->{'requ'}->{$o};
#      if ($o1 > $maxweight) { $o1 = $maxweight; }
      $r = $r . "      '" . substr($o."'                           ",0,$l + 2)
                          . " =>  " .
                           sprintf("%6.4f",$o1)
                          . "   ,\n";
   }
   while ( $r =~ s/0( +),/ $1,/g )  { 1; } 
   while ( $r =~ s/\.( +),/ $1,/g ) { 1; } 

   my $text  = <<'TEXT_ENDE';
package ---PACKAGE---;

use strict;
use vars qw(@ISA $PKG);
$PKG = __PACKAGE__;
while ($PKG =~ s/^(.*)\:\:.*$/$1/) { eval("use $PKG"); next if ($@); @ISA = ($PKG); last }

sub result { ---RESULT--- }
sub remark { "---REMARK---" }
sub user   { "---USER---" }
sub requ   { [

---REQUIREMENT---
           ] }


---FUNCTIONS---


1;
TEXT_ENDE

   $o = $self->{'log'};

   eval ( $o );  print STDERR$@;
   if ($@) {
      $o = 'sub run { my $self = shift; $self->test_start(@_); $self->{'."'weight'".'} = 0; $self->test_end('."<<'LOG'".'); }' . "\n\nRun log of " . ref($self) .
           "\n-------------------------------------\n\n\n" . $o . "\nLOG\n\n";
   }
   $text =~ s/---FUNCTIONS---/$o/gs;
   $o    = $self->{'package'} || ref($self) . "::001";
   $text =~ s/---PACKAGE---/$o/gs;

   $o = $self->user() . "," . time() . "." . $user1;
   $o =~ s/^\,//;
   while ($o =~ /^(.*\,)(\d+)(\..*)$/) {
      @ee = localtime($2); # Sekundenformat in lesbares Format umwandeln
      $o = $1 .
               sprintf("%04u",$ee[5]+1900) .   sprintf("%02u",$ee[4]+1) .
               sprintf("%02u",$ee[3]) . "_" .  sprintf("%02u",$ee[2]) .
               sprintf("%02u",$ee[1]) .        sprintf("%02u",$ee[0]) . $3;
   }
   $o    =~ s/^,//;
   $text =~ s/---USER---/$o/gs;

   $o    = $self->{'result'}    || 0;
   $text =~ s/---RESULT---/$o/gs;
   $o    = $self->{'remark'}    || "";
   $text =~ s/---REMARK---/$o/gs;

   $text =~ s/---REQUIREMENT---/$r/gs;
   
   $self->{'program'} = $text;
   delete ($self->{'___JUMP___'});

   $self->{'PARENT'}->push( $self, $self->{'PARENT'}->get_connection() ) || $self->{'program'};


}

#******************************************************************

#  Hier koennen Teile des Test-trees ausgegeben werden.
#  Die Tiefe $depth gibt an, bis zu welcher Tiefe Test-Items
#  ausgegeben werden. Eine Liste aller Child-Items des gegebenen
#  Test-Items erhaelt man mit  $depth = 1.
#
#  In $archs kann eine kommaseparierte Liste aller Architekturen
#  angegeben werden. Bleibt die Liste leer, dann werden alle
#  Architekturen angegeben.
#
#  Wird die Tiefe negativ angegeben, dann wird ueber alle Requirements
#  summiert, so dass man einfach eine Liste aller Test-Items bekommt.
#  In diesem Fall ist die Relevanz der Tests ohne Bedeutung
#
#  Ausgabeformat:
#  Architektur, Requirement, Test-Item, Fehler-Code, Relevanz, Remark 


sub report {

   my $self  = shift;
   my $depth = shift;  #  Tiefe, bis zu der Child-Items verfolgt werden
   my $archs = shift;  #  Kommaseparierte Liste von Architekturen
   my $o     = shift || $self->{'package'};
   
   my $dump  = 0;
   if ($archs =~ s/^\.//) {
      $dump = 1;
   }
   
   my $requ = "r.requ";
   my $arch = "r.arch";
   if ($depth < 0) {   #  alle Requirements werden zusammengefasst
      $depth = -$depth;
      $requ = "'ALL'";
      $arch = "'ALL'";
   }
   if ($depth < 1) { $depth = 0; }
      
   my $requtbl = $self->tblrequ();
   my $store   = $self->{'PARENT'}->tblstore();
   my $dbh     = $self->{'PARENT'}->dbh();
   
   if ($depth == 9999) {
      $o = " o.result='' ";
   } else {
      $o =~ s/[^\:]//gs;
      $o =  length($o)/2;
      $o = $o + $depth + 1;
      $o = 999 if ($o > 999);
      $o = " o.level < '" . sprintf("%03u",$o) . "' ";
   }
   if ($archs) {
      $archs =~ s/\,/\' or r.arch=\'/gs;
      $archs = " and ( r.arch='" . $archs . "' ) "; 
   }

   my $cursor = "select $arch,$requ,o.package,max(o1.result)," .
                   "sum(r.relevance),o.remark,substr(o.text,0,20) from " .
                   "$store as o,$store as o1,$requtbl as r where " .
                   "o1.package=r.testitem and " .
                   "(o.pkgstart < o1.package and o1.package < o.pkgend " .
                   "or o.package=o1.package) $archs and " .
                   "o.package like '" . $self->{'package'} . "\%' and $o " .
                   "group by $arch,$requ,o.package";

# print STDERR "CURSOR: $cursor\n";

   my @ee;
   my $erg = [];
   $cursor = $dbh->prepare($cursor);
   $cursor->execute();

   while (0 == 0) {
      @ee = $cursor->fetchrow();
      last if (!@ee);
      $ee[4] = 1 - exp((-1)*$ee[4]) if ($requ =~ /\./);
      if ($ee[6] =~ /^\.run\./) {
         $ee[4] = "RUNNING";
         $ee[5] = "Item is running";
      }
      elsif ($ee[5] =~ /^WAIT/) {
         $ee[4] = $ee[5];
         $ee[5] = "Item sleeps";
      }
      elsif ($ee[5] =~ /^REQUEST/) {
         $ee[4] = $ee[5];
         $ee[5] = "Item requests additional info";
      }
      elsif ($ee[5] eq '') {
         $ee[5] = "OK"      if ($ee[3] == 1);
         $ee[5] = "WARNING" if ($ee[3] > 1);
         $ee[5] = "ERROR"   if ($ee[3] > 1000);
      }
      pop(@ee);
      push(@$erg,[@ee]);
   }
   $erg = [ sort {
               "::" . $a->[0] . "::" . $a->[1] . "::" . $a->[2] . "::" cmp
               "::" . $b->[0] . "::" . $b->[1] . "::" . $b->[2] . "::"
               } @$erg ];
   $cursor->finish();
   delete ( $self->{'PARENT'}->{'DBH'} );
   
   return( Dumper($erg) ) if ($dump);
   return($erg);
   
}

#*************************************************************************

sub sleep {

   my $self = shift;
   my $time = shift;

   if (!$time) {
      $time = $self->{'PARENT'}->max_time();
      $self->{'remark'} = "REQUEST";
   } else {
      $self->{'remark'} = "WAIT" . $time;
   }
   $self->sleep($time);
   
}

#*************************************************************************

sub check {

   my $self   = shift;
   my $o1     = shift;
   my $o2     = shift;
   my $o3     = shift;
   if ($o1 == "") { $o1 = $o2; $o2 = $o3; }

   $o1     = "," . $o1 . ",";
   $o2     = "," . $o2 . ",";
   my $not = "";
   if ($o1 eq ",OK," or $o2 !~ /$o1/) {
      $self->{'result'}   = 1009;
      $self->{'remark'}   = "Wrong check. \n$o1 does not match \n$o2.";
      $not = " NOT";
   }
   
   $self->{'log'} .= "\nCheck$not passed: $o1  <=>  $o2\n--------------------------\n\n";
   $self->test_end() if ($not);
   
}


#*******************************************************
#*******************************************************

#  Obsolet:

sub xxreport {

   my $self  = shift;
   my $depth = shift;  #  Tiefe, bis zu der die Test-Items aufgeloest werden
   my $requs = shift;  #  Liste von Requirements, kommasepariert
   
   my $o; my $rel; my $rtable; my @ee;
   my $requtbl = $self->{'PARENT'}->special_func("tblrequ");
   my $store   = $self->{'PARENT'}->tblstore();

   my $cursor = "select r.requ,o.package,o.maxresult,r.relevance," .
                "o.result,o.remark,o.user---RELEVANCE--- from " .
                "$requtbl as r,$store as o---TBL--- where " .
                "o.package like '" . $self->{'package'} . "\%' and " .
                "o.package=r.testitem";

   my $zaehler = 0;

   foreach $o (split(/,/,$requs)) {
      $zaehler = sprintf("%1u",$zaehler+1);
      $rtable  = $rtable . ",$requtbl as r$zaehler";
      $rel     = ",r$zaehler.relevance";
      $cursor  = $cursor . " and o.package=r$zaehler.testitem and " .
                 "r$zaehler.requ='$o' and not r.requ ='$o'";
   }
   $cursor =~ s/---RELEVANCE---/$rel/;
   $cursor =~ s/---TBL---/$rtable/;
# print "CC: $cursor\n"; sleep 5;
   
   my $erg = [];
   my $dbh = $self->{'PARENT'}->dbh();
   $cursor = $dbh->prepare($cursor);
   $cursor->execute();
   while (0 == 0) {
      @ee = $cursor->fetchrow();
      last if (!@ee);
      push(@$erg,[$ee[0]."::".$ee[1],[@ee]]);
   }
   $cursor->finish();
   delete ( $self->{'PARENT'}->{'DBH'} );
   return($erg);
   
}

#*************************************************************************

1;

bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net