/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.ignite.ml.math.benchmark; import com.dropbox.core.DbxException; import com.dropbox.core.DbxRequestConfig; import com.dropbox.core.v2.DbxClientV2; import com.dropbox.core.v2.files.WriteMode; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.UUID; /** */ class ResultsWriter { /** */ private static final String DROPBOX_PATH = "/benchmarks/math.benchmark.results.csv"; /** */ private static final String DROPBOX_URL = "https://www.dropbox.com/s/r7tcle31r7gaty8/math.benchmark.results.csv"; /** */ private static final String ACCESS_TOKEN = "1MMmQjEyzGAAAAAAAAAAfDFrQ6oBPPi4NX-iU_VrgmXB2JDXqRHGa125cTkkEQ0V"; /** */ private final String dropboxPath; /** */ private final String dropboxUrl; /** */ private final String accessTok; /** */ ResultsWriter(String dropboxPath, String dropboxUrl, String accessTok) { this.dropboxPath = dropboxPath; this.dropboxUrl = dropboxUrl; this.accessTok = accessTok; if (dropboxPath == null || dropboxUrl == null || accessTok == null) throw new IllegalArgumentException("Neither of dropbox path, URL, access token can be null."); } /** **/ ResultsWriter() { this(DROPBOX_PATH, DROPBOX_URL, ACCESS_TOKEN); } /** */ void append(String res) throws DbxException, IOException { if (res == null) throw new IllegalArgumentException("benchmark result is null"); if (dropboxPath == null) { System.out.println(res); return; } append(res, client()); } /** */ private void append(String res, DbxClientV2 client) throws DbxException, IOException { File tmp = createTmpFile(); try (FileOutputStream out = new FileOutputStream(tmp)) { client.files().download(dropboxPath).download(out); } writeResults(res, tmp); try (FileInputStream in = new FileInputStream(tmp)) { client.files().uploadBuilder(dropboxPath).withMode(WriteMode.OVERWRITE).uploadAndFinish(in); } if (!tmp.delete()) System.out.println("Failed to delete " + tmp.getAbsolutePath()); System.out.println("Uploaded benchmark results to: " + dropboxUrl); } /** */ private void writeResults(String res, File tmp) throws IOException { final String unixLineSeparator = "\n"; try (final PrintWriter writer = new PrintWriter(Files.newBufferedWriter(Paths.get(tmp.toURI()), StandardOpenOption.APPEND, StandardOpenOption.CREATE))) { writer.write(res + unixLineSeparator); } } /** */ private File createTmpFile() throws IOException { File tmp = File.createTempFile(UUID.randomUUID().toString(), ".csv"); tmp.deleteOnExit(); return tmp; } /** */ private DbxClientV2 client() { return new DbxClientV2(DbxRequestConfig.newBuilder("dropbox/MathBenchmark").build(), accessTok); } }