Group Details Private

GuaikSecurity

Information Security

Member List

  • Zero

    GuaikOrg/gtask

    GTask-任务系统

    简介

    在某些场景下我们可能需要定时去处理一些任务,我们需要编写服务端的代码让它周期性的去工作,例如检查客户端的在线状态、定期的去获取接口的数据等,在一个系统中可能会存在多种不同类型的定时任务需要开发者去开发和维护。

    GTask支持远程管理任务,执行任务脚本(目前仅支持lua),开发者可以创建任务实例并为实例添加处理器,在处理器中配置执行脚本就可以轻松的管理任务。

    编译与使用

    Linux

    ./build/linux.sh
    

    MaxOS

    ./build/macos.sh
    

    编译成功后在release目录下会生成两个文件,gtaskclient,分别是服务端程序和客户端程序。

    服务端运行

    config/config.json中保存着服务端监听的端口号和登陆的密钥,在客户端连接服务器的时候将会用到该密钥。启动服务端时需要指定配置参数。

    ./release/gtask -cfg ./config/config.json
    

    客户端连接服务器

    ./release/client -h [host] -p 1126
    

    这时会要求输入密钥,该密钥是初始化服务器时候的密钥。

    客户端指令说明介绍

    指令 参数 参数介绍 示例
    create job key 任务key create job test
    use key 该key必须已经被创建 use test
    create processor [filePath trigger bReset bLoop bExit] (必须先use job) [脚本文件 触发时间(秒) 能否被重置 是否循环 是否退出] create processor ./example/lua/test_json.lua 3 0 1 0
    run (必须先use job)启动任务 run
    delete (必须先use job)停止并删除任务 delete

    客户端演示

    test.gif

    客户端测试

    使用默认配置文件并将服务端运行在本机(localhost)

    ./release/client -h localhost -p 1126
    secretKey:647851f2fcf6101aefa4a2c59a329a11c60300a4
    
    # 创建任务
    > create job test
    create job [test] success
    
    # 选择任务
    > use test
    select job [test]
    
    # 为任务创建执行器,解析json并打印相关数据,3秒执行一次,循环执行
    test > create processor ./example/lua/test_json.lua 3 0 1 0
    create processor success
    
    # 运行任务
    test > run
    run job [test] success
    
    # 为任务补充一条执行器,用来发送GET请求获取网站数据,5秒执行一次,循环执行
    test > create processor ./example/lua/test_http_get.lua 5 0 1 0
    create processor success
    
    # 停止并删除当前任务
    test > delete
    >
    

    LUA执行代码介绍

    // 函数名必须是processor
    // key(string): 任务key
    // count(number): 时间计数
    function processor(key,count)
        data = {}
        data["hello"]="world"
        data["a"] = {}
        data["a"]["b"] = "b"
        data["a"]["c"] = {1,2,3,4,5,6}
        res = jsonMarshal(data)
        res = jsonUnMarshal(res)
        for k,v in ipairs(res["a"]["c"]) do
            print(k,v)
        end
        return true // 如果返回false,当前执行器将会退出
    end
    

    LUA支持函数

    加密

    函数 参数 返回值 描述
    md5 string string 获取字符串的MD5值
    base64 string string 获取字符串的base64编码
    base64UrlSafe string string 获取字符串url安全的base64编码
    base64 string string 获取字符串的base64编码
    hmac [key:string, str:string] string 获取hmac值
    sha1 string string 获取字符串的SHA1值

    时间

    函数 参数 返回值 描述
    now number 获取当前时间戳(毫秒)

    Json

    函数 参数 返回值 描述
    jsonMarshal table string 将table转换成json字符串
    jsonUnMarshal string table 将json字符串转转换成table

    Http

    函数 参数 返回值 描述
    httpGet [url:string header:table] [res:string ok:bool] 发送GET请求
    httpPost [url:string header:table body:string] [res:string ok:bool] 发送POST请求

    posted in GuaiK实验室 read more
  • Zero

    go get gonum.org/v1/gonum

    posted in GuaiK实验室 read more
  • Zero

    wget wget http://mirror.bit.edu.cn/apache/kafka/2.4.0/kafka_2.13-2.4.0.tgz
    tar -zxvf kafka_2.13-2.4.0.tgz
    cd kafka_2.13-2.4.0/bin
    # 运行zookeeper服务
    ./zookeeper-server-start.sh ../config/zookeeper.properties 1>/dev/null 2>&1 &
    # 运行kafka服务
    ./kafka-server-start.sh ../config/server.properties 1>/dev/null 2>&1 &
    

    安装KafkaManager

    yum install java-devel
    git clone https://github.com/yahoo/kafka-manager.git
    cd kafka-manager
    ./sbt clean dist
    cd /root/kafka-manager/target/universal/kafka-manager-x.x.x.x
    

    修改配置文件:vi conf/application.conf
    WX20200216-131314@2x.png

    运行KafkaManager

    cd bin
    ./kafka-manager -Dconfig.files=…/config/application.conf 1>/dev/null 2>&1 &
    

    常用指令:

    创建一个新的Topic:

     ./kafka-topics.sh --create --zookeeper hadoop1:2181,hadoop2:2181,hadoop3:2181 --replication-factor 1 --partitions 3 --topic TopicSession
    

    查询Topic列表:

    ./kafka-topics.sh --list --zookeeper hadoop1:2181,hadoop2:2181,hadoop3:2181
    

    查看Topic详细信息:

    ./kafka-topics.sh --describe --zookeeper hadoop1:2181,hadoop2:2181,hadoop3:2181 --topic TopicSession
    

    建立订阅者console-consumer:

    ./kafka-console-consumer.sh --bootstrap-server hadoop1:9092,hadoop2:9092,hadoop3:9092 --topic TopicSession
    

    建立发布者console-producer:

    ./kafka-console-producer.sh --broker-list hadoop1:9092,hadoop2:9092,hadoop3:9092 --topic TopicSession
    

    posted in GuaiK实验室 read more
  • Zero

    # coding:utf-8
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    from selenium.webdriver.chrome.options import Options
    import json
    
    if __name__ == "__main__":
        chrome_options=Options()
        chrome_options.add_argument('--headless')
        browser = webdriver.Chrome(chrome_options=chrome_options)
        browser.get('https://m.baidu.com/s?word=%E6%AD%A6%E6%B1%89%E8%82%BA%E7%82%8E')
        browser.implicitly_wait(20)
        scripts = browser.find_elements_by_xpath('//script[@type="application/json"]')
        for item in scripts:
            j = json.loads(item.get_attribute('innerHTML'))
            if 'data' in j:
                if 'title' in j["data"] and j['data']['title'] == "事件脉络":
                    for es in j['data']['items']:
                        print(es['item_time_date']," ",es['eventDescription'])
        print(len(scripts))
        print(browser.title)
    

    数据来源:百度搜索【关键字:武汉肺炎】

    WX20200121-191448@2x.png

    posted in GuaiK实验室 read more
  • Zero

    TABLE

    id p1
    1 888
    2 888
    3 888
    4 888
    5 888
    6 888
    select array[1,2,3] <@ (select array_agg(id) from mid where p1=888);
    // result: true
    select array[1,2,3,7] <@ (select array_agg(id) from mid where p1=888);
    // result: false
    select array[8,9,10] <@ (select array_agg(id) from mid where p1=888);
    // result: false
    select array[1,2] <@ (select array_agg(id) from mid where p1=888);
    // result: true
    

    ARRAY常用操作符

    Operator Description Example Result
    = equal ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3] T
    <> not equal ARRAY[1,2,3] <> ARRAY[1,2,4] T
    < less than ARRAY[1,2,3] < ARRAY[1,2,4] T
    > greater than ARRAY[1,4,3] > ARRAY[1,2,4] T
    <= less than or equal ARRAY[1,2,3] <= ARRAY[1,2,3] T
    >= greater than or equal ARRAY[1,4,3] >= ARRAY[1,4,3] T
    @> contains ARRAY[1,4,3] @> ARRAY[3,1] T
    <@ is contained by ARRAY[2,7] <@ ARRAY[1,7,4,2,6] T
    && overlap (have elements in common) ARRAY[1,4,3] && ARRAY[2,1] T
    || array-to-array concatenation ARRAY[1,2,3] || ARRAY[4,5,6] {1,2,3,4,5,6}
    || array-to-array concatenation ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]] {{1,2,3},{4,5,6},{7,8,9}}
    || element-to-array concatenation 3 || ARRAY[4,5,6] {3,4,5,6}
    || array-to-element concatenation ARRAY[4,5,6] || 7 {4,5,6,7}

    posted in GuaiK实验室 read more
  • Zero

    ☣️ 错误码:dyld: malformed mach-o image: segment __DWARF has vmsize < filesize

    🌀 现象:使用go run xxx.go不报错,使用go build xxx.go后运行./xxx会出现错误

    参数 版本
    OS macOS Catalina 10.15.2
    Glfw v3.3
    OpenGL v4.1-core

    ✅修复方式

    // -ldflags: 表示将后面的参数传给连接器
    // -s: 去掉符号信息
    // -w: 去掉DWARF调试信息
    go build -ldflags "-w" ./xxx.go
    

    posted in GuaiK实验室 read more
  • Zero

    如果最近一次commit的信息填写错误需要修改,可以使用以下指令。

    git commit --amend
    

    posted in GuaiK实验室 read more
  • Zero

    -- 安装uuid扩展函数
    create extension "uuid-ossp"
    
    -- 使用uuid生成
    select uuid_generate_v4() as uuid;
    

    WX20200115-123456.png

    posted in GuaiK实验室 read more
  • Zero

    我现在在使用Angular2 + Semantic UI,比较喜欢Semanntic UI的风格。😸

    posted in GuaiK实验室 read more
  • Zero

    最后我清理了下浏览器缓存,重新打开社区网站,发现头像已经被更新成功了。

    posted in GuaiK故障处理 read more