package net.buycraft.plugin.shared;
import com.bugsnag.Bugsnag;
import com.bugsnag.Report;
import com.bugsnag.callbacks.Callback;
import com.google.common.base.Supplier;
import lombok.experimental.UtilityClass;
import net.buycraft.plugin.data.responses.ServerInformation;
import net.buycraft.plugin.shared.logging.BuycraftBeforeNotify;
import net.buycraft.plugin.shared.logging.OkHttpBugsnagDelivery;
import net.buycraft.plugin.shared.util.FakeProxySelector;
import net.buycraft.plugin.shared.util.Ipv4PreferDns;
import okhttp3.Cache;
import okhttp3.OkHttpClient;
import java.io.File;
import java.net.ProxySelector;
import java.util.concurrent.TimeUnit;
@UtilityClass
public class Setup {
public static Bugsnag bugsnagClient(OkHttpClient client, String platform, String version, final String serverVersion,
final Supplier<ServerInformation> serverInformation) {
Bugsnag bugsnag = new Bugsnag("cac4ea0fdbe89b5004d8ab8d5409e594", false);
bugsnag.setDelivery(new OkHttpBugsnagDelivery(client));
bugsnag.setAppVersion(version);
bugsnag.setProjectPackages("net.buycraft.plugin");
bugsnag.addCallback(new BuycraftBeforeNotify());
bugsnag.setAppType(platform);
bugsnag.addCallback(new Callback() {
@Override
public void beforeNotify(Report report) {
report.setAppInfo("serverVersion", serverVersion);
ServerInformation information = serverInformation.get();
if (information != null) {
report.addToTab("user", "account_id", information.getAccount().getId());
report.addToTab("user", "server_id", information.getServer().getId());
}
}
});
return bugsnag;
}
public static OkHttpClient okhttp(File base) {
return okhttpBuilder()
.cache(new Cache(new File(base, "cache"), 1024 * 1024 * 10))
.build();
}
public static OkHttpClient.Builder okhttpBuilder() {
return new OkHttpClient.Builder()
.connectTimeout(3, TimeUnit.SECONDS)
.writeTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.dns(new Ipv4PreferDns())
.proxySelector(ProxySelector.getDefault() == null ? FakeProxySelector.INSTANCE : ProxySelector.getDefault());
}
}