go语言的split go语言的框架( 七 )


第 5 段(可获 1.59 积分)
R e; 7个月前
最终代码如下所示:func (bt *Redditbeat) Run(b *beat.Beat) error {
bt.client = b.Publisher.Connect()
ticker := time.NewTicker(bt.config.Period)
reddit := "" + bt.config.Subreddit + "/.json"
client := http.Client {}
for {
select {
case -bt.done:
return nil
case -ticker.C:
}
req, reqErr := http.NewRequest("GET", reddit, nil)
req.Header.Add("User-Agent", "Some existing header to bypass 429 HTTP")
if (reqErr != nil) {
panic(reqErr)
}
resp, getErr := client.Do(req)
if (getErr != nil) {
panic(getErr)
}
body, readErr := ioutil.ReadAll(resp.Body)
defer resp.Body.Close()
if (readErr != nil) {
panic(readErr)
}
trimmedBody := body[len(prefix):len(body) - len(suffix)]
messages := strings.Split(string(trimmedBody), separator)
for i := 0; ilen(messages); i ++ {
event := common.MapStr{
"@timestamp": common.Time(time.Now()),
"type":b.Name,
"message":"{" + messages[i] + "}",
}
bt.client.PublishEvent(event)
}
}
}
第 6 段(可获 0.09 积分)
R e; 7个月前
这里是对最重要的几部分的解释:line 4: 通过连接字符串创建Reddit REST URL,包括配置Subreddit参数 。记?。?它的默认值已在config.go文件中定义 。line 5: 引用httpClient类型line 12: 创建新的HTTP请求 。注意Go允许多个返回值 。line 13: 如果没有设置标准请求头,Reddit的API将返回429状态码 。line 14: Go标准错误不通过异常处理,而是随着常规返回值返回 。根据Golang wiki:指示调用者的错误条件,应通过返回错误值来完成line 15: panic() 函数类似于在Java中抛出异常, 被处理时推到栈顶 。有关详细信息,请查看相关文档 。line 17: 执行HTTP请求 。line 21: 将响应主体读入字节数组 。line 22: 关闭主体流 。注意defer关键字:defer语句延迟函数的执行,直到环绕的函数返回 。line 26: 创建整个响应主体字节数组的切片 - 对数组的一部分的引用 。实质上 , 它删除了前缀和后缀以保持相关的JSON值 。之后将字节数组解析成JSON 。line 27: 分割切片以单独获取每个JSON片段 。line 29: 将消息创建为简单的字典结构 。line 34: 发送 。
第 7 段(可获 3.11 积分)
R e; 7个月前
配置, 构建, 运行默认配置参数可以在项目根目录下的redditbeat.yml文件中找到 。请注意,redditbeat.full.yml中列出了其他常见的Beat参数,以及相关注释 。关于Beats的一个有趣的事情是,他们的消息可以直接发送到Elasticsearch或Logstash进行进一步处理 。这在上述配置文件中配置 。redditbeat:
period: 10s
output.elasticsearch:
hosts: ["localhost:9200"]
output.logstash:
hosts: ["localhost:5044"]
enabled: true
第 8 段(可获 0.78 积分)
R e; 7个月前
此配置片段将每10秒循环运行Run方法,并将消息发送到在localhost上运行的Logstash实例在端口5044上 。这可以在运行Beat时被覆盖(见下文) 。注意:为了使Logstash接受来自Beats的消息,必须安装Logstash Beat插件,并且必须为Beats配置Logstash的input:input {
beats {
port = 5044
}
}
要构建项目,请在项目的根目录中键入make 。它将创建一个可以运行的可执行文件 。./redditbeat -e -E redditbeat.subreddit=java
-E参数可以覆盖在的redditbeat.yml配置文件中找到的参数(见上文) 。在这里,它设置subreddit读为“java”,而不是默认的“elastic” 。
第 9 段(可获 1.3 积分)
R e; 7个月前
输出如下所示:2016/12/17 14:51:19.748329 client.go:184: DBGPublish: {
"@timestamp": "2016-12-17T14:51:19.748Z",

推荐阅读