Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Unified Diff: tools/gardening/lib/src/luci.dart

Issue 3005723002: Added ability to find builder-groups (Closed)
Patch Set: Landing with changes from johnniwinther Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gardening/bin/luci_api.dart ('k') | tools/gardening/lib/src/luci_api.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gardening/lib/src/luci.dart
diff --git a/tools/gardening/lib/src/luci_api.dart b/tools/gardening/lib/src/luci.dart
similarity index 72%
rename from tools/gardening/lib/src/luci_api.dart
rename to tools/gardening/lib/src/luci.dart
index 9a881cdfd7094869561e53cc2fcdc4cf2432acd6..1ab0335707b0c457af4340f16bf7c40fcf5b3d79 100644
--- a/tools/gardening/lib/src/luci_api.dart
+++ b/tools/gardening/lib/src/luci.dart
@@ -6,94 +6,54 @@ import 'dart:io';
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
-import 'package:html/parser.dart' show parse;
+import 'package:archive/archive.dart';
import 'try.dart';
import 'cache_new.dart';
const String LUCI_HOST = "luci-milo.appspot.com";
+const String CBE_HOST = "chrome-build-extract.appspot.com";
typedef void ModifyRequestFunction(HttpClientRequest request);
/// Base class for communicating with [Luci]
/// Some information is found through the api
-/// <https://docs.google.com/document/d/1HbPp7Sy7ofC
-/// U7C9USqcE91VubGg_IIET2GUj9iknev4/edit#>
-/// and some information is found via screen-scraping.
-class LuciApi {
+/// <https://luci-milo.appspot.com/rpcexplorer/services/milo.Buildbot/>,
+/// some information is found via Cbe
+/// <https://chrome-build-extract.appspot.com/get_master/<client>>.
+class Luci {
final HttpClient _client = new HttpClient();
- LuciApi();
-
- /// [getBuildBots] fetches all build bots from luci (we cannot
- /// get this from the api). The format is:
- /// <li>
- /// <a href="/buildbot/client.crashpad/crashpad_win_x86_wow64_rel">
- /// crashpad_win_x86_wow64_rel</a>
- /// </li>
- /// <h3> client.dart </h3>
- /// <li>
- /// <a href="/buildbot/client.dart/analyze-linux-be">analyze-linux-be</a>
- /// </li>
- /// <li>
- /// <a href="/buildbot/client.dart/analyze-linux-stable">
- /// analyze-linux-stable</a>
- /// </li>
- /// <li>
- /// <a href="/buildbot/client.dart/analyzer-linux-release-be">
- /// analyzer-linux-release-be</a>
- /// </li>
- ///
- /// We look for the section header matching clients, then
- /// if we are in the right section, we take the <li> element
- /// and transform to a build bot
- ///
- Future<Try<List<LuciBuildBot>>> getAllBuildBots(
+ Luci();
+
+ /// [getJsonFromChromeBuildExtract] gets json from Cbe, with information
+ /// about all bots and current builds.
+ Future<Try<dynamic>> getJsonFromChromeBuildExtract(
String client, WithCacheFunction withCache) async {
- return await tryStartAsync(() => withCache(
- () => _makeGetRequest(
- new Uri(scheme: 'https', host: LUCI_HOST, path: "/")),
- "all_buildbots"))
- .then((Try<String> tryRes) => tryRes.bind(parse).bind((htmlDoc) {
- // This is really dirty, but the structure of
- // the document is not really suited for anything else.
- var takeSection = false;
- return htmlDoc.body.children.where((node) {
- if (node.localName == "li") return takeSection;
- if (node.localName != "h3") {
- takeSection = false;
- return false;
- }
- // Current node is <h3>.
- takeSection = client == node.text.trim();
- return false;
- });
- }).bind((elements) {
- // Here we hold an iterable of buildbot elements
- // <li>
- // <a href="/buildbot/client.dart/analyzer-linux-release-be">
- // analyzer-linux-release-be</a>
- // </li>
- return elements.map((element) {
- var name = element.children[0].text;
- var url = element.children[0].attributes['href'];
- return new LuciBuildBot(client, name, url);
- }).toList();
- }));
+ var result = await tryStartAsync(() => withCache(
+ () => _makeGetRequest(new Uri(
+ scheme: 'https', host: CBE_HOST, path: "/get_master/${client}")),
+ "cbe"));
+ return result.bind(JSON.decode);
}
- /// [getPrimaryBuilders] fetches all primary builders
- /// (the ones usually used by gardeners) by not including buildbots with
- /// the name -dev, -stable or -integration.
- Future<Try<List<LuciBuildBot>>> getPrimaryBuilders(
+ /// [getMaster] fetches master information for all bots.
+ Future<Try<Object>> getMaster(
String client, WithCacheFunction withCache) async {
- return await getAllBuildBots(client, withCache)
- .then((Try<List<LuciBuildBot>> tryRes) {
- return tryRes
- .bind((buildBots) => buildBots.where((LuciBuildBot buildBot) {
- return !(buildBot.name.contains("-dev") ||
- buildBot.name.contains("-stable") ||
- buildBot.name.contains("-integration"));
- }));
+ var uri = new Uri(
+ scheme: "https",
+ host: LUCI_HOST,
+ path: "prpc/milo.Buildbot/GetCompressedMasterJSON");
+ var body = {"name": client};
+ var result = await tryStartAsync(() => withCache(
+ () => _makePostRequest(uri, JSON.encode(body), {
+ HttpHeaders.CONTENT_TYPE: "application/json",
+ HttpHeaders.ACCEPT: "application/json"
+ }),
+ '${uri.path}'));
+ return result.bind(JSON.decode).bind((json) {
+ var data = JSON.decode(UTF8
+ .decode(new GZipDecoder().decodeBytes(BASE64.decode(json["data"]))));
+ return data;
});
}
@@ -233,22 +193,6 @@ BuildDetail getBuildDetailFromJson(
changes);
}
-// Structured classes to relay information from api and web pages
-
-/// [LuciBuildBot] holds information about a build bot
-class LuciBuildBot {
- final String client;
- final String name;
- final String url;
-
- LuciBuildBot(this.client, this.name, this.url);
-
- @override
- String toString() {
- return "LuciBuildBot { client: $client, name: $name, url: $url }";
- }
-}
-
/// [BuildDetail] holds data detailing a specific build
class BuildDetail {
final String client;
« no previous file with comments | « tools/gardening/bin/luci_api.dart ('k') | tools/gardening/lib/src/luci_api.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698