Code Duplication    Length = 49-49 lines in 2 locations

src/AppBundle/Controller/MetaController.php 2 locations

@@ 82-130 (lines=49) @@
79
     * @param  string     $end End date.
80
     * @return array
81
     */
82
    private function getToolUsageStats(Connection $client, $table, $start, $end)
83
    {
84
        $query = $client->prepare("SELECT * FROM $table
85
                                   WHERE date >= :start AND date <= :end");
86
        $query->bindParam('start', $start);
87
        $query->bindParam('end', $end);
88
        $query->execute();
89
90
        $data = $query->fetchAll();
91
92
        // Create array of totals, along with formatted timeline data as needed by Chart.js
93
        $totals = [];
94
        $dateLabels = [];
95
        $timeline = [];
96
        $startObj = new DateTime($start);
97
        $endObj = new DateTime($end);
98
        $numDays = (int) $endObj->diff($startObj)->format("%a");
99
        $grandSum = 0;
100
101
        // Generate array of date labels
102
        for ($dateObj = new DateTime($start); $dateObj <= $endObj; $dateObj->modify('+1 day')) {
103
            $dateLabels[] = $dateObj->format('Y-m-d');
104
        }
105
106
        foreach ($data as $entry) {
107
            if (!isset($totals[$entry['tool']])) {
108
                $totals[$entry['tool']] = (int) $entry['count'];
109
110
                // Create arrays for each tool, filled with zeros for each date in the timeline
111
                $timeline[$entry['tool']] = array_fill(0, $numDays, 0);
112
            } else {
113
                $totals[$entry['tool']] += (int) $entry['count'];
114
            }
115
116
            $date = new DateTime($entry['date']);
117
            $dateIndex = (int) $date->diff($startObj)->format("%a");
118
            $timeline[$entry['tool']][$dateIndex] = (int) $entry['count'];
119
120
            $grandSum += $entry['count'];
121
        }
122
        arsort($totals);
123
124
        return [
125
            'totals' => $totals,
126
            'grandSum' => $grandSum,
127
            'dateLabels' => $dateLabels,
128
            'timeline' => $timeline,
129
        ];
130
    }
131
132
    /**
133
     * Get usage statistics of the API.
@@ 139-187 (lines=49) @@
136
     * @param  string     $end End date.
137
     * @return array
138
     */
139
    private function getApiUsageStats(Connection $client, $start, $end)
140
    {
141
        $query = $client->prepare("SELECT * FROM usage_api_timeline
142
                                   WHERE date >= :start AND date <= :end");
143
        $query->bindParam('start', $start);
144
        $query->bindParam('end', $end);
145
        $query->execute();
146
147
        $data = $query->fetchAll();
148
149
        // Create array of totals, along with formatted timeline data as needed by Chart.js
150
        $totals = [];
151
        $dateLabels = [];
152
        $timeline = [];
153
        $startObj = new DateTime($start);
154
        $endObj = new DateTime($end);
155
        $numDays = (int) $endObj->diff($startObj)->format("%a");
156
        $grandSum = 0;
157
158
        // Generate array of date labels
159
        for ($dateObj = new DateTime($start); $dateObj <= $endObj; $dateObj->modify('+1 day')) {
160
            $dateLabels[] = $dateObj->format('Y-m-d');
161
        }
162
163
        foreach ($data as $entry) {
164
            if (!isset($totals[$entry['endpoint']])) {
165
                $totals[$entry['endpoint']] = (int) $entry['count'];
166
167
                // Create arrays for each endpoint, filled with zeros for each date in the timeline
168
                $timeline[$entry['endpoint']] = array_fill(0, $numDays, 0);
169
            } else {
170
                $totals[$entry['endpoint']] += (int) $entry['count'];
171
            }
172
173
            $date = new DateTime($entry['date']);
174
            $dateIndex = (int) $date->diff($startObj)->format("%a");
175
            $timeline[$entry['endpoint']][$dateIndex] = (int) $entry['count'];
176
177
            $grandSum += $entry['count'];
178
        }
179
        arsort($totals);
180
181
        return [
182
            'totals' => $totals,
183
            'grandSum' => $grandSum,
184
            'dateLabels' => $dateLabels,
185
            'timeline' => $timeline,
186
        ];
187
    }
188
189
    /**
190
     * Record usage of a particular XTools tool. This is called automatically