添加爬虫类型

This commit is contained in:
陈景阳
2019-09-30 14:43:48 +08:00
parent 41556cab74
commit cdd7696295
4 changed files with 54 additions and 1 deletions

6
backend/entity/spider.go Normal file
View File

@@ -0,0 +1,6 @@
package entity
type SpiderType struct {
Type string `json:"type"`
Count int `json:"count"`
}

View File

@@ -132,6 +132,7 @@ func main() {
authGroup.POST("/spiders/:id/file", routes.PostSpiderFile) // 爬虫目录写入
authGroup.GET("/spiders/:id/dir", routes.GetSpiderDir) // 爬虫目录
authGroup.GET("/spiders/:id/stats", routes.GetSpiderStats) // 爬虫统计数据
authGroup.GET("/spider/types", routes.GetSpiderTypes) // 爬虫类型
// 任务
authGroup.GET("/tasks", routes.GetTaskList) // 任务列表
authGroup.GET("/tasks/:id", routes.GetTask) // 任务详情

View File

@@ -2,6 +2,7 @@ package model
import (
"crawlab/database"
"crawlab/entity"
"github.com/apex/log"
"github.com/globalsign/mgo"
"github.com/globalsign/mgo/bson"
@@ -47,6 +48,7 @@ type Spider struct {
UpdateTs time.Time `json:"update_ts" bson:"update_ts"`
}
// 更新爬虫
func (spider *Spider) Save() error {
s, c := database.GetCol("spiders")
defer s.Close()
@@ -60,6 +62,7 @@ func (spider *Spider) Save() error {
return nil
}
// 新增爬虫
func (spider *Spider) Add() error {
s, c := database.GetCol("spiders")
defer s.Close()
@@ -74,6 +77,7 @@ func (spider *Spider) Add() error {
return nil
}
// 获取爬虫的任务
func (spider *Spider) GetTasks() ([]Task, error) {
tasks, err := GetTaskList(bson.M{"spider_id": spider.Id}, 0, 10, "-create_ts")
if err != nil {
@@ -82,6 +86,7 @@ func (spider *Spider) GetTasks() ([]Task, error) {
return tasks, nil
}
// 爬虫最新的任务
func (spider *Spider) GetLastTask() (Task, error) {
tasks, err := GetTaskList(bson.M{"spider_id": spider.Id}, 0, 1, "-create_ts")
if err != nil {
@@ -93,6 +98,7 @@ func (spider *Spider) GetLastTask() (Task, error) {
return tasks[0], nil
}
// 爬虫列表
func GetSpiderList(filter interface{}, skip int, limit int) ([]Spider, int, error) {
s, c := database.GetCol("spiders")
defer s.Close()
@@ -124,6 +130,7 @@ func GetSpiderList(filter interface{}, skip int, limit int) ([]Spider, int, erro
return spiders, count, nil
}
// 获取爬虫
func GetSpiderByFileId(fileId bson.ObjectId) *Spider {
s, c := database.GetCol("spiders")
defer s.Close()
@@ -137,6 +144,7 @@ func GetSpiderByFileId(fileId bson.ObjectId) *Spider {
return result
}
// 获取爬虫
func GetSpiderByName(name string) *Spider {
s, c := database.GetCol("spiders")
defer s.Close()
@@ -150,6 +158,7 @@ func GetSpiderByName(name string) *Spider {
return result
}
// 获取爬虫
func GetSpider(id bson.ObjectId) (Spider, error) {
s, c := database.GetCol("spiders")
defer s.Close()
@@ -165,6 +174,7 @@ func GetSpider(id bson.ObjectId) (Spider, error) {
return result, nil
}
// 更新爬虫
func UpdateSpider(id bson.ObjectId, item Spider) error {
s, c := database.GetCol("spiders")
defer s.Close()
@@ -181,6 +191,7 @@ func UpdateSpider(id bson.ObjectId, item Spider) error {
return nil
}
// 删除爬虫
func RemoveSpider(id bson.ObjectId) error {
s, c := database.GetCol("spiders")
defer s.Close()
@@ -209,6 +220,7 @@ func RemoveSpider(id bson.ObjectId) error {
return nil
}
// 删除所有爬虫
func RemoveAllSpider() error {
s, c := database.GetCol("spiders")
defer s.Close()
@@ -227,6 +239,7 @@ func RemoveAllSpider() error {
return nil
}
// 爬虫总数
func GetSpiderCount() (int, error) {
s, c := database.GetCol("spiders")
defer s.Close()
@@ -235,6 +248,25 @@ func GetSpiderCount() (int, error) {
if err != nil {
return 0, err
}
return count, nil
}
// 爬虫类型
func GetSpiderTypes() ([]*entity.SpiderType, error) {
s, c := database.GetCol("spiders")
defer s.Close()
group := bson.M{
"$group": bson.M{
"type": bson.M{"$sum": 1},
},
}
var types []*entity.SpiderType
if err := c.Pipe([]bson.M{group}).All(&types); err != nil {
log.Errorf("get spider types error: %s", err.Error())
debug.PrintStack()
return nil, err
}
return types, nil
}

View File

@@ -337,6 +337,20 @@ func PostSpiderFile(c *gin.Context) {
})
}
// 爬虫类型
func GetSpiderTypes(c *gin.Context) {
types, err := model.GetSpiderTypes()
if err != nil {
HandleError(http.StatusInternalServerError, c, err)
return
}
c.JSON(http.StatusOK, Response{
Status: "ok",
Message: "success",
Data: types,
})
}
func GetSpiderStats(c *gin.Context) {
type Overview struct {
TaskCount int `json:"task_count" bson:"task_count"`