#
# 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=Transaction Batch Size Unequal
chartSubtitle=Persistent 1KB messages
chartDescription=1P 1C, persistent, transacted with message payload 1KB with fixed batch size 1 for one party whilst other varies between 1-400 messages

xAxisTitle=Batch Size
yAxisTitle=Throughput (messages/s)

#
# If csvjdbc could do sub-selects (allowing us to extract the consumer/producer batch size from the All Consumers/All Producers rows),
# we would not need the workaround where we have testdef place the consumer/producer batch size into testName field
#

series.1.statement=SELECT testName, throughputMessagesPerS FROM BatchSizeProducerVaries WHERE participantName = 'All'
series.1.legend=Variable Producer, Fixed Consumer
series.1.dir=${csvCurrentDir}
series.1.colourName=red

series.2.statement=SELECT testName, throughputMessagesPerS FROM BatchSizeProducerVaries WHERE participantName = 'All'
series.2.legend=Variable Producer, Fixed Consumer (Baseline)
series.2.dir=${csvBaselineDir}
series.2.colourName=dark_red
series.2.strokeWidth=-1

series.3.statement=SELECT testName, throughputMessagesPerS FROM BatchSizeConsumerVaries WHERE participantName = 'All'
series.3.legend=Fixed Producer, Variable Consumer
series.3.dir=${csvCurrentDir}
series.3.colourName=blue

series.4.statement=SELECT testName, throughputMessagesPerS FROM BatchSizeConsumerVaries WHERE participantName = 'All'
series.4.legend=Fixed Producer, Variable Consumer (Baseline)
series.4.dir=${csvBaselineDir}
series.4.colourName=dark_blue
series.4.strokeWidth=-1
