server/src/app/Http/Controllers/Api/DateStatsController.php
author ymh <ymh.work@gmail.com>
Tue, 15 Nov 2016 17:42:57 +0100
changeset 424 feb0d3e0fef9
parent 407 2dba812c7ef2
child 425 f99435a7006e
permissions -rw-r--r--
add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
307
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
namespace CorpusParole\Http\Controllers\Api;
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
use Illuminate\Http\Request;
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
use Log;
375
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
     7
use Es;
307
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
use CorpusParole\Http\Controllers\Controller;
378
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 377
diff changeset
    10
use CorpusParole\Libraries\Filters\CorpusFilterManager;
307
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
class DateStatsController extends Controller
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
{
424
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    15
    private function getStatQuery($query) {
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    16
        return [
406
cf0f23803a53 upgrade elasticsearch to 5.0, upgrade ember
ymh <ymh.work@gmail.com>
parents: 378
diff changeset
    17
            'index' => config('elasticsearch.index'),
375
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    18
            'body' => [
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    19
                "size" => 0,
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    20
                "query" => $query,
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    21
                "aggs" => [
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    22
                    "datestats" => [
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    23
                        "nested"=> [
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    24
                            "path" => "creation_years"
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    25
                        ],
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    26
                        "aggs" => [
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    27
                            "years" => [
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    28
                                "terms"=> [
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    29
                                    "field" => "creation_years.year",
407
2dba812c7ef2 add a way to build rpm for puppet files, correct elasticsearch provisioning, correct error on elasticsearch queries + tests
ymh <ymh.work@gmail.com>
parents: 406
diff changeset
    30
                                    "size" => 2147483647,
375
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    31
                                    "order" => [
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    32
                                        "_term" => "asc"
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    33
                                    ]
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    34
                                ],
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    35
                                "aggs" => [
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    36
                                    "year_count" => [
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    37
                                        "sum" => [
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    38
                                            "field" => "creation_years.weight"
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    39
                                        ]
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    40
                                    ]
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    41
                                ]
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    42
                            ]
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    43
                        ]
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    44
                    ]
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    45
                ]
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    46
            ]
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
    47
        ];
424
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    48
    }
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    49
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    50
    private function getMinMaxQuery($query) {
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    51
        return [
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    52
            'index' => config('elasticsearch.index'),
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    53
            'body' => [
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    54
                "size" => 0,
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    55
                "query" => $query,
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    56
                "aggs" => [
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    57
                    "datestats" => [
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    58
                        "nested"=> [
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    59
                            "path" => "creation_years"
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    60
                        ],
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    61
                        "aggs" => [
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    62
                            "minyear" => [
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    63
                                "min" => [ "field"=> "creation_years.year" ]
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    64
                            ],
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    65
                            "maxyear" => [
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    66
                                "max" => [ "field"=> "creation_years.year" ]
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    67
                            ]
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    68
                        ]
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    69
                    ]
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    70
                ]
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    71
            ]
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    72
        ];
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    73
    }
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    74
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    75
    private function getDocQuery(Request $request) {
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    76
        $filterManager = new CorpusFilterManager();
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    77
        $filters = $filterManager->prepareFilters($request);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    78
        unset($filters['dates']);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    79
        $qFilterParts = $filterManager->buildESFilters($filters);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    80
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    81
        return $filterManager->buildQuery($qFilterParts);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    82
    }
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    83
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    84
    /**
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    85
     * Display the min max date stats
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    86
     */
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    87
    public function minmax(Request $request) {
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    88
        $query = $this->getDocQuery($request);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    89
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    90
        $esQuery = $this->getMinMaxQuery($query);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    91
        $esRes = Es::search($esQuery);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    92
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    93
        $datestats = [];
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    94
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    95
        $max = intval($esRes['aggregations']['datestats']['maxyear']['value']);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    96
        $min = intval($esRes['aggregations']['datestats']['maxyear']['value']);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    97
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    98
        return response()->json(['dateminmax' => [ $min, $max ] ]);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
    99
    }
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   100
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   101
    /**
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   102
     * Display the dates stats
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   103
     *
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   104
     * @return \Illuminate\Http\Response
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   105
     */
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   106
    public function index(Request $request)
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   107
    {
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   108
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   109
        $query = $this->getDocQuery($request);
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   110
feb0d3e0fef9 add dynamic date range calculation for dates, and add color gradient component, add color gradient for language and chrono
ymh <ymh.work@gmail.com>
parents: 407
diff changeset
   111
        $esQuery = $this->getStatQuery($query);
375
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
   112
        $esRes = Es::search($esQuery);
307
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
375
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
   114
        $datestats = [];
307
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
375
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
   116
        foreach($esRes['aggregations']['datestats']['years']['buckets'] as $bucket) {
378
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 377
diff changeset
   117
            $c = round($bucket['year_count']['value']);
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 377
diff changeset
   118
            if($c > 0) {
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 377
diff changeset
   119
                $datestats[(string)($bucket['key'])] = $c;
5b47eab083f3 implement filters on stats controller, put all filter logic in CorpusFilterManager
ymh <ymh.work@gmail.com>
parents: 377
diff changeset
   120
            }
307
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
        }
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
375
145561ff51ff change datestats to use elasticsearch
ymh <ymh.work@gmail.com>
parents: 307
diff changeset
   123
        return response()->json(['datestats' => $datestats ]);
307
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    }
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
07b44a378ad8 Add the datestats api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
}