source: lliurex-analytics-server/trunk/fuentes/lliurex-analytics-server/usr/lib/analytics-server/analytics/functions.php

Last change on this file was 7869, checked in by mabarracus, 15 months ago

New render method with templates
Fix bug show graphs on last of month
Improved whitelist config visualization
Styled aperance with menu
Initial page is displayed by default

File size: 17.0 KB
Line 
1<?php 
2function call_bd(){
3        return function($request,$response,$service){
4                $data=json_decode($request->stats,true);
5               
6                $db = new DB;
7                $db->connect();
8                try{
9                        if (isset($data['vers'])){
10                            $version=trim($data['vers']);
11                        }else{
12                            return 'NOK';
13                        }
14                        if (isset($data['sab'])){
15                            $sabor=trim($data['sab']);
16                        }else{
17                            return 'NOK';
18                        }
19                        if (isset($data['uid'])){
20                            $uid=trim($data['uid']);
21                        }else{
22                            return 'NOK';
23                        }
24                        if ($version == '' or $sabor == '' or $uid == ''){
25                            return 'NOK';
26                        }
27                        if (isset($data['specs'])){
28                            $specs=$data['specs'];
29                        }else{
30                            $specs=false;
31                        }
32                        if (isset($data['date'])){
33                            $db->send_data($uid,$version,$sabor,json_decode($data['stats'],true),$specs,$data['date']);
34                        }else{
35                            $db->send_data($uid,$version,$sabor,json_decode($data['stats'],true),$specs);
36                        }
37                }catch (Exception $e){
38                        //error_log($e);
39                        $db->disconnect();
40                        return 'NOK';
41                }
42                $db->disconnect();
43                return 'OK';
44        };
45}
46function modify_whitelist(){
47    return function($request,$response,$service){
48        $data=$request->status;
49        if ($data){
50            $data = json_decode($data,true);
51        }
52        $sql_pre = 'truncate PackagesWhitelist;';
53        $sql = 'insert into `PackagesWhitelist` (`name`,`status`) values ';
54        $str = '';
55        foreach ($data['out'] as $item){
56            $str .= "('$item',0),";
57        }
58        foreach ($data['into'] as $item){
59            $str .= "('$item',1),";
60        }
61//        foreach ($data['unk'] as $item){
62//            $str .= "('$item',NULL),";
63//        }
64        $l=strlen($str);
65        if ($l < 1)
66            return;
67        $str[$l-1]=' ';
68        $sql .= $str;
69        $sql .= 'on duplicate key update status=VALUES(status);';
70        $db = new DB;
71        $db->connect();
72        try{
73            $db->dbconn->query($sql_pre);
74            try{
75                $db->dbconn->query($sql);
76            }catch(Exception $e){
77                return 'NOK';
78            }
79        }catch(Exception $e){
80            return 'NOK';
81        }
82        $db->disconnect();
83        $cache = new Cache();
84        $cache->invalidate('whitelist');
85        return 'OK';
86    };
87}
88
89function get_whitelist_data(){
90        return function($request,$response,$service){
91                $db = new DB;
92                $db->connect();
93                $res=$db->get_whitelist_form();
94                $db->disconnect();
95                return json_encode($res);
96        };
97}
98function process_window_params($req){
99    $p1=$req->param('init');
100    $p2=$req->param('window');
101    if ($p1 == NULL or $p2 == NULL ){
102        return NULL;
103    }
104    if (! (is_numeric($p1) and is_numeric($p2))){
105        return NULL;
106    }
107    $valid = false;
108    for ($i=0;$i<12;$i++){
109        $d = date('Yn',strtotime(date('Y-m-01 ').'-'.$i.' month'));
110        if ($d == $p1){
111            $p2=intval($p2);
112            if ($p2 <= $i+1){
113                $valid = array('year'=>intval(substr($p1,0,4)),'month'=>intval(substr($p1,4,strlen($p1)-4)),'window'=>intval($p2));
114                break;
115            }
116        }
117    }
118    return $valid;
119}
120
121function call_get_stats(){
122        return function($request,$response,$service){
123                $param = process_window_params($request);
124                $db = new DB;
125                $db->connect();
126                echo $db->get_historic_data('',$param);
127                $db->disconnect();
128        };
129}
130
131function call_get_lliurex_stats(){
132        return function($request,$response,$service){
133                $param = process_window_params($request);
134                $db = new DB;
135                $db->connect();
136                echo $db->get_historic_data('whitelist',$param);
137                $db->disconnect();
138        };
139}
140
141function call_get_system_stats(){
142    return function($request,$response,$service){
143        $db = new DB;
144        $db->connect();
145        echo $db->get_system_data();
146        $db->disconnect();
147    };
148}
149
150function call_get_extended_stats(){
151        return function($request,$response,$service){
152                $app=$request->param('app');
153                $db = new DB;
154                $db->connect();
155                echo $db->get_extended_data($app);
156                $db->disconnect();
157        };
158}
159
160function call_getlist(){
161        return function($request,$response,$service){
162                $list = array();
163                $the_file = 'blacklist.txt';
164                if ( !is_file($the_file)) {
165                    return json_encode($list);
166                }
167                try{
168                    $content = file_get_contents('blacklist.txt');
169                    foreach (explode("\n",$content) as $item){
170                        $item = trim($item);
171                        if ( $item != '') {
172                            $list[] = $item;
173                        }
174                    }
175                }catch(Exception $e){}
176                return json_encode($list);
177        };
178}
179require_once 'pages.php';
180
181function call_show_stats(){
182    return pages('show_stats');
183}
184function call_show_lliurex_stats(){
185    return pages('show_lliurex_stats');
186}
187function call_show_system_stats(){
188    return pages('show_system_stats');
189}
190function call_show_extended_stats(){
191    return pages('show_extended_stats');
192}
193function call_configure_whitelist(){
194    return pages('show_whitelist');
195}
196/*
197function call_show_stats(){
198
199return function($request,$response,$service){
200
201echo '<html>
202  <head>
203    <!--Load the AJAX API-->
204    <!--<script type="text/javascript" src="https://www.google.com/jsapi"></script>-->
205    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
206    <script type="text/javascript" src="jquery.min.js"></script>
207    <script type="text/javascript" src="graph_min.js"></script>
208
209    <script type="text/javascript">
210        google.charts.load("current", {packages: ["corechart"],"language":"es"});
211        google.charts.setOnLoadCallback(function(){doChart("")});
212    </script>
213    <script type="text/javascript">
214        function send_query_month(){
215            var init_selected=$("#init_date_search>option:selected").val();
216            var window_selected=$("#date_window_search>option:selected").val();
217            window.location.href=window.location.pathname+"?init="+init_selected+"&window="+window_selected;
218        }
219        function reload_without_params(){
220            window.location.href=window.location.pathname;
221        }
222        function make_month_window(){
223            $("#date_window_search").empty()
224            var ysel=Number($("#init_date_search>option:selected").val().substr(0,4))
225            var msel=Number($("#init_date_search>option:selected").val().substr(4))
226            var date=new Date()
227            var y = date.getFullYear()
228            var m = date.getMonth()+2
229            var num = 0
230            if (ysel == y){
231                num = Math.abs(m - msel)
232            }else{
233                num = 12 - msel + m
234            }
235            for (var i=1;i<=num;i++){
236                $("#date_window_search").append("<option value=\""+i+"\" name=\""+i+"\">"+i+"</option>");
237            }
238            $("#query_box>button").unbind("click");
239            $("#query_box>button").text("Show");
240            $("#query_box>button")[0].disabled = false;
241            $("#query_box>button").on("click",send_query_month);
242        }
243        function make_query_box(){
244            var monthNames = ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic" ];
245            var date = new Date();
246            var m = date.getMonth();
247            var y = date.getFullYear();
248            $("#query_box").append("<span>Custom date:");
249            $("#query_box").append("Init date<span><select id=\"init_date_search\" name=\"init_date\"><option value=\"\" name=\"\"></option></select></span>");
250            $("#query_box").append("Month window<span><select id=\"date_window_search\" name=\"date_window\"></select></span>");
251            for (var i=0; i<12; i++){
252                var date2 = new Date(y,m,1)
253                var strval=date2.getFullYear().toString()+(date2.getMonth()+1).toString();
254                var showval=monthNames[m]+"/"+date2.getFullYear().toString()
255                $("#init_date_search").append("<option value=\""+strval+"\" name=\""+strval+"\">"+showval+"</option>");
256                m--
257                if (m < 0){
258                    m=11
259                    y--
260                }
261            }
262            $("#init_date_search").on("change",make_month_window);
263            if (window.location.search != ""){
264                $("#query_box").append("<button>Back to normal mode</button>");
265                $("#query_box>button").on("click",reload_without_params);
266            }else{
267                $("#query_box").append("<button disabled>Show range</button>");
268            }
269        }
270        $(document).ready(make_query_box);
271    </script>
272    <link href="ui/jquery-ui.css" rel="stylesheet">
273    <link href="graph.css" rel="stylesheet">
274    <link rel="shortcut icon" href="favicon.ico">
275    <script type="text/javascript" src="ui/jquery-ui.js"></script>
276  </head>
277  <body>
278  <div id="header"><div id="query_box"></div><span class="title">Lliurex-Analytics <a class="go_to_other" href="ShowExtendedStats">[Extended stats]</a></span><div id="stats_box"></div></div>
279  <div id="accordion"></div>
280  </body>
281</html>
282';
283
284};
285}
286
287
288function call_show_lliurex_stats(){
289
290return function($request,$response,$service){
291
292echo '<html>
293  <head>
294    <!--Load the AJAX API-->
295    <!--<script type="text/javascript" src="https://www.google.com/jsapi"></script>-->
296    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
297    <script type="text/javascript" src="jquery.min.js"></script>
298    <script type="text/javascript" src="graph_min.js"></script>
299    <script type="text/javascript">
300        google.charts.load("current", {packages: ["corechart"],"language":"es"});
301        google.charts.setOnLoadCallback(function(){doChart("whitelist")});
302    </script>
303    <script type="text/javascript">
304        function send_query_month(){
305            var init_selected=$("#init_date_search>option:selected").val();
306            var window_selected=$("#date_window_search>option:selected").val();
307            window.location.href=window.location.pathname+"?init="+init_selected+"&window="+window_selected;
308        }
309        function reload_without_params(){
310            window.location.href=window.location.pathname;
311        }
312        function make_month_window(){
313            $("#date_window_search").empty()
314            var ysel=Number($("#init_date_search>option:selected").val().substr(0,4))
315            var msel=Number($("#init_date_search>option:selected").val().substr(4))
316            var date=new Date()
317            var y = date.getFullYear()
318            var m = date.getMonth()+2
319            var num = 0
320            if (ysel == y){
321                num = Math.abs(m - msel)
322            }else{
323                num = 12 - msel + m
324            }
325            for (var i=1;i<=num;i++){
326                $("#date_window_search").append("<option value=\""+i+"\" name=\""+i+"\">"+i+"</option>");
327            }
328            $("#query_box>button").unbind("click");
329            $("#query_box>button").text("Show");
330            $("#query_box>button")[0].disabled = false;
331            $("#query_box>button").on("click",send_query_month);
332        }
333        function make_query_box(){
334            var monthNames = ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic" ];
335            var date = new Date();
336            var m = date.getMonth();
337            var y = date.getFullYear();
338            $("#query_box").append("<span>Custom date:");
339            $("#query_box").append("Init date<span><select id=\"init_date_search\" name=\"init_date\"><option value=\"\" name=\"\"></option></select></span>");
340            $("#query_box").append("Month window<span><select id=\"date_window_search\" name=\"date_window\"></select></span>");
341            for (var i=0; i<12; i++){
342                var date2 = new Date(y,m,1)
343                var strval=date2.getFullYear().toString()+(date2.getMonth()+1).toString();
344                var showval=monthNames[m]+"/"+date2.getFullYear().toString()
345                $("#init_date_search").append("<option value=\""+strval+"\" name=\""+strval+"\">"+showval+"</option>");
346                m--
347                if (m < 0){
348                    m=11
349                    y--
350                }
351            }
352            $("#init_date_search").on("change",make_month_window);
353            if (window.location.search != ""){
354                $("#query_box").append("<button>Back to normal mode</button>");
355                $("#query_box>button").on("click",reload_without_params);
356            }else{
357                $("#query_box").append("<button disabled>Show range</button>");
358            }
359        }
360        $(document).ready(make_query_box);
361    </script>
362    <link href="ui/jquery-ui.css" rel="stylesheet">
363    <link href="graph.css" rel="stylesheet">
364    <script type="text/javascript" src="ui/jquery-ui.js"></script>
365  </head>
366  <body>
367  <div id="header"><div id="query_box"></div><span class="title">Lliurex-Analytics <a class="go_to_other" href="ShowExtendedStats">[Extended stats]</a></span><div id="stats_box"></div></div>
368  <div id="accordion"></div>
369  </body>
370</html>
371';
372
373};
374}
375
376function call_show_system_stats(){
377
378return function($request,$response,$service){
379
380echo '<html>
381  <head>
382    <!--Load the AJAX API-->
383    <!--<script type="text/javascript" src="https://www.google.com/jsapi"></script>-->
384    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
385    <script type="text/javascript" src="jquery.min.js"></script>
386    <script type="text/javascript" src="sysstats_min.js"></script>
387    <script type="text/javascript">
388        google.charts.load("current", {packages: ["corechart"],"language":"es"});
389        google.charts.setOnLoadCallback(initialize);
390    </script>
391    <link href="ui/jquery-ui.css" rel="stylesheet">
392    <link href="graph.css" rel="stylesheet">
393    <link rel="shortcut icon" href="favicon.ico">
394    <script type="text/javascript" src="ui/jquery-ui.js"></script>
395  </head>
396  <body>
397  <div id="chart_div"></div>
398  </body>
399</html>
400';
401
402};
403
404}
405
406
407function call_show_extended_stats(){
408
409return function($request,$response,$service){
410
411echo '<html>
412  <head>
413    <!--Load the AJAX API-->
414    <!--<script type="text/javascript" src="https://www.google.com/jsapi"></script>-->
415    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
416    <script type="text/javascript" src="jquery.min.js"></script>
417    <script type="text/javascript" src="graph_min.js"></script>
418
419    <script type="text/javascript">
420        google.charts.load("current", {packages: ["corechart"],"language":"es"});
421        google.charts.setOnLoadCallback(doExtendedChart);
422    </script>
423    <link href="ui/jquery-ui.css" rel="stylesheet">
424    <link href="graph.css" rel="stylesheet">
425    <link rel="shortcut icon" href="favicon.ico">
426    <script type="text/javascript" src="ui/jquery-ui.js"></script>
427    <script type="text/javascript">$(document).ready(function(){function send_query(){window.location.href=window.location.pathname+"?app="+$("#query_box>input").val()};$("#query_box>input").on("keyup",function(e){if (e.keyCode == 13){send_query()}});$("#query_box>button").click(send_query)});</script>
428  </head>
429  <body>
430  <div id="header"><div id="query_box"><span>Search by app:</span><input type="search" name="app_search"></input><button>Search</button></div><span class="title">Lliurex-Analytics <a class="go_to_other" href="ShowStats">[Simple stats]</a></span><div id="stats_box"></div></div>
431  <div id="accordion"></div>
432  </body>
433</html>
434';
435
436};
437
438}
439
440function call_configure_whitelist(){
441
442return function($request,$response,$service){
443
444echo "<html>
445  <head>
446    <!--Load the AJAX API-->
447    <script type='text/javascript' src='jquery.min.js'></script>
448    <link href='whitelist.css' rel='stylesheet'>
449    <link rel='shortcut icon' href='favicon.ico'>
450    <script type='text/javascript' src='whitelist_min.js'></script>
451    <script type='text/javascript'>$(document).ready(start)</script>
452  </head>
453  <body>
454    <div id='header'><span class='title'>Lliurex-Analytics whitelist configurator</span></div>
455    <div id='configure_whitelist'>
456        <div id='nonwhitelist'>
457            <span>Not in whitelist</span>
458            <div id='filternot' class='filter'>Filter:<textarea rows='1'></textarea></div>
459            <select name='denied' multiple>
460            </select>
461        </div>
462        <div id='btn_left'>
463            <button id='btnleft_to_left'>&lt;&lt;&lt;</button>
464            <button id='btnleft_to_center'>&gt;&gt;&gt;</button>
465        </div>
466        <div id='unknown_state_whitelist'>
467            <span>New elements</span>
468            <div id='filterunk' class='filter'>Filter:<textarea rows='1'></textarea></div>
469            <select name='nonselected' multiple>
470            </select>
471        </div>
472        <div id='btn_right'>
473            <button id='btnright_to_right'>&gt;&gt;&gt;</button>
474            <button id='btnright_to_center'>&lt;&lt;&lt;</button>
475        </div>
476        <div id='inwhitelist'>
477            <span>In whitelist</span>
478            <div id='filterin' class='filter'>Filter:<textarea rows='1'></textarea></div>
479            <select name='accepted' multiple>
480            </select>
481        </div>
482    </div>
483    <div id='send'>
484        <button id='send_btn'>Apply</button>
485    </div>
486  </body>
487</html>
488";
489
490};
491
492}
493*/
494
495?>
Note: See TracBrowser for help on using the repository browser.