<commit_before>// Copyright 2019 by caixw, All rights reserved.
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.

package module

import (
	"context"
	"fmt"
	"sync"
)

// ServiceFunc 服务实际需要执行的函数
//
// 实现者需要正确处理 ctx.Done 事件，调用者可能会主动取消函数执行；
// 如果是通 ctx 取消的，应该返回其错误信息。
type ServiceFunc func(ctx context.Context) error

// ServiceState 服务的状态值
type ServiceState int8

// 几种可能的状态值
const (
	ServiceStop    ServiceState = iota + 1 // 当前处理停止状态，默认状态
	ServiceRunning                         // 正在运行
	ServiceFailed                          // 出错，不再执行后续操作
)

// Service 服务模型
type Service struct {
	ID    int
	Title string

	state      ServiceState
	f          ServiceFunc
	cancelFunc context.CancelFunc
	locker     sync.Mutex

	err error // 保存上次的出错内容
}

// AddService 添加新的服务
func (m *Module) AddService(f ServiceFunc, title string) {
	m.AddInit(func() error {
		m.ms.services = append(m.ms.services, &Service{
			//TODO ID:0,<commit_msg>[module] 去掉 Service.ID 不是必须的要素<commit_after>// Copyright 2019 by caixw, All rights reserved.
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.

package module

import (
	"context"
	"fmt"
	"sync"
)

// ServiceFunc 服务实际需要执行的函数
//
// 实现者需要正确处理 ctx.Done 事件，调用者可能会主动取消函数执行；
// 如果是通 ctx 取消的，应该返回其错误信息。
type ServiceFunc func(ctx context.Context) error

// ServiceState 服务的状态值
type ServiceState int8

// 几种可能的状态值
const (
	ServiceStop    ServiceState = iota + 1 // 当前处理停止状态，默认状态
	ServiceRunning                         // 正在运行
	ServiceFailed                          // 出错，不再执行后续操作
)

// Service 服务模型
type Service struct {
	Title string

	state      ServiceState
	f          ServiceFunc
	cancelFunc context.CancelFunc
	locker     sync.Mutex

	err error // 保存上次的出错内容
}

// AddService 添加新的服务
func (m *Module) AddService(f ServiceFunc, title string) {
	m.AddInit(func() error {
		m.ms.services = append(m.ms.services, &Service{
{'fraction_non_alphanumeric': 0.0893595041322314, 'fraction_numerical': 0.006714876033057851, 'mean_word_length': 2.696564885496183, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5854997', 'n_tokens_mistral': 795, 'n_tokens_neox': 829, 'n_words': 194}