/******************************************************************************* * Copyright (c) 2018 University of York * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 ******************************************************************************/ package org.eclipse.scava.metricprovider.downloadcounter.sourceforge; import java.text.SimpleDateFormat; import org.eclipse.scava.metricprovider.downloadcounter.model.Download; import org.eclipse.scava.metricprovider.downloadcounter.model.DownloadCounter; import org.eclipse.scava.platform.AbstractTransientMetricProvider; import org.eclipse.scava.platform.Date; import org.eclipse.scava.platform.delta.ProjectDelta; import org.eclipse.scava.repository.model.Project; import org.eclipse.scava.repository.model.sourceforge.SourceForgeProject; import com.jayway.jsonpath.JsonPath; import com.mongodb.DB; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; public class SourceForgeDownloadCounterMetricProvider extends AbstractTransientMetricProvider<DownloadCounter> { @Override public boolean appliesTo(Project project) { return project instanceof SourceForgeProject; } @Override public DownloadCounter adapt(DB db) { return new DownloadCounter(db); } @Override public void measure(Project project, ProjectDelta delta, DownloadCounter db) { String deltaDate = toString(delta.getDate()); String previousDeltaDate = toString(delta.getDate().addDays(-1)); try { Client client = Client.create(); String restRequest = "http://sourceforge.net/projects/" + project.getName() + "/files/stats/json?start_date=" + previousDeltaDate + "&end_date=" + deltaDate; WebResource webResource = client.resource(restRequest); ClientResponse response = webResource.accept("application/json").get(ClientResponse.class); String output = response.getEntity(String.class); int counter = JsonPath.read(output, "$.summaries.time.downloads"); Download download = new Download(); download.setCounter(counter); download.setDate(deltaDate); db.getDownloads().add(download); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } db.sync(); } public String toString(Date date) { return new SimpleDateFormat("yyyy-MM-dd").format(date.toJavaDate()); } @Override public String getShortIdentifier() { return "sfdc"; } @Override public String getFriendlyName() { return "Download counter"; } @Override public String getSummaryInformation() { return "Lorum ipsum"; } }