Changeset 4854


Ignore:
Timestamp:
May 22, 2017, 1:36:57 PM (2 years ago)
Author:
mabarracus
Message:

Add number of clients into statistics report

Location:
lliurex-analytics-server/trunk/fuentes
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • lliurex-analytics-server/trunk/fuentes/debian/changelog

    r3605 r4854  
     1lliurex-analytics-server (0.1.4) xenial; urgency=medium
     2
     3  * Add number of clients into statistics report
     4
     5 -- M.Angel Juan <m.angel.juan@gmail.com>  Thu, 01 Jun 2017 01:03:28 +0200
     6
    17lliurex-analytics-server (0.1.3) xenial; urgency=medium
    28
  • lliurex-analytics-server/trunk/fuentes/debian/postinst

    r3605 r4854  
    104104    fi
    105105
     106
     107# UPDATE DB FROM OLDER VERSIONS
     108    dumpfile="/usr/lib/analytics-server/analytics-0_1_3-to-0_1_4.sql"
     109
     110    #UPDATE FROM 0.1.3 to 0.1.4
     111
     112    older_version = "$2"
     113    target_update = "0.1.4"
     114
     115    dpkg --compare-versions "$older_version" -lt "$target_version" && need_update_to_0_1_4=yes
     116
     117    if [ "x$need_update_to_0_1_4" = "xyes" ]; then
     118        echo Updating to database version 0.1.4
     119        mysql -u root analytics < $dumpfile
     120    fi
     121
     122
    106123#INITIALIZE DB
    107124
     
    122139            chmod 750 /etc/lliurex-analytics-server/config_db
    123140        fi
    124         $mysqluser < /usr/lib/analytics-server/analytics.sql
     141        $mysqluser < $dumpfile
    125142    else
    126143        if [ "x$create_user" != "xyes" -a "${ask_user}" != "no" ]; then
     
    175192            echo
    176193    fi
     194   
     195
    177196    ;;
    178197
  • lliurex-analytics-server/trunk/fuentes/lliurex-analytics-server/usr/lib/analytics-server/analytics/config.php

    r3350 r4854  
    1818        {
    1919          "name": "desktop",
    20           "like": "NOT LIKE \'%server%\' and NOT LIKE \'%client%\' and sabor LIKE \'%desktop%\'"
     20          "like": "NOT LIKE \'%server%\' and sabor NOT LIKE \'%client%\' and sabor LIKE \'%desktop%\'"
    2121        },
    2222        {
  • lliurex-analytics-server/trunk/fuentes/lliurex-analytics-server/usr/lib/analytics-server/analytics/db.php

    r938 r4854  
    2424                $this->dates=array();
    2525                $this->dates['today']=date("Y-m-d");
     26                $this->dates['tomorrow']=date("Y-m-d",strtotime('tomorrow'));
    2627                $this->dates['first_this_month']=date("Y-m-").'01';
    2728                $this->dates['last_one_month_ago']=date("Y-m-d",strtotime($this->dates['first_this_month']." -1 days"));
     
    8283        }
    8384        function rotate(){
    84             $sql="select max(fecha) from historico;";
    85             $thismonth=intval(date("Ym"));
    86             $lastmonth=$thismonth;
    87             if ($result=$this->dbconn->query($sql)){
    88                 while($row=$result->fetch_row()){
    89                     if(empty($row[0])){
    90                         $sql="insert into historico(app,count,fecha,version,sabor) values (?,?,?,?,?)";
    91                         $query=$this->dbconn->prepare($sql);
    92                         $name='dummy'; $value=0; $today=date("Y-m-d");
    93                         $query->bind_param('sdsss',$name,$value,$today,$name,$name);
    94                         $query->execute();
    95                         $query->close();
    96                     }else{
    97                         $lastmonth=intval(explode('-',$row[0])[0].explode('-',$row[0])[1]);
    98                     }
    99                 }
    100             }
    101             if ($thismonth > $lastmonth){
    102                 $sql="insert into historico(app,count,fecha,version,sabor) (select app,count,DATE(NOW()) as fecha,version,sabor from packages);";
    103                 $this->dbconn->query($sql);
    104                 $sql="truncate packages;";
    105                 $this->dbconn->query($sql);
    106             }
     85                $sql="select max(fecha) from historico;";
     86                $thismonth=intval(date("Ym"));
     87                $lastmonth=$thismonth;
     88                if ($result=$this->dbconn->query($sql)){
     89                        while($row=$result->fetch_row()){
     90                                if(empty($row[0])){
     91                                        $sql="insert into historico(app,count,fecha,version,sabor) values (?,?,?,?,?)";
     92                                        $query=$this->dbconn->prepare($sql);
     93                                        $name='dummy'; $value=0; $today=date("Y-m-d");
     94                                        $query->bind_param('sdsss',$name,$value,$today,$name,$name);
     95                                        $query->execute();
     96                                        $query->close();
     97                                }else{
     98                                        $lastmonth=intval(explode('-',$row[0])[0].explode('-',$row[0])[1]);
     99                                }
     100                        }
     101                }
     102                if ($thismonth > $lastmonth){
     103                        $date_to_history=$this->dates['last_one_month_ago'];
     104                        $sql="insert into historico(app,count,fecha,version,sabor) (select app,count,'$date_to_history' as fecha,version,sabor from packages);";
     105                        $this->dbconn->query($sql);
     106                        $sql="truncate packages;";
     107                        $this->dbconn->query($sql);
     108
     109                        $sql=$this->prepare_rotate_clients();
     110                        foreach ($this->info_distro['distros'] as $distro) {
     111                                $dname=$distro['name'];
     112                                foreach ($distro['sabor'] as $sabor) {
     113                                        $sname=$sabor['name'];
     114                                        foreach (array('insert','delete') as $op) {
     115                                                $this->dbconn->query($sql[$dname][$sname][$op]);
     116                                        }
     117                                }
     118                                foreach (array('insert','delete') as $op) {
     119                                        $this->dbconn->query($sql[$dname]['others'][$op]);
     120                                }
     121                        }
     122                }
     123        }
     124        function prepare_rotate_clients(){
     125                $date_clients='BETWEEN \''.$this->dates['first_one_month_ago'].'\' and \''.$this->dates['first_this_month'].'\'';
     126                foreach ($this->info_distro['distros'] as $distro) {
     127                        $dname=$distro['name'];
     128                        $dlike=$distro['like'];
     129                        $sql_clients[$dname]=array();
     130                        $sql_where_other_clients=array();
     131                        $version_in_history='';
     132                        if ($dname == '15')
     133                                $version_in_history='15.05';
     134                        else
     135                                $version_in_history='16';
     136                        $date_to_history=$this->dates['last_one_month_ago'];
     137
     138                        foreach ($distro['sabor'] as $sabor) {
     139                                $sname=$sabor['name'];
     140                                $slike=$sabor['like'];
     141                                $sql_where_other_clients[]='( sabor '.$slike.')';
     142                                $where_select="lastlogin $date_clients and version $dlike and (sabor $slike)";
     143                                $sql_clients[$dname][$sname]['delete']="delete from clients where $where_select ;";
     144                                $sql_clients[$dname][$sname]['insert']="insert into historico_clients(version,sabor,fecha,nclients) (select '$version_in_history','$sname','$date_to_history',count(id) from clients where $where_select );";
     145                        }
     146                        //others
     147                        $sql_sabor_where_other_clients=implode(' or ',$sql_where_other_clients);
     148                        $where_other_clients="lastlogin $date_clients and version $dlike and not ($sql_sabor_where_other_clients)";
     149                        $sql_clients[$dname]['others']['insert']="insert into historico_clients(version,sabor,fecha,nclients) (select '$version_in_history','others','$date_to_history',count(id) from clients where  $where_other_clients);";
     150                        $sql_clients[$dname]['others']['delete']="delete from clients where $where_other_clients;";
     151                }
     152                return $sql_clients;
    107153        }
    108154        function get_historic_data(){
     155                $this->rotate();
    109156                $this->load_alias();
    110157                //echo $today.' '.$first_this_month.' '.$first_one_month_ago.' '.$last_one_month_ago.' '.$first_two_month_ago.' '.$last_two_month_ago.' EOL';
    111158                $obj=[];
     159                //4 Debugging only
     160                $dbg_obj=[];
    112161                $other_sql=array();
    113162                foreach ($this->info_distro['distros'] as $distro){
    114                     $dname=$distro['name'];
    115                     $dlike=$distro['like'];
    116                     $obj[$dname]=array();
    117                     foreach ($distro['sabor'] as $sabor){
    118                         $sname=$sabor['name'];
    119                         $slike=$sabor['like'];
    120                         $obj[$dname][$sname][]=$this->get_current_chart($dlike,$slike);
    121                         $obj[$dname][$sname][]=$this->get_old_chart($dlike,$slike);
    122                         $obj[$dname][$sname][]=$this->get_very_old_chart($dlike,$slike);
    123                         $other_sql[]=$this->get_current_chart($dlike,$slike,'yes');
    124                         $other_sql[]=$this->get_old_chart($dlike,$slike,'yes');
    125                         $other_sql[]=$this->get_very_old_chart($dlike,$slike,'yes');
    126                     }
    127                 }
    128                 //file_put_contents('/tmp/other_sql',var_export($this->gen_other($other_sql),true));
     163                        $dname=$distro['name'];
     164                        $dlike=$distro['like'];
     165                        $obj[$dname]=array();
     166                        //4 Debugging only
     167                        $dbg_obj[$dname]=array();
     168                        foreach ($distro['sabor'] as $sabor){
     169                                $sname=$sabor['name'];
     170                                $slike=$sabor['like'];
     171                                $obj[$dname][$sname][]=$this->get_current_chart($dlike,$slike);
     172                                $obj[$dname][$sname][]=$this->get_old_chart($dlike,$slike);
     173                                $obj[$dname][$sname][]=$this->get_very_old_chart($dlike,$slike);
     174                                $other_sql[]=$this->get_current_chart($dlike,$slike,'yes');
     175                                $other_sql[]=$this->get_old_chart($dlike,$slike,'yes');
     176                                $other_sql[]=$this->get_very_old_chart($dlike,$slike,'yes');
     177                               
     178                                //4 Debugging only
     179                                $dbg_obj[$dname][$sname][]=$this->get_current_chart($dlike,$slike,'yes');
     180                                $dbg_obj[$dname][$sname][]=$this->get_old_chart($dlike,$slike,'yes');
     181                                $dbg_obj[$dname][$sname][]=$this->get_very_old_chart($dlike,$slike,'yes');
     182                        }
     183                }
     184                //4 Debugging only
     185                file_put_contents('/tmp/graph_sql',str_replace('\\','',var_export($dbg_obj,true)));
     186                file_put_contents('/tmp/other_sql',str_replace('\\','',var_export($this->gen_other($other_sql),true)));
    129187                $sql_other_sentences=$this->gen_other($other_sql);
     188                //4 Debugging only
     189                file_put_contents('/tmp/rotate_sql',str_replace('\\','',var_export($this->prepare_rotate_clients(),true)));
    130190               
    131                 $obj['other']['other'][]=$this->get_result_from_sql($sql_other_sentences['current']);
    132                 $obj['other']['other'][]=$this->get_result_from_sql($sql_other_sentences['old']);
    133                 $obj['other']['other'][]=$this->get_result_from_sql($sql_other_sentences['very_old']);
     191                $obj['other']['other'][]=array($this->get_result_from_sql($sql_other_sentences['current']),$this->get_clients_from_sql($sql_other_sentences['current_clients']));
     192                $obj['other']['other'][]=array($this->get_result_from_sql($sql_other_sentences['old']),$this->get_clients_from_sql($sql_other_sentences['old_clients']));
     193                $obj['other']['other'][]=array($this->get_result_from_sql($sql_other_sentences['very_old']),$this->get_clients_from_sql($sql_other_sentences['very_old_clients']));
    134194                return json_encode($obj);
    135195        }
    136196        function gen_other($other_data){
    137             $sql=array('current' =>'','old'=>'', 'very_old'=>'');
     197            $sql=array('current' =>'','old'=>'', 'very_old'=>'', 'current_clients' => '', 'old_clients' => '', 'very_old_clients' => '');
    138198
    139199            $sql['current']="select app,sum(count) as count from (select app,count from packages where app not in ( select app from packages where (";
     
    160220            }
    161221            $sql['current'].=implode(' or ',$where_current);
    162             $sql['current'].=")) UNION ALL select app,count from historico where app not in ( select app from historico where ";
    163             $sql['current'].=$date_current.  " and (";
     222            $sql['current'].=")) UNION ALL select app,count from historico where app in ( select app from historico where ";
     223            $sql['current'].="fecha ".$date_current.  " and not (";
    164224            $sql['current'].=implode(' or ',$where_current);
    165225            $sql['current'].=")) and app not like 'dummy' ) tabla group by app order by count DESC LIMIT 30";
    166             $sql['old'].=' '.$date_old." and (";
     226            $sql['old'].=' fecha '.$date_old." and not (";
    167227            $sql['old'].=implode(' or ',$where_old);
    168228            $sql['old'].=") group by app order by count DESC LIMIT 30";
    169             $sql['very_old'].=' '.$date_very_old." and (";
     229            $sql['very_old'].=' fecha '.$date_very_old." and not(";
    170230            $sql['very_old'].=implode(' or ',$where_very_old);
    171231            $sql['very_old'].=") group by app order by count DESC LIMIT 30";
    172232           
     233            $sql['current_clients'].="select coalesce(sum(suma_parcial),0) as count from (";
     234            $sql['current_clients'].="select count(id) as suma_parcial from clients where lastlogin $date_current and not ( ".implode(' or ',$where_current);
     235            $sql['current_clients'].=") UNION ALL select nclients as suma_parcial from historico_clients where fecha $date_current and not ( ".implode(' or ',$where_current);
     236            $sql['current_clients'].=") ) tabla";
     237
     238            $sql['old_clients'].="select coalesce(sum(nclients),0) as count from historico_clients where fecha $date_old and not(";
     239            $sql['old_clients'].=implode(' or ',$where_old). ')';
     240
     241            $sql['very_old_clients'].="select coalesce(sum(nclients),0) as count from historico_clients where fecha $date_very_old and not(";
     242            $sql['very_old_clients'].=implode(' or ',$where_very_old). ')';
    173243            return $sql;
    174244        }
    175245        function get_current_chart($version='',$sabor='',$dumpsql='no'){
    176             $date1=$this->dates['first_this_month'];
    177             $date2=$this->dates['today'];
    178             if ($version != '' and $sabor != ''){
    179                 $where="version $version and sabor $sabor";
    180             }else{
    181                 $where='';
    182             }
    183             $sql = "select app,sum(count) as count from (SELECT app,count from packages where $where UNION ALL SELECT app,count from historico where fecha BETWEEN '$date1' and '$date2' and $where) tabla group by app order by count DESC LIMIT 30";
    184             if($dumpsql == "yes")
    185                 return array('type'=>'current','date' => "fecha BETWEEN '$date1' and '$date2'",'where' => '('.$where.')');
    186             return $this->get_result_from_sql($sql);
     246                $date1=$this->dates['first_this_month'];
     247                $date2=$this->dates['tomorrow'];
     248                if ($version != '' and $sabor != ''){
     249                        $where="version $version and sabor $sabor";
     250                }else{
     251                        $where='';
     252                }
     253                $range_dates="BETWEEN '$date1' and '$date2' ";
     254                $sql="select app,sum(count) as count from (SELECT app,count from packages where $where UNION ALL SELECT app,count from historico where fecha $range_dates and $where) tabla group by app order by count DESC LIMIT 30";
     255                $sql_clients = "select count(user) as count from clients where (lastlogin $range_dates) and $where";
     256                if($dumpsql == "yes")
     257                        return array('type'=>'current','date' => "$range_dates",'where' => '('.$where.')','clients'=>"$sql_clients");
     258               
     259                return array($this->get_result_from_sql($sql),$this->get_clients_from_sql($sql_clients));
     260        }
     261        function get_clients_from_sql($sql){
     262                if ($result=$this->dbconn->query($sql)){
     263                        while($row=$result->fetch_array(MYSQLI_ASSOC)){
     264                                if (isset($row['count'])){
     265                                        return array('nclients'=>$row['count']);
     266                                }
     267                        }
     268                        return array('nclients'=>'not available');
     269                }else{
     270                        return array('nclients'=>'Query error');
     271                }
    187272        }
    188273        function get_result_from_sql($sql){
    189                 if ($result=$this->dbconn->query($sql)){
     274                if ($result=$this->dbconn->query($sql)){
    190275                        $obj2=[];
    191276                        $nobj=0;
     
    208293        }
    209294        function get_old_chart($version='',$sabor='',$dumpsql='no'){
    210         $date1=$this->dates['first_one_month_ago'];
    211         $date2=$this->dates['last_one_month_ago'];
    212         if ($version != '' and $sabor != ''){
    213                 $where_a="version $version and sabor $sabor";
    214         }else{
    215                 $where_a='';
    216         }
    217         $sql="SELECT app,count,fecha from historico where fecha BETWEEN '$date1' and '$date2' and $where_a order by count DESC LIMIT 30";
    218         if($dumpsql == "yes")
    219                 return array('type'=>'old','date'=> "fecha BETWEEN '$date1' and '$date2'",'where'=>'('.$where_a.')');
    220         return $this->get_result_from_sql($sql);
     295                $date1=$this->dates['first_one_month_ago'];
     296                $date2=$this->dates['last_one_month_ago'];
     297                if ($version != '' and $sabor != ''){
     298                        $where_a="version $version and sabor $sabor";
     299                }else{
     300                        $where_a='';
     301                }
     302                $range_dates="BETWEEN '$date1' and '$date2'";
     303                $sql="SELECT app,count,fecha from historico where fecha $range_dates and $where_a order by count DESC LIMIT 30";
     304                $sql_clients = "select nclients as count from historico_clients where (fecha $range_dates) and $where_a";
     305                if($dumpsql == "yes")
     306                        return array('type'=>'old','date'=> "$range_dates",'where'=>'('.$where_a.')','clients'=>"$sql_clients");
     307                return array($this->get_result_from_sql($sql),$this->get_clients_from_sql($sql_clients));
    221308        }
    222309        function get_very_old_chart($version='',$sabor='',$dumpsql='no'){
    223         $date1=$this->dates['first_two_month_ago'];
    224         $date2=$this->dates['last_two_month_ago'];
    225         if ($version != '' and $sabor != ''){
    226                 $where_a="version $version and sabor $sabor";
    227         }else{
    228                 $where_a='';
    229         }
    230         $sql="SELECT app,count,fecha from historico where fecha BETWEEN '$date1' and '$date2' and $where_a order by count DESC LIMIT 30";
    231         if($dumpsql == "yes")
    232                 return array('type'=>'very_old','date' => "fecha BETWEEN '$date1' and '$date2'",'where' => '('.$where_a.')');
    233         return $this->get_result_from_sql($sql);
     310                $date1=$this->dates['first_two_month_ago'];
     311                $date2=$this->dates['last_two_month_ago'];
     312                if ($version != '' and $sabor != ''){
     313                        $where_a="version $version and sabor $sabor";
     314                }else{
     315                        $where_a='';
     316                }
     317                $range_dates="BETWEEN '$date1' and '$date2'";
     318                $sql="SELECT app,count,fecha from historico where fecha $range_dates and $where_a order by count DESC LIMIT 30";
     319                $sql_clients = "select nclients as count from historico_clients where (fecha $range_dates) and $where_a";
     320                if($dumpsql == "yes")
     321                        return array('type'=>'very_old','date' => "$range_dates",'where' => '('.$where_a.')','clients'=>"$sql_clients");
     322               
     323                return array($this->get_result_from_sql($sql),$this->get_clients_from_sql($sql_clients));
    234324        }
    235325}
  • lliurex-analytics-server/trunk/fuentes/lliurex-analytics-server/usr/lib/analytics-server/analytics/graph.js

    r2331 r4854  
    4848    datos2.addColumn('string','App');
    4949    datos2.addColumn('number','Count');
    50    
     50
    5151    var datos3= new google.visualization.DataTable();
    5252    datos3.addColumn('string','App');
    5353    datos3.addColumn('number','Count');
    54    
     54
    5555    //Gets Data from DB
    5656    $.getJSON( "./GetStats", function( json ) {
    57 //      j=json;
     57        //  j=json;
    5858        count=0;
    5959        for (key in json)
     
    6262        max_graph=count*3;
    6363        obj=[];
    64         for (distro in json){
    65             titles=['Top apps este mes','Top apps ultimo mes','Top apps penultimo mes'];
    66             for (sabor in json[distro]){
    67                 divname='chart_'+distro+'_'+sabor;
     64        for (distro in json){
     65            for (sabor in json[distro]){
     66                titles=['Top apps este mes','Top apps ultimo mes','Top apps penultimo mes'];
     67                divname='chart_'+distro+'_'+sabor;
    6868                $('#accordion').append('<h3>Distro '+distro+'('+sabor+')</h3>');
    6969                $('#accordion').append('<div class="'+divname+'"></h3>');
    70                 for (i=0; i<3; i++){
    71                     $('div.'+divname).append('<div id="'+divname+i+'"></div>');
     70                for (i=0; i<3; i++){
     71                    $('div.'+divname).append('<div id="'+divname+i+'"></div>');
    7272                    //k=0;
    73                     var datos=new google.visualization.DataTable();
    74                     datos.addColumn('string','App');
    75                     datos.addColumn('number','Count');
    76                     $.each(json[distro][sabor][i],function(key,value){
    77                         //console.log( i+':'+k+'->'+key + " : " + value );
    78                         datos.addRow([key,parseInt(value)]);
    79                         //k++;
    80                     })
    81                     while (datos.Nf.length < 10)
    82                     datos.addRow(['',0])
     73                    var datos=new google.visualization.DataTable();
     74                    datos.addColumn('string','App');
     75                    datos.addColumn('number','Count');
     76                    $.each(json[distro][sabor][i][0],function(key,value){
     77                        //console.log( i+':'+k+'->'+key + " : " + value );
     78                        datos.addRow([key,parseInt(value)]);
     79                        //k++;
     80                    })
     81                    while (datos.Nf.length < 10)
     82                        datos.addRow(['',0])
    8383                    obj.push(datos);
    8484                    //console.log('drawing:'+titles[i]+' into '+divname+i);
     85                    titles[i]=titles[i]+' (Total clients: '+json[distro][sabor][i][1]['nclients']+')'
    8586                    drawChart(obj[obj.length-1],titles[i],divname+i);
    86                 }
    87             }
    88         }
    89         return;
     87                }
     88            }
     89        }
     90        return;
    9091    });
    91 
    9292}
    9393num_ready=0;
Note: See TracChangeset for help on using the changeset viewer.