Kasianov Nikolai Alekseevich
2 years ago
6 changed files with 119 additions and 15 deletions
@ -0,0 +1,57 @@
|
||||
package queue |
||||
|
||||
import ( |
||||
"encoding/json" |
||||
"io" |
||||
"os" |
||||
"unbewohnte/wecr/logger" |
||||
"unbewohnte/wecr/web" |
||||
) |
||||
|
||||
func PopLastJob(queue *os.File) (*web.Job, error) { |
||||
stats, err := queue.Stat() |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
if stats.Size() == 0 { |
||||
return nil, nil |
||||
} |
||||
|
||||
// find the last job in the queue
|
||||
var job web.Job |
||||
var offset int64 = -1 |
||||
for { |
||||
currentOffset, err := queue.Seek(offset, io.SeekEnd) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
decoder := json.NewDecoder(queue) |
||||
err = decoder.Decode(&job) |
||||
if err != nil || job.URL == "" || job.Search.Query == "" { |
||||
offset -= 1 |
||||
continue |
||||
} |
||||
logger.Info("Found job: %+v", job) |
||||
|
||||
queue.Truncate(currentOffset) |
||||
return &job, nil |
||||
} |
||||
} |
||||
|
||||
func InsertNewJob(queue *os.File, newJob web.Job) error { |
||||
offset, err := queue.Seek(0, io.SeekEnd) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
logger.Info("Inserting at offset %d", offset) |
||||
|
||||
encoder := json.NewEncoder(queue) |
||||
err = encoder.Encode(&newJob) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
|
||||
return nil |
||||
} |
Loading…
Reference in new issue