#
# 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 producers - transacted
chartSubtitle=Persistent 1KB messages
chartDescription=1,2,5,10 P/Cs, persistent, transacted, with message payload 1KB.

xAxisTitle=Producers
yAxisTitle=Throughput (messages/s)

series.1.statement=SELECT totalNumberOfProducers, throughputMessagesPerS FROM VaryingNumberOfParticipants WHERE participantName = 'All' and totalNumberOfConsumers = '1' and acknowledgeMode = '0'
series.1.legend=1 Consumer
series.1.dir=${csvCurrentDir}
series.1.colourName=red

series.2.statement=SELECT totalNumberOfProducers, throughputMessagesPerS FROM VaryingNumberOfParticipants WHERE participantName = 'All' and totalNumberOfConsumers = '5' and acknowledgeMode = '0'
series.2.legend=5 Consumer
series.2.dir=${csvCurrentDir}
series.2.colourName=blue

series.3.statement=SELECT totalNumberOfProducers, throughputMessagesPerS FROM VaryingNumberOfParticipants WHERE participantName = 'All' and totalNumberOfConsumers = '10' and acknowledgeMode = '0'
series.3.legend=10 Consumer
series.3.dir=${csvCurrentDir}
series.3.colourName=green

series.4.statement=SELECT totalNumberOfProducers, throughputMessagesPerS FROM VaryingNumberOfParticipants WHERE participantName = 'All' and totalNumberOfConsumers = '1' and acknowledgeMode = '0'
series.4.legend=1 Consumer (baseline)
series.4.dir=${csvBaselineDir}
series.4.colourName=dark_red
series.4.strokeWidth=-1
