7
7
8
8
import sys
9
9
10
+ import json
11
+
10
12
import kernelci
11
13
import kernelci .config
12
14
import kernelci .db
@@ -19,7 +21,6 @@ class RegressionTracker(Service):
19
21
20
22
def __init__ (self , configs , args ):
21
23
super ().__init__ (configs , args , 'regression_tracker' )
22
- self ._regression_fields = ['group' , 'name' , 'path' ]
23
24
24
25
def _setup (self , args ):
25
26
return self ._api_helper .subscribe_filters ({
@@ -33,41 +34,55 @@ def _stop(self, sub_id):
33
34
def _create_regression (self , failed_node , last_successful_node ):
34
35
"""Method to create a regression"""
35
36
regression = {}
36
- for field in self ._regression_fields :
37
- regression [field ] = failed_node [field ]
38
-
39
37
regression ['kind' ] = 'regression'
38
+ regression ['name' ] = failed_node ['name' ]
39
+ regression ['path' ] = failed_node ['path' ]
40
+ regression ['group' ] = failed_node ['group' ]
41
+ regression ['state' ] = 'done'
40
42
regression ['data' ] = {
41
43
'fail_node' : failed_node ['id' ],
42
44
'pass_node' : last_successful_node ['id' ],
45
+ 'arch' : failed_node ['data' ].get ('arch' ),
46
+ 'defconfig' : failed_node ['data' ].get ('defconfig' ),
47
+ 'compiler' : failed_node ['data' ].get ('compiler' ),
48
+ 'platform' : failed_node ['data' ].get ('platform' ),
49
+ 'failed_kernel_version' : failed_node ['data' ].get ('kernel_revision' ), # noqa
43
50
}
44
- reg = self ._api_helper .submit_regression (regression )
51
+ resp = self ._api_helper .submit_regression (regression )
52
+ reg = json .loads (resp .text )
53
+ self .log .info (f"Regression submitted: { reg ['id' ]} " )
45
54
46
- def _detect_regression (self , node ):
55
+ def _detect_regression (self , fail_node ):
47
56
"""Method to check and detect regression"""
48
57
previous_nodes = self ._api .node .find ({
49
- 'name' : node ['name' ],
50
- 'group' : node ['group' ],
51
- 'path' : node ['path' ],
58
+ 'name' : fail_node ['name' ],
59
+ 'group' : fail_node ['group' ],
60
+ 'path' : fail_node ['path' ],
52
61
'data.kernel_revision.tree' :
53
- node ['data' ]['kernel_revision' ]['tree' ],
62
+ fail_node ['data' ]['kernel_revision' ]['tree' ],
54
63
'data.kernel_revision.branch' :
55
- node ['data' ]['kernel_revision' ]['branch' ],
56
- 'data.kernel_revision.url' : node ['data' ]['kernel_revision' ]['url' ],
57
- 'created__lt' : node ['created' ],
64
+ fail_node ['data' ]['kernel_revision' ]['branch' ],
65
+ 'data.kernel_revision.url' :
66
+ fail_node ['data' ]['kernel_revision' ]['url' ],
67
+ 'data.arch' : fail_node ['data' ]['arch' ],
68
+ 'data.defconfig' : fail_node ['data' ]['defconfig' ],
69
+ 'data.compiler' : fail_node ['data' ]['compiler' ],
70
+ 'data.platform' : fail_node ['data' ]['platform' ],
71
+ 'created__lt' : fail_node ['created' ],
72
+ 'state' : 'done'
58
73
})
59
74
60
- if previous_nodes :
61
- previous_nodes = sorted (
62
- previous_nodes ,
63
- key = lambda node : node [ 'created' ] ,
64
- reverse = True
65
- )
66
-
67
- if previous_nodes [ 0 ] ['result' ] == 'pass' :
68
- self .log .info (f "Detected regression for node id: \
69
- { node ['id' ]} " )
70
- self ._create_regression (node , previous_nodes [ 0 ] )
75
+ if not previous_nodes :
76
+ return
77
+ previous_node = sorted (
78
+ previous_nodes ,
79
+ key = lambda node : node [ 'created' ],
80
+ reverse = True
81
+ )[ 0 ]
82
+ if previous_node ['result' ] == 'pass' :
83
+ self .log .info ("Detected regression for node id: "
84
+ f" { fail_node ['id' ]} " )
85
+ self ._create_regression (fail_node , previous_node )
71
86
72
87
def _get_all_failed_child_nodes (self , failures , root_node ):
73
88
"""Method to get all failed nodes recursively from top-level node"""
0 commit comments