/racf2base.pl

http://cupsfilter.googlecode.com/ · Perl · 137 lines · 101 code · 13 blank · 23 comment · 11 complexity · 20c874c36fed2e9f530fbf8bf68a408b MD5 · raw file

  1. #!/usr/bin/perl -w
  2. use strict;
  3. use DBI;
  4. my $DEBUG=1;
  5. my $RACF_UTIL_BIN;
  6. my @argv = @ARGV; #keep hands off the argument array
  7. my ($printer_ip,$printer_name)=@argv;
  8. ### ARG CHECKING
  9. # If no arguments, print help
  10. if (!$argv[0] || scalar(@argv)> 2){
  11. print ("Usage racf2base.pl PRINTER_IP PRINTER_NAME\n");
  12. exit 1;
  13. }
  14. if ($DEBUG){
  15. $RACF_UTIL_BIN="racf.pl";
  16. $printer_ip="192.168.11.151";
  17. $printer_name="PDF";
  18. #for(keys(%ENV)) {
  19. # print (STDERR "$_ = $ENV{$_}\t");
  20. #}
  21. }else {
  22. $RACF_UTIL_BIN="/usr/bin/racf.pl";
  23. }
  24. my @result = save_mandat2base($printer_ip,$printer_name);
  25. print "Output $result[1] with code $result[0]";
  26. #TODO ???????? ????? ??????? ?????? ? ???
  27. #TODO need use SQLShell.pm !!!
  28. ##----------------------------------------------------------------------
  29. sub save_mandat2base{
  30. #Args: printer_ip,printer_name
  31. #Returns 1/0 succsesfull or errors
  32. my($printer_ip,$printer_name)=@_;
  33. my $mandat=get_data_from_racf($printer_ip,$printer_name);
  34. if (defined $mandat){
  35. #Find printer in base
  36. my $q="SELECT id FROM printers WHERE ip='$printer_ip' and printer_name='$printer_name'";
  37. my @res=sql_execute($q,\&get_id_firstRowCow);
  38. if ($res[0]){
  39. $q="UPDATE printers SET mandat='$mandat' WHERE ip='$printer_ip' and printer_name='$printer_name'";
  40. @res = sql_execute($q);
  41. return @res;
  42. }else {
  43. #Add printer to base
  44. $q="INSERT INTO printers (ip,printer_name,mandat)VALUES('$printer_ip','$printer_name','$mandat')";
  45. @res = sql_execute($q);
  46. return @res;
  47. }
  48. }
  49. return (0,"unable save printer's mandat into base!");
  50. }
  51. sub get_id_firstRowCow {
  52. #Arg: $Ptr to array of rows
  53. #Returns: array [1/0 succesfull or error,value of First Row Cow]
  54. my ($array_ref) =@_;
  55. if (defined $array_ref->[0][0]){
  56. return (1,$array_ref->[0][0]);
  57. }else{
  58. return (0,"Cell not found in base");
  59. }
  60. }
  61. sub get_data_from_racf{
  62. #Arg: printer_ip,printer_name
  63. #Returns Mandat or UNDEF
  64. my ($printer_ip,$printer_name)=@_;
  65. my $pid = open (F,"$RACF_UTIL_BIN $printer_ip $printer_name|") or die "Can't find and execute $!\n";
  66. my @res = <F>;
  67. close (F);
  68. if (defined $res[1]){
  69. return $res[1];
  70. }
  71. return;
  72. }
  73. sub sql_execute{
  74. #Arg: $query_str,Ptr to function
  75. #Returns: array [1/0 succesfull or error,description]
  76. my ($query,$func)=@_;
  77. my @result;
  78. my $dbname = "CupsLog";# ??? ???? ??????
  79. my $username = "postgres";# ??? ????????????
  80. my $password = "pg";# ??????
  81. my $dbhost = "localhost";# ??? ??? IP ????? ???????
  82. my $dbport = "5432";# ????
  83. my $dboptions = "-e";# ?????
  84. my $dbtty = "ansi";# ????????
  85. my $sth;
  86. my $rv;
  87. my $error_str;
  88. my $dbh = DBI->connect("dbi:PgPP:dbname=$dbname;host=$dbhost;port=$dbport;options=$dboptions;tty=$dbtty","$username","$password",{PrintError => 0, AutoCommit => 0 });
  89. if ($DEBUG){
  90. my $trace_file="dbh.log";
  91. $dbh->trace(2,$trace_file);
  92. }
  93. if ($DBI::errstr) {
  94. $error_str="CUPS_FILTER: Erorr $DBI::errstr\n";
  95. print STDERR $error_str;
  96. return (0,$error_str);
  97. }else{
  98. #TODO Need refactoring !!!
  99. $dbh->begin_work();
  100. unless (defined $func){
  101. #INSERT, UPDATE or DELETE
  102. $rv=$dbh->do($query);
  103. }else {
  104. #SELECT
  105. $sth = $dbh->prepare($query);
  106. $rv = $sth->execute();
  107. }
  108. $dbh->commit();
  109. if (!defined $rv) {
  110. $error_str="CUPS_FILTER: ??? ?????????? ??????? $query\n ????????? ??????:".$dbh->errstr."\n";
  111. #print STDERR $error_str;
  112. return (0,$error_str);
  113. }else{
  114. if (defined $func){
  115. @result=$func->($sth->fetchall_arrayref());
  116. $sth->finish();
  117. }else{
  118. push @result,1,"Succsefull execute";
  119. }
  120. }
  121. }
  122. $dbh->disconnect();
  123. return @result;
  124. }