Changeset aaa42af67633892820876006049f47cc9f5d2a6b

Show
Ignore:
Timestamp:
12/24/09 15:17:47 (4 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1261667867 +0000
git-parent:

[f4a87edf072c4d9193702519dea7eba52fcb73ff]

git-author:
Theo Schlossnagle <jesus@omniti.com> 1261667867 +0000
Message:

add a rest call to get a noit's config back, fixes #227

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/Makefile.in

    r954faae raaa42af  
    152152 
    153153stratcon_datastore.o:   stratcon_datastore.c 
    154         @$(CC) $(CPPFLAGS) $(PGCFLAGS) -c $< 
     154        @$(CC) $(CPPFLAGS) $(PGCFLAGS) $(CFLAGS) -c $< 
    155155        @echo "- compiling $<" 
    156156 
  • src/stratcon.conf.in

    rf4a87ed raaa42af  
    153153                $5) 
    154154      ]]></config> 
     155      <findconfig><![CDATA[ 
     156        SELECT config FROM stratcon.current_node_config WHERE remote_cn = $1 
     157      ]]></findconfig> 
    155158    </statements> 
    156159  </database> 
  • src/stratcon_datastore.c

    rf4a87ed raaa42af  
    4242#include "noit_conf.h" 
    4343#include "noit_check.h" 
     44#include "noit_rest.h" 
    4445#include <unistd.h> 
    4546#include <fcntl.h> 
     
    7172DECL_STMT(metric_insert_text, metric_text); 
    7273DECL_STMT(config_insert, config); 
     74DECL_STMT(config_get, findconfig); 
    7375 
    7476static noit_log_stream_t ds_err = NULL; 
     
    17271729  return loaded; 
    17281730} 
     1731 
     1732static int 
     1733rest_get_noit_config(noit_http_rest_closure_t *restc, 
     1734                     int npats, char **pats) { 
     1735  noit_http_session_ctx *ctx = restc->http_ctx; 
     1736  ds_single_detail *d; 
     1737  int row_count = 0; 
     1738  const char *xml = NULL; 
     1739  conn_q *cq = NULL; 
     1740 
     1741  if(npats != 0) { 
     1742    noit_http_response_server_error(ctx, "text/xml"); 
     1743    noit_http_response_end(ctx); 
     1744    return 0; 
     1745  } 
     1746  d = calloc(1, sizeof(*d)); 
     1747  GET_QUERY(config_get); 
     1748  cq = get_conn_q_for_metanode(); 
     1749  if(!cq) { 
     1750    noit_http_response_server_error(ctx, "text/xml"); 
     1751    goto bad_row; 
     1752  } 
     1753 
     1754  DECLARE_PARAM_STR(restc->remote_cn, 
     1755                    restc->remote_cn ? strlen(restc->remote_cn) : 0); 
     1756  PG_EXEC(config_get); 
     1757  row_count = PQntuples(d->res); 
     1758  if(row_count == 1) PG_GET_STR_COL(xml, 0, "config"); 
     1759 
     1760  if(xml == NULL) { 
     1761    char buff[1024]; 
     1762    snprintf(buff, sizeof(buff), "<error><remote_cn>%s</remote_cn>" 
     1763                                 "<row_count>%d</row_count></error>\n", 
     1764             restc->remote_cn, row_count); 
     1765    noit_http_response_append(ctx, buff, strlen(buff)); 
     1766    noit_http_response_not_found(ctx, "text/xml"); 
     1767  } 
     1768  else { 
     1769    noit_http_response_append(ctx, xml, strlen(xml)); 
     1770    noit_http_response_ok(ctx, "text/xml"); 
     1771  } 
     1772 bad_row: 
     1773  free_params((ds_single_detail *)d); 
     1774  d->nparams = 0; 
     1775  if(cq) release_conn_q(cq); 
     1776 
     1777  noit_http_response_end(ctx); 
     1778  return 0; 
     1779} 
     1780 
    17291781void 
    17301782stratcon_datastore_init() { 
     
    17451797  stratcon_datastore_ingest_all_storagenode_info(); 
    17461798  stratcon_datastore_sweep_journals(); 
    1747 
     1799 
     1800  assert(noit_http_rest_register_auth( 
     1801    "GET", "/noits/", "^config$", rest_get_noit_config, 
     1802             noit_http_rest_client_cert_auth 
     1803  ) == 0); 
     1804
     1805