DNPing   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 121
Duplicated Lines 19.01 %

Coupling/Cohesion

Components 1
Dependencies 8

Importance

Changes 0
Metric Value
wmc 10
c 0
b 0
f 0
lcom 1
cbo 8
dl 23
loc 121
rs 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A Link() 0 3 1
A LogLink() 0 3 1
A canView() 0 3 1
A logfile() 0 7 1
A log() 0 3 1
A LogContent() 0 3 1
A ResqueStatus() 13 13 1
B start() 10 35 3

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
/**
3
 * This class will queue a ping job and also proxy to the log file of that output
4
 *
5
 * @property string $ResqueToken
6
 *
7
 * @method DNEnvironment Environment()
8
 * @property int EnvironmentID
9
 * @method Member Deployer()
10
 * @property int DeployerID
11
 */
12
class DNPing extends DataObject {
0 ignored issues
show
Coding Style introduced by
The property $has_one is not named in camelCase.

This check marks property names that have not been written in camelCase.

In camelCase names are written without any punctuation, the start of each new word being marked by a capital letter. Thus the name database connection string becomes databaseConnectionString.

Loading history...
13
14
	/**
15
	 * @var array
16
	 */
17
	private static $db = array(
18
		"ResqueToken" => "Varchar(255)",
19
	);
20
21
	/**
22
	 * @var array
23
	 */
24
	private static $has_one = array(
25
		"Environment" => "DNEnvironment",
26
		"Deployer" =>"Member",
27
	);
28
29
	/**
30
	 * @return string
31
	 */
32
	public function Link() {
33
		return Controller::join_links($this->Environment()->Link(), 'ping', $this->ID);
34
	}
35
36
	/**
37
	 * @return string
38
	 */
39
	public function LogLink() {
40
		return $this->Link() . '/log';
41
	}
42
43
	/**
44
	 * @param Member|null $member
45
	 * @return bool
46
	 */
47
	public function canView($member = null) {
48
		return $this->Environment()->canView($member);
49
	}
50
51
	/**
52
	 * Return a path to the log file.
53
	 * @return string
54
	 */
55
	protected function logfile() {
56
		return sprintf(
57
			'%s.ping.%s.log',
58
			$this->Environment()->getFullName('.'),
59
			$this->ID
60
		);
61
	}
62
63
	/**
64
	 * @return \DeploynautLogFile
65
	 */
66
	public function log() {
67
		return new DeploynautLogFile($this->logfile());
68
	}
69
70
	/**
71
	 * @return string
72
	 */
73
	public function LogContent() {
74
		return $this->log()->content();
75
	}
76
77
	/**
78
	 * @return string
79
	 */
80 View Code Duplication
	public function ResqueStatus() {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
81
		$status = new Resque_Job_Status($this->ResqueToken);
0 ignored issues
show
Security Bug introduced by
It seems like $this->ResqueToken can also be of type false; however, Resque_Job_Status::__construct() does only seem to accept string, did you maybe forget to handle an error condition?
Loading history...
82
83
		$remap = array(
84
			Resque_Job_Status::STATUS_WAITING => "Queued",
85
			Resque_Job_Status::STATUS_RUNNING => "Running",
86
			Resque_Job_Status::STATUS_FAILED => "Failed",
87
			Resque_Job_Status::STATUS_COMPLETE => "Complete",
88
			false => "Invalid",
89
		);
90
91
		return $remap[$status->get()];
92
	}
93
94
	/**
95
	 * Queue a ping job
96
	 */
97
	public function start() {
98
		$environment = $this->Environment();
99
		$project = $environment->Project();
100
		$log = $this->log();
101
102
		$args = array(
103
			'environmentName' => $environment->Name,
104
			'logfile' => $this->logfile(),
105
			'projectName' => $project->Name,
106
			'env' => $project->getProcessEnv(),
107
			'pingID' => $this->ID
108
		);
109
110
		if(!$this->DeployerID) {
111
			$this->DeployerID = Member::currentUserID();
112
		}
113
114 View Code Duplication
		if($this->DeployerID) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
115
			$deployer = $this->Deployer();
116
			$message = sprintf(
117
				'Ping to %s initiated by %s (%s)',
118
				$environment->getFullName(),
119
				$deployer->getName(),
120
				$deployer->Email
121
			);
122
			$log->write($message);
123
		}
124
125
		$token = Resque::enqueue('deploy', 'PingJob', $args, true);
126
		$this->ResqueToken = $token;
127
		$this->write();
128
129
		$message = sprintf('Ping queued as job %s', $token);
130
		$log->write($message);
131
	}
132
}
133