aboutsummaryrefslogtreecommitdiff
path: root/check-lava-status.yaml
blob: e2e7d5aa36be2e2c09f400f81a182f728886fcd0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
- job:
    name: check-lava-status
    project-type: freestyle
    defaults: global
    logrotate:
        daysToKeep: 90
        numToKeep: 90
    properties:
        - authorization:
            anonymous:
                - job-read
                - job-extended-read
    parameters:
        - string:
            name: LAVA_JOB_ID_POOL
            default: ''
        - password:
            name: LAVA_USER
            default: ${LAVA_USER}
        - password:
            name: LAVA_TOKEN
            default: ${LAVA_TOKEN}
    disabled: false
    node: master
    display-name: 'Check LAVA job status'
    triggers:
        - timed: 'H/5 * * * *'
    wrappers:
        - timestamps
    publishers:
        - groovy-postbuild: |
            import groovy.net.xmlrpc.*

            void log(msg) {
                manager.listener.logger.println(msg)
            }

            def job = hudson.model.Hudson.instance.getItem("check-lava-status")
            def property = job.getProperty(hudson.model.ParametersDefinitionProperty.class)
            def parameter = property.getParameterDefinition("LAVA_JOB_ID_POOL")
            def lavaJobIdPool = parameter.getDefaultValue().tokenize()
            def lavaJobIdPoolClone = lavaJobIdPool.clone()
            def lavaUser = property.getParameterDefinition("LAVA_USER").getDefaultValue()
            def lavaToken = property.getParameterDefinition("LAVA_TOKEN").getDefaultValue()

            lavaJobIdPool.each {
                def pblJob = hudson.model.Hudson.instance.getItem("post-build-lava")
                def variables = pblJob.getBuildByNumber(it.toInteger()).getBuildVariables()
                def lavaServer = variables.LAVA_SERVER
                def lavaJobId = variables.LAVA_JOB_ID
                def buildUrl = variables.BUILD_JOB.tokenize("/")
                def buildName = buildUrl[4]
                if (buildUrl.size() == 7) {
                    buildName +=  "/" + buildUrl[5]
                }
                def buildNumber = buildUrl.last().toInteger()
                def build = hudson.model.Hudson.instance.getItemByFullName(buildName).getBuildByNumber(buildNumber)

                def lavaLab = new XMLRPCServerProxy("https://${lavaServer}")
                lavaLab.setBasicAuth(lavaUser, lavaToken)
                def response = lavaLab.invokeMethod("scheduler.job_status", [lavaJobId])
                log response
                switch (response.job_status) {
                    case ["Complete", "Incomplete", "Canceled"]:
                        lavaJobIdPoolClone.remove(it)
                        log "LAVA job removed: " + lavaJobId
                        // update build job information (badge, shortText, description)
                        description = build.getDescription()
                        description = description.replaceAll(">${lavaJobId}<", ">${lavaJobId} - ${response.job_status}<")
                        build.setDescription(description)
                        break
                }
            }

            lavaJobIdPool = lavaJobIdPoolClone.join(" ")
            parameter.setDefaultValue(lavaJobIdPool)
            job.save()
#            classpath:
#                - "/usr/share/groovy/lib/groovy-xmlrpc-0.8.jar"