#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

chartType=XYLINE
chartTitle=Varying number of producer sessions on single connection
chartSubtitle=Persistent messages (1024b)
chartDescription=1-80P transacted on single connection, 20C transacted on separate connections, persistent, message payload 1KB.

xAxisTitle=Number of producer sessions
yAxisTitle=Throughput (KB/s)

# testName contains the number of sessions
series.1.statement=SELECT testName, throughputKbPerS FROM VaryingNumberOfProducerSessionsSingleConnection WHERE participantName = 'All'
series.1.legend=Current - End-to-end throughput
series.1.dir=${csvCurrentDir}
series.1.colourName=red

series.2.statement=SELECT testName, throughputKbPerS FROM VaryingNumberOfProducerSessionsSingleConnection WHERE participantName = 'All Producers'
series.2.legend=Current - Producer only throughput
series.2.dir=${csvCurrentDir}
series.2.colourName=blue

series.3.statement=SELECT testName, throughputKbPerS FROM VaryingNumberOfProducerSessionsSingleConnection WHERE participantName = 'All'
series.3.legend=Baseline - End-to-end throughput
series.3.dir=${csvBaselineDir}
series.3.colourName=dark_red
series.3.strokeWidth=-1

series.4.statement=SELECT testName, throughputKbPerS FROM VaryingNumberOfProducerSessionsSingleConnection WHERE participantName = 'All Producers'
series.4.legend=Baseline - Producer only throughput
series.4.dir=${csvBaselineDir}
series.4.colourName=dark_blue
series.4.strokeWidth=-1
