Completed
Push — master ( e1584b...01fcbb )
by Mateusz
04:32 queued 01:25
created

MigrateDeploymentStatusTask::run()   C

Complexity

Conditions 9
Paths 9

Size

Total Lines 47
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 47
rs 5.2941
cc 9
eloc 31
nc 9
nop 1
1
<?php
2
3
class MigrateDeploymentStatusTask extends BuildTask {
4
5
	public function run($request) {
6
		$log = function($message) {
7
			$message = sprintf('[%s] ', date('Y-m-d H:i:s')) . $message;
8
			echo $message . PHP_EOL;
9
		};
10
11
		if (!Director::is_cli()) {
12
			$log('This command can only run via CLI');
13
			return;
14
		}
15
16
		$columns = DB::query('SHOW COLUMNS FROM "DNDeployment"')->column();
17
		if (!in_array('Status', $columns)) {
18
			$log('Migration has already been run');
19
			return;
20
		}
21
22
		foreach (DB::query('SELECT "ID", "Status" FROM "DNDeployment"') as $record) {
23
			// This record looks to be already migrated
24
			if (empty($record['Status'])) {
25
				continue;
26
			}
27
28
			switch ($record['Status']) {
29
				case 'Queued':
30
					DB::query(sprintf('UPDATE "DNDeployment" SET "State" = \'Queued\' WHERE "ID" = %s', $record['ID']));
31
					break;
32
				case 'Started':
33
					DB::query(sprintf('UPDATE "DNDeployment" SET "State" = \'Deploying\' WHERE "ID" = %s', $record['ID']));
34
					break;
35
				case 'Finished':
36
					DB::query(sprintf('UPDATE "DNDeployment" SET "State" = \'Completed\' WHERE "ID" = %s', $record['ID']));
37
					break;
38
				case 'Failed':
39
					DB::query(sprintf('UPDATE "DNDeployment" SET "State" = \'Failed\' WHERE "ID" = %s', $record['ID']));
40
					break;
41
			}
42
43
			// Blank out the old column, as it has been successfully migrated.
44
			DB::query(sprintf('UPDATE "DNDeployment" SET "Status" = NULL WHERE "ID" = %s', $record['ID']));
45
46
			$log(sprintf('DNDeployment record %s has been successfully migrated', $record['ID']));
47
		}
48
49
		DB::query('ALTER TABLE "DNDeployment" DROP COLUMN \'Status\'');
50
		$log('Finished');
51
	}
52
53
}
54