struct list* do_direct_query( const char *master_host, int master_port ) { const char * query_string = "queue"; struct link *l; char master_addr[LINK_ADDRESS_MAX]; time_t stoptime = time(0) + work_queue_status_timeout; if(!domain_name_cache_lookup(master_host,master_addr)) { fprintf(stderr,"couldn't find address of %s\n",master_host); return 0; } l = link_connect(master_addr,master_port,stoptime); if(!l) { fprintf(stderr,"couldn't connect to %s port %d: %s\n",master_host,master_port,strerror(errno)); return 0; } link_putfstring(l,"%s_status\n",stoptime,query_string); struct jx *jarray = jx_parse_link(l,stoptime); struct jx *j = jarray->u.items->value; link_close(l); if(!j) { fprintf(stderr,"couldn't read from %s port %d: %s\n",master_host,master_port,strerror(errno)); return 0; } j->type = JX_OBJECT; struct list* master_list = list_create(); list_push_head(master_list, j); return master_list; }
struct jx *catalog_query_send_query(const char *url, time_t stoptime) { struct link *link = http_query(url, "GET", stoptime); if(!link) { return NULL; } struct jx *j = jx_parse_link(link,stoptime); link_close(link); if(!j) { debug(D_DEBUG,"query result failed to parse as JSON"); return NULL; } if(!jx_istype(j,JX_ARRAY)) { debug(D_DEBUG,"query result is not a JSON array"); jx_delete(j); return NULL; } return j; }