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