一个流程管理、流程监控工具Gowl

作者:Sec-Labs | 发布时间:

项目介绍

Gowl 是一个流程管理和流程监控工具。 无限工作池使您能够控制池和进程并监控他们的状态。

99b83be26c175723

 

项目地址

https://github.com/hmdsefi/gowl

安装

使用 Gowl 很容易。 首先,使用 go get安装最新版本的库。 该命令将安装 这 gowl连同库及其依赖项:

go get -u github.com/hamed-yousefi/gowl

接下来,在您的应用程序中包含 Gowl:

import "github.com/hamed-yousefi/gowl"

如何使用

Gowl 有三个主要部分。 进程、池和监视器。 该过程是该项目的最小部分。 过程是 开发人员必须实现的代码部分。 为此,Gowl 提供了一个接口来将外部代码注入 游泳池。 流程界面如下:

Process interface {
Start(ctx context.Context) error
Name() string
PID() PID
}

进程接口有三个方法。 Start 函数包含用户代码,池工作人员使用它 运行进程的函数。 Name函数返回进程名,监视器使用该函数提供 报告。 PID 函数返回进程 ID。 进程id在整个池中是唯一的,会被池使用 和监控。

如果做得正确,它应该响应上下文取消(如果需要)

我们来看一个例子:

Document struct {
   content string
   hash string
}

func (d *Document) Start(ctx context.Context) error {
   hasher := sha1.New()
   hasher.Write(bv)
   h.hash = base64.URLEncoding.EncodeToString(hasher.Sum(nil))
}

func (d *Document) Name() string {
   return "hashing-process"
}

func (d *Document) PID() PID {
   return "p-1"
}

func (d *Document) Hash() string {
   return h.hash
}

如您所见,在此示例中, Document实现进程接口。 所以现在我们可以将它注册到池中。

Pool

创建 Gowl 池非常容易。 您必须使用 NewPool(size int)函数并将池大小传递给此函数。 池大小表示和底层队列中的工作人员数量 工人从中消耗进程的大小。 看下面的例子:

pool := gowl.NewPool(4)

在这个例子中,Gowl 将创建一个 Pool 对象的新实例,其中包含四个工作人员和一个底层队列,其中包含 四个大小。

开始

要启动 Gowl,您必须调用 Start()池对象的方法。 它将开始创建工人,并且 工作人员开始侦听队列以消耗进程。

注册流程

要将进程注册到池中,您必须使用 Register(args ...process)方法。 将进程传递给 register 方法,它将创建一个新的发布者将进程列表发布到 队列。 当 Gowl 池运行时,您可以多次调用。

杀死进程

Gowl 最显着的特性之一是能够在将进程注册到池后控制进程。 你 可以在任何工作人员运行之前终止进程,如果考虑上下文,这在作业开始后也可以工作 消除。 杀死一个进程很简单,你需要进程 ID 来执行它。

pool.Kill(PID("p-909"))

关闭

Gowl 是一个无限的工人池。 但是,您应该控制池并决定何时启动它, 在其上注册一个新进程,杀死一个进程,然后 close池并终止工人。 Gowl 为您提供此选项 关闭游泳池 Close()池对象的方法。

监视器

每个流程管理工具都需要一个监控系统来向外界公开内部统计信息。 高尔给 你是一个监控 API 来查看进程和工作人员的统计信息。

您可以通过调用 Monitor()池的方法。 监控对象如下:

Monitor interface {
   PoolStatus() pool.Status
   Error(PID) error
   WorkerList() []WorkerName
   WorkerStatus(name WorkerName) worker.Status
   ProcessStats(pid PID) ProcessStats
}

Monitor 让您有机会获取 Pool 状态、进程错误、worker 列表、worker 状态和进程 统计数据。 Wis Monitor API,您可以轻松创建您的监控应用程序。 下面的例子是使用 Monitor API 来 在控制台中实时显示统计数据。

1fca08f0be175942

此外,您可以使用 Monitor API 在控制台中显示工作人员状态:

7ad99dd363175958

 

标签:工具分享