2 import groovy.json.JsonSlurper
3 import groovy.transform.Field
6 private boolean printToConsole = true
8 def methodMissing(String name, args) {
16 ///////////////////////////////////////////////////
17 class RequestBuckets {
18 def jsonSlurper = new JsonSlurper()
19 def JSON = jsonSlurper.parseText '''
25 "isBucketCreated": true,
26 "grokerSubdomain": "DOMAIN"
29 ///////////////////////////////////////////////////
32 ///////////////////////////////////////////////////
41 ///////////////////////////////////////////////////
43 @Field def log = new Logger()
44 ///////////////////////////////////////////////////
45 @Field def atomicState = new Atomic()
46 @Field def request = new RequestBuckets()
47 ///////////////////////////////////////////////////
56 ///////////////////////////////////////////////////
57 def httpError(int errorNumber, String errorReport) {
58 println("---Just IGNORE---For http connection in a streamer app")
60 def httpPostJson(LinkedHashMap metaData, Closure Input) {
63 ///////////////////////////////////////////////////
68 log.trace "get access key"
69 if (atomicState.accessKey == null) {
70 httpError(404, "Access Key Not Found")
73 accessKey: atomicState.accessKey
79 log.trace "get bucket key"
80 if (atomicState.bucketKey == null) {
81 httpError(404, "Bucket key Not Found")
84 bucketKey: atomicState.bucketKey,
85 bucketName: atomicState.bucketName
91 log.trace "set bucket key"
92 def newBucketKey = request.JSON?.bucketKey
93 def newBucketName = request.JSON?.bucketName
95 log.debug "bucket name: $newBucketName"
96 log.debug "bucket key: $newBucketKey"
98 if (newBucketKey && (newBucketKey != atomicState.bucketKey || newBucketName != atomicState.bucketName)) {
99 atomicState.bucketKey = "$newBucketKey"
100 atomicState.bucketName = "$newBucketName"
101 atomicState.isBucketCreated = false
108 log.trace "set access key"
109 def newAccessKey = request.JSON?.accessKey
110 def newGrokerSubdomain = request.JSON?.grokerSubdomain
112 if (newGrokerSubdomain && newGrokerSubdomain != "" && newGrokerSubdomain != atomicState.grokerSubdomain) {
113 atomicState.grokerSubdomain = "$newGrokerSubdomain"
114 atomicState.isBucketCreated = false
117 if (newAccessKey && newAccessKey != atomicState.accessKey) {
118 atomicState.accessKey = "$newAccessKey"
119 atomicState.isBucketCreated = false
125 def tryCreateBucket() {
127 // can't ship events if there is no grokerSubdomain
128 if (atomicState.grokerSubdomain == null || atomicState.grokerSubdomain == "") {
129 log.error "streaming url is currently null"
133 // if the bucket has already been created, no need to continue
134 if (atomicState.isBucketCreated) {
138 if (!atomicState.bucketName) {
139 atomicState.bucketName = atomicState.bucketKey
141 if (!atomicState.accessKey) {
144 def bucketName = "${atomicState.bucketName}"
145 def bucketKey = "${atomicState.bucketKey}"
146 def accessKey = "${atomicState.accessKey}"
148 def bucketCreateBody = new JsonSlurper().parseText("{\"bucketKey\": \"$bucketKey\", \"bucketName\": \"$bucketName\"}")
150 def bucketCreatePost = [
151 uri: "https://${atomicState.grokerSubdomain}.initialstate.com/api/buckets",
153 "Content-Type": "application/json",
154 "X-IS-AccessKey": accessKey
156 body: bucketCreateBody
159 log.debug bucketCreatePost
162 // Create a bucket on Initial State so the data has a logical grouping
163 httpPostJson(bucketCreatePost) { resp ->
164 log.debug "bucket posted"
165 if (resp.status >= 400) {
166 log.error "bucket not created successfully"
168 atomicState.isBucketCreated = true
172 log.error "bucket creation error: $e"