From 97917f696394f7188368c65a8215f7c3956fdba9 Mon Sep 17 00:00:00 2001 From: Daniel Barden Date: Tue, 13 Sep 2016 12:50:48 +0200 Subject: [PATCH] Adds an interface to talk to Jenkins * Creates a Jenkins Service Interface to fetch the latest completed build --- Sources/SwiftServer/main.swift | 13 +++++++++ .../SwiftServerLibrary/JenkinsService.swift | 27 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 Sources/SwiftServerLibrary/JenkinsService.swift diff --git a/Sources/SwiftServer/main.swift b/Sources/SwiftServer/main.swift index 7f35dd8..82ba66d 100644 --- a/Sources/SwiftServer/main.swift +++ b/Sources/SwiftServer/main.swift @@ -1,9 +1,12 @@ import Kitura +import KituraNet import HeliumLogger import LoggerAPI import MongoKitten import Environment import SwiftServerLibrary +import SwiftyJSON +import Foundation HeliumLogger.use() @@ -31,6 +34,16 @@ do { next() } + router.get("/jenkins") {request, response, next in + JenkinsService.fetchLatestBuild({ (buildNumber, status) in + let displayString = "\(buildNumber) - \(status)" + response.send(displayString) + next() + }) + } + + + Kitura.addHTTPServer(onPort: 8090, with: router) Kitura.run() } catch { diff --git a/Sources/SwiftServerLibrary/JenkinsService.swift b/Sources/SwiftServerLibrary/JenkinsService.swift new file mode 100644 index 0000000..f2e6dfe --- /dev/null +++ b/Sources/SwiftServerLibrary/JenkinsService.swift @@ -0,0 +1,27 @@ +import KituraNet +import Foundation +import SwiftyJSON + + +public struct JenkinsService { + public enum Status: String { + case Success = "SUCCESS", Failure = "FAILURE" + } + + + public static func fetchLatestBuild(_ completionHandler : (String, Status) -> Void) { + let URL = "http://cijenkins04.rnd.in.here.com:8080/job/team-heresuite/job/hereapp-ios/job/master/job/post-submit/job/Trigger/lastCompletedBuild/api/json?pretty=false" + let _ = HTTP.get(URL, callback: { (jenkinsResponse) in + + var data = Data() + try! jenkinsResponse!.readAllData(into: &data) + let dict = JSON(data: data) + + if let result = dict["result"].string, + let status = JenkinsService.Status(rawValue: result) { + let buildNumber = dict["number"].stringValue + completionHandler(buildNumber, status) + } + }) + } +}