passenger 4.0.42 → 4.0.43

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (67) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/CHANGELOG +13 -0
  5. data/CONTRIBUTING.md +2 -19
  6. data/build/agents.rb +4 -1
  7. data/build/cxx_tests.rb +7 -2
  8. data/build/debian.rb +1 -1
  9. data/debian.template/control.template +0 -2
  10. data/doc/CodingTipsAndPitfalls.md +56 -0
  11. data/doc/Users guide Apache.idmap.txt +16 -14
  12. data/doc/Users guide Nginx.idmap.txt +8 -6
  13. data/doc/Users guide Standalone.idmap.txt +3 -1
  14. data/doc/Users guide Standalone.txt +1 -1
  15. data/doc/users_guide_snippets/environment_variables.txt +1 -0
  16. data/doc/users_guide_snippets/installation.txt +5 -5
  17. data/doc/users_guide_snippets/support_information.txt +42 -9
  18. data/doc/users_guide_snippets/troubleshooting/default.txt +42 -0
  19. data/ext/common/ApplicationPool2/Common.h +1 -0
  20. data/ext/common/ApplicationPool2/DirectSpawner.h +2 -7
  21. data/ext/common/ApplicationPool2/DummySpawner.h +1 -1
  22. data/ext/common/ApplicationPool2/Group.h +4 -2
  23. data/ext/common/ApplicationPool2/Options.h +9 -7
  24. data/ext/common/ApplicationPool2/Pool.h +83 -40
  25. data/ext/common/ApplicationPool2/Process.h +2 -6
  26. data/ext/common/ApplicationPool2/README.md +0 -40
  27. data/ext/common/ApplicationPool2/SmartSpawner.h +2 -9
  28. data/ext/common/ApplicationPool2/Spawner.h +1 -4
  29. data/ext/common/ApplicationPool2/SpawnerFactory.h +6 -9
  30. data/ext/common/ApplicationPool2/SuperGroup.h +3 -3
  31. data/ext/common/Constants.h +1 -1
  32. data/ext/common/UnionStation/Connection.h +227 -0
  33. data/ext/common/UnionStation/Core.h +497 -0
  34. data/ext/common/UnionStation/ScopeLog.h +172 -0
  35. data/ext/common/UnionStation/Transaction.h +276 -0
  36. data/ext/common/Utils.cpp +83 -8
  37. data/ext/common/Utils.h +25 -4
  38. data/ext/common/Utils/AnsiColorConstants.h +1 -0
  39. data/ext/common/Utils/ProcessMetricsCollector.h +6 -170
  40. data/ext/common/Utils/SpeedMeter.h +258 -0
  41. data/ext/common/Utils/StrIntUtils.cpp +6 -0
  42. data/ext/common/Utils/StringScanning.h +277 -0
  43. data/ext/common/Utils/SystemMetricsCollector.h +1460 -0
  44. data/ext/common/agents/Base.cpp +8 -8
  45. data/ext/common/agents/HelperAgent/Main.cpp +12 -6
  46. data/ext/common/agents/HelperAgent/RequestHandler.h +15 -16
  47. data/ext/common/agents/HelperAgent/SystemMetricsTool.cpp +199 -0
  48. data/ext/common/agents/LoggingAgent/LoggingServer.h +2 -1
  49. data/ext/common/agents/SpawnPreparer.cpp +20 -32
  50. data/lib/phusion_passenger.rb +1 -1
  51. data/lib/phusion_passenger/config/list_instances_command.rb +118 -0
  52. data/lib/phusion_passenger/config/main.rb +22 -4
  53. data/lib/phusion_passenger/config/system_metrics_command.rb +37 -0
  54. data/lib/phusion_passenger/config/utils.rb +1 -1
  55. data/lib/phusion_passenger/loader_shared_helpers.rb +8 -5
  56. data/lib/phusion_passenger/platform_info/compiler.rb +1 -1
  57. data/resources/templates/error_layout.html.template +3 -3
  58. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -5
  59. data/test/cxx/ApplicationPool2/PoolTest.cpp +1 -3
  60. data/test/cxx/ApplicationPool2/ProcessTest.cpp +4 -4
  61. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -7
  62. data/test/cxx/RequestHandlerTest.cpp +9 -3
  63. data/test/cxx/UnionStationTest.cpp +61 -64
  64. metadata +13 -4
  65. metadata.gz.asc +7 -7
  66. data/ext/common/UnionStation.h +0 -968
  67. data/helper-scripts/system-memory-stats.py +0 -207
@@ -5,6 +5,7 @@
5
5
  #include <ApplicationPool2/Pool.h>
6
6
  #include <Utils/json.h>
7
7
  #include <Utils/IOUtils.h>
8
+ #include <Utils/StrIntUtils.h>
8
9
  #include <Utils/Timer.h>
9
10
  #include <Utils/BufferedIO.h>
10
11
 
@@ -42,7 +43,7 @@ namespace tut {
42
43
 
43
44
  RequestHandlerTest() {
44
45
  createServerInstanceDirAndGeneration(serverInstanceDir, generation);
45
- spawnerFactory = boost::make_shared<SpawnerFactory>(bg.safe, *resourceLocator, generation);
46
+ spawnerFactory = boost::make_shared<SpawnerFactory>(*resourceLocator, generation);
46
47
  pool = boost::make_shared<Pool>(spawnerFactory);
47
48
  pool->initialize();
48
49
  serverFilename = generation->getPath() + "/server";
@@ -97,7 +98,9 @@ namespace tut {
97
98
  return connection;
98
99
  }
99
100
 
100
- void sendHeaders(const map<string, string> &headers, ...) {
101
+ void sendHeaders(const map<string, string> &headers, const char *header1,
102
+ const char *value1, ...)
103
+ {
101
104
  va_list ap;
102
105
  const char *arg;
103
106
  map<string, string> finalHeaders;
@@ -111,7 +114,10 @@ namespace tut {
111
114
  finalHeaders[key] = value;
112
115
  }
113
116
 
114
- va_start(ap, headers);
117
+ finalHeaders[makeStaticStringWithNull(header1)] =
118
+ makeStaticStringWithNull(value1);
119
+
120
+ va_start(ap, value1);
115
121
  while ((arg = va_arg(ap, const char *)) != NULL) {
116
122
  string key(arg, strlen(arg) + 1);
117
123
  arg = va_arg(ap, const char *);
@@ -1,5 +1,6 @@
1
1
  #include <TestSupport.h>
2
- #include <UnionStation.h>
2
+ #include <UnionStation/Core.h>
3
+ #include <UnionStation/Transaction.h>
3
4
  #include <MessageClient.h>
4
5
  #include <agents/LoggingAgent/LoggingServer.h>
5
6
  #include <Utils/MessageIO.h>
@@ -32,7 +33,7 @@ namespace tut {
32
33
  FileDescriptor serverFd;
33
34
  LoggingServerPtr server;
34
35
  boost::shared_ptr<oxt::thread> serverThread;
35
- LoggerFactoryPtr factory, factory2, factory3, factory4;
36
+ CorePtr core, core2, core3, core4;
36
37
 
37
38
  UnionStationTest() {
38
39
  createServerInstanceDirAndGeneration(serverInstanceDir, generation);
@@ -44,14 +45,14 @@ namespace tut {
44
45
  setLogLevel(-1);
45
46
 
46
47
  startLoggingServer();
47
- factory = ptr(new LoggerFactory(socketAddress, "test", "1234",
48
- "localhost"));
49
- factory2 = ptr(new LoggerFactory(socketAddress, "test", "1234",
50
- "localhost"));
51
- factory3 = ptr(new LoggerFactory(socketAddress, "test", "1234",
52
- "localhost"));
53
- factory4 = ptr(new LoggerFactory(socketAddress, "test", "1234",
54
- "localhost"));
48
+ core = make_shared<Core>(socketAddress, "test", "1234",
49
+ "localhost");
50
+ core2 = make_shared<Core>(socketAddress, "test", "1234",
51
+ "localhost");
52
+ core3 = make_shared<Core>(socketAddress, "test", "1234",
53
+ "localhost");
54
+ core4 = make_shared<Core>(socketAddress, "test", "1234",
55
+ "localhost");
55
56
  }
56
57
 
57
58
  ~UnionStationTest() {
@@ -128,12 +129,12 @@ namespace tut {
128
129
  // Test logging of new transaction.
129
130
  SystemTime::forceAll(YESTERDAY);
130
131
 
131
- LoggerPtr log = factory->newTransaction("foobar");
132
+ TransactionPtr log = core->newTransaction("foobar");
132
133
  log->message("hello");
133
134
  log->message("world");
134
135
  log->flushToDiskAfterClose(true);
135
136
 
136
- ensure(!factory->isNull());
137
+ ensure(!core->isNull());
137
138
  ensure(!log->isNull());
138
139
 
139
140
  log.reset();
@@ -147,11 +148,11 @@ namespace tut {
147
148
  // Test logging of existing transaction.
148
149
  SystemTime::forceAll(YESTERDAY);
149
150
 
150
- LoggerPtr log = factory->newTransaction("foobar");
151
+ TransactionPtr log = core->newTransaction("foobar");
151
152
  log->message("message 1");
152
153
  log->flushToDiskAfterClose(true);
153
154
 
154
- LoggerPtr log2 = factory2->continueTransaction(log->getTxnId(),
155
+ TransactionPtr log2 = core2->continueTransaction(log->getTxnId(),
155
156
  log->getGroupName(), log->getCategory());
156
157
  log2->message("message 2");
157
158
  log2->flushToDiskAfterClose(true);
@@ -167,19 +168,19 @@ namespace tut {
167
168
  TEST_METHOD(3) {
168
169
  // Test logging with different points in time.
169
170
  SystemTime::forceAll(YESTERDAY);
170
- LoggerPtr log = factory->newTransaction("foobar");
171
+ TransactionPtr log = core->newTransaction("foobar");
171
172
  log->message("message 1");
172
173
  SystemTime::forceAll(TODAY);
173
174
  log->message("message 2");
174
175
  log->flushToDiskAfterClose(true);
175
176
 
176
177
  SystemTime::forceAll(TOMORROW);
177
- LoggerPtr log2 = factory2->continueTransaction(log->getTxnId(),
178
+ TransactionPtr log2 = core2->continueTransaction(log->getTxnId(),
178
179
  log->getGroupName(), log->getCategory());
179
180
  log2->message("message 3");
180
181
  log2->flushToDiskAfterClose(true);
181
182
 
182
- LoggerPtr log3 = factory3->newTransaction("foobar");
183
+ TransactionPtr log3 = core3->newTransaction("foobar");
183
184
  log3->message("message 4");
184
185
  log3->flushToDiskAfterClose(true);
185
186
 
@@ -196,13 +197,13 @@ namespace tut {
196
197
 
197
198
  TEST_METHOD(4) {
198
199
  // newTransaction() and continueTransaction() write an ATTACH message
199
- // to the log file, while Logger writes a DETACH message upon
200
+ // to the log file, while UnionStation::Transaction writes a DETACH message upon
200
201
  // destruction.
201
202
  SystemTime::forceAll(YESTERDAY);
202
- LoggerPtr log = factory->newTransaction("foobar");
203
+ TransactionPtr log = core->newTransaction("foobar");
203
204
 
204
205
  SystemTime::forceAll(TODAY);
205
- LoggerPtr log2 = factory2->continueTransaction(log->getTxnId(),
206
+ TransactionPtr log2 = core2->continueTransaction(log->getTxnId(),
206
207
  log->getGroupName(), log->getCategory());
207
208
  log2->flushToDiskAfterClose(true);
208
209
  log2.reset();
@@ -221,11 +222,11 @@ namespace tut {
221
222
  TEST_METHOD(5) {
222
223
  // newTransaction() generates a new ID, while continueTransaction()
223
224
  // reuses the ID.
224
- LoggerPtr log = factory->newTransaction("foobar");
225
- LoggerPtr log2 = factory2->newTransaction("foobar");
226
- LoggerPtr log3 = factory3->continueTransaction(log->getTxnId(),
225
+ TransactionPtr log = core->newTransaction("foobar");
226
+ TransactionPtr log2 = core2->newTransaction("foobar");
227
+ TransactionPtr log3 = core3->continueTransaction(log->getTxnId(),
227
228
  log->getGroupName(), log->getCategory());
228
- LoggerPtr log4 = factory4->continueTransaction(log2->getTxnId(),
229
+ TransactionPtr log4 = core4->continueTransaction(log2->getTxnId(),
229
230
  log2->getGroupName(), log2->getCategory());
230
231
 
231
232
  ensure_equals(log->getTxnId(), log3->getTxnId());
@@ -234,19 +235,19 @@ namespace tut {
234
235
  }
235
236
 
236
237
  TEST_METHOD(6) {
237
- // An empty Logger doesn't do anything.
238
- Logger log;
238
+ // An empty UnionStation::Transaction doesn't do anything.
239
+ UnionStation::Transaction log;
239
240
  ensure(log.isNull());
240
241
  log.message("hello world");
241
242
  ensure_equals(getFileType(dumpFile), FT_NONEXISTANT);
242
243
  }
243
244
 
244
245
  TEST_METHOD(7) {
245
- // An empty LoggerFactory doesn't do anything.
246
- LoggerFactory factory;
247
- ensure(factory.isNull());
246
+ // An empty UnionStation::Core doesn't do anything.
247
+ UnionStation::Core core;
248
+ ensure(core.isNull());
248
249
 
249
- LoggerPtr log = factory.newTransaction("foo");
250
+ TransactionPtr log = core.newTransaction("foo");
250
251
  ensure(log->isNull());
251
252
  log->message("hello world");
252
253
  ensure_equals(getFileType(dumpFile), FT_NONEXISTANT);
@@ -255,19 +256,18 @@ namespace tut {
255
256
  TEST_METHOD(11) {
256
257
  // newTransaction() does not reconnect to the server for a short
257
258
  // period of time if connecting failed
258
- factory->setReconnectTimeout(60 * 1000000);
259
- factory->setMaxConnectTries(1);
259
+ core->setReconnectTimeout(60 * 1000000);
260
260
 
261
261
  SystemTime::forceAll(TODAY);
262
262
  stopLoggingServer();
263
- ensure(factory->newTransaction("foobar")->isNull());
263
+ ensure(core->newTransaction("foobar")->isNull());
264
264
 
265
265
  SystemTime::forceAll(TODAY + 30 * 1000000);
266
266
  startLoggingServer();
267
- ensure(factory->newTransaction("foobar")->isNull());
267
+ ensure(core->newTransaction("foobar")->isNull());
268
268
 
269
269
  SystemTime::forceAll(TODAY + 61 * 1000000);
270
- ensure(!factory->newTransaction("foobar")->isNull());
270
+ ensure(!core->newTransaction("foobar")->isNull());
271
271
  }
272
272
 
273
273
  TEST_METHOD(12) {
@@ -277,23 +277,23 @@ namespace tut {
277
277
  // calls will reestablish the connection when the connection timeout
278
278
  // has passed.
279
279
  SystemTime::forceAll(TODAY);
280
- LoggerPtr log, log2;
280
+ TransactionPtr log, log2;
281
281
 
282
- log = factory->newTransaction("foobar");
283
- factory2->continueTransaction(log->getTxnId(), "foobar");
282
+ log = core->newTransaction("foobar");
283
+ core2->continueTransaction(log->getTxnId(), "foobar");
284
284
  log.reset(); // Check connection back into the pool.
285
285
  stopLoggingServer();
286
286
  startLoggingServer();
287
287
 
288
- log = factory->newTransaction("foobar");
288
+ log = core->newTransaction("foobar");
289
289
  ensure("(1)", log->isNull());
290
- log2 = factory2->continueTransaction("some-id", "foobar");
290
+ log2 = core2->continueTransaction("some-id", "foobar");
291
291
  ensure("(2)", log2->isNull());
292
292
 
293
293
  SystemTime::forceAll(TODAY + 60000000);
294
- log = factory->newTransaction("foobar");
294
+ log = core->newTransaction("foobar");
295
295
  ensure("(3)", !log->isNull());
296
- log2 = factory2->continueTransaction(log->getTxnId(), "foobar");
296
+ log2 = core2->continueTransaction(log->getTxnId(), "foobar");
297
297
  ensure("(4)", !log2->isNull());
298
298
  log2->message("hello");
299
299
  log2->flushToDiskAfterClose(true);
@@ -308,23 +308,21 @@ namespace tut {
308
308
  TEST_METHOD(13) {
309
309
  // continueTransaction() does not reconnect to the server for a short
310
310
  // period of time if connecting failed
311
- factory->setReconnectTimeout(60 * 1000000);
312
- factory->setMaxConnectTries(1);
313
- factory2->setReconnectTimeout(60 * 1000000);
314
- factory2->setMaxConnectTries(1);
311
+ core->setReconnectTimeout(60 * 1000000);
312
+ core2->setReconnectTimeout(60 * 1000000);
315
313
 
316
314
  SystemTime::forceAll(TODAY);
317
- LoggerPtr log = factory->newTransaction("foobar");
318
- factory2->continueTransaction(log->getTxnId(), "foobar");
315
+ TransactionPtr log = core->newTransaction("foobar");
316
+ core2->continueTransaction(log->getTxnId(), "foobar");
319
317
  stopLoggingServer();
320
- ensure(factory2->continueTransaction(log->getTxnId(), "foobar")->isNull());
318
+ ensure(core2->continueTransaction(log->getTxnId(), "foobar")->isNull());
321
319
 
322
320
  SystemTime::forceAll(TODAY + 30 * 1000000);
323
321
  startLoggingServer();
324
- ensure(factory2->continueTransaction(log->getTxnId(), "foobar")->isNull());
322
+ ensure(core2->continueTransaction(log->getTxnId(), "foobar")->isNull());
325
323
 
326
324
  SystemTime::forceAll(TODAY + 61 * 1000000);
327
- ensure(!factory2->continueTransaction(log->getTxnId(), "foobar")->isNull());
325
+ ensure(!core2->continueTransaction(log->getTxnId(), "foobar")->isNull());
328
326
  }
329
327
 
330
328
  TEST_METHOD(14) {
@@ -515,7 +513,7 @@ namespace tut {
515
513
 
516
514
  TEST_METHOD(22) {
517
515
  // The destructor flushes all data.
518
- LoggerPtr log = factory->newTransaction("foobar");
516
+ TransactionPtr log = core->newTransaction("foobar");
519
517
  log->message("hello world");
520
518
  log.reset();
521
519
  stopLoggingServer();
@@ -529,11 +527,11 @@ namespace tut {
529
527
  // The 'flush' command flushes all data.
530
528
  SystemTime::forceAll(YESTERDAY);
531
529
 
532
- LoggerPtr log = factory->newTransaction("foobar");
530
+ TransactionPtr log = core->newTransaction("foobar");
533
531
  log->message("hello world");
534
532
  log.reset();
535
533
 
536
- ConnectionPtr connection = factory->checkoutConnection();
534
+ ConnectionPtr connection = core->checkoutConnection();
537
535
  vector<string> args;
538
536
  writeArrayMessage(connection->fd, "flush", NULL);
539
537
  ensure(readArrayMessage(connection->fd, args));
@@ -551,19 +549,19 @@ namespace tut {
551
549
  SystemTime::forceAll(YESTERDAY);
552
550
  vector<string> args;
553
551
 
554
- LoggerPtr log = factory->newTransaction("foobar");
552
+ TransactionPtr log = core->newTransaction("foobar");
555
553
  log->message("hello world");
556
554
 
557
- LoggerPtr log2 = factory2->continueTransaction(log->getTxnId(),
555
+ TransactionPtr log2 = core2->continueTransaction(log->getTxnId(),
558
556
  log->getGroupName(), log->getCategory());
559
557
  log2->message("message 2");
560
558
  log2.reset();
561
559
 
562
- ConnectionPtr connection = factory->checkoutConnection();
560
+ ConnectionPtr connection = core->checkoutConnection();
563
561
  writeArrayMessage(connection->fd, "flush", NULL);
564
562
  ensure(readArrayMessage(connection->fd, args));
565
563
 
566
- connection = factory2->checkoutConnection();
564
+ connection = core2->checkoutConnection();
567
565
  writeArrayMessage(connection->fd, "flush", NULL);
568
566
  ensure(readArrayMessage(connection->fd, args));
569
567
 
@@ -669,7 +667,7 @@ namespace tut {
669
667
  // turned on.
670
668
  SystemTime::forceAll(YESTERDAY);
671
669
 
672
- LoggerPtr log = factory->newTransaction("foobar");
670
+ TransactionPtr log = core->newTransaction("foobar");
673
671
  log->message("hello world");
674
672
  log.reset();
675
673
 
@@ -682,7 +680,7 @@ namespace tut {
682
680
  }
683
681
 
684
682
  TEST_METHOD(28) {
685
- // LoggerFactory treats a server that's semi-gracefully exiting as
683
+ // UnionStation::Core treats a server that's semi-gracefully exiting as
686
684
  // one that's refusing connections.
687
685
  SystemTime::forceAll(YESTERDAY);
688
686
 
@@ -690,8 +688,7 @@ namespace tut {
690
688
  client.write("exit", "semi-gracefully", NULL);
691
689
  client.disconnect();
692
690
 
693
- factory->setMaxConnectTries(1);
694
- LoggerPtr log = factory->newTransaction("foobar");
691
+ TransactionPtr log = core->newTransaction("foobar");
695
692
  ensure(log->isNull());
696
693
  }
697
694
 
@@ -718,7 +715,7 @@ namespace tut {
718
715
  // Test logging of new transaction.
719
716
  SystemTime::forceAll(YESTERDAY);
720
717
 
721
- LoggerPtr log = factory->newTransaction("foobar", "requests", "-",
718
+ TransactionPtr log = core->newTransaction("foobar", "requests", "-",
722
719
  "uri == \"/foo\""
723
720
  "\1"
724
721
  "uri != \"/bar\"");
@@ -727,7 +724,7 @@ namespace tut {
727
724
  log->flushToDiskAfterClose(true);
728
725
  log.reset();
729
726
 
730
- log = factory->newTransaction("foobar", "requests", "-",
727
+ log = core->newTransaction("foobar", "requests", "-",
731
728
  "uri == \"/foo\""
732
729
  "\1"
733
730
  "uri == \"/bar\"");
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: passenger
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.42
4
+ version: 4.0.43
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phusion - http://www.phusion.nl/
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-07 00:00:00.000000000 Z
11
+ date: 2014-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -132,6 +132,7 @@ files:
132
132
  - doc/Architectural overview.html
133
133
  - doc/Architectural overview.idmap.txt
134
134
  - doc/Architectural overview.txt
135
+ - doc/CodingTipsAndPitfalls.md
135
136
  - doc/DebuggingAndStressTesting.md
136
137
  - doc/Packaging.html
137
138
  - doc/Packaging.txt.md
@@ -2168,7 +2169,10 @@ files:
2168
2169
  - ext/common/SafeLibev.h
2169
2170
  - ext/common/ServerInstanceDir.h
2170
2171
  - ext/common/StaticString.h
2171
- - ext/common/UnionStation.h
2172
+ - ext/common/UnionStation/Connection.h
2173
+ - ext/common/UnionStation/Core.h
2174
+ - ext/common/UnionStation/ScopeLog.h
2175
+ - ext/common/UnionStation/Transaction.h
2172
2176
  - ext/common/Utils.cpp
2173
2177
  - ext/common/Utils.h
2174
2178
  - ext/common/Utils/AnsiColorConstants.h
@@ -2205,10 +2209,13 @@ files:
2205
2209
  - ext/common/Utils/ProcessMetricsCollector.h
2206
2210
  - ext/common/Utils/ScopeGuard.h
2207
2211
  - ext/common/Utils/SmallVector.h
2212
+ - ext/common/Utils/SpeedMeter.h
2208
2213
  - ext/common/Utils/StrIntUtils.cpp
2209
2214
  - ext/common/Utils/StrIntUtils.h
2210
2215
  - ext/common/Utils/StreamBoyerMooreHorspool.h
2211
2216
  - ext/common/Utils/StringMap.h
2217
+ - ext/common/Utils/StringScanning.h
2218
+ - ext/common/Utils/SystemMetricsCollector.h
2212
2219
  - ext/common/Utils/SystemTime.cpp
2213
2220
  - ext/common/Utils/SystemTime.h
2214
2221
  - ext/common/Utils/Template.h
@@ -2233,6 +2240,7 @@ files:
2233
2240
  - ext/common/agents/HelperAgent/RequestHandler.cpp
2234
2241
  - ext/common/agents/HelperAgent/RequestHandler.h
2235
2242
  - ext/common/agents/HelperAgent/ScgiRequestParser.h
2243
+ - ext/common/agents/HelperAgent/SystemMetricsTool.cpp
2236
2244
  - ext/common/agents/LoggingAgent/AdminController.h
2237
2245
  - ext/common/agents/LoggingAgent/DataStoreId.h
2238
2246
  - ext/common/agents/LoggingAgent/FilterSupport.cpp
@@ -2348,7 +2356,6 @@ files:
2348
2356
  - helper-scripts/prespawn
2349
2357
  - helper-scripts/rack-loader.rb
2350
2358
  - helper-scripts/rack-preloader.rb
2351
- - helper-scripts/system-memory-stats.py
2352
2359
  - helper-scripts/wsgi-loader.py
2353
2360
  - helper-scripts/wsgi-preloader.py
2354
2361
  - lib/phusion_passenger.rb
@@ -2366,8 +2373,10 @@ files:
2366
2373
  - lib/phusion_passenger/config/build_native_support_command.rb
2367
2374
  - lib/phusion_passenger/config/command.rb
2368
2375
  - lib/phusion_passenger/config/detach_process_command.rb
2376
+ - lib/phusion_passenger/config/list_instances_command.rb
2369
2377
  - lib/phusion_passenger/config/main.rb
2370
2378
  - lib/phusion_passenger/config/restart_app_command.rb
2379
+ - lib/phusion_passenger/config/system_metrics_command.rb
2371
2380
  - lib/phusion_passenger/config/utils.rb
2372
2381
  - lib/phusion_passenger/config/validate_install_command.rb
2373
2382
  - lib/phusion_passenger/console_text_template.rb
metadata.gz.asc CHANGED
@@ -2,11 +2,11 @@
2
2
  Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
3
3
  Comment: GPGTools - http://gpgtools.org
4
4
 
5
- iQEcBAABAgAGBQJTagHhAAoJECrHRaUKISqMD6cH+wWb6/mBkguwed9UWsjY+LC8
6
- 42sUBsesd5hlxmVqjFN0jHxuPEE8tpcZSVBTrL3ZUZ1Ie05Eqen7Hv4MwkJvsPxz
7
- lUABjMsO8pWsK7Gy+epXYGsfzY47Tgeyc2VaXZsx5BlRRxzTQrnH3vKyPSaRKc12
8
- GxZs3I8up/rKek/R+WAkQdiVIu4ciQ7VSRET4QHYzNU4oCAgecSgh8SqXPUbqcHU
9
- lt0wSGudNa5o6NrIAkiRJ28mITiEfKHuuDdBV7OuGSeOT6tjSINL3UbANPb81O3x
10
- hOLafWUnPmfTgXCv3SFycp7mdIwTOROnx4c/kQfPXXln02TlCYjzkFVHFHG2Lrw=
11
- =fwu8
5
+ iQEcBAABAgAGBQJThfVVAAoJECrHRaUKISqMxm4H/1VmXIAwP/ui3DZ77GF/lFD7
6
+ Sx+4+kvHyWV7omZyqypxZ6v6rCtXLHb7iVeGq2nHYpPq1677XyPLMDWUUxWQ+4iX
7
+ Duvlm1f0BWIAiNtVjT0qAGnvaEWHfY94AHgPNXrDm4uZVWgdc03C3WgSU9C+w9et
8
+ 49uT+AjSzDOTjlSvtUJIxXXRUAdaB+Rk2Jv+OeN6ppfRLDJrtrue1MbVsJsACdTr
9
+ OZf0knUKURk6cPW8Kt09dvzM3U3qj+mXc4r6jPF6dbSK4xr9H8ZaqBiW1YSygEwM
10
+ lwn4z09wODlcJdNo0l4JeeygYyNSmKv259shnMMt0oAf89892ZEJSCEnODxIjGM=
11
+ =hyO5
12
12
  -----END PGP SIGNATURE-----