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