Code Duplication    Length = 49-49 lines in 2 locations

src/AppBundle/Controller/MetaController.php 2 locations

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