init_connectors.c 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #include "exporting_engine.h"
  3. #include "graphite/graphite.h"
  4. #include "json/json.h"
  5. #include "opentsdb/opentsdb.h"
  6. #if ENABLE_PROMETHEUS_REMOTE_WRITE
  7. #include "prometheus/remote_write/remote_write.h"
  8. #endif
  9. #if HAVE_KINESIS
  10. #include "aws_kinesis/aws_kinesis.h"
  11. #endif
  12. #if ENABLE_EXPORTING_PUBSUB
  13. #include "pubsub/pubsub.h"
  14. #endif
  15. #if HAVE_MONGOC
  16. #include "mongodb/mongodb.h"
  17. #endif
  18. /**
  19. * Initialize connectors
  20. *
  21. * @param engine an engine data structure.
  22. * @return Returns 0 on success, 1 on failure.
  23. */
  24. int init_connectors(struct engine *engine)
  25. {
  26. engine->now = now_realtime_sec();
  27. for (struct instance *instance = engine->instance_root; instance; instance = instance->next) {
  28. instance->index = engine->instance_num++;
  29. instance->after = engine->now;
  30. switch (instance->config.type) {
  31. case EXPORTING_CONNECTOR_TYPE_GRAPHITE:
  32. if (init_graphite_instance(instance) != 0)
  33. return 1;
  34. break;
  35. case EXPORTING_CONNECTOR_TYPE_JSON:
  36. if (init_json_instance(instance) != 0)
  37. return 1;
  38. break;
  39. case EXPORTING_CONNECTOR_TYPE_OPENTSDB_USING_TELNET:
  40. if (init_opentsdb_telnet_instance(instance) != 0)
  41. return 1;
  42. break;
  43. case EXPORTING_CONNECTOR_TYPE_OPENTSDB_USING_HTTP:
  44. if (init_opentsdb_http_instance(instance) != 0)
  45. return 1;
  46. break;
  47. case EXPORTING_CONNECTOR_TYPE_PROMETHEUS_REMOTE_WRITE:
  48. #if ENABLE_PROMETHEUS_REMOTE_WRITE
  49. if (init_prometheus_remote_write_instance(instance) != 0)
  50. return 1;
  51. #endif
  52. break;
  53. case EXPORTING_CONNECTOR_TYPE_KINESIS:
  54. #if HAVE_KINESIS
  55. if (init_aws_kinesis_instance(instance) != 0)
  56. return 1;
  57. #endif
  58. break;
  59. case EXPORTING_CONNECTOR_TYPE_PUBSUB:
  60. #if ENABLE_EXPORTING_PUBSUB
  61. if (init_pubsub_instance(instance) != 0)
  62. return 1;
  63. #endif
  64. break;
  65. case EXPORTING_CONNECTOR_TYPE_MONGODB:
  66. #if HAVE_MONGOC
  67. if (init_mongodb_instance(instance) != 0)
  68. return 1;
  69. #endif
  70. break;
  71. default:
  72. error("EXPORTING: unknown exporting connector type");
  73. return 1;
  74. }
  75. // dispatch the instance worker thread
  76. int error = uv_thread_create(&instance->thread, instance->worker, instance);
  77. if (error) {
  78. error("EXPORTING: cannot create tread worker. uv_thread_create(): %s", uv_strerror(error));
  79. return 1;
  80. }
  81. char threadname[NETDATA_THREAD_NAME_MAX + 1];
  82. snprintfz(threadname, NETDATA_THREAD_NAME_MAX, "EXPORTING-%zu", instance->index);
  83. uv_thread_set_name_np(instance->thread, threadname);
  84. send_statistics("EXPORTING_START", "OK", instance->config.type_name);
  85. }
  86. return 0;
  87. }