1、实现的功能
- 1、快速生成 某文件中某接口的链路日志 查询语句
- 效果 :
- 效果 :
- 2、时间戳转换
- 效果 :
- 效果 :
2、原理
- 根据输入的条件,生成符合条件的列表
输出的格式:
{
"items": [
{
"title": "trace go_mutual_apply ",
"subtitle": "grep `tail -1000 *go_mutual_apply*.log_json.20200512 |grep * | tail -1 |jq \".spanid\" ` *20200512",
"arg": "grep `tail -1000 *go_mutual_apply*.log_json.20200512 |grep * | tail -1 |jq \".spanid\" ` *20200512",
"icon": "icon.png"
}
]
}
3、脚本:快速生成 某文件中某接口的链路日志 查询语句
-
创建脚本
-
输入内容
-
脚本内容
<?php
namespace AlfredCli;
/**
* Created by PhpStorm.
* User: vary
* Date: 2020/5/11
* Time: 13:02
*/
class WorkFlowsRet
{
private $defaultResult;
private $query;
private $queryReg;
public function __construct($query, $defaultResult = [])
{
$this->setQuery($query);
if (!empty($defaultResult)) {
foreach ($defaultResult as $item) {
if (empty($item['title'])) {
continue;
}
$this->defaultResult[] = [
'title' => $item['title'],
'subtitle' => $item['subtitle']??'Copy to clipboard',
'arg' => $item['subtitle']??$item['title'],
'icon' => $item['icon']??'icon.png',
];
}
}
return $this;
}
public function createItem($title, $subTitle = '', $nextQuery = '', $icon = 'icon.png')
{
$item = [
'title' => $title,
'subtitle' => $subTitle ? : 'Copy to clipboard',
'arg' => $nextQuery ? : $subTitle,
'icon' => $icon,
];
$this->defaultResult[] = $item;
}
public function result()
{
$newResult = [];
if (!empty($this->query)) {
foreach ($this->defaultResult as $key => $value) {
$contains = strpos($value['title'], $this->query);
$preExists = preg_match($this->queryReg, $value['title'], $match);
if ($contains !== false || $preExists) {
$newResult[] = $value;
}
}
$this->defaultResult = $newResult;
}
return json_encode(['items' => $this->defaultResult], 320);
}
public function case($key)
{
return strpos($this->query, $key) !== false;
}
public function setQuery($query)
{
//
$this->query = $query;
$query = str_replace(" ", ".*", $query);
$reg = "/$query.*/";
$this->queryReg = $reg;
}
}
$args = $argv[1]??'';
$defaultLogName = 'go_apply,go_tets';
$defaultResult = [
["title" => 'path', "subtitle" => 'cd /home/log; ls -rtl|tail -20'],
["title" => 'gateway', "subtitle" => 'tail -1000 gateway.log_json.20200511 |grep '],
["title" => 'trace', "subtitle" => $defaultLogName],
];
$today = date('Ymd');
$result = new WorkFlowsRet($args, $defaultResult);
if ($result->case("path")) {
$result->createItem("cd /home/golanger/log; ls -rtl|tail -20");
}
if ($result->case("spanid")) {
$result->createItem("spanid", '| tail -1 |jq ".spanid"', '| tail -1 |jq ".spanid');
}
if ($result->case('trace')) {
//args='trace log url'
$argsArr = explode(" ", $args);
$file = ($argsArr[1]??'');
$url = $argsArr[2]??'*';
$result->setQuery("trace $file");
//初始化默认值
$logName = explode(',', $defaultLogName);
foreach ($logName as $file) {
$file = trim($file);
$result->createItem("trace $file ", 'grep `tail -1000 *' . $file . '*.log_json.' . $today . ' |grep ' . $url . ' | tail -1 |jq ".spanid" ` *' . $today . '');
}
}
echo $result->result();
- 生成的列表 选中后复制到剪切板
4、Py脚本:时间戳转换
# encoding: utf-8
import sys
import time
import json
def parse(strs):
res = {"title": strs, "subtitle": "Copy to clipboard", "arg": strs, "icon": "icon.png"}
return {"items": [res]}
def timestamp(param):
strs = str(param).strip()
if (strs == None or strs == ""):
return int(time.time())
elif strs.isdigit(): # 判断是数字就转成时间
# 转换成localtime
time_local = time.localtime(float(strs))
# 转换成新的时间格式(2017-09-16 11:28:54)
dtime = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
return dtime
else: # 判断是字符串就转成时间戳
# 转换成时间数组
try:
timeArray = time.strptime(strs, "%Y-%m-%d %H:%M:%S")
except ValueError:
timeArray = time.strptime(strs, "%Y-%m-%d")
# 转换成时间戳
timestamp = int(time.mktime(timeArray))
return timestamp
if __name__ == '__main__':
if len(sys.argv) > 1:
query = sys.argv[1]
if len(sys.argv) > 2:
query = query + " " + sys.argv[2]
else:
query = ''
# query='{query}'
strs = timestamp(query)
#
print(json.dumps(parse(strs)))
参考资料:https://www.jianshu.com/p/d1ba8d64cbcb