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

MigrateDeploymentStatusTask   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 9
c 1
b 0
f 1
lcom 0
cbo 4
dl 0
loc 51
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
C run() 0 47 9
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