AtmiBrokerAdmin.cxx
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:5k
源码类别:

中间件编程

开发平台:

Java

  1. /*
  2.  * JBoss, Home of Professional Open Source
  3.  * Copyright 2008, Red Hat, Inc., and others contributors as indicated
  4.  * by the @authors tag. All rights reserved.
  5.  * See the copyright.txt in the distribution for a
  6.  * full listing of individual contributors.
  7.  * This copyrighted material is made available to anyone wishing to use,
  8.  * modify, copy, or redistribute it subject to the terms and conditions
  9.  * of the GNU Lesser General Public License, v. 2.1.
  10.  * This program is distributed in the hope that it will be useful, but WITHOUT A
  11.  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  12.  * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  13.  * You should have received a copy of the GNU Lesser General Public License,
  14.  * v.2.1 along with this distribution; if not, write to the Free Software
  15.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  16.  * MA  02110-1301, USA.
  17.  */
  18. #include "log4cxx/logger.h"
  19. #include "ace/OS_NS_stdlib.h"
  20. #include "ace/OS_NS_stdio.h"
  21. #include "ace/OS_NS_string.h"
  22. #include "AtmiBrokerServerControl.h"
  23. #include "xatmi.h"
  24. #include "string.h"
  25. extern const char* version;
  26. log4cxx::LoggerPtr loggerAtmiBrokerAdmin(log4cxx::Logger::getLogger(
  27. "AtmiBrokerAdmin"));
  28. void ADMIN(TPSVCINFO* svcinfo) {
  29. char* toReturn = NULL;
  30. long len = 1;
  31. char* req = svcinfo->data;
  32. toReturn = tpalloc((char*) "X_OCTET", NULL, len);
  33. toReturn[0] = '0';
  34. strtok(req, ",");
  35. char* svc = strtok(NULL, ",");
  36. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "get request is " << req);
  37. if (strncmp(req, "serverdone", 10) == 0) {
  38. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "get serverdone command");
  39. toReturn[0] = '1';
  40. server_sigint_handler_callback(0);
  41. } else if (strncmp(req, "advertise", 9) == 0) {
  42. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "get advertise command");
  43. if (svc != NULL && strcmp(svc, svcinfo->name) != 0 && advertiseByAdmin(
  44. svc) == 0) {
  45. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "advertise service "
  46. << svc << " OK");
  47. toReturn[0] = '1';
  48. } else {
  49. LOG4CXX_WARN(loggerAtmiBrokerAdmin, (char*) "advertise service "
  50. << svc << " FAIL");
  51. }
  52. } else if (strncmp(req, "unadvertise", 11) == 0) {
  53. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "get unadvertise command");
  54. if (svc != NULL && strcmp(svc, svcinfo->name) != 0
  55. && tpunadvertise(svc) == 0) {
  56. toReturn[0] = '1';
  57. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "unadvertise service "
  58. << svc << " OK");
  59. } else {
  60. LOG4CXX_WARN(loggerAtmiBrokerAdmin, (char*) "unadvertise service "
  61. << svc << " FAIL");
  62. }
  63. } else if (strncmp(req, "status", 6) == 0) {
  64. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "get status command");
  65. char* status = NULL;
  66. len += getServiceStatus(&status, svc) + 1;
  67. if (len > 1 && status != NULL) {
  68. toReturn = tprealloc(toReturn, len + 1);
  69. ACE_OS::memcpy(&toReturn[1], status, len);
  70. free(status);
  71. toReturn[0] = '1';
  72. } else {
  73. LOG4CXX_WARN(loggerAtmiBrokerAdmin,
  74. (char*) "get server status FAIL");
  75. }
  76. } else if (strncmp(req, "version", 7) == 0) {
  77. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "get version command");
  78. toReturn = tprealloc(toReturn, strlen(version) + 1 + 1);
  79. len += ACE_OS::sprintf(&toReturn[1], "%s", version);
  80. toReturn[0] = '1';
  81. } else if (strncmp(req, "counter", 7) == 0) {
  82. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "get counter command");
  83. long counter = 0;
  84. if (svc != NULL) {
  85. toReturn = tprealloc(toReturn, 16);
  86. counter = getServiceMessageCounter(svc);
  87. len += ACE_OS::sprintf(&toReturn[1], "%ld", counter);
  88. toReturn[0] = '1';
  89. } else {
  90. LOG4CXX_WARN(loggerAtmiBrokerAdmin,
  91. (char*) "get counter failed with no service");
  92. }
  93. } else if (strncmp(req, "error_counter", 13) == 0) {
  94. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin,
  95. (char*) "get error_counter command");
  96. long counter = 0;
  97. if (svc != NULL) {
  98. toReturn = tprealloc(toReturn, 16);
  99. counter = getServiceErrorCounter(svc);
  100. len += ACE_OS::sprintf(&toReturn[1], "%ld", counter);
  101. toReturn[0] = '1';
  102. } else {
  103. LOG4CXX_WARN(loggerAtmiBrokerAdmin,
  104. (char*) "get error counter failed with no service");
  105. }
  106. } else if (strncmp(req, "pause", 5) == 0) {
  107. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "get pause command");
  108. if (pauseServerByAdmin() == 0) {
  109. toReturn[0] = '1';
  110. }
  111. } else if (strncmp(req, "resume", 6) == 0) {
  112. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "get resume command");
  113. if (resumeServerByAdmin() == 0) {
  114. toReturn[0] = '1';
  115. }
  116. } else if (strncmp(req, "responsetime", 12) == 0) {
  117. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "get responsetime command");
  118. unsigned long min;
  119. unsigned long avg;
  120. unsigned long max;
  121. if (svc != NULL) {
  122. toReturn = tprealloc(toReturn, 256);
  123. getResponseTime(svc, &min, &avg, &max);
  124. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "min = " << min
  125. << (char*) " avg=" << avg << (char*) " max=" << max);
  126. len += ACE_OS::sprintf(&toReturn[1], "%d,%d,%d", min, avg, max);
  127. toReturn[0] = '1';
  128. } else {
  129. LOG4CXX_WARN(loggerAtmiBrokerAdmin,
  130. (char*) "get response time failed with no service");
  131. }
  132. }
  133. LOG4CXX_DEBUG(loggerAtmiBrokerAdmin, (char*) "service done");
  134. tpreturn(TPSUCCESS, 0, toReturn, len, 0);
  135. }