Completed
Pull Request — master (#586)
by Sean
03:43
created

MigrateDeploymentStatusTask::run()   D

Complexity

Conditions 9
Paths 9

Size

Total Lines 42
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 42
rs 4.909
cc 9
eloc 26
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
			if ($record['Status'] === 'Queued') {
29
				DB::query(sprintf('UPDATE "DNDeployment" SET "State" = \'Queued\' WHERE "ID" = %s', $record['ID']));
30
			} elseif ($record['Status'] === 'Started') {
31
				DB::query(sprintf('UPDATE "DNDeployment" SET "State" = \'Deploying\' WHERE "ID" = %s', $record['ID']));
32
			} elseif ($record['Status'] === 'Finished') {
33
				DB::query(sprintf('UPDATE "DNDeployment" SET "State" = \'Completed\' WHERE "ID" = %s', $record['ID']));
34
			} elseif ($record['Status'] === 'Failed') {
35
				DB::query(sprintf('UPDATE "DNDeployment" SET "State" = \'Failed\' WHERE "ID" = %s', $record['ID']));
36
			}
37
38
			// Blank out the old column, as it has been successfully migrated.
39
			DB::query(sprintf('UPDATE "DNDeployment" SET "Status" = NULL WHERE "ID" = %s', $record['ID']));
40
41
			$log(sprintf('DNDeployment record %s has been successfully migrated', $record['ID']));
42
		}
43
44
		DB::query('ALTER TABLE "DNDeployment" DROP COLUMN "Status"');
45
		$log('Finished');
46
	}
47
48
}
49