def test_single_keys(self): r = Results() r.add_result(18, threshold=15) self.assertEqual( r.get_data(), [{'data': 18, 'severity': self.severity, 'threshold': 15}] )
def test_multiple_single(self): r = Results() r.add_result(18) r.add_result(42) self.assertEqual(r.get_data(), [{'data': 18, 'severity': self.severity}, {'data': 42, 'severity': self.severity}])
def test_single(self): r = Results() r.add_result(18) self.assertEqual(r.get_data(), [{ 'data': 18, 'severity': self.severity }])
def test_sequence_multiple_keys(self): r = Results() r.add_results([18, 42], threshold=[15, 40]) self.assertEqual( r.get_data(), [{'data': 18, 'severity': self.severity, 'threshold': 15}, {'data': 42, 'severity': self.severity, 'threshold': 40}] )
def test_single_keys(self): r = Results() r.add_result(18, threshold=15) self.assertEqual(r.get_data(), [{ 'data': 18, 'severity': self.severity, 'threshold': 15 }])
def test_sequence_multiple_invalid_keys(self): r = Results() with self.assertRaises(ValueError) as cm: r.add_results([88, 11], threshold=[15]) self.assertTrue('Length' in cm.exception.args[0]) with self.assertRaises(ValueError) as cm: r.add_results([88, 11], threshold=[15, 22, 33]) self.assertTrue('Length' in cm.exception.args[0])
def test_multiple_sequence(self): r = Results() r.add_results([18, 42]) r.add_results([88, 11]) self.assertEqual(r.get_data(), [{'data': 18, 'severity': self.severity}, {'data': 42, 'severity': self.severity}, {'data': 88, 'severity': self.severity}, {'data': 11, 'severity': self.severity}])
def test_sequence(self): r = Results() r.add_results([18, 42]) self.assertEqual(r.get_data(), [{ 'data': 18, 'severity': self.severity }, { 'data': 42, 'severity': self.severity }])
def test_multiple_sequence_single_keys(self): r = Results() r.add_results([18, 42], threshold=15) r.add_results([88, 11], threshold=15) self.assertEqual( r.get_data(), [{'data': 18, 'severity': self.severity, 'threshold': 15}, {'data': 42, 'severity': self.severity, 'threshold': 15}, {'data': 88, 'severity': self.severity, 'threshold': 15}, {'data': 11, 'severity': self.severity, 'threshold': 15}] )
def test_sequence_multiple_keys(self): r = Results() r.add_results([18, 42], threshold=[15, 40]) self.assertEqual(r.get_data(), [{ 'data': 18, 'severity': self.severity, 'threshold': 15 }, { 'data': 42, 'severity': self.severity, 'threshold': 40 }])
def test_dataframe(self): # create 8x4 dataframe dates = pandas.date_range('1/1/2000', periods=8) df = pandas.DataFrame(numpy.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D']) data = df.to_dict('records') result = [dict(data=x, severity=10, threshold=90) for x in data] r = Results() r.add_results(df, severity=10, threshold=90) self.assertEqual(r.get_data(), result)
def local_spike(df, context, params): """Find conditions where local spikes occur. Can operate against timeseries or other data. Optional params: `column`: specify column to calculate against, defaults to first non-time column. `std`: number of standard deviations to consider as a spike, defaults to 2 """ column = params.get('column', None) if column is None: if 'time' in df: column = df.drop('time', axis=1).columns[0] else: column = df.columns[0] std = params.get('std', 2) # extract the column as a Series s = df[column] delta = s.std() * std # create a boolean index where the values exceed the delta threshold idx = abs(s - s.mean()) > delta # then use this to create a new dataframe results = df[idx] # as an example, dynamically determine severity based on size of results severity = len(results) * 10 if len(results) < 10 else 99 return Results().add_results(results, severity=severity)
def test_multiple_sequence_invalid_keys(self): r = Results() r.add_results([18, 42], threshold=15) with self.assertRaises(ValueError) as cm: r.add_results([88, 11]) self.assertTrue('Missing data keys' in cm.exception.args[0]) with self.assertRaises(ValueError) as cm: r.add_results([88, 11], foo=12) self.assertTrue('Invalid keys' in cm.exception.args[0])
def simple_trigger(df, context, params): """Find any values in column that exceed a given value. Required params: `column`: specify column to evaluate `value`: threshold value, rows which exceed this value will be returned from the trigger """ return Results().add_result((df[params['column']] > params['value']).any(), severity=5)
def test_multiple_sequence_single_keys(self): r = Results() r.add_results([18, 42], threshold=15) r.add_results([88, 11], threshold=15) self.assertEqual(r.get_data(), [{ 'data': 18, 'severity': self.severity, 'threshold': 15 }, { 'data': 42, 'severity': self.severity, 'threshold': 15 }, { 'data': 88, 'severity': self.severity, 'threshold': 15 }, { 'data': 11, 'severity': self.severity, 'threshold': 15 }])
def test_simple(self): r = Results() self.assertEqual(r.get_data(), [])
def test_single_oneliner(self): r = Results().add_result(18) self.assertEqual(r.get_data(), [{'data': 18, 'severity': self.severity}])