3 class ManifestGenerator {
7 // FIXME: Compute this value from config.json
8 const MANIFEST_PATH = '../data/manifest.json';
10 function __construct($db) {
15 $config_table = $this->db->fetch_table('test_configurations');
16 $platform_table = $this->db->fetch_table('platforms');
17 $repositories_table = $this->db->fetch_table('repositories');
18 $this->manifest = array(
19 'tests' => $this->tests(),
20 'metrics' => $this->metrics(),
21 'all' => $this->platforms($config_table, $platform_table, false),
22 'dashboard' => $this->platforms($config_table, $platform_table, true),
23 'repositories' => $this->repositories($repositories_table),
24 'builders' => $this->builders(),
25 'bugTrackers' => $this->bug_trackers($repositories_table),
27 return $this->manifest;
31 return file_put_contents(self::MANIFEST_PATH, json_encode($this->manifest));
34 private function tests() {
36 $tests_table = $this->db->fetch_table('tests');
39 foreach ($tests_table as $test_row) {
40 $tests[$test_row['test_id']] = array(
41 'name' => $test_row['test_name'],
42 'url' => $test_row['test_url'],
43 'parentId' => $test_row['test_parent'],
49 private function metrics() {
51 $metrics_table = $this->db->query_and_fetch_all('SELECT * FROM test_metrics LEFT JOIN aggregators ON metric_aggregator = aggregator_id');
54 foreach ($metrics_table as $row) {
55 $metrics[$row['metric_id']] = array(
56 'name' => $row['metric_name'],
57 'test' => $row['metric_test'],
58 'aggregator' => $row['aggregator_name']);
63 private function platforms($config_table, $platform_table, $is_dashboard) {
64 $platform_metrics = array();
66 foreach ($config_table as $config_row) {
67 if ($is_dashboard && !$this->db->is_true($config_row['config_is_in_dashboard']))
70 $platform = &array_ensure_item_has_array($platform_metrics, $config_row['config_platform']);
71 if (!in_array($config_row['config_metric'], $platform))
72 array_push($platform, $config_row['config_metric']);
76 if ($platform_table) {
77 foreach ($platform_table as $platform_row) {
78 if ($this->db->is_true($platform_row['platform_hidden']))
80 $id = $platform_row['platform_id'];
81 if (array_key_exists($id, $platform_metrics))
82 $platforms[$id] = array('name' => $platform_row['platform_name'], 'metrics' => $platform_metrics[$id]);
88 private function repositories($repositories_table) {
89 $repositories = array();
90 if (!$repositories_table)
92 foreach ($repositories_table as $row)
93 $repositories[$row['repository_name']] = array('url' => $row['repository_url'], 'blameUrl' => $row['repository_blame_url']);
98 private function builders() {
99 $builders_table = $this->db->fetch_table('builders');
100 if (!$builders_table)
103 foreach ($builders_table as $row)
104 $builders[$row['builder_id']] = array('name' => $row['builder_name'], 'buildUrl' => $row['builder_build_url']);
109 private function bug_trackers($repositories_table) {
110 $repository_id_to_name = array();
111 if ($repositories_table) {
112 foreach ($repositories_table as $row)
113 $repository_id_to_name[$row['repository_id']] = $row['repository_name'];
116 $tracker_id_to_repositories = array();
117 $tracker_repositories_table = $this->db->fetch_table('tracker_repositories');
118 if ($tracker_repositories_table) {
119 foreach ($tracker_repositories_table as $row) {
120 array_push(array_ensure_item_has_array($tracker_id_to_repositories, $row['tracrepo_tracker']),
121 $repository_id_to_name[$row['tracrepo_repository']]);
125 $bug_trackers = array();
126 $bug_trackers_table = $this->db->fetch_table('bug_trackers');
127 if ($bug_trackers_table) {
128 foreach ($bug_trackers_table as $row) {
129 $bug_trackers[$row['tracker_name']] = array('newBugUrl' => $row['tracker_new_bug_url'],
130 'repositories' => $tracker_id_to_repositories[$row['tracker_id']]);
134 return $bug_trackers;