com.clicktravel.cheddar.metrics.intercom.IntercomMetricCollector.java Source code

Java tutorial

Introduction

Here is the source code for com.clicktravel.cheddar.metrics.intercom.IntercomMetricCollector.java

Source

/*
 * Copyright 2014 Click Travel Ltd
 *
 * 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.clicktravel.cheddar.metrics.intercom;

import io.intercom.api.Company;
import io.intercom.api.Event;
import io.intercom.api.Intercom;
import io.intercom.api.User;

import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.clicktravel.cheddar.metrics.Metric;
import com.clicktravel.cheddar.metrics.MetricCollector;
import com.clicktravel.cheddar.metrics.MetricOrganisation;
import com.clicktravel.cheddar.metrics.MetricUser;
import com.clicktravel.common.functional.Equals;

public class IntercomMetricCollector implements MetricCollector {
    Logger logger = LoggerFactory.getLogger(getClass());

    public IntercomMetricCollector(final String appId, final String apiKey) {
        Intercom.setAppID(appId);
        Intercom.setApiKey(apiKey);
    }

    @Override
    public void createOrganisation(final MetricOrganisation organisation) {
        createOrUpdateIntercomCompany(organisation);
    }

    @Override
    public void updateOrganisation(final MetricOrganisation organisation) {
        createOrUpdateIntercomCompany(organisation);
    }

    @Override
    public void createUser(final MetricUser user) {
        final User intercomUser = getIntercomUser(user);
        intercomUser.setSignedUpAt(DateTime.now().getMillis() / 1000);
        try {
            User.create(intercomUser);
        } catch (final Exception e) {
            logger.debug("Error creating a Intercom user: " + intercomUser + " - " + e.getMessage());
        }
    }

    @Override
    public void updateUser(final MetricUser user) {
        final User intercomUser = getIntercomUser(user);
        try {
            User.update(intercomUser);
        } catch (final Exception e) {
            logger.debug("Error updating a Intercom user: " + intercomUser + " - " + e.getMessage());
        }
    }

    @Override
    public void sendMetric(final Metric metric) {
        if (metric == null) {
            return;

        }

        try {
            final Event event = new Event().setEventName(metric.name()).setUserID(metric.userId())
                    .setCreatedAt(DateTime.now().getMillis() / 1000);

            if (metric.metaData() != null) {
                for (final String key : metric.metaData().keySet()) {
                    if (metric.metaData().get(key).getClass().equals(String.class)) {
                        event.putMetadata(key, (String) metric.metaData().get(key));
                    } else if (metric.metaData().get(key).getClass().equals(boolean.class)
                            || metric.metaData().get(key).getClass().equals(Boolean.class)) {
                        event.putMetadata(key, (Boolean) metric.metaData().get(key));
                    } else if (metric.metaData().get(key).getClass().equals(double.class)
                            || metric.metaData().get(key).getClass().equals(Double.class)) {
                        event.putMetadata(key, (Double) metric.metaData().get(key));
                    } else if (metric.metaData().get(key).getClass().equals(float.class)
                            || metric.metaData().get(key).getClass().equals(Float.class)) {
                        event.putMetadata(key, (Float) metric.metaData().get(key));
                    } else if (metric.metaData().get(key).getClass().equals(int.class)
                            || metric.metaData().get(key).getClass().equals(Integer.class)) {
                        event.putMetadata(key, (Integer) metric.metaData().get(key));
                    } else if (metric.metaData().get(key).getClass().equals(long.class)
                            || metric.metaData().get(key).getClass().equals(Long.class)) {
                        event.putMetadata(key, (Long) metric.metaData().get(key));
                    } else {
                        event.putMetadata(key, String.valueOf(metric.metaData().get(key)));
                    }
                }
            }
            Event.create(event);
        } catch (final Exception e) {
            logger.debug("Failed to send metric via Intercom", e);
        }
    }

    private User getIntercomUser(final MetricUser user) {
        if (user == null) {
            return null;
        }

        final User intercomUser = new User();
        intercomUser.setUserId(user.id());
        intercomUser.setName(user.name());

        if (!Equals.isNullOrBlank(user.emailAddress())) {
            intercomUser.setEmail(user.emailAddress());
        }

        if (!Equals.isNullOrBlank(user.organisationId())) {
            final Company company = new Company();
            company.setCompanyID(user.organisationId());
            intercomUser.addCompany(company);
        }

        return intercomUser;
    }

    private void createOrUpdateIntercomCompany(final MetricOrganisation organisation) {
        if (organisation == null) {
            return;
        }
        final Company company = new Company();

        final String companyId = organisation.id;
        final String name = organisation.name;

        company.setCompanyID(companyId);
        company.setName(name);
        try {
            Company.create(company);
        } catch (final Exception e) {
            logger.debug("Error creating/updating a Intercom company: " + company + " - " + e.getMessage());
        }
    }
}