boot manager log upload revival (formerly known as alpina-logs)
[nodeconfig.git] / boot / upload-bmlog.php
1 <?php
2
3   // Thierry Parmentelat -- INRIA
4   // first draft for a revival of former (3.x?) alpina-logs in 5.0
5
6   // this needs be created with proper permissions at package install time
7 $logdir="/var/log/bm";
8 $limit_bytes=16*1024;
9
10 function mkdir_if_needed ($dirname) {
11   if (is_dir ($dirname))
12     return;
13   mkdir ($dirname) or die ("Cannot create dir " . $dirname);
14 }
15   
16 // Get admin API handle
17 require_once 'plc_api.php';
18 global $adm;
19
20 // find the node that these longs should belong to by looking for a node_id
21 // with an ip the same as the http requestor ip
22 $ip = $_SERVER['REMOTE_ADDR'];
23
24 $hostname="unknown";
25 // locate hostname from DB based on this IP
26 $interfaces=$adm->GetInterfaces(array("ip"=>$ip));
27 if (! empty($interfaces) ) {
28   $interface=$interfaces[0];
29   $node_id=$interface['node_id'];
30   $nodes=$adm->GetNodes($node_id,array("hostname"));
31   if (!empty($nodes)) {
32     $hostname=$nodes[0]['hostname'];
33   }
34  }
35
36 // store the actual data in /var/log/bm/raw/2008-11-31-20-02-onelab01.inria.fr-138.96.250.141.txt
37
38 $rawdir=$logdir . "/raw";
39 $date=strftime("%Y-%m-%d-%H-%M");
40 $log_name=$rawdir . "/" . $date . "-" . $hostname . "-" . $ip . ".txt";
41 $month=strftime("%Y-%m");
42 $time=strftime("%d-%H-%M");
43
44 mkdir_if_needed ($rawdir);
45
46 ////////////////////////////////////////
47
48 $log=fopen($log_name,"w") or die ("Cannot open logfile "+$log_name);
49
50 $uploaded_name= $_FILES['log']['tmp_name'];
51 $uploaded_size=filesize($uploaded_name);
52
53 fprintf ($log, "BootManager log created on: %s-%s\n",$month,$time);
54 fprintf( $log, "From IP: %s\n",$ip);
55 fprintf( $log, "hostname: %s\n",$hostname);
56 fprintf ( $log, "uploaded file: %s (%d bytes)\n",$uploaded_name,$uploaded_size);
57 if ( $uploaded_size >= $limit_bytes) {
58   fprintf ( $log, "contents truncated to %d bytes\n",$limit_bytes);
59   $truncated=TRUE;
60   $uploaded_size=$limit_bytes;
61  }
62
63 fprintf( $log, "-----------------\n\n" );
64 $uploaded = fopen($uploaded_name,'r');
65 $contents = fread($uploaded, $uploaded_size);
66 fclose($uploaded);
67 fwrite($log,$contents);
68 if ($truncated)
69   fwrite ($log, " ..<truncated>..\n");
70 fclose($log);
71
72 ////////////////////////////////////////
73
74 // create symlinks for easy browsing
75
76 // /var/log/bm/per-month/2008-11/onelab1.inria.fr/31-20-02.bmlog
77 $linkdir=$logdir;
78 $linkdir=$linkdir . "/per-month";
79 mkdir_if_needed ($linkdir);
80 $linkdir=$linkdir . "/" . $month;
81 mkdir_if_needed ($linkdir);
82 $linkdir = $linkdir . "/" . $hostname;
83 mkdir_if_needed ($linkdir);
84 $link = $linkdir . "/" . $time ;
85 symlink ($log_name,$link);
86
87 # /var/log/bm/per-hostname/onelab1.inria.fr/2008-11-31-20-02.bmlog
88 $linkdir=$logdir;
89 $linkdir=$linkdir . "/per-hostname";
90 mkdir_if_needed ($linkdir);
91 $linkdir=$linkdir . "/" . $hostname;
92 mkdir_if_needed ($linkdir);
93 $link = $linkdir . "/" . $month . "-" . $time ;
94 symlink ($log_name,$link);
95
96 # /var/log/bm/per-ip/138.96.250.141/2008-11-31-20-02.bmlog
97 $linkdir=$logdir;
98 $linkdir=$linkdir . "/per-ip";
99 mkdir_if_needed ($linkdir);
100 $linkdir=$linkdir . "/" . $ip;
101 mkdir_if_needed ($linkdir);
102 $link = $linkdir . "/" . $month . "-" . $time ;
103 symlink ($log_name,$link);
104
105 ?>