00001 #ifndef WORK_QUEUE_H
00002 #define WORK_QUEUE_H
00003
00014 #include "timestamp.h"
00015
00016 #define WORK_QUEUE_LINE_MAX 1024
00017
00018
00019 #define WAITFORTASK -1
00020
00021
00022
00025 struct work_queue_task {
00026 char *tag;
00027 char *command_line;
00028 char *output;
00029 struct list * input_files;
00030 struct list * output_files;
00031 int taskid;
00032 int return_status;
00033 int result;
00034 char* host;
00035 timestamp_t submit_time;
00036 timestamp_t start_time;
00037 timestamp_t finish_time;
00038 INT64_T total_bytes_transfered;
00039 timestamp_t total_transfer_time;
00040 };
00041
00044 struct work_queue_stats {
00045 int workers_init;
00046 int workers_ready;
00047 int workers_busy;
00048 int tasks_running;
00049 int tasks_waiting;
00050 int tasks_complete;
00051 int total_tasks_dispatched;
00052 int total_tasks_complete;
00053 int total_workers_joined;
00054 int total_workers_removed;
00055 };
00056
00062 struct work_queue * work_queue_create( int port , time_t stoptime);
00063
00067 void work_queue_delete( struct work_queue *q );
00068
00073 void work_queue_get_stats( struct work_queue *q, struct work_queue_stats *s );
00074
00080 struct work_queue_task * work_queue_wait( struct work_queue *q, int timeout );
00081
00086 void work_queue_submit( struct work_queue *q, struct work_queue_task *t );
00087
00091 void work_queue_task_delete( struct work_queue_task *t );
00092
00096 struct work_queue_task * work_queue_task_create( const char* full_command);
00097
00102 INT64_T work_queue_task_specify_tag( struct work_queue_task* t, const char* tag);
00103
00110 INT64_T work_queue_task_specify_input_buf( struct work_queue_task* t, const char* buf, int length, const char* rname);
00111
00117 INT64_T work_queue_task_specify_input_file( struct work_queue_task* t, const char* fname, const char* rname);
00118
00124 INT64_T work_queue_task_specify_output_file( struct work_queue_task* t, const char* rname, const char* fname);
00125
00129 int work_queue_hungry (struct work_queue* q);
00130
00134 int work_queue_empty (struct work_queue* q);
00135
00140 int work_queue_shut_down_workers (struct work_queue* q, int n);
00141
00146
00147
00152
00153
00154 #endif