/dev/adei-asec

To get this branch, use:
bzr branch http://darksoft.org/webbzr/dev/adei-asec

« back to all changes in this revision

Viewing changes to setups/katrin/classes/kdbsql.php

  • Committer: Suren A. Chilingaryan
  • Date: 2012-02-07 22:44:15 UTC
  • Revision ID: csa@dside.dyndns.org-20120207224415-sy360wa1ammhd1ph
Use localization subsystem, updated Katrin configs

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
// $Id$
3
 
// Author: Sebastian Voecking <sebastian.voecking@uni-muenster.de>
4
 
 
5
 
class KDBSql
6
 
{
7
 
    private $fMysql = NULL;
8
 
    private $fHostname;
9
 
    private $fDatabase;
10
 
    private $fUser;
11
 
    private $fPassword;
12
 
    
13
 
    function __construct($hostname, $database, $user, $password)
14
 
    {
15
 
        $this->fHostname = $hostname;
16
 
        $this->fDatabase = $database;
17
 
        $this->fUser = $user;
18
 
        $this->fPassword = $password;
19
 
    }
20
 
 
21
 
    function ListRuns(array $filter, &$total)
22
 
    {
23
 
        $this->Connect();
24
 
 
25
 
        $where = $this->BuildFilter($filter);
26
 
 
27
 
        if (array_key_exists('limit', $filter)) {
28
 
            if (array_key_exists('offset', $filter)) {
29
 
                $limit = "{$filter['offset']}, {$filter['limit']}";
30
 
            }
31
 
            else {
32
 
                $limit = $filter['limit'];
33
 
            }
34
 
        }
35
 
 
36
 
        $query = "SELECT SQL_CALC_FOUND_ROWS run.system AS system, ";
37
 
        $query .= "run.number AS number, run.start AS start, ";
38
 
        $query .= "run.end AS end, ";
39
 
        $query .= "TIMEDIFF(run.end, run.start) AS duration, ";
40
 
        $query .= "run.comment AS comment, run.data_types AS data, ";
41
 
        $query .= "COUNT(*) AS subruns FROM run, subrun";
42
 
 
43
 
        $query .= ' WHERE subrun.run = run.id';
44
 
        if ($where) {
45
 
            $query .= ' AND ' . implode(' AND ', $where);
46
 
        }
47
 
        $query .= ' GROUP BY subrun.run ORDER BY run.start';
48
 
        if ($limit) {
49
 
            $query .= " LIMIT $limit";
50
 
        }
51
 
 
52
 
        $result = mysql_query($query, $this->fMysql);
53
 
 
54
 
        $runs = array();
55
 
        while ($row = mysql_fetch_assoc($result)) {
56
 
            $runs[] = $row;
57
 
        }
58
 
 
59
 
        $query = "SELECT FOUND_ROWS()";
60
 
        $result = mysql_query($query, $this->fMysql);
61
 
        $row = mysql_fetch_array($result);
62
 
        $total = $row[0];
63
 
 
64
 
        return $runs;
65
 
    }
66
 
 
67
 
    function GetRunDescription(KDBRunIdentifier $run, $subruns)
68
 
    {
69
 
        $this->Connect();
70
 
 
71
 
        $system = $run->GetSystem();
72
 
        $run_number = $run->GetRun();
73
 
 
74
 
        $query = 'SELECT run.id AS id, CAST(run.start AS DATE) AS date, ';
75
 
        $query .= 'CAST(run.start AS TIME) as start, ';
76
 
        $query .= 'CAST(run.end AS TIME) as end, ';
77
 
        $query .= 'run.orca_configuration AS configuration, ';
78
 
        $query .= 'run.orca_version AS orca_version, ';
79
 
        $query .= 'run.comment AS comment, run.data_types AS streams, ';
80
 
        $query .= 'parameter.name AS parameter ';
81
 
        $query .= 'FROM run LEFT JOIN parameter ON ';
82
 
        $query .= 'run.control_parameter = parameter.id WHERE ';
83
 
        $query .= "system = $system AND number = $run_number";
84
 
 
85
 
        $result = mysql_query($query, $this->fMysql);
86
 
        $rundesc = mysql_fetch_assoc($result);
87
 
 
88
 
        if ($rundesc) {
89
 
            $rundesc['parameters'] = $this->GetParameters($run);
90
 
            if ($subruns) {
91
 
                $rundesc['subruns'] =
92
 
                    $this->GetSubrunDescriptions($run, $rundesc['id']);
93
 
            }
94
 
        }
95
 
 
96
 
        return $rundesc;
97
 
    }
98
 
 
99
 
    function GetSubrunDescriptions(KDBRunIdentifier $run, $id)
100
 
    {
101
 
        $this->Connect();
102
 
 
103
 
        $query = 'SELECT subrun.number AS number, ';
104
 
        $query .= 'TIMEDIFF(subrun.start, run.start) AS start, ';
105
 
        $query .= 'TIMEDIFF(subrun.end, run.start) AS end, ';
106
 
        $query .= 'subrun.comment AS comment FROM run, subrun WHERE ';
107
 
        $query .= "subrun.run = $id AND run.id = $id ORDER BY subrun.number";
108
 
 
109
 
        $result = mysql_query($query, $this->fMysql);
110
 
        $subruns = array();
111
 
 
112
 
        while ($subrun = mysql_fetch_assoc($result)) {
113
 
            $subrun_identifier = clone $run;
114
 
            $subrun_identifier->SetSubRun($subrun['number']);
115
 
            $subrun['parameters'] = $this->GetParameters($subrun_identifier);
116
 
            $subruns[] = $subrun;
117
 
        }
118
 
 
119
 
        return $subruns;
120
 
    }
121
 
 
122
 
    function GetParameters(KDBRunIdentifier $run)
123
 
    {
124
 
        $this->Connect();
125
 
 
126
 
        $system = $run->GetSystem();
127
 
        $run_number = $run->GetRun();
128
 
        $subrun_number = $run->GetSubrun();
129
 
 
130
 
        if ($run->GetSubRun() == 0) {
131
 
            $query = "SELECT parameter.name, run_parameter.value FROM ";
132
 
            $query .= "parameter, run_parameter WHERE ";
133
 
            $query .= "run_parameter.run = (SELECT id FROM run WHERE ";
134
 
            $query .= "system = $system AND number = $run_number) AND ";
135
 
            $query .= "parameter.id = run_parameter.parameter";
136
 
        }
137
 
        else {
138
 
            $query = "SELECT parameter.name, subrun_parameter.value FROM ";
139
 
            $query .= "parameter, subrun_parameter WHERE ";
140
 
            $query .= "subrun_parameter.subrun = (SELECT id FROM subrun WHERE ";
141
 
            $query .= "run = (SELECT id FROM run WHERE ";
142
 
            $query .= "system = $system AND number = $run_number) AND ";
143
 
            $query .= "number = $subrun_number) AND ";
144
 
            $query .= "parameter.id = subrun_parameter.parameter";
145
 
        }
146
 
 
147
 
        if(!($result = mysql_query($query, $this->fMysql))) {
148
 
            $f = fopen("php://stderr", "w");
149
 
            fwrite($f, "$query\n");
150
 
            fclose($f);
151
 
        }
152
 
 
153
 
        $parameters = array();
154
 
        while ($row = mysql_fetch_array($result)) {
155
 
            $parameters[$row[0]] = (float) $row[1];
156
 
        }
157
 
 
158
 
        return $parameters;
159
 
    }
160
 
    
161
 
    function GetDates(array $filter)
162
 
    {
163
 
        $this->Connect();
164
 
 
165
 
        $where = $this->BuildFilter($filter);
166
 
 
167
 
        $query = 'SELECT UNIX_TIMESTAMP(CAST(start AS DATE)) AS d FROM run';
168
 
        if ($where) {
169
 
            $query .= ' WHERE ' . implode(' AND ', $where);
170
 
        }
171
 
        $query .= ' GROUP BY d ORDER BY d';
172
 
        $result = mysql_query($query, $this->fMysql);
173
 
 
174
 
        $dates = array();
175
 
        while ($row = mysql_fetch_row($result)) {
176
 
            $dates[] = $row[0];
177
 
        }
178
 
 
179
 
        return $dates;
180
 
    }
181
 
 
182
 
    function HaveRuns($from, $to)
183
 
    {
184
 
        $this->Connect();
185
 
 
186
 
        $interval = "BETWEEN FROM_UNIXTIME($from) AND FROM_UNIXTIME($to)";
187
 
 
188
 
        $query = "SELECT id FROM run WHERE ";
189
 
        $query .= "start $interval OR end $interval LIMIT 1";
190
 
 
191
 
        $result = mysql_query($query, $this->fMysql);
192
 
        return (bool) mysql_fetch_array($result);
193
 
    }
194
 
 
195
 
    function HaveCountRates($from, $to)
196
 
    {
197
 
        $this->Connect();
198
 
 
199
 
        $interval = "BETWEEN FROM_UNIXTIME($from) AND FROM_UNIXTIME($to)";
200
 
 
201
 
        $query = "SELECT time FROM countrates_prespec WHERE ";
202
 
        $query .= "time $interval LIMIT 1";
203
 
 
204
 
        $result = mysql_query($query, $this->fMysql);
205
 
        return (bool) mysql_fetch_array($result);
206
 
        
207
 
    }
208
 
 
209
 
    function GetRunData($from, $to)
210
 
    {
211
 
        $this->Connect();
212
 
 
213
 
        $interval = "BETWEEN FROM_UNIXTIME($from) AND FROM_UNIXTIME($to)";
214
 
 
215
 
        $query = 'SELECT run.number AS run, subrun.number AS subrun, ';
216
 
        $query .= 'UNIX_TIMESTAMP(subrun.start) AS start, ';
217
 
        $query .= 'UNIX_TIMESTAMP(subrun.end) AS end ';
218
 
        $query .= 'total.subruns AS subruns ';
219
 
        $query .= 'FROM run, subrun, ';
220
 
        $query .= '(SELECT run, count(*) AS subruns FROM subrun GROUP BY run) ';
221
 
        $query .= 'AS total ';
222
 
        $query .= 'WHERE run.id = subrun.run AND total.run = subrun.run ';
223
 
        $query .= "(subrun.start $interval OR end $interval) ";
224
 
        $query .= 'ORDER BY subrun.start';
225
 
 
226
 
        return mysql_query($query, $this->fMysql);
227
 
    }
228
 
 
229
 
    function GetCountRates($from, $to, $hardware, array $items)
230
 
    {
231
 
        $this->Connect();
232
 
 
233
 
        switch ($hardware) {
234
 
            case kHardwareUw:
235
 
                $hardwarestr = 'uw';
236
 
 
237
 
            case kHardwareIpe3:
238
 
                $hardwarestr = 'ipe3';
239
 
 
240
 
            case kHardwareIpe4:
241
 
                $hardwarestr = 'ipe4';
242
 
        }
243
 
        
244
 
        $interval = "BETWEEN FROM_UNIXTIME($from) AND FROM_UNIXTIME($to)";
245
 
        
246
 
        $query = 'SELECT UNIX_TIMESTAMP(time)';
247
 
        
248
 
        foreach ($items as $item) {
249
 
            if ($item == 0) {
250
 
                $query .= ', total';
251
 
            }
252
 
            else {
253
 
                $query .= ", pixel_$item";
254
 
            }
255
 
        }
256
 
 
257
 
        $query .= " FROM countrates_prespec WHERE board = '$hardware' ";
258
 
        $query .= "AND time $interval ORDER BY time";
259
 
 
260
 
        return mysql_query($query, $this->fMysql);
261
 
    }
262
 
 
263
 
    private function Connect()
264
 
    {
265
 
        if ($this->fMysql) return;
266
 
 
267
 
        $this->fMysql = mysql_connect($this->fHostname, $this->fUser,
268
 
                                      $this->fPassword);
269
 
        if ($this->fMysql) {
270
 
            mysql_select_db($this->fDatabase, $this->fMysql);
271
 
        }
272
 
        mysql_query("SET time_zone = '+00:00'", $this->fMysql);
273
 
    }
274
 
 
275
 
    private function ConvertTimeStamp($tstamp)
276
 
    {
277
 
        return "FROM_UNIXTIME(" . $tstamp . ")";
278
 
    }
279
 
 
280
 
    private function BuildFilter($filter)
281
 
    {
282
 
        $where = array();
283
 
        if (array_key_exists('date', $filter)) {
284
 
            $date = $filter['date'];
285
 
            if ($date != 0 && $date != "all") {
286
 
                if ($date > 999999) {
287
 
                    $start = $date;
288
 
                    $end = "$start + INTERVAL 1 DAY";
289
 
                }
290
 
                elseif ($date > 9999) {
291
 
                    $start = "${date}01";
292
 
                    $end = "$start + INTERVAL 1 MONTH";
293
 
                }
294
 
                else {
295
 
                    $start = "${date}0101";
296
 
                    $end_date = $date + 1;
297
 
                    $end = "${end_date}0101";
298
 
                }
299
 
                $where[] =
300
 
                    "run.start BETWEEN $start AND $end - INTERVAL 1 SECOND";
301
 
            }
302
 
        }
303
 
 
304
 
        if (array_key_exists('system', $filter)) {
305
 
            $where[] = "run.system = {$filter['system']}";
306
 
        }
307
 
 
308
 
        $from = $filter['from'];
309
 
        $to = $filter['to'];
310
 
 
311
 
        if ($from) {
312
 
            if ($to) {
313
 
                $where[] = "run.number BETWEEN $from AND $to";
314
 
            }
315
 
            else {
316
 
                $where[] = "run.number = $from";
317
 
            }
318
 
        }
319
 
        return $where;
320
 
    }
321
 
}
322
 
 
323
 
?>