/* * Copyright (c) 2011 Lockheed Martin Corporation * * 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 org.eurekastreams.web.client.ui.pages.metrics; import org.eurekastreams.server.search.modelview.UsageMetricSummaryDTO; import org.eurekastreams.server.service.actions.requests.UsageMetricStreamSummaryRequest; import org.eurekastreams.web.client.events.Observer; import org.eurekastreams.web.client.events.data.GotUsageMetricSummaryEvent; import org.eurekastreams.web.client.model.UsageMetricModel; import org.eurekastreams.web.client.ui.Session; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.SpanElement; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; /** * Page for displaying metrics. */ public class MetricsSummaryContent extends Composite { /** Default record count. */ private static final int DEFAULT_RECORD_COUNT = 30; /** Binder for building UI. */ private static LocalUiBinder binder = GWT.create(LocalUiBinder.class); /** UI element displaying applicable metric. */ @UiField SpanElement uniqueVisitorsUi; /** UI element displaying applicable metric. */ @UiField SpanElement visitsPerVisitorUi; /** UI element displaying applicable metric. */ @UiField SpanElement streamViewersUi; /** UI element displaying applicable metric. */ @UiField SpanElement streamViewsPerSpectatorUi; /** UI element displaying applicable metric. */ @UiField SpanElement postersUi; /** UI element displaying applicable metric. */ @UiField SpanElement messagesPerContributorUi; /** UI element displaying applicable metric. */ @UiField SpanElement averageTimeToResponseUi; /** * Constructor. * * @param inViewStreamScopeIdString * if not empty, represents a stream scope id to get the stats for */ public MetricsSummaryContent(final String inViewStreamScopeIdString) { initWidget(binder.createAndBindUi(this)); // get the system settings, asynchronously Session.getInstance().getEventBus().addObserver(GotUsageMetricSummaryEvent.class, new Observer<GotUsageMetricSummaryEvent>() { public void update(final GotUsageMetricSummaryEvent event) { // got the metrics - remove the observer Session.getInstance().getEventBus().removeObserver(event, this); buildPage(event.getResponse()); } }); Long streamScopeId = null; if (inViewStreamScopeIdString != null && inViewStreamScopeIdString.length() > 0) { streamScopeId = Long.parseLong(inViewStreamScopeIdString); } UsageMetricModel.getInstance().fetch(new UsageMetricStreamSummaryRequest(DEFAULT_RECORD_COUNT, streamScopeId), true); } /** * Build the page. * * @param inMetrics * the UsageMetricSummaryDTO. */ private void buildPage(final UsageMetricSummaryDTO inMetrics) { // displayed directly long uniqueVisitorCount = inMetrics.getAverageDailyUniqueVisitorCount(); long streamViewerCount = inMetrics.getAverageDailyStreamViewerCount(); long streamViewCount = inMetrics.getAverageDailyStreamViewCount(); long avgActivityResponseTime = inMetrics.getAverageDailyActivityResponseTime(); // used in calculations long streamContributorCount = inMetrics.getAverageDailyStreamContributorCount(); long pageViewCount = inMetrics.getAverageDailyPageViewCount(); long messageCount = inMetrics.getAverageDailyMessageCount(); // calculated and displayed. double pageViewsPerUniqueVisitor = uniqueVisitorCount == 0 ? 0 : (double) pageViewCount / (double) uniqueVisitorCount; double streamViewsPerStreamViewer = streamViewerCount == 0 ? 0 : (double) streamViewCount / (double) streamViewerCount; double messagesPostedPerStreamContributor = streamContributorCount == 0 ? 0 : (double) messageCount / (double) streamContributorCount; NumberFormat formatter = NumberFormat.getFormat("0.0"); uniqueVisitorsUi.setInnerText(Long.toString(uniqueVisitorCount)); visitsPerVisitorUi.setInnerText(formatter.format(pageViewsPerUniqueVisitor)); streamViewersUi.setInnerText(Long.toString(streamViewerCount)); streamViewsPerSpectatorUi.setInnerText(formatter.format(streamViewsPerStreamViewer)); postersUi.setInnerText(Long.toString(streamContributorCount)); messagesPerContributorUi.setInnerText(formatter.format(messagesPostedPerStreamContributor)); averageTimeToResponseUi.setInnerText(Long.toString(avgActivityResponseTime)); } /** * Binder for building UI. */ interface LocalUiBinder extends UiBinder<Widget, MetricsSummaryContent> { } }