mirror of https://github.com/tasks/tasks
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.6 KiB
Java
114 lines
3.6 KiB
Java
/**
|
|
* Copyright (c) 2012 Todoroo Inc
|
|
*
|
|
* See the file "LICENSE" for the full license governing this code.
|
|
*/
|
|
package com.todoroo.astrid.service.abtesting;
|
|
|
|
import java.io.IOException;
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import org.apache.http.HttpEntity;
|
|
import org.apache.http.NameValuePair;
|
|
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
|
import org.apache.http.message.BasicNameValuePair;
|
|
import org.apache.http.protocol.HTTP;
|
|
import org.json.JSONArray;
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
import com.todoroo.andlib.service.Autowired;
|
|
import com.todoroo.andlib.service.DependencyInjectionService;
|
|
import com.todoroo.andlib.service.RestClient;
|
|
|
|
/**
|
|
* Invoker for communicating with the Astrid Analytics server
|
|
* @author Sam
|
|
*
|
|
*/
|
|
@SuppressWarnings("nls")
|
|
public class ABTestInvoker {
|
|
|
|
/** NOTE: these values are development values and will not work on production */
|
|
private static final String URL = "http://analytics.astrid.com/api/2/";
|
|
public static final String AB_RETENTION_METHOD = "ab_retention";
|
|
public static final String AB_ACTIVATION_METHOD = "ab_activation";
|
|
private static final String ACQUISITION_METHOD = "acquisition";
|
|
private static final String API_KEY = "ryyubd";
|
|
private static final String API_SECRET = "q9ef3i";
|
|
|
|
private static final String PREF_REPORTED_ACQUISITION = "p_reported_acq";
|
|
|
|
@Autowired private RestClient restClient;
|
|
|
|
public ABTestInvoker() {
|
|
DependencyInjectionService.getInstance().inject(this);
|
|
}
|
|
|
|
public void reportAcquisition() {
|
|
}
|
|
|
|
/**
|
|
* Posts the payload to the analytics server
|
|
* @param payload - JSONArray of data points. Created by the
|
|
* helper method in ABTestReportingService
|
|
* @return
|
|
* @throws IOException
|
|
*/
|
|
public JSONObject post(String method, JSONArray payload) throws IOException {
|
|
try {
|
|
HttpEntity postData = createPostData(payload);
|
|
String response = restClient.post(URL + method, postData);
|
|
JSONObject object = new JSONObject(response);
|
|
if (object.getString("status").equals("error")) {
|
|
throw new IOException("Error reporting ABTestEvent: " +
|
|
object.optString("message"));
|
|
}
|
|
return object;
|
|
} catch (JSONException e) {
|
|
throw new IOException(e.getMessage());
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Converts the JSONArray payload into an HTTPEntity suitable for
|
|
* POSTing.
|
|
* @param payload
|
|
* @return
|
|
*/
|
|
private HttpEntity createPostData(JSONArray payload) throws IOException {
|
|
List<NameValuePair> params = new ArrayList<NameValuePair>();
|
|
params.add(new BasicNameValuePair("apikey", API_KEY));
|
|
|
|
if (payload != null) {
|
|
params.add(new BasicNameValuePair("payload", payload.toString()));
|
|
}
|
|
|
|
StringBuilder sigBuilder = new StringBuilder();
|
|
for(NameValuePair entry : params) {
|
|
if(entry.getValue() == null) {
|
|
continue;
|
|
}
|
|
|
|
String key = entry.getName();
|
|
String value = entry.getValue();
|
|
|
|
sigBuilder.append(key).append(value);
|
|
}
|
|
|
|
sigBuilder.append(API_SECRET);
|
|
// String signature = DigestUtils.md5Hex(sigBuilder.toString());
|
|
// params.add(new BasicNameValuePair("sig", signature));
|
|
|
|
try {
|
|
return new UrlEncodedFormEntity(params, HTTP.UTF_8);
|
|
} catch (UnsupportedEncodingException e) {
|
|
throw new IOException("Unsupported URL encoding");
|
|
}
|
|
}
|
|
|
|
}
|