Package com.arcbees.analytics.server

Source Code of com.arcbees.analytics.server.ServerAnalytics

/**
* Copyright 2014 ArcBees Inc.
*
* Licensed 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 com.arcbees.analytics.server;

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

import com.arcbees.analytics.server.options.ServerOptionsCallback;
import com.arcbees.analytics.server.options.TrackerNameOptionsCallback;
import com.arcbees.analytics.shared.AnalyticsImpl;
import com.arcbees.analytics.shared.AnalyticsPlugin;
import com.arcbees.analytics.shared.HitType;
import com.arcbees.analytics.shared.options.AnalyticsOptions;
import com.arcbees.analytics.shared.options.CreateOptions;
import com.arcbees.analytics.shared.options.GeneralOptions;
import com.arcbees.analytics.shared.options.TimingOptions;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.inject.name.Named;

@Singleton
public class ServerAnalytics extends AnalyticsImpl {
    private final static Logger logger = Logger.getLogger(ServerAnalytics.class.getName());

    private final Provider<ServerOptionsCallback> serverOptionsCallbackProvider;
    private final Map<String, Long> timingEvents = new HashMap<>();
    private final Map<String, String> trackerNames = new HashMap<>();

    @Inject
    ServerAnalytics(final Provider<ServerOptionsCallback> serverOptionsCallbackProvider,
            @Named("gaAccount") final String userAccount) {
        super(userAccount);

        this.serverOptionsCallbackProvider = serverOptionsCallbackProvider;
    }

    @Override
    public CreateOptions create(final String userAccount) {
        return new AnalyticsOptions(new TrackerNameOptionsCallback() {

            @Override
            public void onCallback(final String trackerName) {
                trackerNames.put(trackerName, userAccount);

            }
        }).createOptions();
    }

    @Override
    public void enablePlugin(final AnalyticsPlugin plugin) {
        // Noop this has no affect on the server
    }

    @Override
    public TimingOptions endTimingEvent(final String trackerName, final String timingCategory,
            final String timingVariableName) {
        final String key = getTimingKey(timingCategory, timingVariableName);
        if (timingEvents.containsKey(key)) {
            return sendTiming(trackerName, timingCategory, timingVariableName,
                    (int) (System.currentTimeMillis() - timingEvents.remove(key)));
        }

        logger.severe("Timing Event Ended before it was started: " + key);
        return new AnalyticsOptions(new TrackerNameOptionsCallback() {

            @Override
            public void onCallback(final String trackerName) {
                //Do nothing a timing event was ended before it was started.  This is here just to stop a crash.
            }
        }).timingOptions(timingCategory, timingVariableName, 0);
    }

    @Override
    public AnalyticsOptions send(final String trackerName, final HitType hitType) {
        final ServerOptionsCallback options = serverOptionsCallbackProvider.get();
        if (trackerName != null) {
            options.putText("tid", trackerNames.get(trackerName));
        }
        options.putText("hitType", hitType.getFieldName());

        return new AnalyticsOptions(options);
    }

    @Override
    public GeneralOptions setGlobalSettings() {
        return new AnalyticsOptions(new TrackerNameOptionsCallback() {

            @Override
            public void onCallback(final String trackerName) {
                //Do nothing, this call is not valid on the server.
            }
        }).generalOptions();
    }

    @Override
    public void startTimingEvent(final String timingCategory, final String timingVariableName) {
        timingEvents.put(getTimingKey(timingCategory, timingVariableName), System.currentTimeMillis());
    }
}
TOP

Related Classes of com.arcbees.analytics.server.ServerAnalytics

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.