Commit be06f172 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

BucketFactory, SumBucket

parent d0f1b134
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -9,6 +9,9 @@ package com.fnordmetric.enterprise

case class BucketKey(key: String, mode: String, flush_timeout: String)

trait Bucket {
trait AbstractBucket {

  def sample(value: Double) : Unit
  def flush() : Double

}
+24 −2
Original line number Diff line number Diff line
@@ -7,9 +7,31 @@

package com.fnordmetric.enterprise

import java.util.concurrent.ConcurrentHashMap

object BucketFactory {

  def find_or_create_bucket(key: BucketKey) =
    null
  val buckets = new ConcurrentHashMap[BucketKey, AbstractBucket]()

  def find_or_create_bucket(key: BucketKey) : AbstractBucket = {
    var bucket : AbstractBucket = buckets.get(key)

    if (bucket == null) {
      buckets.synchronized {
        bucket = buckets.get(key)

        if (bucket == null) {
          bucket = create_bucket(key)
          buckets.put(key, bucket)
        }
      }
    }

    bucket
  }

  def create_bucket(key: BucketKey) : AbstractBucket = {
    new SumBucket
  }

}
+20 −0
Original line number Diff line number Diff line
// FnordMetric Enterprise
//   (c) 2011-2013 Paul Asmuth <paul@paulasmuth.com>
//
// Licensed under the MIT License (the "License"); you may not use this
// file except in compliance with the License. You may obtain a copy of
// the License at: http://opensource.org/licenses/MIT

package com.fnordmetric.enterprise

class SumBucket extends AbstractBucket {

  var tmp : Double = 0

  def sample(value: Double) : Unit =
    tmp += value

  def flush : Double =
    { val res = tmp; tmp = 0; res }

}