def run(self):
logger.debug("<STR_LIT>", self.name)<EOL>try:<EOL><INDENT>result = self.perform()<EOL><DEDENT>except Exception:<EOL><INDENT>logger.exception("<STR_LIT>", self.name)<EOL>result = False<EOL><DEDENT>logger.debug("<STR_LIT>", result)<EOL>self.results.append(result)<EOL>if self.passing and not any(self.last_n_results(self.fall)):<EOL><INDENT>logger.info(<EOL>"<STR_LIT>",<EOL>self.name, self.fall,<EOL>)<EOL>self.passing = False<EOL><DEDENT>if not self.passing and all(self.last_n_results(self.rise)):<EOL><INDENT>logger.info(<EOL>"<STR_LIT>",<EOL>self.name, self.rise<EOL>)<EOL>self.passing = True<EOL><DEDENT>
Calls the `perform()` method defined by subclasses and stores the
result in a `results` deque.

After the result is determined the `results` deque is analyzed to see
if the `passing` flag should be updated.  If the check was considered
passing and the previous `self.fall` number of checks failed, the check
is updated to not be passing.  If the check was not passing and the
previous `self.rise` number of checks passed, the check is updated to
be considered passing.