summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2014-12-14 17:48:43 +0100
committerAndreas Baumann <mail@andreasbaumann.cc>2014-12-14 17:48:43 +0100
commit391222b8a5d4a69018b530859c8a0bcad05cf08a (patch)
treeb79ad18b9944726583b31bed6d9384695f4f12e0 /src
parent259ca5ed40b727de03c45479ff374d1bb7c39630 (diff)
downloadbiruda-391222b8a5d4a69018b530859c8a0bcad05cf08a.tar.gz
biruda-391222b8a5d4a69018b530859c8a0bcad05cf08a.tar.bz2
..
Diffstat (limited to 'src')
-rw-r--r--src/cli.c8
-rw-r--r--src/master.c7
-rw-r--r--src/master.h2
-rw-r--r--src/webserver.c21
4 files changed, 36 insertions, 2 deletions
diff --git a/src/cli.c b/src/cli.c
index 702c388..6cf3401 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -209,8 +209,14 @@ static void print_worker_output( const char *worker_name )
}
if( strlen( data ) > 0 && data[len-1] == '\r' ) {
data[len-1] = '\0';
+ len--;
}
- print_answer( data );
+ if( len > 0 ) {
+ print_message( "worker %s:", worker_name );
+ print_answer( data );
+ }
+ } else if( ret == ERRNOLG ) {
+ // ignore empty result, worker has no output currently
} else {
print_error( "ERROR: HTTP error %d", ret );
}
diff --git a/src/master.c b/src/master.c
index fc4768e..c2997da 100644
--- a/src/master.c
+++ b/src/master.c
@@ -81,6 +81,7 @@ static void update_workers( coordinator_t *coord, json_object *obj )
typedef struct {
FILE *spool_file;
+ off_t read_pos;
} execution_worker_data_t;
static int register_coordinator( json_object *obj )
@@ -324,6 +325,7 @@ static int master_output_init( const char *spool_dir, const char *name )
execution_worker_data_t *wed = (execution_worker_data_t *)worker->execution_data;
wed->spool_file = fopen( filename, "a+" );
+ wed->read_pos = 0;
return 0;
}
@@ -450,6 +452,11 @@ static int master_output_write_terminated( const char *spool_dir, json_object *o
return 0;
}
+void master_output_tail( const char *name, char *s, size_t len )
+{
+ //~ snprintf( s, len, "messages worker '%s'..\n", name );
+}
+
static void *master_func( void *thread_data )
{
master_thread_data_t *tdata = (master_thread_data_t *)thread_data;
diff --git a/src/master.h b/src/master.h
index 616a763..77ca3f5 100644
--- a/src/master.h
+++ b/src/master.h
@@ -11,6 +11,8 @@ int master_free( );
int master_start_worker( const char *name );
int master_stop_worker( const char *name );
+void master_output_tail( const char *name, char *s, size_t len );
+
#define MAX_COORDINATORS 128
#define MAX_COORDINATOR_AGE 10
diff --git a/src/webserver.c b/src/webserver.c
index 3e3d2e7..f30a811 100644
--- a/src/webserver.c
+++ b/src/webserver.c
@@ -46,7 +46,26 @@ static int handle_request( void *cls, struct MHD_Connection *connection,
}
}
} else if( strcmp( url, "/worker" ) == 0 ) {
- snprintf( biruda_msg, sizeof( biruda_msg ), "messages ..\n" );
+
+ const char *op = MHD_lookup_connection_value( connection, MHD_GET_ARGUMENT_KIND, "op" );
+
+ printf( "Got GET operation '%s'\n", op );
+
+ if( op == NULL ) {
+ return MHD_NO;
+ }
+
+ if( strcmp( op, "output" ) == 0 ) {
+
+ const char *name = MHD_lookup_connection_value( connection, MHD_GET_ARGUMENT_KIND, "name" );
+
+ if( name != NULL ) {
+ master_output_tail( name, biruda_msg, sizeof( biruda_msg ) );
+ } else {
+ return MHD_NO;
+ }
+ }
+
} else {
snprintf( biruda_msg, sizeof( biruda_msg ), "Welcome to biruda! Please state your wish..\n" );
}