12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package service
- import (
- "context"
- "math"
- "sync"
- "go-common/app/interface/main/dm2/model"
- "go-common/app/service/main/archive/api"
- arcMdl "go-common/app/service/main/archive/model/archive"
- "go-common/library/ecode"
- "go-common/library/log"
- "go-common/library/net/metadata"
- "go-common/library/sync/errgroup"
- )
- func (s *Service) archiveInfos(c context.Context, aids []int64) (archiveInfos map[int64]*api.Arc, err error) {
- var (
- pagesize = 100
- wg errgroup.Group
- mu sync.Mutex
- )
- archiveInfos = make(map[int64]*api.Arc)
- if len(aids) <= 0 {
- return
- }
- page := int(math.Ceil(float64(len(aids)) / float64(pagesize)))
- for i := 0; i < page; i++ {
- start := i * pagesize
- end := (i + 1) * pagesize
- if end > len(aids) {
- end = len(aids)
- }
- wg.Go(func() (err error) {
- arg := &arcMdl.ArgAids2{Aids: aids[start:end]}
- infos, err := s.arcRPC.Archives3(c, arg)
- if err != nil {
- log.Error("s.arcRPC.Archives3(%v) error(%v)", arg, err)
- return
- }
- for _, info := range infos {
- mu.Lock()
- archiveInfos[info.Aid] = info
- mu.Unlock()
- }
- return
- })
- }
- err = wg.Wait()
- return
- }
- // videoDuration return video duration cid.
- func (s *Service) videoDuration(c context.Context, aid, cid int64) (duration int64, err error) {
- var cache = true
- if duration, err = s.dao.DurationCache(c, cid); err != nil {
- log.Error("dao.Duration(cid:%d) error(%v)", cid, err)
- err = nil
- cache = false
- } else if duration != model.NotFound {
- return
- }
- arg := &arcMdl.ArgVideo2{Aid: aid, Cid: cid, RealIP: metadata.String(c, metadata.RemoteIP)}
- page, err := s.arcRPC.Video3(c, arg)
- if err != nil {
- if ecode.Cause(err).Code() == ecode.NothingFound.Code() {
- duration = 0
- err = nil
- log.Warn("acvSvc.Video3(%v) error(duration not exist)", arg)
- } else {
- log.Error("acvSvc.Video3(%v) error(%v)", arg, err)
- }
- } else {
- duration = page.Duration * 1000
- }
- if cache {
- s.cache.Do(c, func(ctx context.Context) {
- s.dao.SetDurationCache(ctx, cid, duration)
- })
- }
- return
- }
|