golang监控Mac系统活动的插件库mac-activity-tracker的使用

golang监控Mac系统活动的插件库mac-activity-tracker的使用

简介

mac-activity-tracker是一个Golang库,可以监控您机器上的特定活动,并以可配置的周期发送包含该时间段内所有活动变化的"心跳"数据。您可以通过可插拔的处理器(handler)来监控想要跟踪的活动。

安装

go get -u github.com/prashantgupta24/activity-tracker

使用示例

package main

import (
	"github.com/prashantgupta24/activity-tracker/tracker"
	"github.com/prashantgupta24/activity-tracker/pkg/logging"
)

func main() {
    heartbeatInterval := 60 // 单位秒
    workerInterval := 5     // 单位秒

    activityTracker := &tracker.Instance{
        HeartbeatInterval: heartbeatInterval,
        WorkerInterval:    workerInterval,
        LogLevel:          logging.Info,
    }

    // 启动所有已实现的处理器
    heartbeatCh := activityTracker.Start()

    // 如果只想跟踪特定处理器,可以使用StartWithHandlers
    // heartbeatCh := activityTracker.StartWithHandlers(handler.MouseClickHandler(), handler.MouseCursorHandler())

    select {
    case heartbeat := <-heartbeatCh:
        if !heartbeat.WasAnyActivity {
            logger.Infof("过去%v秒内未检测到活动", int(heartbeatInterval))
        } else {
            logger.Infof("过去%v秒内检测到活动", int(heartbeatInterval))
            logger.Infof("活动类型:\n")
            for activityType, times := range heartbeat.ActivityMap {
                logger.Infof("活动类型: %v 次数: %v\n", activityType, len(times))
            }
        }
    }
}

输出示例

上面的代码创建了一个跟踪器,激活了所有处理器(鼠标点击、鼠标移动、屏幕变化和机器睡眠)。心跳间隔设置为60秒,即每60秒会收到一个心跳,其中包含捕获的所有活动信息。

INFO[2019-03-30T15:52:01-07:00] 启动活动跟踪器,心跳间隔60秒,工作间隔5秒...
INFO[2019-03-30T15:53:01-07:00] 过去60秒内检测到活动    
INFO[2019-03-30T15:53:01-07:00] 活动类型:                               
INFO[2019-03-30T15:53:01-07:00] 活动类型: mouse-click 次数: 10         
INFO[2019-03-30T15:53:01-07:00] 活动类型: cursor-move 次数: 12
INFO[2019-03-30T15:53:01-07:00] 活动类型: screen-change 次数: 7
INFO[2019-03-30T15:53:01-07:00] 活动类型: machine-sleep 次数: 1
INFO[2019-03-30T15:53:01-07:00] 活动类型: machine-wake 次数: 1

工作原理

跟踪器有两个主要配置参数:

  1. HeartbeatInterval - 心跳间隔(秒,默认60秒)
  2. WorkerInterval - 在心跳间隔内进行检查的频率(秒,默认5秒)

对于基于拉取(pull)的处理器,跟踪器会每隔WorkerInterval秒询问处理器是否有活动发生。对于基于推送(push)的处理器,活动发生时处理器会自动通知跟踪器。

心跳数据结构

type Heartbeat struct {
    WasAnyActivity bool                     // 该时间段内是否有任何活动
    ActivityMap    map[activity.Type][]time.Time // 活动类型及其发生时间
    Time           time.Time                // 心跳时间
}

当前支持的活动和处理器

活动类型

MouseCursorMovement Type = "cursor-move"  // 鼠标移动
MouseClick          Type = "mouse-click"  // 鼠标点击
ScreenChange        Type = "screen-change" // 屏幕变化
MachineSleep        Type = "machine-sleep" // 机器睡眠
MachineWake         Type = "machine-wake"  // 机器唤醒

对应的处理器

mouseCursorHandler   // 鼠标移动处理器
mouseClickHandler    // 鼠标点击处理器
screenChangeHandler  // 屏幕变化处理器
machineSleepHandler  // 机器睡眠处理器

创建自定义处理器

要添加新的活动处理器,只需实现以下接口:

type Handler interface {
    Start(*log.Logger, chan *activity.Instance)
    Type() activity.Type
    Trigger(system.State) // 用于激活基于拉取的处理器
    Close()
}

使用场景

  1. 监控用户活动频率
  2. 检测机器空闲状态
  3. 防止系统进入睡眠模式
  4. 记录用户交互行为

这个库特别适合需要监控用户活动或系统状态的应用程序。


更多关于golang监控Mac系统活动的插件库mac-activity-tracker的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang监控Mac系统活动的插件库mac-activity-tracker的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用mac-activity-tracker监控Mac系统活动

mac-activity-tracker是一个Go语言编写的库,用于监控MacOS系统的各种活动,包括应用使用情况、窗口切换、文件访问等。下面我将介绍如何使用这个库来监控Mac系统活动。

安装

首先需要安装这个库:

go get github.com/prashantgupta24/mac-activity-tracker

基本使用示例

package main

import (
	"fmt"
	"time"

	tracker "github.com/prashantgupta24/mac-activity-tracker/activity"
)

func main() {
	// 创建监控器实例
	activityTracker := tracker.New()

	// 设置监控间隔为5秒
	activityTracker.SetInterval(5 * time.Second)

	// 启动监控
	activityTracker.Start()

	// 注册事件处理器
	activityTracker.RegisterHandler(tracker.Handler{
		AppActiveHandler: func(appData tracker.AppData) {
			fmt.Printf("应用切换: %s (PID: %d)\n", appData.Name, appData.PID)
		},
		AppLaunchHandler: func(appData tracker.AppData) {
			fmt.Printf("应用启动: %s (PID: %d)\n", appData.Name, appData.PID)
		},
		AppTerminateHandler: func(appData tracker.AppData) {
			fmt.Printf("应用退出: %s (PID: %d)\n", appData.Name, appData.PID)
		},
		MachineLockedHandler: func() {
			fmt.Println("机器已锁定")
		},
		MachineUnlockedHandler: func() {
			fmt.Println("机器已解锁")
		},
	})

	// 运行10分钟后停止
	time.Sleep(10 * time.Minute)
	activityTracker.Stop()
}

监控特定事件

如果你只关心某些特定事件,可以只设置对应的处理器:

package main

import (
	"fmt"
	"time"

	tracker "github.com/prashantgupta24/mac-activity-tracker/activity"
)

func main() {
	activityTracker := tracker.New()
	activityTracker.Start()

	// 只监控应用切换事件
	activityTracker.RegisterHandler(tracker.Handler{
		AppActiveHandler: func(appData tracker.AppData) {
			fmt.Printf("当前活跃应用: %s\n", appData.Name)
		},
	})

	// 运行30秒后停止
	time.Sleep(30 * time.Second)
	activityTracker.Stop()
}

获取系统空闲时间

package main

import (
	"fmt"
	"time"

	tracker "github.com/prashantgupta24/mac-activity-tracker/activity"
)

func main() {
	activityTracker := tracker.New()
	activityTracker.Start()

	// 每10秒检查一次系统空闲时间
	ticker := time.NewTicker(10 * time.Second)
	for range ticker.C {
		idleTime := activityTracker.GetSystemIdleTime()
		fmt.Printf("系统已空闲: %v\n", idleTime)
	}

	activityTracker.Stop()
}

监控文件访问

package main

import (
	"fmt"
	"time"

	tracker "github.com/prashantgupta24/mac-activity-tracker/activity"
)

func main() {
	activityTracker := tracker.New()
	activityTracker.Start()

	activityTracker.RegisterHandler(tracker.Handler{
		FileAccessHandler: func(fileData tracker.FileData) {
			fmt.Printf("文件访问: %s (应用: %s)\n", fileData.Path, fileData.AppName)
		},
	})

	time.Sleep(5 * time.Minute)
	activityTracker.Stop()
}

注意事项

  1. 该库需要MacOS的辅助功能权限才能正常工作。你需要在"系统偏好设置" > “安全性与隐私” > “隐私” > "辅助功能"中添加你的应用。

  2. 监控间隔不宜设置过短,否则可能会影响系统性能。

  3. 该库主要依赖于MacOS的AppleScript和系统事件API,某些深度监控功能可能需要root权限。

  4. 使用完毕后记得调用Stop()方法释放资源。

这个库提供了丰富的Mac系统活动监控能力,你可以根据需要组合不同的事件处理器来实现复杂的监控逻辑。

回到顶部