killbill-aplcache

usage: initial import of UsageUserApi Rough draft of what

7/29/2012 12:38:43 AM

Details

diff --git a/api/src/main/java/com/ning/billing/usage/api/UsageUserApi.java b/api/src/main/java/com/ning/billing/usage/api/UsageUserApi.java
new file mode 100644
index 0000000..c0cf5e0
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/usage/api/UsageUserApi.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you 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.ning.billing.usage.api;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+public interface UsageUserApi {
+
+    public void incrementUsage(final UUID bundleId, final String metricName);
+
+    public void recordUsage(final UUID bundleId, final String metricName, final DateTime timestamp, final long value);
+}
diff --git a/usage/src/main/java/com/ning/billing/usage/api/user/DefaultUsageUserApi.java b/usage/src/main/java/com/ning/billing/usage/api/user/DefaultUsageUserApi.java
new file mode 100644
index 0000000..804766f
--- /dev/null
+++ b/usage/src/main/java/com/ning/billing/usage/api/user/DefaultUsageUserApi.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you 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.ning.billing.usage.api.user;
+
+import java.util.UUID;
+
+import javax.inject.Inject;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.usage.api.UsageUserApi;
+import com.ning.billing.usage.timeline.TimelineEventHandler;
+import com.ning.billing.usage.timeline.persistent.TimelineDao;
+import com.ning.billing.util.clock.Clock;
+
+import com.google.common.collect.ImmutableMap;
+
+public class DefaultUsageUserApi implements UsageUserApi {
+
+    private static final String DEFAULT_EVENT_TYPE = "__DefaultUsageUserApi__";
+
+    private final TimelineDao timelineDao;
+    private final TimelineEventHandler timelineEventHandler;
+    private final Clock clock;
+
+    @Inject
+    public DefaultUsageUserApi(final TimelineDao timelineDao, final TimelineEventHandler timelineEventHandler, final Clock clock) {
+        this.timelineDao = timelineDao;
+        this.timelineEventHandler = timelineEventHandler;
+        this.clock = clock;
+    }
+
+    @Override
+    public void incrementUsage(final UUID bundleId, final String metricName) {
+        recordUsage(bundleId, metricName, clock.getUTCNow(), 1);
+    }
+
+    @Override
+    public void recordUsage(final UUID bundleId, final String metricName, final DateTime timestamp, final long value) {
+        final int sourceId = timelineDao.getOrAddSource(bundleId.toString());
+        timelineEventHandler.record(sourceId, DEFAULT_EVENT_TYPE, timestamp, ImmutableMap.<String, Object>of(metricName, value));
+    }
+}