1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| package eric
import com.alibaba.fastjson.JSONObject import com.aliyun.fc.runtime.Context import com.aliyun.fc.runtime.StreamRequestHandler import com.aliyun.mns.client.CloudAccount import com.aliyun.openservices.cms.CMSClient import com.aliyun.openservices.cms.CMSClientInit import com.aliyun.openservices.cms.metric.MetricAttribute import com.aliyun.openservices.cms.model.CustomMetric import com.aliyun.openservices.cms.request.CustomMetricUploadRequest import com.aliyun.openservices.cms.response.CustomMetricUploadResponse import java.io.InputStream import java.io.OutputStream import java.util.*
/** * * @author Eric Xu * @date 2020/10/16 */ class MnsStatusUploader : StreamRequestHandler {
val groupId = 10L
override fun handleRequest(input: InputStream?, output: OutputStream?, context: Context?) {
val accessKeyId = System.getenv("ak") val accessKeySecret = System.getenv("aks") val accountEndpoint = System.getenv("endpoint") val queueName = System.getenv("queue") val metricName = System.getenv("metricName")
val env = mapOf( "accessKeyId" to accessKeyId, "accessKeySecret" to accessKeySecret, "accountEndpoint" to accountEndpoint, "queueName" to queueName, "metricName" to metricName ) context?.logger?.info("env: ${env.toList().joinToString(", ") { "${it.first}: ${it.second}" }}")
val account = CloudAccount(accessKeyId, accessKeySecret, accountEndpoint) val client = account.mnsClient val queue = client.getQueueRef(queueName) val activeMessages = queue.attributes.activeMessages
context?.logger?.info("activeMessages $activeMessages") val inactiveMessages = queue.attributes.inactiveMessages context?.logger?.info("inactiveMessages $inactiveMessages") val delayMessages = queue.attributes.delayMessages context?.logger?.info("delayMessages $delayMessages")
client.close()
// https://help.aliyun.com/document_detail/170534.html CMSClientInit.groupId = groupId //设置公共的应用分组ID val cmsClient = CMSClient("https://metrichub-cms-cn-hangzhou.aliyuncs.com", accessKeyId, accessKeySecret) //初始化client
val activeMessages = CustomMetric.builder() .setMetricName(metricName) //指标名称 .setGroupId(groupId) //设置应用分组ID .setTime(Date()) .setType(CustomMetric.TYPE_VALUE) //类型为原始值 .appendValue(MetricAttribute.VALUE, activeMessages) //原始值,key只能是该value,不能自定义 .appendDimension("type", "activeMessages") //添加维度 .build()
val inactiveMessages = CustomMetric.builder() .setMetricName(metricName) //指标名称 .setGroupId(groupId) //设置应用分组ID .setTime(Date()) .setType(CustomMetric.TYPE_VALUE) //类型为原始值 .appendValue(MetricAttribute.VALUE, inactiveMessages) //原始值,key只能是该value,不能自定义 .appendDimension("type", "inactiveMessages") //添加维度 .build()
val delayMessages = CustomMetric.builder() .setMetricName(metricName) //指标名称 .setGroupId(groupId) //设置应用分组ID .setTime(Date()) .setType(CustomMetric.TYPE_VALUE) //类型为原始值 .appendValue(MetricAttribute.VALUE, delayMessages) //原始值,key只能是该value,不能自定义 .appendDimension("type", "delayMessages") //添加维度 .build()
val request = CustomMetricUploadRequest.builder().append(activeMessages).append(inactiveMessages) .append(delayMessages)
.build() val response: CustomMetricUploadResponse = cmsClient.putCustomMetric(request) //上报数据 context?.logger?.info(JSONObject.toJSONString(response))
} }
|