@@ -207,7 +207,7 @@ private[ui] class StreamingPage(parent: StreamingTab)
207
207
val minBatchTime = if (batchTimes.isEmpty) startTime else batchTimes.min
208
208
val maxBatchTime = if (batchTimes.isEmpty) startTime else batchTimes.max
209
209
210
- val eventRateForAllReceivers = new EventRateUIData (batches.map { batchInfo =>
210
+ val eventRateForAllStreams = new EventRateUIData (batches.map { batchInfo =>
211
211
(batchInfo.batchTime.milliseconds, batchInfo.numRecords * 1000.0 / listener.batchDuration)
212
212
})
213
213
@@ -231,37 +231,37 @@ private[ui] class StreamingPage(parent: StreamingTab)
231
231
val (maxTime, normalizedUnit) = UIUtils .normalizeDuration(_maxTime)
232
232
val formattedUnit = UIUtils .shortTimeUnitString(normalizedUnit)
233
233
234
- // Use the max input rate for all receivers ' graphs to make the Y axis ranges same.
234
+ // Use the max input rate for all InputDStreams ' graphs to make the Y axis ranges same.
235
235
// If it's not an integral number, just use its ceil integral number.
236
- val maxEventRate = eventRateForAllReceivers .max.map(_.ceil.toLong).getOrElse(0L )
236
+ val maxEventRate = eventRateForAllStreams .max.map(_.ceil.toLong).getOrElse(0L )
237
237
val minEventRate = 0L
238
238
239
- // JavaScript to show/hide the receiver sub table.
239
+ // JavaScript to show/hide the InputDStreams sub table.
240
240
val triangleJs =
241
241
s """ $$ ('#inputs-table').toggle('collapsed');
242
242
|var status = false;
243
243
|if ( $$ (this).html() == ' $BLACK_RIGHT_TRIANGLE_HTML') {
244
244
| $$ (this).html(' $BLACK_DOWN_TRIANGLE_HTML');status = true;}
245
245
|else { $$ (this).html(' $BLACK_RIGHT_TRIANGLE_HTML');status = false;}
246
246
|window.history.pushState('',
247
- | document.title, window.location.pathname + '?show-receivers -detail=' + status); """
247
+ | document.title, window.location.pathname + '?show-streams -detail=' + status); """
248
248
.stripMargin.replaceAll(" \\ n" , " " ) // it must be only one single line
249
249
250
250
val batchInterval = StreamingPage .convertToTimeUnit(listener.batchDuration, normalizedUnit)
251
251
252
252
val jsCollector = new JsCollector
253
253
254
- val graphUIDataForEventRateOfAllReceivers =
254
+ val graphUIDataForEventRateOfAllStreams =
255
255
new GraphUIData (
256
- " all-receiver -events-timeline" ,
257
- " all-receiver -events-histogram" ,
258
- eventRateForAllReceivers .data,
256
+ " all-stream -events-timeline" ,
257
+ " all-stream -events-histogram" ,
258
+ eventRateForAllStreams .data,
259
259
minBatchTime,
260
260
maxBatchTime,
261
261
minEventRate,
262
262
maxEventRate,
263
263
" events/sec" )
264
- graphUIDataForEventRateOfAllReceivers .generateDataJs(jsCollector)
264
+ graphUIDataForEventRateOfAllStreams .generateDataJs(jsCollector)
265
265
266
266
val graphUIDataForSchedulingDelay =
267
267
new GraphUIData (
@@ -299,7 +299,8 @@ private[ui] class StreamingPage(parent: StreamingTab)
299
299
formattedUnit)
300
300
graphUIDataForTotalDelay.generateDataJs(jsCollector)
301
301
302
- val hasReceiver = listener.allReceivers.nonEmpty
302
+ // It's false before the user registers the first InputDStream
303
+ val hasStream = listener.streamIds.nonEmpty
303
304
304
305
val numCompletedBatches = listener.retainedCompletedBatches.size
305
306
val numActiveBatches = batchTimes.length - numCompletedBatches
@@ -317,21 +318,21 @@ private[ui] class StreamingPage(parent: StreamingTab)
317
318
<td style =" vertical-align: middle;" >
318
319
<div style =" width: 160px;" >
319
320
<div >
320
- {if (hasReceiver ) {
321
+ {if (hasStream ) {
321
322
<span id =" triangle" onclick ={Unparsed (triangleJs)}>{Unparsed (BLACK_RIGHT_TRIANGLE_HTML )}</span >
322
323
}}
323
324
<strong >Input Rate </strong >
324
325
</div >
325
- <div >Avg : {eventRateForAllReceivers .formattedAvg} events/ sec</div >
326
+ <div >Avg : {eventRateForAllStreams .formattedAvg} events/ sec</div >
326
327
</div >
327
328
</td >
328
- <td class =" timeline" >{graphUIDataForEventRateOfAllReceivers .generateTimelineHtml(jsCollector)}</td >
329
- <td class =" histogram" >{graphUIDataForEventRateOfAllReceivers .generateHistogramHtml(jsCollector)}</td >
329
+ <td class =" timeline" >{graphUIDataForEventRateOfAllStreams .generateTimelineHtml(jsCollector)}</td >
330
+ <td class =" histogram" >{graphUIDataForEventRateOfAllStreams .generateHistogramHtml(jsCollector)}</td >
330
331
</tr >
331
- {if (hasReceiver ) {
332
+ {if (hasStream ) {
332
333
<tr id =" inputs-table" style =" display: none;" >
333
334
<td colspan =" 3" >
334
- {generateInputReceiversTable (jsCollector, minBatchTime, maxBatchTime, minEventRate, maxEventRate)}
335
+ {generateInputDStreamsTable (jsCollector, minBatchTime, maxBatchTime, minEventRate, maxEventRate)}
335
336
</td >
336
337
</tr >
337
338
}}
@@ -372,14 +373,14 @@ private[ui] class StreamingPage(parent: StreamingTab)
372
373
generateTimeMap(batchTimes) ++ table ++ jsCollector.toHtml
373
374
}
374
375
375
- private def generateInputReceiversTable (
376
+ private def generateInputDStreamsTable (
376
377
jsCollector : JsCollector ,
377
378
minX : Long ,
378
379
maxX : Long ,
379
380
minY : Double ,
380
381
maxY : Double ): Seq [Node ] = {
381
- val content = listener.allReceivers .map { receiverId =>
382
- generateInputReceiverRow (jsCollector, receiverId , minX, maxX, minY, maxY)
382
+ val content = listener.receivedEventRateWithBatchTime .map { case (streamId, eventRates) =>
383
+ generateInputDStreamRow (jsCollector, streamId, eventRates , minX, maxX, minY, maxY)
383
384
}.foldLeft[Seq [Node ]](Nil )(_ ++ _)
384
385
385
386
// scalastyle:off
@@ -400,33 +401,36 @@ private[ui] class StreamingPage(parent: StreamingTab)
400
401
// scalastyle:on
401
402
}
402
403
403
- private def generateInputReceiverRow (
404
+ private def generateInputDStreamRow (
404
405
jsCollector : JsCollector ,
405
- receiverId : Int ,
406
+ streamId : Int ,
407
+ eventRates : Seq [(Long , Double )],
406
408
minX : Long ,
407
409
maxX : Long ,
408
410
minY : Double ,
409
411
maxY : Double ): Seq [Node ] = {
410
- val receiverInfo = listener.receiverInfo(receiverId)
411
- val receiverName = receiverInfo.map(_.name).getOrElse(s " Receiver- $receiverId" )
412
+ // If this is a ReceiverInputDStream, we need to show the receiver info. Or we only need the
413
+ // InputDStream name.
414
+ val receiverInfo = listener.receiverInfo(streamId)
415
+ val receiverName = receiverInfo.map(_.name).
416
+ orElse(listener.streamName(streamId)).getOrElse(s " Stream- $streamId" )
412
417
val receiverActive = receiverInfo.map { info =>
413
418
if (info.active) " ACTIVE" else " INACTIVE"
414
419
}.getOrElse(emptyCell)
415
420
val receiverLocation = receiverInfo.map(_.location).getOrElse(emptyCell)
416
- val receiverLastError = listener. receiverInfo(receiverId) .map { info =>
421
+ val receiverLastError = receiverInfo.map { info =>
417
422
val msg = s " ${info.lastErrorMessage} - ${info.lastError}"
418
423
if (msg.size > 100 ) msg.take(97 ) + " ..." else msg
419
424
}.getOrElse(emptyCell)
420
425
val receiverLastErrorTime = receiverInfo.map {
421
426
r => if (r.lastErrorTime < 0 ) " -" else UIUtils .formatDate(r.lastErrorTime)
422
427
}.getOrElse(emptyCell)
423
- val receivedRecords =
424
- new EventRateUIData (listener.receivedEventRateWithBatchTime.get(receiverId).getOrElse(Seq ()))
428
+ val receivedRecords = new EventRateUIData (eventRates)
425
429
426
430
val graphUIDataForEventRate =
427
431
new GraphUIData (
428
- s " receiver- $receiverId -events-timeline " ,
429
- s " receiver- $receiverId -events-histogram " ,
432
+ s " stream- $streamId -events-timeline " ,
433
+ s " stream- $streamId -events-histogram " ,
430
434
receivedRecords.data,
431
435
minX,
432
436
maxX,
0 commit comments