Roblox v2.616.655版本的 MD5 值为:0bc7d8a921fe7f043454ac7c31685936

以下内容为反编译后的 BacktraceMetrics.java 源代码,内容仅作参考


package backtraceio.library.services;

import android.content.Context;
import backtraceio.library.common.BacktraceStringHelper;
import backtraceio.library.common.BacktraceTimeHelper;
import backtraceio.library.events.EventsOnServerResponseEventListener;
import backtraceio.library.events.EventsRequestHandler;
import backtraceio.library.events.RequestHandler;
import backtraceio.library.interfaces.Api;
import backtraceio.library.interfaces.Metrics;
import backtraceio.library.logger.BacktraceLogger;
import backtraceio.library.models.BacktraceMetricsSettings;
import backtraceio.library.models.json.BacktraceAttributes;
import backtraceio.library.models.metrics.SummedEvent;
import backtraceio.library.models.metrics.UniqueEvent;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentLinkedDeque;
public final class BacktraceMetrics implements Metrics {
    private static final transient String LOG_TAG = "BacktraceMetrics";
    public static final String defaultBaseUrl = "https://events.backtrace.io/api";
    public static final int defaultTimeBetweenRetriesMs = 10000;
    public static final int defaultTimeIntervalInMin = 30;
    public static final long defaultTimeIntervalMs = 1800000;
    public static final int maxNumberOfAttempts = 3;
    public static final int maxTimeBetweenRetriesMs = 300000;
    private final Api backtraceApi;
    protected Context context;
    protected Map<String, Object> customReportAttributes;
    public SummedEventsHandler summedEventsHandler;
    public UniqueEventsHandler uniqueEventsHandler;
    public final String defaultUniqueEventName = "guid";
    private final String startupSummedEventName = "Application Launches";
    protected BacktraceMetricsSettings settings = null;
    private String startupUniqueEventName = "guid";
    private int maximumNumberOfEvents = 350;
    private final RequestHandler requestHandler = null;

    public BacktraceMetrics(Context context, Map<String, Object> map, Api api) {
        this.context = context;
        this.customReportAttributes = map;
        this.backtraceApi = api;
    }

    private boolean shouldProcessEvent(String str) {
        if (BacktraceStringHelper.isNullOrEmpty(str)) {
            BacktraceLogger.e(LOG_TAG, "Cannot process event, attribute name is null or empty");
            return false;
        } else if (this.maximumNumberOfEvents <= 0 || count() + 1 <= this.maximumNumberOfEvents) {
            return true;
        } else {
            String str2 = LOG_TAG;
            BacktraceLogger.e(str2, "Cannot process event, reached maximum number of events: " + this.maximumNumberOfEvents + " events count: " + count());
            return false;
        }
    }

    private void startMetricsEventHandlers(Api api) {
        this.uniqueEventsHandler = api.enableUniqueEvents(this);
        this.summedEventsHandler = api.enableSummedEvents(this);
    }

    @Override
    public boolean addSummedEvent(String str) {
        return addSummedEvent(str, null);
    }

    @Override
    public boolean addUniqueEvent(String str) {
        return addUniqueEvent(str, null);
    }

    @Override
    public int count() {
        return getUniqueEvents().size() + getSummedEvents().size();
    }

    public Map<String, Object> createLocalAttributes(Map<String, Object> map) {
        HashMap hashMap = new HashMap();
        if (map != null) {
            hashMap.putAll(map);
        }
        hashMap.putAll(new BacktraceAttributes(this.context, null, this.customReportAttributes).getAllAttributes());
        return hashMap;
    }

    @Override
    public void enable(BacktraceMetricsSettings backtraceMetricsSettings) {
        this.settings = backtraceMetricsSettings;
        BacktraceAttributes.enableMetrics();
        try {
            startMetricsEventHandlers(this.backtraceApi);
            sendStartupEvent();
            BacktraceLogger.d(LOG_TAG, "Metrics enabled");
        } catch (Exception e10) {
            String str = LOG_TAG;
            BacktraceLogger.e(str, "Could not enable metrics, exception " + e10.getMessage());
        }
    }

    public String getBaseUrl() {
        return this.settings.getBaseUrl();
    }

    protected String getStartupUniqueEventName() {
        return this.startupUniqueEventName;
    }

    @Override
    public ConcurrentLinkedDeque<SummedEvent> getSummedEvents() {
        return this.summedEventsHandler.events;
    }

    @Override
    public ConcurrentLinkedDeque<UniqueEvent> getUniqueEvents() {
        return this.uniqueEventsHandler.events;
    }

    @Override
    public void send() {
        this.uniqueEventsHandler.send();
        this.summedEventsHandler.send();
    }

    @Override
    public void sendStartupEvent() {
        addUniqueEvent(this.startupUniqueEventName);
        addSummedEvent("Application Launches");
        this.uniqueEventsHandler.send();
        this.summedEventsHandler.send();
    }

    @Override
    public void setMaximumNumberOfEvents(int i10) {
        this.maximumNumberOfEvents = i10;
        this.uniqueEventsHandler.setMaximumNumberOfEvents(i10);
        this.summedEventsHandler.setMaximumNumberOfEvents(i10);
    }

    public void setStartupUniqueEventName(String str) {
        this.startupUniqueEventName = str;
    }

    @Override
    public void setSummedEventsOnServerResponse(EventsOnServerResponseEventListener eventsOnServerResponseEventListener) {
        this.backtraceApi.setSummedEventsOnServerResponse(eventsOnServerResponseEventListener);
    }

    @Override
    public void setSummedEventsRequestHandler(EventsRequestHandler eventsRequestHandler) {
        this.backtraceApi.setSummedEventsRequestHandler(eventsRequestHandler);
    }

    @Override
    public void setUniqueEventsOnServerResponse(EventsOnServerResponseEventListener eventsOnServerResponseEventListener) {
        this.backtraceApi.setUniqueEventsOnServerResponse(eventsOnServerResponseEventListener);
    }

    @Override
    public void setUniqueEventsRequestHandler(EventsRequestHandler eventsRequestHandler) {
        this.backtraceApi.setUniqueEventsRequestHandler(eventsRequestHandler);
    }

    @Override
    public boolean addSummedEvent(String str, Map<String, Object> map) {
        if (!shouldProcessEvent(str)) {
            BacktraceLogger.w(LOG_TAG, "Skipping report");
            return false;
        }
        HashMap hashMap = new HashMap();
        if (map != null) {
            hashMap.putAll(map);
        }
        this.summedEventsHandler.events.addLast(new SummedEvent(str, BacktraceTimeHelper.getTimestampSeconds(), hashMap));
        if (count() == this.maximumNumberOfEvents) {
            this.uniqueEventsHandler.send();
            this.summedEventsHandler.send();
            return true;
        }
        return true;
    }

    @Override
    public boolean addUniqueEvent(String str, Map<String, Object> map) {
        if (!shouldProcessEvent(str)) {
            BacktraceLogger.w(LOG_TAG, "Skipping report");
            return false;
        }
        Map<String, Object> createLocalAttributes = createLocalAttributes(map);
        if (!BacktraceStringHelper.isObjectNotNullOrNotEmptyString(createLocalAttributes.get(str))) {
            BacktraceLogger.w(LOG_TAG, "Attribute name for Unique Event is not available in attribute scope");
            return false;
        }
        Iterator it = this.uniqueEventsHandler.events.iterator();
        while (it.hasNext()) {
            if (((UniqueEvent) it.next()).getName().equals(str)) {
                BacktraceLogger.w(LOG_TAG, "Already defined unique event with this attribute name, skipping");
                return false;
            }
        }
        this.uniqueEventsHandler.events.addLast(new UniqueEvent(str, BacktraceTimeHelper.getTimestampSeconds(), createLocalAttributes));
        if (count() == this.maximumNumberOfEvents) {
            this.uniqueEventsHandler.send();
            this.summedEventsHandler.send();
            return true;
        }
        return true;
    }
}