Usage Metering
Ingestion Options

SDK Sample Code

6min
this sample illustrates ingesting meters in a spring boot app steps setup amberflo environment setup configuration for service discovery of amberflo ingestion client create helper for mapping object to amberflo ingestion payload maven dependencies (check for latest versions) \<dependencies> \<dependency> \<groupid>io amberflo\</groupid> \<artifactid>metering java client\</artifactid> \<version>1 3 6\</version> \</dependency> \<dependency> &#x9; \<groupid>org projectlombok\</groupid> &#x9; \<artifactid>lombok\</artifactid> &#x9; \<version>1 18 20\</version> &#x9;\</dependency> \</dependencies> setup the environment to configure amberflo client settings setup the environment to configure the amberflo sdk client settings add the following entries to the set up an environment for service discoverable application properties amberflo apikey=your api key here amberflo region=us west amberflo domain=prod amberflo ingestion frequency seconds=1 amberflo ingestion batch size=10 amberflo isdebug=true import com amberflo metering ingest meter message domain; import lombok getter; import org springframework beans factory annotation value; import org springframework stereotype component; import com amberflo metering ingest meter message region; @getter @component public class amberfloenvironment { @value("${amberflo apikey}") private string apikey; @value("${amberflo region}") private region region; @value("${amberflo domain}") private domain domain; @value("${amberflo ingestion frequency seconds}") private double ingestionfrequencyinseconds; @value("${amberflo ingestion batch size}") private integer ingestionbatchsize; } setup amberflo client bean for service discoverability amberflo provides a singleton instance of the amberflo client to make the ingestion process more efficient in order to make this client a discoverable service that can be injected as a dependency, create a configuration to return the client instance as a bean import com amberflo metering ingest meteringcontext; import org apache logging log4j logmanager; import org apache logging log4j logger; import org springframework beans factory annotation autowired; import org springframework context annotation bean; import org springframework context annotation configuration; @configuration public class amberfloclientconfig { @autowired private amberfloenvironment amberfloenvironment; @bean public meteringcontext meteringcontext() { meteringcontext meteringcontext = null; try{ meteringcontext = meteringcontext createorreplacecontext( this amberfloenvironment getapikey(), //todo enter your service name here //the service name will be added for all of your meters as an extra dimension "service name", this amberfloenvironment getdomain(), this amberfloenvironment getregion(), this amberfloenvironment getingestionfrequencyinseconds(), this amberfloenvironment getingestionbatchsize()); if(meteringcontext meteringinstance() != null) { logger info("amberflo client initialized with region={}, domain={}, frequency={}, batchsize={}", this amberfloenvironment getregion(), this amberfloenvironment getdomain(), this amberfloenvironment getingestionfrequencyinseconds(), this amberfloenvironment getingestionbatchsize()); } } catch(exception ex){ logger error("amberflo client initialization failed {}", ex getmessage()); ex printstacktrace(); } return meteringcontext; } } entity to amberflo payload mapper in this approach, the entity is transformed to the ingestion payload using a helper in this sample, we have an entity called event which is mapped to the amberflo sdk ingestion payload in the amberflomapper class now amberflomapper ingestmeterforevent() can be called from anywhere in your code sample entity class import java io serializable; import javax persistence ; import lombok allargsconstructor; import lombok getter; import lombok noargsconstructor; import lombok setter; @getter @setter @noargsconstructor @allargsconstructor @entity @table(name = "event") public class event implements serializable { private static final long serialversionuid = 1l; @id @generatedvalue(strategy=generationtype identity) private long id; @column(name = "event source type") private string eventsourcetype; @column(name = "event type") private string eventtype; @column(name = "customer id") private string customerid; } sample mapper helper import org apache logging log4j logmanager; import org apache logging log4j logger; import java time localdatetime; import java time zoneoffset; import java util hashmap; import java util map; import static com amberflo metering ingest meteringcontext metering; public class amberflomapper { private static final logger logger = logmanager getlogger(); public static void ingestmeterforevent(final event event, final string metername){ try { final string customerid = event getcustomerid(); final double metervalue = 1 0; final localdatetime eventtime = localdatetime now(zoneoffset utc); final map\<string, string> dimensions = new hashmap(); dimensions put("event source type", event geteventsourcetype()); dimensions put("event type", event geteventtype()); metering() meter(customerid, metername, metervalue, eventtime, dimensions); logger info("amberflo ingestion event id {}, customerid {}, meter {}, event source type {}, event type {}", event getid(), customerid, metername, dimensions get("event source type"), dimensions get("event type")); } catch (exception ex) { logger error("amberflo ingestion failed {}", ex getmessage()); ex printstacktrace(); } } }