mirror of
https://github.com/balzack/databag.git
synced 2025-02-12 03:29:16 +00:00
testing copy transform
This commit is contained in:
parent
ef88a857ed
commit
e839397733
@ -36,8 +36,10 @@ const APP_ASSETERROR = "error"
|
|||||||
const APP_TRANSFORMCOMPLETE = "complete"
|
const APP_TRANSFORMCOMPLETE = "complete"
|
||||||
const APP_TRANSFORMINCOMPLETE = "incomplete"
|
const APP_TRANSFORMINCOMPLETE = "incomplete"
|
||||||
const APP_TRANSFORMERROR = "error"
|
const APP_TRANSFORMERROR = "error"
|
||||||
const APP_TRANSFORMQUEUEA = "A"
|
const APP_QUEUEAUDIO = "audio"
|
||||||
const APP_TRANSFORMQUEUEB = "B"
|
const APP_QUEUEVIDEO = "video"
|
||||||
|
const APP_QUEUEPHOTO = "photo"
|
||||||
|
const APP_QUEUEDEFAULT = ""
|
||||||
|
|
||||||
func AppCardStatus(status string) bool {
|
func AppCardStatus(status string) bool {
|
||||||
if status == APP_CARDPENDING {
|
if status == APP_CARDPENDING {
|
||||||
|
@ -21,8 +21,8 @@ func TestMain(m *testing.M) {
|
|||||||
if err := os.Mkdir("testscripts", os.ModePerm); err != nil {
|
if err := os.Mkdir("testscripts", os.ModePerm); err != nil {
|
||||||
panic("failed to create testscripts path")
|
panic("failed to create testscripts path")
|
||||||
}
|
}
|
||||||
P01 := []byte("#!/bin/bash\n echo \"P01 $1 $2 $3\"\n")
|
script := []byte("#!/bin/bash\n\ncp $1 $2\n")
|
||||||
if err := os.WriteFile("testscripts/P01.sh", P01, 0555); err != nil {
|
if err := os.WriteFile("testscripts/transform_copy.sh", script, 0555); err != nil {
|
||||||
panic("failed to create P01 script")
|
panic("failed to create P01 script")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,48 +13,74 @@ import (
|
|||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
var aSync sync.Mutex
|
var audioSync sync.Mutex
|
||||||
var bSync sync.Mutex
|
var videoSync sync.Mutex
|
||||||
|
var photoSync sync.Mutex
|
||||||
|
var defaultSync sync.Mutex
|
||||||
|
|
||||||
func transcode() {
|
func transcode() {
|
||||||
|
go transcodeAudio()
|
||||||
// quick transforms should use A (eg image resize)
|
go transcodeVideo()
|
||||||
go transcodeA()
|
go transcodePhoto()
|
||||||
|
go transcodeDefault()
|
||||||
// slow transofrms should use B (eg video transcode)
|
|
||||||
go transcodeB()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func transcodeA() {
|
func transcodeVideo() {
|
||||||
aSync.Lock()
|
videoSync.Lock()
|
||||||
defer aSync.Unlock()
|
defer videoSync.Unlock()
|
||||||
|
|
||||||
for ;; {
|
for ;; {
|
||||||
var asset store.Asset
|
var asset store.Asset
|
||||||
if err := store.DB.Order("created asc").Preload("Account").Preload("Channel.Cards").Preload("Channel.Groups.Cards").Preload("Channel.ChannelSlot").Preload("Topic.TopicSlot").Where("transform_queue = ? AND status = ?", APP_TRANSFORMQUEUEA, APP_ASSETWAITING).First(&asset).Error; err != nil {
|
if err := store.DB.Order("created asc").Preload("Account").Preload("Channel.Cards").Preload("Channel.Groups.Cards").Preload("Channel.ChannelSlot").Preload("Topic.TopicSlot").Where("transform_queue = ? AND status = ?", APP_QUEUEVIDEO, APP_ASSETWAITING).First(&asset).Error; err != nil {
|
||||||
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
ErrMsg(err)
|
ErrMsg(err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
transcodeAsset(&asset)
|
transcodeAsset(&asset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func transcodeB() {
|
func transcodeAudio() {
|
||||||
bSync.Lock()
|
audioSync.Lock()
|
||||||
defer bSync.Unlock()
|
defer audioSync.Unlock()
|
||||||
|
|
||||||
for ;; {
|
for ;; {
|
||||||
var asset store.Asset
|
var asset store.Asset
|
||||||
if err := store.DB.Order("created asc").Preload("Account").Preload("Channel.Cards").Preload("Channel.Groups.Cards").Preload("Channel.ChannelSlot").Preload("Topic.TopicSlot").Where("transform_queue != ? AND status = ?", APP_TRANSFORMQUEUEB, APP_ASSETWAITING).First(&asset).Error; err != nil {
|
if err := store.DB.Order("created asc").Preload("Account").Preload("Channel.Cards").Preload("Channel.Groups.Cards").Preload("Channel.ChannelSlot").Preload("Topic.TopicSlot").Where("transform_queue = ? AND status = ?", APP_QUEUEAUDIO, APP_ASSETWAITING).First(&asset).Error; err != nil {
|
||||||
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
ErrMsg(err)
|
ErrMsg(err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
transcodeAsset(&asset)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func transcodePhoto() {
|
||||||
|
photoSync.Lock()
|
||||||
|
defer photoSync.Unlock()
|
||||||
|
for ;; {
|
||||||
|
var asset store.Asset
|
||||||
|
if err := store.DB.Order("created asc").Preload("Account").Preload("Channel.Cards").Preload("Channel.Groups.Cards").Preload("Channel.ChannelSlot").Preload("Topic.TopicSlot").Where("transform_queue = ? AND status = ?", APP_QUEUEPHOTO, APP_ASSETWAITING).First(&asset).Error; err != nil {
|
||||||
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
ErrMsg(err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
transcodeAsset(&asset)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func transcodeDefault() {
|
||||||
|
defaultSync.Lock()
|
||||||
|
defer defaultSync.Unlock()
|
||||||
|
for ;; {
|
||||||
|
var asset store.Asset
|
||||||
|
if err := store.DB.Order("created asc").Preload("Account").Preload("Channel.Cards").Preload("Channel.Groups.Cards").Preload("Channel.ChannelSlot").Preload("Topic.TopicSlot").Where("transform_queue != ? AND transform_queue != ? AND transform_queue != ? AND status = ?", APP_QUEUEVIDEO, APP_QUEUEAUDIO, APP_QUEUEPHOTO, APP_ASSETWAITING).First(&asset).Error; err != nil {
|
||||||
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
ErrMsg(err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
transcodeAsset(&asset)
|
transcodeAsset(&asset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -72,19 +98,27 @@ func transcodeAsset(asset *store.Asset) {
|
|||||||
ErrMsg(err)
|
ErrMsg(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
input := data + "/" + asset.TransformId
|
input := data + "/" + asset.Account.Guid + "/" + asset.TransformId
|
||||||
output := data + "/" + asset.AssetId
|
output := data + "/" + asset.Account.Guid + "/" + asset.AssetId
|
||||||
cmd := exec.Command(script + "/" + asset.Transform + ".sh", input, output, asset.TransformParams)
|
cmd := exec.Command(script + "/transform_" + asset.Transform + ".sh", input, output, asset.TransformParams)
|
||||||
var out bytes.Buffer
|
var stdout bytes.Buffer
|
||||||
cmd.Stdout = &out
|
cmd.Stdout = &stdout
|
||||||
|
var stderr bytes.Buffer
|
||||||
|
cmd.Stderr = &stderr
|
||||||
if err := cmd.Run(); err != nil {
|
if err := cmd.Run(); err != nil {
|
||||||
LogMsg(out.String())
|
LogMsg(stdout.String())
|
||||||
|
LogMsg(stderr.String())
|
||||||
ErrMsg(err)
|
ErrMsg(err)
|
||||||
if err := UpdateAsset(asset, APP_ASSETERROR, 0, 0); err != nil {
|
if err := UpdateAsset(asset, APP_ASSETERROR, 0, 0); err != nil {
|
||||||
ErrMsg(err)
|
ErrMsg(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LogMsg(out.String())
|
if stdout.Len() > 0 {
|
||||||
|
LogMsg(stdout.String())
|
||||||
|
}
|
||||||
|
if stderr.Len() > 0 {
|
||||||
|
LogMsg(stderr.String())
|
||||||
|
}
|
||||||
crc, size, err := ScanAsset(output)
|
crc, size, err := ScanAsset(output)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ErrMsg(err)
|
ErrMsg(err)
|
||||||
|
@ -92,7 +92,7 @@ func TestTopicShare(t *testing.T) {
|
|||||||
// add asset to topic
|
// add asset to topic
|
||||||
assets := &[]Asset{}
|
assets := &[]Asset{}
|
||||||
params["topicId"] = topic.Id
|
params["topicId"] = topic.Id
|
||||||
transforms, err := json.Marshal([]string{ "P01;A;1234", "P02", "P03" })
|
transforms, err := json.Marshal([]string{ "copy;photo" })
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.NoError(t, ApiTestUpload(AddChannelTopicAsset, "POST", "/content/channels/{channelId}/topics/{topicId}/assets?transforms=" + url.QueryEscape(string(transforms)),
|
assert.NoError(t, ApiTestUpload(AddChannelTopicAsset, "POST", "/content/channels/{channelId}/topics/{topicId}/assets?transforms=" + url.QueryEscape(string(transforms)),
|
||||||
¶ms, img, APP_TOKENCONTACT, set.C.A.Token, assets, nil))
|
¶ms, img, APP_TOKENCONTACT, set.C.A.Token, assets, nil))
|
||||||
|
Loading…
Reference in New Issue
Block a user