aboutsummaryrefslogtreecommitdiff
path: root/art-check-lava-status.yaml
blob: a2181b28a6336b798c11ec5e4fc2e3bf38b757a4 (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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
- job:
    name: art-check-lava-status
    project-type: freestyle
    defaults: global
    properties:
        - authorization:
            anonymous:
                - job-discover
            linaro-android-builders:
                - job-read
                - job-extended-read
                - job-workspace
            linaro-art:
                - job-read
                - job-extended-read
                - job-workspace
        - build-discarder:
            days-to-keep: 60
            num-to-keep: 60
    parameters:
        - password:
            name: PRIVATE_KEY
            default: ${PRIVATE_KEY}
        - string:
            name: LAVA_JOB_ID_POOL
            default:
        - string:
            name: LAVA_USER
            default: vishal.bhoj
        - password:
            name: LAVA_TOKEN
            default: ${LAVA_TOKEN}
        - string:
            name: JENKINS_USERNAME
            default: vishal.bhoj@linaro.org
        - password:
            name: JENKINS_TOKEN
            default: ${JENKINS_TOKEN}
    disabled: true
    node: docker-utopic-art
    display-name: 'ART - Check LAVA Status'
    triggers:
        - timed: 'H/30 * * * *'
    wrappers:
        - timestamps
        - timeout:
            timeout: 500
    publishers:
        - groovy-postbuild:
            script: |
              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"