search/service/probe-service.go

53 lines
1.0 KiB
Go

package service
import (
"fmt"
"math/rand"
"time"
"gorm.io/gorm"
"myschools.me/suguo/search/exceptionless"
"myschools.me/suguo/search/model"
"myschools.me/suguo/search/mysql"
)
// 探针
func Probe() {
for {
time.Sleep(time.Minute)
db, err := mysql.New()
if err != nil {
exceptionless.SubmitAppError("Probe", "mysql.New", nil, err)
continue
}
var domains []*model.Domain
if err := db.Where("updated_at<?", time.Now().Add(-10*time.Minute)).Find(&domains).Error; err != nil {
if err != gorm.ErrRecordNotFound {
exceptionless.SubmitAppError("Probe", "mysql.Find", nil, err)
continue
}
}
for _, d := range domains {
for i := 0; i < 500; i++ {
url := fmt.Sprintf(`https://www.%s.%s`, randSeq(), d.Root)
go siteAccess(&url)
}
}
}
}
var letters = []rune("0123456789abcdefghijklmnopqrstuvwxyz_")
func randSeq() string {
rand.Seed(time.Now().Unix())
b := make([]rune, rand.Int31n(10))
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := range b {
b[i] = letters[r.Intn(37)]
}
return string(b)
}