Development of Corridor Performance Benchmarking ...

174
Development of Corridor Performance Benchmarking Dashboards SJ Rabe orcid.org/0000-0002-0229-2663 Dissertation submitted in fulfilment of the requirements for the degree Master of Engineering in Computer and Electronic Engineering at the North-West University Supervisor: Prof AJ Hoffman Examination November 2018 Student number: 22820302

Transcript of Development of Corridor Performance Benchmarking ...

Development of Corridor Performance Benchmarking Dashboards

SJ Rabe

orcid.org/0000-0002-0229-2663

Dissertation submitted in fulfilment of the requirements for the degree Master of Engineering in Computer and Electronic

Engineering at the North-West University

Supervisor: Prof AJ Hoffman

Examination November 2018

Student number: 22820302

NWUUser
Cross-Out
NWUUser
Inserted Text
Graduation: May 2020
NWUUser
Cross-Out
NWUUser
Inserted Text
accepted

i

TABLE OF CONTENTS

1 INTRODUCTION ................................................................................................ 1

1.1 Chapter Overview ............................................................................................... 1

1.2 Background ........................................................................................................ 1

1.2.1 Key Fundamentals .............................................................................................................. 1

1.2.2 Current Problems ................................................................................................................ 4

1.2.3 Potential Causes ................................................................................................................. 4

1.3 Research Proposal ............................................................................................. 6

1.3.1 Problem Statement ............................................................................................................. 6

1.3.2 Research Scope ................................................................................................................. 6

1.4 Research Objectives........................................................................................... 7

1.4.1 Primary Objectives .............................................................................................................. 7

1.4.2 Secondary Objectives ......................................................................................................... 7

1.5 Research Motivation ........................................................................................... 7

1.6 Research Methodology ....................................................................................... 7

1.7 Beneficiaries of Research ................................................................................... 8

1.8 Dissertation Layout ............................................................................................. 9

1.9 Chapter Summary ............................................................................................ 10

2 LITERATURE STUDY ...................................................................................... 11

2.1 Chapter Overview ............................................................................................. 11

2.2 Overview of Trade Corridors ............................................................................. 11

2.3 Project Overview .............................................................................................. 11

ii

2.4 Key Trade Corridor Players and Requirements ................................................. 13

2.4.1 Cargo Owners ................................................................................................................... 13

2.4.2 Clearing and Forwarding Agents ...................................................................................... 14

2.4.3 Shipping Lines .................................................................................................................. 15

2.4.4 Ports .................................................................................................................................. 16

2.4.5 Border Posts ..................................................................................................................... 16

2.4.6 Inland Transportation ........................................................................................................ 17

2.4.7 Public sector ..................................................................................................................... 19

2.4.8 General public ................................................................................................................... 20

2.4.9 Future Considerations ...................................................................................................... 21

2.5 Data Analysis Techniques ................................................................................ 21

2.5.1 Operational Flow Graphs .................................................................................................. 22

2.5.2 Relating data to operations ............................................................................................... 22

2.5.3 Measurement calculation .................................................................................................. 23

2.5.4 Measurement presentation ............................................................................................... 25

2.6 Trends and Events in Technology..................................................................... 25

2.6.1 Cloud Computing Adoption ............................................................................................... 25

2.6.2 Open Source ..................................................................................................................... 26

2.6.3 Big Data and IoT ............................................................................................................... 26

2.6.4 RFID .................................................................................................................................. 27

2.6.5 The Digital Divide .............................................................................................................. 28

2.7 Corridor Performance Benchmarking Dashboard Requirements ...................... 29

2.7.1 Detailed Dashboard Requirements ................................................................................... 29

2.8 Technology Survey Methodology ...................................................................... 30

iii

2.9 Cloud Providers ................................................................................................ 31

2.9.1 Potential Cloud Providers ................................................................................................. 31

2.9.2 Services Comparison ........................................................................................................ 32

2.9.3 Regional Availability .......................................................................................................... 33

2.9.4 Cost Comparison .............................................................................................................. 34

2.9.5 Conclusion ........................................................................................................................ 34

2.10 Development Languages and Tools ................................................................. 35

2.10.1 Potential Solutions ............................................................................................................ 35

2.10.2 Comparisons ..................................................................................................................... 35

2.10.3 Conclusion ........................................................................................................................ 39

2.11 Data Storage .................................................................................................... 40

2.11.1 Possible solutions ............................................................................................................. 40

2.11.2 Cost Comparison .............................................................................................................. 41

2.11.3 Technical Comparisons .................................................................................................... 41

2.11.4 Conclusion ........................................................................................................................ 42

2.12 Communication ................................................................................................. 43

2.12.1 Possible solutions ............................................................................................................. 43

2.12.2 Conclusion ........................................................................................................................ 44

2.13 Infrastructure .................................................................................................... 45

2.14 Commercial Business Intelligence Software ..................................................... 49

2.14.1 Possible Solutions............................................................................................................. 49

2.14.2 Feature Comparison ......................................................................................................... 49

2.14.3 Cost Comparison .............................................................................................................. 53

2.14.4 Conclusion ........................................................................................................................ 55

iv

2.14.5 Possible Solutions............................................................................................................. 56

2.14.6 Conclusion ........................................................................................................................ 56

2.15 Map Provider Services ...................................................................................... 57

2.15.1 Possible Solutions............................................................................................................. 57

2.15.2 Conclusion ........................................................................................................................ 57

2.16 PDF Rendering Libraries .................................................................................. 58

2.16.1 Possible Solutions............................................................................................................. 58

2.16.2 Conclusion ........................................................................................................................ 59

2.17 Future Considerations ...................................................................................... 60

2.17.1 IoT and RFID Integrations ................................................................................................ 60

2.18 Chapter Summary ............................................................................................ 62

3 CORRIDOR PERFORMANCE DASHBOARD IMPLEMENTATION ................. 63

3.1 Design Approach .............................................................................................. 63

3.1.1 Domain-Driven Design ...................................................................................................... 63

3.1.2 Detailed Domain Model .................................................................................................... 65

3.2 Design and Implementation .............................................................................. 69

3.2.1 Overview ........................................................................................................................... 69

3.2.2 Design Advantages ........................................................................................................... 69

3.2.3 Design Disadvantages ...................................................................................................... 70

3.2.4 Alternatives ....................................................................................................................... 70

3.2.5 Data API ............................................................................................................................ 71

3.2.5.1 Overview .......................................................................................................... 71

3.2.5.2 Provisioned Cloud Infrastructure ....................................................................... 71

v

3.2.5.3 Application Hosting Solution ............................................................................. 72

3.2.5.4 Business Logic ................................................................................................. 73

3.2.5.5 Public Interfaces ............................................................................................... 76

3.2.6 Web Application ................................................................................................................ 82

3.2.6.1 Project Template .............................................................................................. 82

3.2.6.2 Dashboard Design Overview ............................................................................ 85

3.2.6.3 Application Framework ..................................................................................... 85

3.2.6.4 Component Based Design. ............................................................................... 86

3.2.6.5 Stateful Components ........................................................................................ 88

3.2.6.6 Component Approach Drawbacks .................................................................... 88

3.2.6.7 State Containers ............................................................................................... 89

3.2.6.8 Project Layout................................................................................................... 89

3.2.6.9 User Interface ................................................................................................... 91

3.2.6.10 Visualisation Support ........................................................................................ 92

3.2.6.11 Interactive GIS Map Support ............................................................................. 94

3.2.6.12 PDF Rendering Support ................................................................................... 96

3.2.6.13 Software Features ............................................................................................ 98

3.2.7 Authentication and Authorization .................................................................................... 100

3.2.7.1 Encrypted Communication .............................................................................. 100

3.2.8 Testing ............................................................................................................................ 104

3.2.8.1 Testing Frameworks ....................................................................................... 104

3.2.8.2 Testing Demonstration .................................................................................... 104

3.2.8.3 Code Coverage .............................................................................................. 105

vi

3.2.9 Operations and Maintenance .......................................................................................... 106

3.3 Chapter Summary .......................................................................................... 108

4 CORRIDOR PERFORMANCE DASHBOARD EVALUATION ....................... 109

4.1 Overview ........................................................................................................ 109

4.2 Reliability ........................................................................................................ 109

4.2.1 Fault Detection ................................................................................................................ 109

4.2.2 110

4.2.3 Fault Recovery ................................................................................................................ 110

4.2.4 Fault Prevention .............................................................................................................. 110

4.3 Security .......................................................................................................... 111

4.3.1 Threat Detection ............................................................................................................. 111

4.3.2 Threat Resistance ........................................................................................................... 112

4.3.3 Threat Reaction .............................................................................................................. 112

4.4 Modifiability ..................................................................................................... 113

4.4.1 Modular Design ............................................................................................................... 113

4.4.2 Uniform Implementation .................................................................................................. 114

4.4.3 Reduced Coupling .......................................................................................................... 115

4.5 Portability ........................................................................................................ 116

4.5.1 Cross-platform Design .................................................................................................... 116

4.5.2 Responsive User Interface ............................................................................................. 117

4.6 Functionality ................................................................................................... 117

4.6.1 Visualisation .................................................................................................................... 117

4.6.2 Reporting ........................................................................................................................ 118

vii

4.7 Variability ........................................................................................................ 118

4.7.1 Cloud Configuration ........................................................................................................ 119

4.7.2 Software Configuration ................................................................................................... 119

4.8 Subsetability ................................................................................................... 120

4.8.1 Component Independence ............................................................................................. 120

4.8.2 Service independence .................................................................................................... 121

4.9 Conceptual Integrity ........................................................................................ 121

4.9.1 Open Standards .............................................................................................................. 122

4.10 Overall User Experience ................................................................................. 122

4.10.1 Single Page Application .................................................................................................. 122

4.10.2 Minimalistic Design ......................................................................................................... 124

4.10.3 Usage Context ................................................................................................................ 124

4.11 Performance ................................................................................................... 125

4.11.1 Load Testing ................................................................................................................... 125

4.11.2 Resource Scaling ............................................................................................................ 127

4.12 Chapter Summary .......................................................................................... 127

5 CONCLUSIONS AND RECOMMENDATIONS ............................................... 129

5.1 Development Concerns of a Performance Benchmarking Dashboard ............ 129

5.1.1 Data Availability .............................................................................................................. 129

5.1.2 Data Quality .................................................................................................................... 129

5.1.3 Clear Responsibilities ..................................................................................................... 130

5.1.4 Iterative Development ..................................................................................................... 130

5.2 Software Design Considerations ..................................................................... 130

viii

5.2.1 Domain-Driven Design .................................................................................................... 130

5.2.2 Task Responsibility ......................................................................................................... 131

5.3 Cloud Infrastructure Benefits .......................................................................... 131

5.3.1 Reduced Cost ................................................................................................................. 131

5.3.2 Automation ...................................................................................................................... 131

5.3.3 Open-Source ................................................................................................................... 132

5.4 Future Work .................................................................................................... 132

BIBLIOGRAPHY ................................................................................................................... 133

ANNEXURE A: OPEN-SOURCE TOOLS AND TECHNOLOGIES ....................................... 144

ANNEXURE B: COMPATIBILITY TESTING ......................................................................... 157

ix

LIST OF TABLES

Table 2-1: Global Public Cloud Provider Market Share, 2017-2018 (Millions USD) ................. 31

Table 2-2: Top 10 most popular database engines in November 2019 .................................... 40

Table 2-3: Cost comparison of potential database solutions .................................................... 41

Table 2-4: Technical comparison of potential database solutions ............................................ 42

Table 2-5: Chart features of notable business intelligence products ........................................ 50

Table 2-6: GIS features of notable business intelligence products ........................................... 50

Table 2-7: Access and reporting features of notable business intelligence products ................ 52

Table 2-8: Cost comparison of notable business intelligence products .................................... 53

Table 2-9: Annual cost of notable business intelligence products ............................................ 55

Table 5-1: List of npm modules used in the project. ............................................................... 144

i

LIST OF FIGURES

Figure 2-1: Geographical map of Dar es Salaam Corridor. ...................................................... 12

Figure 2-2: Flow diagram illustrating a simplified vertical supply chain. ................................... 22

Figure 2-3: Flow diagram illustrating the relationship between data and operations. ............... 23

Figure 2-4: Flow diagram illustrating the relationship between data and measurements. ......... 24

Figure 2-5: Screenshot illustrating a service comparison of the top cloud providers ................ 32

Figure 2-6: Screenshot of the October 2018 TIOBE Index ....................................................... 35

Figure 2-7: Screenshot of the October 2018 PYPL Index ........................................................ 36

Figure 2-8: Screenshot of most used languages according to Stack Overflow Survey ............. 37

Figure 2-9: Screenshot of most used web frameworks according to Stack Overflow Survey ... 38

Figure 2-10: Screenshot of most used frameworks according to Stack Overflow Survey ......... 38

Figure 2-11: Linux Foundation survey respondents using Node.js in some capacity. .............. 39

Figure 2-12: Screenshot of a GraphQL query and result. ........................................................ 44

Figure 2-13: Screenshot of the Compute Engine dashboard. .................................................. 46

Figure 2-14: Screenshot illustrating an app.yaml file. .............................................................. 47

Figure 2-15: Screenshot illustrating a dispatch.yaml file. ......................................................... 47

Figure 2-16: Screenshot of the Google App Engine URL specification. ................................... 48

Figure 2-17: Example of a Leaflet map from the website. ........................................................ 58

Figure 2-18: Screenshot of PDF render example from the pdfmake website ........................... 60

Figure 2-19: Photo of a Picollo GPS tracking system with RFID temperature sensors ............. 61

Figure 3-1: Simplified Diagram of the Domain Model ............................................................... 64

Figure 3-2: Diagram illustrating a more detailed domain model ............................................... 66

ii

Figure 3-3: Diagram showing the main components within the data API. ................................ 71

Figure 3-4: Screenshot of a routing example in the express documentation. ........................... 73

Figure 3-5: Diagram illustrating the purpose of ORM software. ................................................ 73

Figure 3-6: Screenshot of a Sequelize object definition. .......................................................... 75

Figure 3-7: Screenshot of the database table created by Sequelize. ....................................... 76

Figure 3-8: Screenshot of the swagger editing tool .................................................................. 77

Figure 3-9: Screenshot of swagger endpoint implementation in Node.js server. ...................... 78

Figure 3-10: Screenshot of the GraphiQL tool interface with an example query ...................... 80

Figure 3-11: Screenshot of the web application project structure ............................................. 82

Figure 3-12: Screenshot of the template browser in Visual Studio ........................................... 84

Figure 3-13: Diagram showing the main components of the web application ........................... 85

Figure 3-14: Screenshot of a ReactJS component .................................................................. 86

Figure 3-15: Diagram illustrating complex nesting. .................................................................. 87

Figure 3-16: Diagram illustrating the application component structure ..................................... 89

Figure 3-17: Screenshot of an example GraphQL query file. ................................................... 90

Figure 3-18: Screenshot showing an example where Axios was used. .................................... 91

Figure 3-19: Screenshot from Semantic UI React documentation of button colours. ............... 92

Figure 3-20: Screenshot of a placeholder bar chart definition. ................................................. 92

Figure 3-21: Screenshot of visualisations in web application. .................................................. 93

Figure 3-22: Screenshot of customised visualisations in web application. ............................... 93

Figure 3-23: Screenshot of a saved chart opened in Windows 10. .......................................... 94

Figure 3-24: Screenshot from performance dashboard of the truck profile............................... 95

Figure 3-25: Screenshot from early prototype testing visualisation in Leaflet. .......................... 95

iii

Figure 3-26: Screenshot of PDF report rendering page in web application. ............................. 96

Figure 3-27: Screenshot of PDF document with an embedded chart. ...................................... 97

Figure 3-28: Screenshot of PDF document in Adobe Acrobat Reader DC. .............................. 97

Figure 3-29: Screenshot of the performance dashboard home page ....................................... 99

Figure 3-30: Screenshot of web application Profile page showing notifications. .................... 100

Figure 3-31: Screenshot showing the use of HTTPS in the performance dashboard ............. 101

Figure 3-32: Screenshot of vulnerability test results from pentest-tools.com .......................... 101

Figure 3-33: Screenshot of Google Cloud Platform security scan results. ............................. 102

Figure 3-34: Screenshot of web application cookies. ............................................................. 103

Figure 3-35: Screenshot of test results in the command line terminal. ................................... 105

Figure 3-36: Screenshot of code coverage report generated by jest. ..................................... 106

Figure 3-37: Screenshot from the Cloud SQL database management page. ......................... 107

Figure 3-38: Screenshot from Gmail of an automated notification. ........................................ 107

Figure 4-1: Screenshot of monitoring tools in a cloud environment. ....................................... 109

Figure 4-2: Screenshot showing traffic splitting in the cloud environment. ............................. 110

Figure 4-3: Screenshot showing error logs in the cloud environment. .................................... 111

Figure 4-4: Screenshot showing error notifications in the cloud environment. ........................ 113

Figure 4-5: Screenshot showing results after running a lint script. ......................................... 114

Figure 4-6: Screenshot showing an example of reduced coupling. ........................................ 115

Figure 4-7: Screenshot of the performance dashboard in a mobile aspect ratio. ................... 116

Figure 4-8: Screenshot of the data API aap.yaml file ............................................................. 118

Figure 4-9: Screenshot of the data API config file. ................................................................. 119

Figure 4-10: Screenshot from the performance dashboard busy loading. .............................. 121

iv

Figure 4-11: Screenshot of an English language file in the web application. .......................... 122

Figure 4-12: Screenshot of the performance dashboard and auditing tool. ............................ 123

Figure 4-13: Screenshot of the performance dashboard for a limited user. ............................ 124

Figure 4-14: Screenshot from Loadium results for the web application. ................................. 125

Figure 4-15: Screenshot of the GCP dashboard during the load test. .................................... 126

Figure 5-1: Screenshot of the performance dashboard in Opera. .......................................... 157

Figure 5-2: Screenshot of the performance dashboard in Google Chrome. ........................... 157

Figure 5-3: Screenshot of the performance dashboard in Mozilla Firefox. ............................. 158

Figure 5-4: Screenshot of the performance dashboard in Microsoft Edge. ............................ 158

Figure 5-5: Screenshot of the performance dashboard in Apple Safari. ................................. 159

Figure 5-6: Screenshot of the performance dashboard in Microsoft Internet Explorer ............ 159

1

1 INTRODUCTION

1.1 Chapter Overview

Trade corridors can be defined as a culture of trade agreements and treaties, statutes,

delegated legislation and customs that govern and guide trading relationships [1]. Trade

corridors are in essence a large group of entities that work together to transport and deliver

goods across a large geographical area which can involve multiple countries and companies in

the process.

Small logistics operations are mostly understood well and can be managed efficiently. As

operations grow to the size of trade corridors, understanding and management of the entire

corridor can become daunting very quickly. In this chapter, the goal is to define the motivations

behind the development of corridor performance benchmarking dashboards.

1.2 Background

To create a system that can effectively aid people in managing a logistics operation the

fundamental components of logistics needs to be understood. Logistics deals with the

management of the flow of goods or materials from the point of production to the point of

consumption and in some cases even to the point of disposal. Logistics is, in itself, a system. It

is a network of related activities with the goal of managing the orderly flow of material and

personnel within logistics channels [2].

1.2.1 Key Fundamentals

The two factors that determine if a company prospers are customer satisfaction and growth [3].

Essentially this means that companies should keep their customers satisfied and aim to grow at

a reasonable pace.

In this research, the focus is primarily on customer satisfaction and eliminating overhead costs

since these aspects are heavily influenced by the logistics operations of a company. By

improving each of the components of customer satisfaction, the cost of logistics operations can

be reduced. The concept of customer satisfaction can be summarised in 8 components:

Product: The majority of products need to be packaged properly for efficient transportation

as well as inventory and warehousing. Ensuring that products are delivered in a way that

facilitates customers to use it easily is a key factor in customer satisfaction.

2

Logistics: Choosing the correct transportation channels and diminishing distances between

production and consumption in one of the largest factors to consider and can result in

significant cost-savings regarding local and global transportation.

Quantity: The right quantity involves balancing the amount of inventory held with the cost of

holding that inventory including capital tied up in inventory, variable storage costs and

obsolescence. A lack of inventory would lead to lower customer satisfaction, whereas too

much inventory could lead to unnecessary storage expenses.

Quality: Product quality is one of the largest factors when it comes to customer satisfaction

since it is often used to compare similar products. Despite the importance of quality, it is

frequently sacrificed to compensate for problems that can occur such as delays, defects,

degeneration or downfalls.

Location: Customers are willing to pay more for a product that is located close to them than

travelling to pay less. This behaviour especially takes place when customers want to save

time and transportation cost. Configuring an optimal distribution network to position products

as close to as possible to customers is a key component of customer satisfaction.

Time: Ensuring a product is available on the market at the right time is important to increase

sales. If a product is sold when there is no need for it, there is no spending power or the

product cannot be used due to seasonal reasons the attempt to generate sales will fail.

Customer: Customer desires and behaviours are dynamic and product sales need to be

able to adapt. Instantaneous data analysis is important to understanding and forecasting

demand-oscillations and intensive collaboration with suppliers can aid their preparations to

alleviate potential shortages or overproduction.

Cost: It has never been easier to acquire high-quality products inexpensively than now since

products are offered globally. If products are equal or identical, the deciding factor is

typically cost. Lowering cost has a direct impact on the profit from every product sold since it

is related to all business activities.

3

All of these components within customer satisfaction are dynamic. The rate at which

components change varies greatly, but they do change over time. The goal is to try and

optimise these components and maximise customer satisfaction as a result.

This research is focused on logistics and cost since those aspects are relevant to the

transportation and distribution of most physical goods. Improvements in those aspects of

customer satisfaction would be a benefit to most companies and consumers.

The key fundamental activities in a logistics operation include [2]:

1. Customer Service

2. Demand Forecasting / Planning

3. Inventory Management

4. Logistics Communications

5. Materials Handling

6. Order Processing

7. Packaging

8. Parts and Service Support

9. Plant and Warehouse Site Selection

10. Procurement

11. Return Goods Handling

12. Reverse Logistics

13. Traffic and Transportation

14. Warehousing and Storage

From this list it should be clear that even within a simple logistics operation there are multiple

disciplines involved that have vastly different challenges and requirements. In many operations

not all of these activities are handled by the same entity, but instead by separate entities that

specialise in one or multiple of these activities. Each of these entities interacts with each other

but can have different operational and technology solutions. Competing entities that specialise

in the same activities could also be using different technology solutions.

The goal of a corridor performance benchmarking dashboard is to gather information from all

these different disciplines and quantify their performance so that improvements or setbacks can

be measured. The corridor performance benchmarking dashboard aims to provide a more

holistic view of the entire logistics process so that each player involved in the activities is more

aware of how they are impacted and how their actions impact the system as a whole.

4

1.2.2 Current Problems

The systems approach states that all functions or activities need to be understood regarding

how they affect and are affected by other elements and activities with which they interact [2]. If

activities are considered in isolation how those activities affect (or are affected by) other

activities cannot be fully understood. In the context of logistics, this means that each entity

needs to understand its role within the larger system and be able to play that role optimally.

They should also understand the roles of other entities within the system and how their

operations are affected by (or affects) the operations of other entities.

Currently, corridor entities invest more of their effort in optimising their operations and less in

their interactions with the operations of other entities they engage with within the industry. The

result is that inefficiencies manifest within the interactions between entities and not within the

operations of entities themselves.

A simple example would be the interaction between cargo transporters and a border post.

Transporter vehicles typically depart to the border post without notice and expect to be serviced

upon arrival. The border post has no insight into the amount of traffic it can expect, and as a

result, cannot be certain the operations will be able to accommodate the expected traffic. The

result of this exchange is that the border post ends up trying to accommodate traffic increases

beyond the capacity it can handle and the transporter vehicles experience unforeseen delays. If

the border post is able coordinate with transporters to ensure the number of vehicles at the

border post at any given time does not exceed the operational capacity then both parties benefit

as a result.

The purpose of a corridor performance dashboard is to highlight these inefficiencies by

collecting data from all relevant entities along the corridor. Once the inefficient areas are

identified, and their impact can be quantified, possible solutions can be developed to streamline

the interactions between entities along the entire logistics corridor.

1.2.3 Potential Causes

Performance benchmarking based on dashboards is not a new concept and has been used in

different industries for decades at this point. It is however rare to find a performance

benchmarking dashboard for an entire industry. Before attempting to develop such a solution, it

needs to be understood why these types of solutions do not already exist.

The first potential cause that could prohibit the creation of a corridor performance dashboard is

a lack of data. If data is not being collected at a granular enough level that would enable the

5

creation of a dashboard, then extracting measurements for a performance dashboard would not

be possible. As the world continues to migrate to digital solutions the concern of insufficient data

should diminish over time. With companies progressing toward paperless operations, more data

is becoming available for developing better metrics and benchmarking solutions. Solutions such

as RFID technology can aid in collecting data that could otherwise not be collected.

Another potential cause that could explain the lack of corridor performance dashboards is that

data is being collected at a sufficient level of detail, but entities choose not to share it or are

unable to share it. Coordinating every entity across an entire corridor is a significant challenge

as it requires all of them to provide data to a centralised system. Some entities likely cannot

supply data in an electronic form or via an electronic data interchange. Convincing all the

entities along a corridor that there is value in participating during the development of a

dashboard of this scale would require a large amount of negotiating. Since there is typically no

entity that has control over the entire corridor, finding funding for such a project is another likely

reason that these types of solutions are not common. The most likely entity that would be

interested in funding such a project would be a governmental entity since they would enjoy the

oversight over their entire portion of the corridor as well as in neighbouring countries.

Each year a large number of surveys are completed to try and better understand the desires

and needs of the logistics industry. Two of these surveys which are relevant to this study are the

State of Logistics Survey as well as the Third Party Logistics results and findings. The first

survey monitors the economic efficiency of the South African logistics industry and is published

yearly [4]. According to the study, the Logistics Performance Index (LPI) of South Africa is

ranked 20th out of 160 countries. Despite South Africa performing well the performance of

corridors in and around the country perform worse since the efficiency of a corridor relies on all

the countries involved.

The second survey is an international survey that tries to understand the needs and challenges

of Third-party logistics providers. Most third-party logistics providers operate at an international

level since production and distribution is typically spread across multiple countries and

continents. In the survey participants are asked which capabilities they want from IT systems.

The capabilities 3PL’s desire most from IT systems are [5]:

Transport management systems for planning.

Electronic data interchanges (EDI).

Visibility of orders, shipments, inventory, etc.

Warehouse and distribution centre management.

Transportation management systems for scheduling

6

Web portals for booking, order tracking, etc.

The capabilities on this list seem to validate the idea that an adequate amount of data is not

being captured since there is a desire to capture operational data related to planning and

scheduling. It also seems to validate the lack of data sharing capabilities since 68% of

respondents requested EDI's.

If data is collected at an acceptable level of detail and made available by entities across the

corridor, another potential cause could be that there is no motivation to invest in analysing such

large datasets. Given the amount of effort involved in integrating and transforming data sets

from all entities in the corridor, there would need to be substantial benefits from implementing a

corridor performance dashboard. To provide benefits to data providers, metrics that they

consider valuable would need to be determined and presented in a way they can understand

and use effectively. Knowing what to measure is just as important as the act of measuring. If the

metrics currently considered to be the appropriate measurements are incorrect or incomplete,

the development of a dashboard might not seem like a sound investment to data providers.

1.3 Research Proposal

1.3.1 Problem Statement

Investigate the current needs of performance benchmarking dashboard software for transport

corridors. Design, implement and evaluate a proof of concept solution to satisfy the needs of

corridor stakeholders.

1.3.2 Research Scope

The goal of this research is to investigate and understand the needs that should be addressed

with a corridor performance benchmarking dashboard. Next, investigate the relevant software

solution landscape within South Africa as well as internationally and determine any major trends

within the industry.

Define key requirements and outcomes that a corridor performance benchmarking dashboard

needs to satisfy. Design and implement a proof of concept corridor performance benchmarking

dashboard solution by incorporating modern software best practices commonly found in the

software industry today.

7

1.4 Research Objectives

1.4.1 Primary Objectives

The main objective of this research is to better understand the requirements of a corridor

performance benchmarking dashboard. Once the requirements are understood, the architecture

of the system needs to be designed and a proof of concept corridor performance benchmarking

dashboard needs to be implemented for industry partners involved with the project. Additional

changes or iterations that could improve the design need to be defined based on the experience

gained from implementing a performance dashboard solution for industry partners.

1.4.2 Secondary Objectives

Discuss the method of analysis used to produce results and present key findings if the industry

partner is comfortable with sharing the results.

1.5 Research Motivation

Currently, players in the logistics industry understand and perform their roles fairly well, but do

not perform as well within the context of the entire corridor. To further improve corridor

performance, solutions require coordination between multiple entities to streamline their

interactions with each other. A higher level of coordination requires their systems, data and

operations to align and work similarly to a single owner supply chain. Convincing entities

throughout the entire corridor that there is potential value to be gained from a higher level of

cooperation is just as important as facilitating the coordination with technical solutions.

The primary motivation for this research is to understand how to design and implement corridor

performance dashboards. Developing ways to define, extract and present better metrics that

entities in the corridor find useful for operations and root-cause analysis is another goal that

motivates this research. By providing more comprehensive and useful solutions, we hope to

help entities along the corridor to quantify inefficiencies related to time and money and motivate

them to pursue further improvements in their operations and the corridor as a whole.

1.6 Research Methodology

Throughout the research, a combination of qualitative and quantitative methodologies is used.

Due to the lack of objective, quantified measurements the needs of entities along the corridors

are based on qualitative, subjective perceptions. By combining a large number of entity

perceptions across the corridor as well as recommendations from industry experts, we hope to

understand the underlying requirements of a corridor performance dashboard better.

8

The development of a corridor performance dashboard will provide quantified measurements

which are expected to encourage more accurate corridor management. These quantitative

results are to be used as a baseline for performance within the corridor to compare to future

values and measure performance changes.

Software requirements will be determined from corridor entity needs and architecture of the

system will be designed according to the engineering process. Possible software services and

solutions are identified, aggregated and compared to a set of defined requirements in a

technology survey in order to measure the viability of each solution. Other quantitative aspects

include determining the technical requirements of a potential solution to each problem, such as

the required performance of the solution and ensuring each solution could scale to support the

data collection and processing requirements.

An appropriate software development lifecycle model will be used to implement a proof of

concept system which is tested according to documented industry standards as well as

standards provided by the Institute of Electrical and Electronics Engineers (IEEE).

1.7 Beneficiaries of Research

By developing a corridor performance dashboard, we aim to provide objective measurements

for all entities along the corridor. The first beneficiary of corridor performance dashboards is

road transporters. Visibility of operations at ports, border posts and customs office would enable

transporters to actively evaluate routes between locations and assist in selecting the most

optimal routes to use.

Cargo owners and freight agents benefit from a corridor performance dashboard by having

visibility across the entire corridor, allowing them to monitor the status of goods better and

account for any problems occurring before goods are affected. Suppliers can better coordinate

with clients if they have visibility over product demands to ensure supply more closely meets

demands.

Public sector entities such as ports, border posts, customs offices and weighbridges also benefit

from a corridor performance dashboard. By having visibility over the corridor, facilities can

monitor the amount of traffic they receive and better prepare for any fluctuations since logistical

operations tend to be seasonal with increased demand during holiday periods. Monitoring the

historical performance of different facilities would allow the public sector to compare the

performance of similar facilities. These historical measurements should help determine if there

are potential for improvements among any of the facilities.

9

Given how uncommon corridor performance dashboards are there could be other beneficiaries

that gain from having visibility over the entire corridor. By implementing a proof of concept

dashboard additional benefits and beneficiaries might become apparent which are difficult to

conceive of without practical implementation.

1.8 Dissertation Layout

This first chapter describes the motivations and methodologies of this research. This chapter

also considers potential reasons why corridor performance dashboards are not common across

all corridors.

Chapter two describes trade corridors in more detail to provide a background to the problem this

research aims to explore. This chapter defines requirements for a proof of concept corridor

performance dashboard as determined through collaboration with industry partners and by

reviewing industry expert consultations done prior to the project. The analysis techniques used

to extract key performance indicators from the data are discussed. A technology survey is done

to compare different solutions and determine viable options for the project.

Chapter three addresses the design of the dashboard software to meet the requirements

documented in chapter two, while taking into account the availability of suitable technology of

investigated in the literature study.

In chapter four the different evaluations are described and applied to the proof of concept

system to ensure that it can satisfy requirements. Chapter four helps identify any short-term

issues in the design that might lead to the dashboard not performing as required. This chapter

helps to define a roadmap for further improvements to the system over time. This chapter also

discusses the overall user experience considerations made to make the complexity of the data

and results easier to understand.

Chapter five discusses the conclusions and recommendations from developing a corridor

performance dashboard solution.

10

1.9 Chapter Summary

In recent years companies have been investing in business intelligence and incorporating data

collection and utilisation into management practices. The result of this is IT systems that provide

large amounts of data both in volume and variety. Companies developed proprietary reporting

tools to better understand the state of operations with less effort and time investment. All of

these advancements in data utilisation have allowed companies to improve their operations

continuously.

In the logistics industry there is, however, a limit to the efficiency a company can achieve in

isolation. Since a large portion of their operations is dependent on other entities in the logistics

value chain, inefficiencies often exist in the interactions between entities. These inefficiencies

are difficult to quantify since different value chain entities have different levels of visibility and

data capture capabilities.

Corridor performance dashboards aim to provide corridors and their stakeholders with a means

to quantify current and historical corridor performance and perform root-cause analysis. This

study documents the process used in designing and implementing a corridor performance

dashboard prototype.

11

2 LITERATURE STUDY

2.1 Chapter Overview

This chapter describes how trade corridors are structured and the numerous players involved in

making trade corridors function. The key stakeholders of trade corridors are discussed next and

an overview is provided of the project upon which this dissertation is based. The methods that

will be used to calculate performance indicators for the dashboard are briefly summarised.

These analysis methods provide a generalised solution to generating measurements and more

specific details will depend on industry demands and cooperation.

Recent trends and events within the software industry are also briefly discussed including cloud

computing, open source software, big data and internet-of-things (IoT). The potential uses of

RFID technologies and the benefits it could provide within a trade corridor are also discussed.

Finally we briefly discuss the differences in the ways users from developed and developing

countries access the internet and how this impacts the development of software solutions for

developing countries.

2.2 Overview of Trade Corridors

Landlocked countries are countries with very little or no shoreline which results in these

countries having inherent trading disadvantages. The majority of the freight in the world is

transported between nations via ships. Landlocked countries are therefore dependent on their

neighbouring countries with ports (referred to as transit neighbours) to handle their international

freight [6]. Trade corridors define overland routes where agreements are in place between

landlocked countries and their coastal neighbours to transport their cargo to and from ports.

This relationship between countries can introduce many issues such as infrastructure

provisioning and maintenance, compensation, cross-border driver travel and insurance [6].

2.3 Project Overview

This study is based on a project in collaboration with the Ministry of Works, Transport and

Communication of The United Republic of Tanzania which involves the acquisition and

customisation of a corridor performance monitoring system. Figure 2-1 shows a zoomed-in

section of the image presented in [7]. The corridor consists of road and rail modes of transport.

Road and trail modes branch from the port into a northbound section and a southbound section.

Trips with the Dar es Salaam port as an origin are considered import (or inbound) trips. Trips

with the Dar es Salaam port as the destination are considered export (or outbound) trips.

12

Figure 2-1: Geographical map of Dar es Salaam Corridor.

An important part of this corridor performance monitoring system is the corridor performance

dashboard. The purpose of the dashboard is to showcase all the key performance indicators

(KPIs) for the corridor and be used to establish baseline performance benchmarks for the

corridor. Once a baseline is established, the dashboard will allow users to periodically measure

corridor performance to see what effects operational changes (operational, regulatory or

otherwise) are having on corridor performance.

This section describes the requirements stated in the terms of reference (ToR) for the project as

well as the data expected from corridor stakeholders for the project. The project is structured so

that the described sections will be implemented as data is made available by corridor

stakeholders. Regardless if data is available or not, the dashboard needs to be able to support

both data available during initial development as well as data that becomes available in the

future. The ToR primarily describes the business and performance requirements of the project

such as the different types of KPIs and reports the system needs to be able to generate as well

as other operational obligations to ensure the system continues to operate for the lifetime of the

project. Any technical specifications for the project such as software and technology selection

13

for achieving the business requirements are the responsibility of the various software

development partners involved in the project.

2.4 Key Trade Corridor Players and Requirements

Trade corridors consist of several stakeholders that each plays a role in the overall logistics

operation. These include both governmental agencies and private sector companies. In some

cases, different roles might be performed by the same company. The roles played by the most

prominent stakeholders are described in the sections below.

2.4.1 Cargo Owners

Cargo owners are the main clients of the entire trade corridor. They manufacture or acquire the

goods being transported along the corridor. Cargo owners employ the services of other players

along the corridor by outsourcing their logistics operations and by interacting with governmental

players such as customs to ensure the business they conduct is within the law. Some cargo

owners might handle the transportation of goods themselves (referred to as a first-party logistics

model or 1PL), but it has become a common practice throughout the industry to use a second

party logistics model (2PL) or a third party logistics model (3PL). In a 2PL configuration, the

cargo owner contracts an asset carrier to execute transportation or logistics tasks [8]. In a 3PL

configuration, the management of subcontracting the transport and storage of goods is

outsourced to a third party. This party negotiates and manages the supply chain on behalf of the

cargo owner.

The main motivation for the creation of a corridor monitoring system is to attract more cargo

owners to the trade corridor. The primary requirement for cargo owners from the corridor

performance dashboard is to be able to receive reports with regards to how the corridor is

performing. The reports expected from this project can be divided into five main categories:

Time-Related Reports: These reports primarily describe how long specific operations take

along the corridor as well as the duration to cover the entire corridor. The reports also

describe delays that occur in the corridor such as the wait times of ships, trucks and trains at

specific steps in supply chains.

Cost-Related Reports: Cost reports primarily describe the financial expenses associated

with the corridor. The reports describe the cost of transportation services such as road

transporters and shipping lines as well as charges of facilities along the corridor such as

ports and border posts.

14

Security and Safety Reports: The goal of security and safety reports is to identify any high-

risk locations along the corridor where crime or other incidents occur. These reports are

closely related to cost but describe unintended expenses or damages as opposed to the

operating expenses described in cost-related reports.

Infrastructure Reports: These reports describe the condition of corridor infrastructures such

as roads and railways. This information could be important to some cargo owners when

considering different solutions to their logistics problems.

Miscellaneous Reports: Any reports that could not be classified in one of the previous

sections are classified as miscellaneous.

2.4.2 Clearing and Forwarding Agents

Clearing and forwarding agents (CFAs) allow manufacturers to outsource the majority of their

logistics operation to a party with the expertise of creating and managing complex logistics

operations. The roles of clearing and forwarding agents include [9]:

Perform customs procedures on behalf of the manufacturer.

Ensure that all procedures are compliant with current legislation.

Facilitate the movement and storage of cargo locally and internationally.

Manage licences and insurance of goods.

By outsourcing the management of the logistics value chain, a manufacturer can focus on

product production and rely on their third-party logistics partner (most commonly a CFA) to get

product shipments to customers and retailers reliably and cost-effectively. The corridor

performance monitoring system needs to be able to capture information from participating

clearing and forwarding agents in the four countries involved in the project. The data that needs

to be captured from clearing and forwarding agents where possible includes:

Name, size and packaging for the cargo.

Details about the cargo owner.

Origin and destination information.

Details regarding transportation methods.

Schedule of the goods such as arrival and release times.

Summary of any delays that the cargo experienced.

15

Details regarding cost, including import and export duties paid.

The data described above will be used to contribute to the reports available on the system.

Since clearing and forwarding agents typically run the supply chain on behalf of the cargo

owner, the majority of the reports intended for cargo owners will be used by clearing and

forwarding agents as well. Time-related reports are available to primarily monitor the

performance of ports and border posts since those are the areas where clearing and forwarding

agents are the most involved. Clearing and forwarding agents will be expected to submit cost

estimates for various scenarios which will be refined into anonymised industry benchmarks.

These types of industry benchmarks will be available as part of the cost related reports.

Security and Infrastructure reports are primarily aimed at the facilities that provide the data but

might be useful for clearing and forwarding agents if they want to compare the current supply

chain with possible alternatives. The data supplied by clearing and forwarding agents are

incorporated into miscellaneous reports such as reports related to the total amount of cargo that

passed through the corridor. Miscellaneous reports are mostly intended for agencies involved

with monitoring the corridor with the goal of increasing utilisation, but these reports might

provide value to clearing and forwarding agents not apparent during design.

2.4.3 Shipping Lines

Shipping lines are large international corporations that transport cargo along supply chains

spanning multiple continents. Due to the size of shipping lines and the role they play the rest of

the supply chain is typically dependent on their schedule and performance. Due to the nature of

how ships operate any delays a ship experiences immediately impacts the supply chain. Cargo

can only be loaded and unloaded at a port which means there are limited methods available to

mitigate ship delays while the ship is at sea. Solutions to this problem typically involve excessive

cargo surplus kept as a buffer if a delay occurs [6]. The corridor monitoring system needs to

capture these delays and monitor their frequency and effect on the corridor. Data required from

shipping lines include:

Summary of the anchorage process including operation times and causes of delays.

Summary of the ship berthing process including operation times and causes of delays.

Details regarding cargo such as name, size, origin, destination and owner.

Clearing and forwarding agent or shipper details.

Cost estimations for different cargo types between different locations.

16

This data will be used in time-related performance measurements for port operations such as

the anonymised anchorage and berth durations of ships at different ports. This data will also be

used to determine industry-wide averages regarding ocean and port charges.

2.4.4 Ports

If shipping lines are responsible for facilitating the majority of international cargo transport, then

ports play a key role in transferring cargo from land-based transport solutions to freighter ships

and vice versa. Monitoring and improving performance around ports can potentially provide

industry-wide benefits. The majority of the data required from ports are similar to the data

required from shipping lines. By collecting data from both parties, the corridor performance

monitoring system could validate delays and highlight any inconsistencies between the data

sets. Data required from ports include:

Dates and durations of maritime operations including anchorage and berth times.

Dates and durations of port operations including cargo discharge and loading times.

Dates and durations of customs operations including cargo details and release times.

Other cargo details such as CFA details, owner details, origins and destinations.

Cost-related information including port charges for different countries.

Security-related information such as port crime records.

The data described above will be used in the same time-related reports described for shipping

lines and will provide an additional perspective on operations. This data will also be compared

with rail and road transporter data to determine the turnaround times of vehicles (trucks and

trains) at ports. By consolidating port operational data and transporter data, the behaviour of

vehicle operators should become more apparent. Determining if vehicle operators spend more

time at ports than operations require is one example of a measurement that is only possible by

combining these data sets. Other uses of the data from ports include the comparison of cost

and security for different ports.

2.4.5 Border Posts

In the case of landlocked countries, the majority of goods being imported by land will need to

cross country borders at some point. Border posts are specific locations on the borders between

countries where the majority of traffic travels between the two countries. Similar to ports, border

posts create a high concentration of cargo that needs to flow through a small number of

facilities. In the context of African trade corridors, the border posts are notorious for long and

unpredictable delays which complicate the optimisation of supply chains [6].

17

Research has shown that long delays are not a major concern for the industry since long delays

only result in a longer duration supply chain overall and do not impact the frequency at which

cargo can be delivered [10]. Improving the predictability of delays would have a much larger

impact on supply chains. Predictable delays allow for just-in-time supply chains with minimal

buffers of extra cargo to combat unpredictability.

In the case of the Dar es Salaam corridor, large amounts of traffic at border posts come from

the neighbouring countries using the Dar es Salaam port for imports and exports. The concern

regarding these border posts is whether the current infrastructure is sufficient to handle all the

traffic if run efficiently or if additional infrastructure is required. To answer this question the

operations of border posts need to be monitored and the data used to look for inefficiencies.

The data required from border posts include:

Cargo-related details such as the name, volume, value, permits, origin, destination and

owner.

Border post operational information such as date and time of submissions and releases.

Cargo cost-related information such as duties, taxes, fees, charges and tariffs collected.

Details about involved parties such as the CFA, vehicle and driver.

Reasons for cargo delays including suspensions, rejections and amendments.

General information about procedures such as pre-clearance, appeals, bonds and penalties.

This data will be used to generate reports regarding time vehicles and cargo spends at different

border posts. Reports regarding the costs at different border posts will also be generated from

this data set. These reports are more intended to help the management of facilities improve

their operations than to provide insight for cargo owners since border posts are often a

mandatory step for supply chains on the trade corridor with few or no alternatives.

2.4.6 Inland Transportation

Inland Transportation is the most expensive and time-consuming component in the trade

corridor. Shipping lines are also a form of transportation but are excluded from this section since

they operate outside the trade corridor. The transportation section of the project focuses mainly

on road vehicles and their drivers as well as trains and their operators.

Railways throughout Africa has seen significantly less utilisation when compared to road

transportation and is almost exclusively used to transport heavy unrefined minerals which in the

case of Tanzania are natural resources such as cement and timber [11]. In contrast, the majority

of containerised goods are transported using the road network.

18

One of the key challenges in the road transport industry is infrastructure. Since the late 1990’s

the main trunk roads that connect major cities have been improved which have resulted in

significant road transport improvements. Detailed information is required from road transporters,

truck drivers and railway companies to benchmark and monitor the performance of transport

sections of the trade corridor. Data required from railway companies include:

Operational information such as transit times, departure times and arrival times.

Geographical information such as routes, departure locations and arrival locations.

Cargo-related details such as the name, volume, value, origin, destination and owner.

Cost-related information such as quotations for transporting different kinds of goods.

Third party details such as involved clearing and forwarding agents.

Rail transport has historically proven to be a very dependable and predictable method of

transport but requires large quantities of cargo to be cost-effective. Rail transport has been

trending downwards in Tanzania since the early 2000s, and as a result, the majority of goods

have shifted to road transport [11]. Since road transport has become such a critical component

of African trade corridors, data collection efforts for road transport are included in this project.

The data requested from road transport operators include:

Operational information such as transit times, departure times, arrival times and turnaround

times.

Geographical information such as routes, departure locations and arrival locations.

Cargo-related details such as the name, volume, value, origin, destination and owner.

Cost-related information such as quotations for transporting different kinds of goods.

Third-party details such as involved clearing and forwarding agents.

Trip-related information such as the duration spent at cities, weighbridges, border posts,

police stops and roadblocks.

The project also includes the provisioning and deployment of 100 mobile devices that can

communicate road trip information to the main monitoring system remotely via GSM technology.

These devices will be used by truck drivers to record their journeys in an attempt to better

document what is happening along the corridor. The data expected to be collected from these

devices include:

The specific route within the trade corridor a driver travelled on.

19

Cities, weighbridges, police roadblocks, border posts that the driver visited while on the

route specified above.

Reasons for delays at any of the places mentioned above.

Capturing more detailed information regarding the cause of delays will provide additional insight

into how these delays can be mitigated in the future. By combining driver reported data with

data made available by road transport operators, a far more complete picture of the trade

corridor could be constructed.

2.4.7 Public sector

Public sector entities are primarily concerned with regulation and law enforcement. These

entities are also the primary cause of delays since their work of inspecting corridor users is

disruptive. The data collected from these entities will be used to determine if the practices

currently in place are excessive, appropriate or lacking. The first entity that can provide details

regarding the infrastructure of the trade corridor is the road authorities since they are

responsible for managing the road infrastructure. Data requested from road authorities include:

The status and classification of infrastructure along the corridor including roads, bridges and

underpasses.

Infrastructure maintenance and implementation schedules for the corridor.

Disaster recovery, risk management and risk mitigation procedures for the corridor.

Any additional information about infrastructure reliability.

The next public sector entity from which information will be requested is the traffic police. Traffic

police ensure compliance of vehicles on the road and will provide the following information:

Accident reports with details about the truck, driver, company, cargo, location, time and

cause of the accident if possible.

Traffic offence reports that include the same details as accident reports.

Records about crimes being committed along the corridor.

Information regarding road accessibility such as restrictions on certain roads at certain times

of day for trucks.

Any additional information related to the safety and security of roads such as a security

strategy for road safety.

Another key public sector entity from which data is collected is customs. The role of customs

within the trade corridor is to monitor cargo travelling across country borders. Customs decides

20

if cargo is allowed to cross country border based on the declared good and if necessary and

inspection of the cargo for any incorrectly declared or illegal contents. The information provided

by customs will primarily consist of historical declarations handled at every customs office.

These declarations contain information about:

Details related to the declaration such as the clearance plan, customs regime, orgin country,

destination country and customs offices used.

Details about how each declaration was processed as it passed through the customs

process including any verification, inspections, amendments and other steps involved.

The last public sector entity that data will be requested from is weighbridges. Weighbridges

work alongside traffic police to ensure that trucks comply with axle weight regulations. Collecting

data regarding how compliant vehicles are at different weighbridges will help officials determine

locations that need additional policing. By focusing primarily on the worst performing locations,

the largest improvement should be possible without excessive resource spending across all the

weighbridges. The data that will be requested from weighbridges includes:

Operational details about the weighbridge such as the name and locations of stations,

charges at each station and the weighing capabilities of each station.

Scale calibration records to verify that the scales are providing accurate results.

Records of trucks that have been weighed including axle configuration and other truck

details as well as cargo details.

The data described above is not strictly needed to measure the performance of the corridor

since the results of these operations will be reflected in time and cost measurements of

transporter data. This data does, however, provide much-needed detail about the causes of

delays and additional costs that would be invaluable in root-cause analysis. Empirical

measurements of what has happened and is currently happening are only really useful if the

causes of those measurements can be determined and verified. The data from this section will

help to identify those causes.

2.4.8 General public

The trade corridor can be viewed as a complex system and the corridor monitoring system as

the feedback mechanism that informs the management of this complex system. Introducing

excessive delays on a specific route could cause general traffic to divert to different routes and

impact the performance of those routes indirectly. This complex system involves the general

21

public to some degree and feedback from the general public also needs to be incorporated.

Data to be collected from the general public includes:

Complaints related to entities along the corridor including transporters, police officers,

customs officers, immigration officers or any other entity within the corridor.

Feedback and recommendations on the corridor monitoring system to ensure that the

metrics being monitored are correct and valuable.

Social media can also be used as a tool to engage with the general public and in doing so get

more feedback. Some of the requirements described for social media in the corridor monitoring

system include:

Increasing the awareness, conversions and loyalty of the public and partners.

Advertising and content sharing targeted at specific demographics.

Engaging with partners and transferring that engagement to the website.

The feedback received from the public will primarily be used to aid in the management and

development of the corridor monitoring system.

2.4.9 Future Considerations

The corridor monitoring system requires that potential future technologies that might be

introduced into the trade corridor be considered during the design. The likely technologies

specified to be supported in the foreseeable future include:

GIS Software

CCTY solutions

Improved data collection solutions, such as RFID.

2.5 Data Analysis Techniques

The majority of the analysis for this project is done within the main corridor monitoring system.

The dashboard only performs very basic aggregation and statistical calculations depending on

the required metrics. This section briefly describes the process used within the main monitoring

system to produce individual results.

22

2.5.1 Operational Flow Graphs

The first step in the analysis is to gain an understanding of what the end user wants to measure

and how much of those desired measurements are possible from the data currently being

collected in their systems. The process typically involves the creation of a flow diagram that tries

to capture operations at an acceptable level of detail. Figure 2-2 shows a simplified version of a

typical supply chain. Each node represents a specific task that needs to be performed within the

supply chain. The arrows (also referred to as edges) represent how the different tasks are

related to each other.

There are no fixed criteria for defining tasks, but in the case of a logistics supply chain, it seems

appropriate to define nodes around each entity responsible for the task. Each block can also be

divided into more nodes through an iterative process if more granular levels of detail are

required. A single node could also branch into multiple other nodes.

Figure 2-2: Flow diagram illustrating a simplified vertical supply chain.

An example in the context of the above diagram would be to have a second edge from

Manufacturing to an additional Rail Transportation node with another edge to Border

Operations. The result would be that there are two pathways from Manufacturing to Border

Operations. The first path would be through Road Transportation and the second path through

Rail Transportation.

2.5.2 Relating data to operations

The next step in the process is to identify which values in the available datasets can be used to

measure the performance of a specific task. A common example is using timestamps to

measure how long a specific task took to complete. In Figure 2-3 a subset of the full flow

diagram in Figure 2-2 is shown.

From available data, the start and end conditions for each task can be defined. An example

might be using GPS data to determine when a vehicle enters and exits a geo-fence surrounding

23

a border post. Using the timestamps recorded when the vehicle entered and exited the area can

provide an estimation of how long the vehicle was at the border post.

Figure 2-3: Flow diagram illustrating the relationship between data and operations.

This definition is only one way to determine how long operations at the border post took. Using

data from the border post itself might reveal a different result. If the vehicle spent additional time

just inside the geo-fence after completing operations at the border post, the border post might

appear to be slower than it actually is. Comparing GPS based timestamps with timestamps in

the system of the border post could potentially reveal these types of behaviours that would

otherwise remain obfuscated if only one data set was available.

The definitions of when a task starts and ends can be based on any set of criteria as long as the

definitions themselves are clearly described. Knowing what is being measured and how it is

being measured is critical if different measurements from different sources measure the

performance of the same task. If the measurement definitions are unclear, it becomes difficult to

validate task performance with multiple data sets and to determine the root cause of poor

performance.

2.5.3 Measurement calculation

After the start and end conditions of each task are defined, each key performance indicator

(KPI) can also be defined. A key performance indicator is a measurable value that determines

the progress towards a specific business objective [12]. KPIs can be defined for the simplest

tasks or the company as a whole. Similar to the task definitions, each KPI must be clearly

defined including what it means when the KPI changes, how the KPI is measured and what can

be done to influence the KPI. Other aspects about the KPI that need to be defined include the

people responsible for improving the tasks measured by the KPI, acceptable performance levels

and the frequency at which KPI results will be produced and reviewed.

Figure 2-4 illustrates the relationships between the measurements being made, the data used

for those measurements and the underlying operational tasks being measured. Data Entry A

and B are used to define the start and end of the Border Operations task. As described in

24

previous examples these might be timestamps from GPS or the border post systems.

Measurement A uses those data values to calculate a measurement for that task. Measurement

A could be a variety of measurements depending on what needs to be monitored. One

measurement could be the average amount of time spent at the border post by each vehicle.

Another measurement could be the total number of vehicles processed per hour.

Depending on who is using the measurement it might have varying levels of value to the user.

Road transporters might consider the first measurement more valuable since they can

incorporate the time vehicles will spend at a border into their planning. The second

measurement might not be valuable to road transporters at all. On the other hand, the border

post might find the second measurement more valuable since they can use it to measure if

operational changes increase the number of vehicles they can service per hour.

Figure 2-4: Flow diagram illustrating the relationship between data and measurements.

For the corridor performance dashboard, tasks are defined in a similar fashion as described in

Figure 2-4. Each step that cargo goes through along a route is defined as a separate step.

These steps include port and border post operations, road or rail transportation, activities within

cities, sections of road, and other locations of interest such as weighbridges and police stops.

All the measurements required for the dashboard are derived from these tasks.

The main corridor performance system produces individual results for every task such as the

time spent by a specific vehicle at a specific location. Those individual results are then queried

and combined to produce the appropriate measurement such as the average time spent by

vehicles at a location. The corridor performance dashboard needs to be able to perform these

basic aggregations when needed since the same data set could be used to produce different

measurements. Some of these aggregations are performed by the main corridor performance

system, but the majority are handled by the dashboard solution.

25

2.5.4 Measurement presentation

Presenting data is the primary purpose of the corridor performance dashboard. The

requirements in the TOR do not specifically dictate how performance measurements should be

presented to users in this project. Through various discussions with stakeholders, it was

decided that the dashboard should be able to support some of the most commonly used

visualisation methods. These visualisation options include:

Result Tables

Line charts

Bar charts

Pie charts

Box plots

Histograms

Geographical Maps

These visualisation requirements are most likely going to change and be iteratively refined as

users provide feedback. The chosen visualisation solution needs to be flexible enough to

change how a data set is visualised with minimal effort.

2.6 Trends and Events in Technology

2.6.1 Cloud Computing Adoption

Cloud-based systems have seen major adoption in developed nations since cloud providers first

started offering services around 2002. Researchers from a cloud industry research team

surveyed 786 technical professionals and noted that 94% of respondents use cloud solutions

[13]. Developing countries, however, have seen slower adoption rates compared to the

developed world. According to a report by the United Nations some of the key barriers

contributing to slow cloud adoption include [14]:

Availability and quality of cloud-related infrastructure.

Cost considerations.

Inadequate legal and regulatory frameworks to address data protection and privacy.

Despite these challenges the main benefits cloud solutions could offer are [14]:

Cost savings.

Flexible access to facilities on demand.

26

Improved system management, reliability and IT security

Although these benefits are not guaranteed by simply moving operations to the cloud, they have

motivated enterprise and small to medium businesses in developing countries to explore the

possibilities of using cloud-based solutions. One of the requirements for this corridor

performance dashboard is to use cloud-based solutions for the implementation.

2.6.2 Open Source

In recent years a key trend in the software industry has been the adoption of open source

software. An annual survey of 950 enterprise companies 68% of respondents indicated an

increase in the use of open source software [15]. Some of the largest companies in the software

industry have also made notable acquisitions of open source technologies and providers in

recent years. Google acquired Android Inc. in July of 2005 for an estimated $50 million or more

[16]. On June 4th 2018 Microsoft announced its intent to acquire GitHub, the largest platform for

sharing and collaborating on open source software, for $7.5 billion [17]. On October 28th 2018

IBM and Red Hat announced that IBM would acquire Red Hat, the largest open source hybrid

and private cloud provider in the world [18]. These acquisitions have shown that traditional

enterprise software providers have seen value in open source technologies and solutions.

Open source software should be evaluated alongside traditional enterprise offerings to

determine if these technologies and software would be viable solutions in the development of a

corridor monitoring solution.

2.6.3 Big Data and IoT

As new computing solutions are invented, more aspects of daily life and business are impacted

by these inventions. Over the last few decades, the reliance on computer systems and the

internet has penetrated nearly every business and become a core component of many modern

business models. In the coming years, the use of technology will likely continue to grow and

introduce new computer devices to address new challenges. Logistics organisations such as

DHL actively monitor these trends and have produced reports detailing their predictions of

future logistics operations. In a 2015 report the authors identified a concept called the internet of

everything (IoE) which is comprised of four main components [19]:

Data: Interconnected data sources.

Things: Devices connected to the internet and each other.

People: More relevant and valuable connections between people.

Process: Ensuring that each person or device has access to data when needed.

27

Based on this report the prediction is that more devices will produce more data which will

provide management and employees with a more comprehensive view of the supply chain.

Increased visibility would allow people to make better decisions and react faster to operational

demands. The report also identifies some key areas where internet of things (IoT) solutions can

likely be introduced to enhance operations. These potential areas for improvement include [19]:

Fleet management: Optimizing the use of transport assets is one of the key areas that

logistics operations can improve.

Resource and energy monitoring: IoT could be used to monitor resources as well including

electricity, water, fuel and natural gas.

Connected production: By introducing IoT into the production environment each system can

be monitored to ensure that it is operating as intended.

Equipment and employee monitoring: Connecting equipment and employees through IoT

could increase safety conditions.

Security: Additional monitoring of facilities and assets can help to identify weaknesses in

security and allow authorities to respond quicker.

Connected customers: Better methods for collecting more information and feedback from

customers.

All of these potential benefits that IoT can provide will produce new sets of data to integrate and

analyse. The introduction of more data would allow for a more detailed breakdown of operations

and as a result, produce more accurate measurements of the supply chain. Being able to

accommodate new types of data sets and measurements with minimal effort needs to be a key

consideration in the design of the corridor performance dashboard.

2.6.4 RFID

One technology that has the potential to improve the visibility of corridor operations greatly is

RFID technology. RFID technologies would allow stakeholders in trade corridors to gather data

on the level of material flow. Some potential benefits identified by the VDC Research Group

include [20]:

Asset Tracking, management and utilisation optimisation.

Traceability Improvements.

Supply chain and inventory visibility improvements.

28

Manufacturing and work-in-progress tracking improvements.

Multi-Application support with a single tag.

Each of the stakeholders previously discussed could see potential benefits from incorporating

RFID solutions into trade corridors. Cargo owners would benefit from all the points mentioned

as the increased visibility would allow them to monitor the entire supply chain in more detail.

Deploying RFID solutions at ports and border posts would allow all the cargo stored and

processed at the facilities to be tracked in real-time. Tracking individual vehicles or cargo

containers as they pass through ports and border posts can help with insights into the

optimisation of operations. RFID could also provide a security benefit as there are RFID tags

that function as locks which can indicate when a container was opened when it should not have

been opened.

Shipping lines already have very sophisticated solutions for optimally managing cargo on the

ships themselves. Adding RFID solutions to the containers would allow shipping lines to

coordinate better with ports and share relevant information as physical cargo moves between

ships and the ports themselves.

Incorporating RFID technologies on all the cargo and cargo containers would allow customs and

clearing agents to declare and verify the contents of cargo and cargo containers in much more

detail than is currently being done. By combining RFID solutions with existing data sources such

as GPS position and condition sensing solutions, Smart Logistics Zones can be created. Smart

Logistics Zones are areas where technical solutions are used for the identification, localisation

and condition monitoring of different object levels in logistics and production processes [21].

The introduction of RFID solutions into the corridor would provide additional data sources which

could ultimately be used in a corridor performance dashboard. Additional sources of data

provide a more comprehensive and complete measurement of corridor performance.

2.6.5 The Digital Divide

As developed nations continue to develop technology, there is a growing concern that

developing nations and poor communities are being left behind. The world continues to use

computers and automation to solve problems, and computer literacy is becoming a requirement

in most work disciplines. Since the focus of this study is developing corridor performance

dashboards in and around Africa, it is important to consider the amount of interaction people

have with computers and mobile devices in the community. According to the International

Telecommunication Union (ITU), approximately 18% of households in Africa have internet

29

access. In South Africa specifically, an estimated 52.96% of households have internet access.

Only an estimated 24.39% of households have a computer which means that mobile is primarily

driving internet adoption [22].

2.7 Corridor Performance Benchmarking Dashboard Requirements

2.7.1 Detailed Dashboard Requirements

The project as a whole involves various companies and government agencies that will be

providing data and developing a combined software solution. The project is divided into the

following subcomponents:

Public Feedback System

Truck Driver e-Diary System

E-Marketplace System

Corridor Performance Dashboard System

The public feedback, truck driver e-diary and e-marketplace systems consist of existing software

solutions or are being developed by other software development partners involved with the

project.

This dissertation focuses on the design and implementation of the corridor performance

dashboard website that will present the finalised performance metrics to clients. These

responsibilities include:

Provisioning the required infrastructure needed for hosting the website.

Deploying the software onto the provisioned infrastructure.

Implementing the dashboard software by using commercial off the shelf (COTS) software

solutions, adapting existing solutions or developing new software if required.

Since the majority of the analysis is being performed by other partners of the project focus of the

dashboard is to present the results to users in an appropriate way. The specific requirements of

the dashboard are:

The dashboard needs to be web-based to cater to as many users as possible without

requiring the installation of the software onto devices.

Access to results needs to be controlled to ensure that only signed in users can view private

results. Public results need to be viewable by the general public.

30

Allow registered users to log into the dashboard using an email and password. Ensure that

this authentication process is done securely according to acceptable industry standards.

The results that need to be presented to users will be provided through systems developed

by other partners of the project. The dashboard needs to be able to integrate with those

systems and retrieve results based on what the user wants to see.

Communication between the dashboard and other systems need to be secure according to

acceptable industry standards.

The dashboard should be able to visually present results in the form of a table, line chart,

bar chart, pie chart, box plot or histogram where appropriate. The dashboard should also be

able to include GIS elements such as overlaying results onto Geographical maps.

Visualisations are to be implemented based on feedback from clients and the availability of

data from industry providers.

The dashboard should allow users to save the visualisations mentioned above for use

outside the dashboard environment.

The dashboard should provide reports in the form of PDF documents which can be

downloaded. The dashboard should be able to include the visualisations mentioned above

into the reports where appropriate. Reports are to be implemented based on feedback from

the client and the availability of data from industry partners.

2.8 Technology Survey Methodology

The goal of the technology survey is to identify and evaluate the different technologies and

software that can be used to implement a system that will satisfy the requirements of the

project. The software and technology industry has grown so rapidly in the last decade that fully

evaluating all the possible options and configurations that could be used to implement a corridor

dashboard system and selecting the most optimal solution would not be practical.

Instead, the methodology for this technology survey is to identify a selection of the most

commonly used solutions within the industry. These solutions are then compared against each

other and evaluated against a defined set of requirements. Potential solutions are eliminated

based on findings that show a specific solution would not satisfy the defined requirements.

Out of the remaining viable solutions, a preferred solution is determined based on the expertise

of the developers involved in the project. This final selection is completely subjective and will

depend entirely on the developers involved and the details of this specific project. Any of the

identified viable solutions, as well as other less known solutions that were not evaluated, could

also be considered alternatives to developing a corridor performance dashboard solution.

31

2.9 Cloud Providers

2.9.1 Potential Cloud Providers

One of the requirements of this project is to develop a cloud-based solution. The first step is to

identify the most widely used cloud providers and evaluate the viability of their services for the

project. A report published by Gartner listed the top global public cloud providers as follows [23]:

Table 2-1: Global Public Cloud Provider Market Share, 2017-2018 (Millions USD)

From Table 2-1, we can identify the top global cloud providers:

Alibaba Cloud

Amazon Web Services

Google Cloud Platform

IBM Cloud

Microsoft Azure

Oracle Cloud

32

Figure 2-5: Screenshot illustrating a service comparison of the top cloud providers

2.9.2 Services Comparison

The first step is to ensure that the listed cloud providers offer the services required or the

project. Figure 2-5 shows a screenshot from a project which aims to track and compare the

different services provided by the identified cloud providers. The full comparison table can be

viewed at [24].

Key services required from viable cloud providers include:

Compute services for running web servers and analysing data.

Storage and database services in order to persist data collected from stakeholders.

Data migration services to support transferring large amounts of data to and from the cloud

provider.

Industry standard compliance and security.

Supporting infrastructure services to interface with stakeholder systems.

Management tools to effectively manage the provisioned infrastructure in the cloud.

Advanced analytics solutions for managing and analysing very large data sets.

After investigating all the different services offered by the cloud providers identified above, it

was concluded that all of them offer the services required to implement a corridor performance

dashboard solution.

33

Another key requirement of the project is guaranteed service delivery by the cloud provider to

ensure the system is always online. The service level agreements for each of the cloud

providers are available at:

Alibaba Cloud [25].

Amazon Web Services [26].

Google Cloud Platform [27].

IBM Cloud [28].

Microsoft Azure [29].

Oracle Cloud [30].

All of the cloud providers listed above offer at least 99.9% availability for standard services and

99.99% availability for high availability services. All the cloud providers offer service level

agreements which exceed the minimum requirements as specified for this project.

2.9.3 Regional Availability

Another key consideration for cloud providers is the geographical locations in which they have

data centres. Each of the cloud providers does not offer all their services at every data centre

location. The data centre locations for each of the potential cloud providers are available at:

Alibaba Cloud [31].

Amazon Web Services [32].

Google Cloud Platform [33].

IBM Cloud [34].

Microsoft Azure [35].

Oracle Cloud [36].

Very few of the large international cloud providers have data centres on the African continent.

Microsoft has announced that they plan to deliver their services from data centres in

Johannesburg and Cape Town [37]. AWS also recently announced their plans to open an AWS

Region in Cape Town in 2020 [38]. A report by the United Nations details that a key contributor

to the lack of data centres in the African Continent is the lack of sufficient infrastructure [14].

After considering all the available regions and the services offered in each one the suggested

cloud providers are Amazon Web Services, Google Cloud Platform and Microsoft Azure as they

provide the largest subset of their services in every region.

34

2.9.4 Cost Comparison

Each of the potential cloud providers provides a method for potential customers to estimate the

cost of using cloud services which are available at:

Alibaba Cloud [39].

Amazon Web Services [40].

Google Cloud Platform [41].

IBM Cloud [42].

Microsoft Azure [43].

Oracle Cloud [44].

Our simplified cost comparison showed that Windows-based servers were more expensive

regardless of the provider and are due to the additional cost of a Windows license. Google

seemed to have the lowest costs for on-demand resources due to the Sustained Usage

Discounts. Azure was the most cost-effective solutions if there is existing on-site infrastructure

with a Microsoft Enterprise Agreement in place as it provides discounts for cloud resources.

AWS offers a price between the other two providers except when using reserved instances

which require at least a year-long commitment. These findings seem to be consistent with the

findings of commercial companies providing professional cloud-related consulting [45].

After testing various configurations of virtual machines using all the cloud provider calculators,

the differences under most conditions were negligible except when comparing very large

compute instances that require a large amount of processing power. In this specific instance

Google offers significantly lower rates compared to the other providers.

2.9.5 Conclusion

After evaluating the different aspects of cloud providers, the three largest providers offer the

most complete solution for implementing this project. Of these three providers there is, however,

not an objectively better option to use. We consulted some of the other development teams on

the project since they have been working with cloud technologies. From our discussions with

them, we concluded that the Google Cloud Platform would be sufficient for this project and

would also complement their existing software solutions the most.

The other cloud providers are still viable options for the implantation of a corridor performance

dashboard and the decision to use them will likely depend more on the expertise and

experience of the development team rather than the services offered by the cloud providers.

35

2.10 Development Languages and Tools

2.10.1 Potential Solutions

Currently, there are over 250 different programming languages that are publically known, but we

will focus on the ones commonly used for web development.

2.10.2 Comparisons

The TIOBE index uses a collection of search engines and ranks languages according to the

number of search results across a variety of search engines. The metric, in essence, indicates

how much information there is about the language on the internet. Figure 2-6 shows the TIOBE

rankings for October 2018 [46].

Figure 2-6: Screenshot of the October 2018 TIOBE Index

36

Figure 2-7: Screenshot of the October 2018 PYPL Index

Another measurement of language popularity is the Popularity of Programming Language

(PYPL) index. This index is calculated by comparing Google trends data for the language and

the keyword “tutorial”. The goal of this index is to quantify what people are searching for as

opposed to what is available. Figure 2-7 shows the PYPL index rankings for October 2018 [47].

37

If we only consider the languages that are consistently highly ranked and have solutions for

developing web-based systems, we can compile the following list of potential languages:

C#

PHP

Python

JavaScript

Java

Go

C/C++

Ruby

Visual Basic .Net

Another way to compare languages is to see what the rest of the industry uses for developing

solutions. According to the annual Stack Overflow developer survey, the most commonly used

with the results shown in Figure 2-8 [48]. JavaScript has been the most used technology for

seven years in a row according to all of the previous annual surveys.

Figure 2-8: Screenshot of most used languages according to Stack Overflow Survey

38

Figure 2-9: Screenshot of most used web frameworks according to Stack Overflow Survey

Figure 2-9 shows the top web frameworks currently being used to implement web-based user

interfaces [48]. The latest Front-end technologies, such as React and Angular have seen major

adoption in recent years and contribute to the popularity of JavaScript. ASP.Net has also

increased in popularity as Microsoft has opened the .Net framework to function on any platform

with the introduction of .Net Core. Figure 2-10 shows the top frameworks other than the web

frameworks mentioned in Figure 2-9 [48]. Node.js has quickly grown into one of most used

technologies followed by the .Net ecosystem.

Figure 2-10: Screenshot of most used frameworks according to Stack Overflow Survey

39

2.10.3 Conclusion

For web-based solutions HTML, CSS and JavaScript are requirements since they function

together to control the contents, appearance and functionality of websites respectively.

WebAssembly is an alternative solution to JavaScript but is still in development [49].

Since JavaScript is a requirement for client-side web solutions, the possibility of using it to

implement the server as well is a benefit over other options since it means the same

technologies and skills could be used to develop both the front-end website and the back-end

web servers of the system. Large enterprise companies such as PayPal and Netflix have proven

the scalability of back-end JavaScript solutions [50,51]. Figure 2-5 showcases that this specific

technology is used by many reputable companies alongside other technology options. Given the

number of technology solutions available today, it is practically impossible to determine the most

optimal set of tools to use when implementing a new software solution. The information

presented above does, however, validate that the chosen approach is one of the leading

solutions currently being used for web based systems

Other technology options such as ASP.Net, Laravel, Spring and Django are still viable

technologies to use for the implementation of a corridor performance dashboard. .Net Core and

Python specifically has seen considerable growth in recent years. The deciding factor, in this

case, is not a technical limitation by any of the viable technology solutions listed above, but a

selection made based on the available skill sets of the developers implementing the solution.

The same skill set required for developing the front-end portion of the website can be used in

the development of the back-end servers.

Figure 2-11: Linux Foundation survey respondents using Node.js in some capacity.

40

2.11 Data Storage

2.11.1 Possible solutions

The first challenge is to identify the most commonly used database solutions. DB-Engines is a

website that tries to quantify the popularity of database solutions by evaluating various traffic

types on the internet. Table 2-2 shows the latest available ranking for November 2019 [52].

Table 2-2: Top 10 most popular database engines in November 2019

The purpose of this list is not to select viable database solutions but to identify which databases

to consider. The most commonly used database solutions for the corridor performance

dashboard can be identified as:

Oracle [53].

PostgreSQL [54].

MySQL [55].

Microsoft SQL Server [56].

MongoDB [57].

IBM Db2 [58].

41

2.11.2 Cost Comparison

The first aspect of the different databases that can be compared is the licensing costs to be able

to use the technology.

Table 2-3: Cost comparison of potential database solutions

License Type License Details

Oracle Commercial Oracle has a complex licensing structure with various options and features

licensed separately. The Standard Edition starts at $17500 and the enterprise

edition starts at $47500. Updates and support start at $3850 [59].

PostgreSQL Open Source No costs. Support available from local 3rd

party providers.

MySQL Dual Licensed Free community option with reduced features. Paid versions are the standard

edition, enterprise edition and cluster CGE edition. Costs for paid editions are

$2000, $5000 and $10000 respectively. Costs are annual, and support is

included [60].

Microsoft SQL Dual Licensed Free express edition with limitations on database size. Standard server + CAL

starts at $931. Standard per core license starts at $3717. Enterprise license

starts at $14256. Web licenses are negotiated with third party service providers

and resellers [61].

MongoDB Dual Licensed No costs to use the software. MongoDB Atlas is a fully managed solution

ranging from $0.012/hr up to $10.47/hr per instance. Support included [62].

IBM Db2 Dual Licensed Free community option with limitation on processing capacity. Standard edition

starts at $1850 per processing core. The advanced edition starts at $7800 per

processing core [63]

Based on the results from comparing costs, the Oracle and IBM databases would exceed the

funding that is available for this corridor performance dashboard project.

2.11.3 Technical Comparisons

Besides the cost of using the software the available functionality needs to be evaluated to

ensure that no features that would be needed are missing. MongoDB is an object-based

database solution which is the least compatible of the remaining solutions with the systems

currently used within the industry since it does not use SQL. Implementing the corridor

performance dashboard using this database type would introduce additional complexity in order

to convert data between relational and object-based environments.

42

Table 2-4: Technical comparison of potential database solutions

PostgreSQL MySQL Microsoft SQL

SQL Compliance Yes Yes Yes

Cloud Provider Support Supported by all

Supported by all Supported by Azure. Partial support by AWS and GCC

Development environment support

Most common languages Most common languages Most common languages

Cross-platform Windows, macOS, Linux, BSD, UNIX and others

Windows, macOS, Linux, BSD, UNIX and others

Windows, Linux as of 2019 release.

Support for GIS Data PostGIS plugin adds additional data types and functions for GIS support.

Native GIS data types Native GIS data types.

Support For JSON Data Native JSON and JSONB data types and indexing

Native JSON data type No native data type, but partial support with JSON related functions.

Support for Time Series Data

Timescale plugin adds data types and functions for time-series support.

Limited support for time-series data.

Native Timer Series Algorithms

Scalability Scalability has been proven by large companies like Uber and Instagram.

Scalability has been proven by large companies like Netflix and Shopify.

Scalability has been proven by enterprise companies, including Microsoft.

2.11.4 Conclusion

The majority of the data expected from industry partners will be from systems using relational

databases. Relational databases will be able to support normalised data expected from data

providers with little effort. The Oracle and IBM Db2 database options are too cost prohibitive for

the budget of this project and are therefore not considered viable solutions. These databases

are also only partially supported by viable cloud providers through 3rd party vendors.

PostgreSQL is available as a managed solution from Google called Cloud SQL. Most of the

other cloud providers also offer similar managed solutions for PostgreSQL if the cloud provider

needs to change in the future. PostgreSQL is supported by Nodejs as well as other popular

programming languages including the .Net languages, C, C++, Java, PHP and Python. As a

result, the database solution can interface with a large variety of environments if they were to be

used in the future.

43

PostgresSQL is open-source which means there are no additional license fees associated with

the database. Commercial support for PostgreSQL is available from Google as well as from

third-party companies if specialised support is required. PostgreSQL is compatible with most

common operating system environments including Windows, Unix, OS X, Linux, FreeBSD and

many others. If the underlying operating system of the infrastructure needs to be changed the

choice to use PostgreSQL is unlikely to limit the alternative operating systems.

Some of the largest software companies have shown that PostgreSQL can function at scale,

including Uber during their infancy [64]. Other companies include the UK weather service which

switched from Oracle to PostgreSQL [65] and Instagram, an image-based social media platform

with over 1 billion users acquired by Facebook [66]. PostgreSQL also has an extension system

that allows additional functionality to be added to the base solution. Among these extensions is

the PostGIS extension used for GIS-related data types such as geographical points, lines and

polygons. PostgreSQL also has native support for JSON data types which provides additional

flexibility on top of the existing relational database functionality.

Both the other database alternatives are still viable solutions. The combination of low cost and

the better support of JSON, GIS and Time Series data makes PostgreSQL the suggested

solution for this specific solution.

2.12 Communication

2.12.1 Possible solutions

Since the corridor performance dashboard is going to be a web-based application, we will be

using HTTP to communicate between web browsers and the performance dashboard. HTTP will

allow standard web-based activities such as loading the resources to render the website as well

as sending requests to fetch or change data located on the server. Commonly used messaging

protocols that make use of HTTP include:

SOAP

REST

GraphQL

XML-RPC

JSON-RPC

44

2.12.2 Conclusion

For synchronous communication, the most widely used solutions are REST and SOAP.

ProgrammableWeb is a website that keeps a record of publicly available API’s and has one of

the largest archives of APIs available. In their article on November 29th 2017, they reported over

17 000 public API’s [67]. They could identify the type of approximately 3600 APIs and about

81% of them were using REST [67]. Among these API’s are various notable tech companies

and corporations such as Google, Twitter, Microsoft, Facebook, PayPal, Visa, Mercedes and

many more. REST is considered leading solution for public-facing API’s. Along with the REST

API, the performance dashboard system will also expose a GraphQL endpoint which is used by

the dashboard software to retrieve data from the API.

GraphQL is a query language developed by Facebook in 2013 and open-sourced in 2015. The

main motivation behind GraphQL was to create an API query language that would deliver data

in a format more compatible with mobile devices and web applications. A REST API exposes

resources that can be retrieved from a unique URL. An example would be the URL

“/notifications/6” which would contain the data for the notification with a unique ID of 6. GraphQL

only exposes a single endpoint, typically the URL “/graphql”, and allows the user to query the

endpoint for the desired data. Figure 2-12 shows an example of a query and the result returned

from the query. The first difference to note is that GraphQL allows hierarchical data structures

composed of multiple resources since the information about the source of the notification is

returned as part of the same request. With a REST API, the source is likely to be a separate

query to another resource URL such as “/sources/6”.

Figure 2-12: Screenshot of a GraphQL query and result.

Being able to request data once and allow the server to compose the results to match a query

internally removes the burden from the client. The origin of notifications and sources could

change without affecting the client as well. Only the GraphQL resolvers responsible for fetching

the data would be affected. GraphQL can also be used with REST to aggregate multiple

resource endpoints into a single result.

45

Another key benefit that GraphQL provides is the ability to specify the fields that have to be

included in the result. As seen in Figure 2-12 each of the requested fields has a corresponding

result. REST has a similar feature defined in the specification called sparse fieldsets. The

purpose of sparse fieldsets is to define the fields that should be returned in a REST response.

Many REST APIs, however, do not implement this component of REST and instead return all

the fields. Fetching more data than required is known as over fetching since the client is given

more data than it asked for or needs. In GraphQL only the requested fields are returned which

means that defining the desired fields is mandatory. By only returning the requested fields the

amount of data transmitted using GraphQL could be lower if sparse fieldsets are not

implemented for a REST API.

The final benefit to using both REST and GraphQL is the addition of GraphQL subscriptions.

Subscriptions allow real-time communication between a subscribed client and a server. A

common way to achieve this is through the WebSockets protocol. GraphQL is then able to fetch

data synchronously similar to REST and also receive asynchronous messages from the server

through subscriptions.

The result is that REST offers a way to access specific resources using unique URL endpoints

while GraphQL offers a way to access all available data in consolidated structure from a single

endpoint through a query language. Both REST and GraphQL have solutions to generate

documentation from the code itself. Besides Facebook, some other high profile companies that

have implemented GraphQL endpoints include GitHub [68], Pinterest [69] and The New York

Times [70]

A key thing to note about these communication protocols is that they can all be implemented

within the same system. Depending on the requirements of corridor stakeholders, additional

solutions to the ones described above can be added at a later stage to facilitate integration.

Libraries that support these protocols are available in all the programming languages previously

discussed.

2.13 Infrastructure

For the corridor performance dashboard, Google’s App Engine and Google’s Compute Engine

environments were chosen to satisfy the majority of the infrastructure requirements. App Engine

is a PaaS solution for hosting applications. Compute Engine is an IaaS solution that provides

virtual machines. The primary purpose of Compute Engine is to support any technologies or

software that cannot conform to the requirements of App Engine. Some examples might include

databases of software that can only run on an operating system not supported by App Engine.

46

In these cases, the burden on provisioning virtual machines, deploying the software and

managing the software remains with the development team. In contrast App Engine automates

that entire process on behalf of the development team. Services deployed to App Engine are

packaged and deployed automatically.

When it comes to the configuration of software, developers are responsible for defining and

maintaining a configuration solution when using virtual machines. The configuration of virtual

machines themselves are provided by Google in the Compute Engine dashboard. Figure 2-13

shows a screenshot of the Compute Engine dashboard where the configuration of a specific

virtual machine can be changed. Defining and implementing configuration standards for

infrastructure takes time away from software development. Poorly designed or implemented

configuration management solutions can result in developers not being able to recreate an

exact copy of the infrastructure if needed.

Figure 2-13: Screenshot of the Compute Engine dashboard.

App Engine has a similar dashboard as shown in Figure 2-13 but also requires files to be

included with the source code uploaded to App Engine. These files are used to configure the

underlying infrastructure on which the application runs. Figure 2-14 shows an example of an

app.yaml file. The purpose of this file is to define the environment in which the application

should be run. The file also specifies other configuration values about the application regarding

security, networking, scaling and caching.

47

Each available configuration value has documentation provided by Google and creates a

standardised way to specify what the application needs and how it should be configured. With

this file, it is possible to redeploy the application in a few minutes and reproduce the same

configuration every time.

Figure 2-14: Screenshot illustrating an app.yaml file.

Figure 2-15: Screenshot illustrating a dispatch.yaml file.

Since this file is included with the source code, this configuration file is also captured in version

control. The advantage of this is that any attempts to change this configuration file can be

validated to ensure that the changes are intended and provides an opportunity to discuss the

changes. Version control also captures the history of the configuration file, allowing rollbacks if

necessary at a later date. All of these benefits do not apply to software that is manually

configured by a person unless there is a business policy in place that requires developers to

record configuration changes in some way. By forcing developers to treat configuration as part

of the development process, developers gain a better understanding of the operational aspects

of their software.

Traditionally the operations team would be responsible for configuring and managing software,

but as the DevOps trend has gained traction, many of those responsibilities have shifted to

developers. Figure 2-15 shows an example of a dispatch.yaml file. This file is another

48

configuration file that can be included when uploading source code to App Engine. The purpose

of this file is to define the routing requirements of the system. Each entry defines a URL and

service value. The URL describes the conditions that need to be met to direct traffic to the

service. The service value determines the service that the traffic is intended for. The underlying

networking configuration is automated according to this file.

When using Compute Engine virtual machines, routing needs to be implemented and

configured using a separate routing solution such as one of the reverse proxies previously

discussed. Other infrastructure considerations such as orchestration, load balancing and service

discovery are also automated in the case of App Engine. Scaling is a part of the app.yaml file

and lets a developer declare the conditions that need to be met before a new instance is added

to handle additional traffic. The configuration also allows hard limits to be set, such as the

minimum or the maximum number of instances allowed for the application. New instances of the

application are created or terminated within these limits to respond to traffic requirements.

Figure 2-16: Screenshot of the Google App Engine URL specification.

Load balancing is handled automatically by the App Engine platform. Each service has a distinct

URL that can be used to reach the server and uses the specification shown in Figure 2-16. This

provides a way to communicate with services synchronously using HTTP if possible. Services

could use other communication methods such as Pub/Sub and be an asynchronous only

service. Keeping track of every application instance and redirecting traffic from the URL to the

appropriate application instance is al managed by the App Engine platform. This infrastructure

functionality would need to be handled by the developers themselves when using Compute

Engine virtual machines.

App Engine also leverages other features of the Google Cloud Platform such as monitoring and

logging functionality. Monitoring and logging are also supported for virtual machines since they

are also a managed service from Google, but will not provide any application-level monitoring

and logging inside virtual machines. Monitoring and logging inside virtual machines is another

responsibility of the developers deploying applications on virtual machines. Overall the App

Engine environment allows developers to define infrastructure requirements declaratively.

Infrastructure is automatically provisioned and configured according to configuration files and

applications are deployed and started within minutes.

49

2.14 Commercial Business Intelligence Software

2.14.1 Possible Solutions

Before we consider developing a custom dashboard solution, the existing market needs to be

evaluated first. A commercial off the shelf solution might be capable of satisfying all the

requirements for the project. Among the options available for visualisation and reporting is a

collection of products known as Business Intelligence (BI) tools. The purpose of business

intelligence tools is to provide a complete solution that interfaces, analyses, transforms and

presents data. Some of the most commonly used solutions include:

Tableau [71].

QlikView [72].

Microsoft Power BI [73].

Google Data Studio [74].

IBM Cognos [75].

AWS QuickSight [76].

2.14.2 Feature Comparison

The goal of this section is to determine which of the requirements are satisfied by each of the

identified business intelligence solutions. This investigation will help to determine the intended

way to use these software solutions, their target audience, and if they offer the features required

to implement the corridor performance dashboard. The first features to investigate are the chart

capabilities of the different solutions. Key chart features include:

Support to create charts from pre-processed results or an unprocessed dataset.

Support a large variety of chart types, including the ones required by the project.

The ability for charts to be saved as static images at any point for use outside the

dashboard.

Provide interactivity within each chart so users can investigate visualised results.

Customisation support to allow charts to match an overall visual theme.

Table 2-5 describes the chart features of the most notable business intelligence solutions.

Charts are a fundamental feature supported by all of the evaluated solutions. The area in which

visualizations can be created is referred to as views, sheets, pages or reports depending on the

solution terminology. One key thing to note is that none of the evaluated solutions offer a way to

50

save individual charts as an image. All of them require you to save the area in its entirety as an

image. In order to save a single chart it would need to be scaled to fill the entire area.

Table 2-5: Chart features of notable business intelligence products

Tableau Qlikview MS Power BI Google Data

Studio

IBM

Cognos

AWS

QuickSight

Compose charts from

raw data.

Yes Yes Yes Yes Yes Yes

Common Chart Types Yes Yes Yes Yes Yes Yes

Selection Options

Within Charts

Yes Yes Yes Yes Yes Yes

Save Charts As

Images

Entire View

Only

Entire

Sheet Only

Entire Page

Only

Entire Page

Only

Report

Only

Entire Page

Only

Chart Customization Yes Yes Yes Yes Yes Yes

The next features to consider are related to the GIS capabilities of each solution. Features

required by a viable solution include:

Support for creating geographical maps similar to Google maps or other mapping solutions.

Support for overlaying visualisations over maps such as heat maps, markers, popups,

polylines and polygons.

Support for map style customisation to match an overall visual theme.

The ability for maps to be saved as static images at any point for use outside the software.

Table 2-6 shows a comparison of the mentioned features. All of the software solutions include

Maps in the form of native proprietary solutions or through integration with a 3rd party map

provider. Similar to charts the map elements cannot be exported individually and needs to be

exported with the entire area containing the visualization. All of the GIS visualizations offer the

ability to display basic information at specific places on the map such as Popup windows

containing text. They all also offer overlays and styling to customize the maps as desired.

Table 2-6: GIS features of notable business intelligence products

Tableau Qlikview MS Power BI Google Data

Studio

IBM

Cognos

AWS

QuickSight

GIS Maps Native Native &

3rd

Party

Native & 3rd

Party

Yes Native &

3rd

Party

Yes

Interactive Popups in

GIS Maps

Yes Yes Yes Yes Yes Yes

GIS Map Styling Yes Yes Yes Yes Yes Yes

Saving GIS Maps Entire View

Only

Entire

Sheet Only

Entire Page

Only

Entire Page

Only

Dashboard

Only

Entire View

Only

51

Embedding Charts

into Maps

No No No No No No

The final GIS feature that was not present in any of the solutions was the ability to embed

complex elements into the map. An example would be to include an image, chart, table, video

or any other interactive element into the map as a popup. Figure 3-25 shows and example of a

popup that includes a table, chart and button in a popup. When the location is selected on the

map the popup is shown and is fully interactive.

The final required features are related to reporting capabilities and giving individuals or groups

of people access to dashboards or reports. The features include:

Ability to embed charts and other forms of data into geographical maps, allowing users to

select map locations and see data associated with that location.

Authorisation and sharing capabilities that would allow control over which groups of users or

individuals have access to specific visualisations and performance metrics.

Sharing and social media integrations that allow visualisations or other performance metrics

to be shared among users or with the general public.

Provide a way to create reports in PDF format which is managed by the same sharing

control.

Allow PDF contents such as fonts and colour to be customised to fit an overall visual theme.

Allow visualisations such as maps and charts to be embedded into reports.

Table 2-7 compares the different access and reporting features of the leading solutions. All of

the solutions offer methods to control what users or groups of users can access. If the software

is managed by the provider, each user needs to register an account with the respective

companies. All the solutions except for Google Data Studio have enterprise versions that can be

hosted separately from the provider. Google Data Studio is heavily integrated with the Google

ecosystem so solution outside the cloud is available.

In terms of reporting each of the solutions offer exporting capabilities to PDF format. Similar to

charts and maps only the entire page or collection of pages can be exported as a series of A4

pages ready for printing. Reports in every solution adopt the style of the pages included in them.

This makes it convenient to author documents that would be suitable for printing or sharing as a

PDF, but limits dashboard layouts. Interactive dashboard layouts that might not be compatible

with a print friendly layout would need to be created separately as a version not suited for

exporting.

52

Table 2-7: Access and reporting features of notable business intelligence products

Tableau Qlikview MS Power BI Google Data

Studio

IBM

Cognos

AWS

QuickSight

Access Control To

Results

Yes Yes Yes Google

Account

Yes Yes

Sharing Results With

Public

Optional

Purchase

License

Specific

Additional

Product

Yes Yes Yes

Exporting

Visualization as PDF

Entire View

Only

Optional

Purchase

Entire Page

Only

Entire

Dashboard

Entire

Report

Entire View

Only

PDF Style

Customization

Inherits View

Styles

Yes Inherits

Page Styles

Inherits

Page Styles

Yes Inherits View

Styles

Embedding Maps into

PDF Reports

Entire View

Only

Entire

Sheet

Only

Entire Page

Only

Entire Page

Only

Entire

Report

Entire View

Only

These comparisons are by no means an exhaustive analysis of the available solutions on the

market and only considered the market leaders. All of these solutions offer very similar features

and approach the layout of dashboards and reports the same way. Each dashboard consists of

a series of pages similar to a landscape A4 page. These pages are then populated manually

with KPI’s and metrics according to what needs to be shown.

Depending on the software solution, these results can then be saved in various formats and

shared with other users. All the solutions provide a variety of standard visualisation options for

the most commonly used charts and graphs. Most of these platforms also allow custom

visualisations to be developed if something standard would not suffice. It is crucial to consider

the functionality currently available within an existing business intelligence solution and if it

would be enough to satisfy requirements. Additional training and development will likely also

need to be done to integrate an existing solution into new or existing client-facing software.

All of the solutions evaluated above provide most of the functionality that would be required for

a corridor performance dashboard. A key component that is lacking in all these solutions is

advanced geographical map functionality. Most of the map solutions allow for points, lines and

areas on maps with simple text information associated with each element. These simple

features would be acceptable for the majority of corridor stakeholder requirements. Advanced

map features are needed to satisfy the requirements for road transporters along the corridor.

The internal GIS tools used by transporters already offer functionality similar to what was

observed in these business intelligence products. In order to attract road transporter

stakeholders, the corridor performance dashboard would have to be able to offer functionality

they lack in existing solutions.

53

2.14.3 Cost Comparison

In this section, the cost of each of the business intelligence solutions is compared to determine

if they would be financially viable solutions for the corridor performance dashboard.

Table 2-8: Cost comparison of notable business intelligence products

Pricing Additional Details

Tableau Creators: $70 / user

Explorers: $35 - $42 / user

Viewers: $12-$15 / user

All prices are monthly costs and are billed annually. At least one

creator is required to author views.

Minimum 5 explorers are required and can only explore published

data and views.

Minimum 100 viewers are required and can only view published

views.

Qlikview Managed SaaS: $30 / user

Analyzer: $40 / user

Professional: $70 / user

All prices are monthly costs and are billed annually. Managed SaaS

is hosted and managed by Qlikview only. Managed Saas does not

include access to reporting, distribution and other features.

Professionals have access to all features. Analyzers can only

interact with sheets and export results. Professional license required

to author new sheets.

MS Power

BI

Power BI Pro: $10 / user

Power BI Premium: Starts at

$4995 / per cloud compute

resource

Power BI Embedded: Starts

at $735 / month

Power BI Pro prices are monthly costs and billed annually.

Power BI Premium is not billed per user, but instead the number of

cloud resources used. Reporting server is only included with Power

BI Premium.

Hosting dashboards for embedding and public consumption through

Power BI Embedded is not included with user licenses.

Google

Data

Studio

No cost for using the service. The data studio environment itself is free to use, but the underlying

infrastructure used to store and analyse data has individual costs

associated with each component. As an example, querying data

from a database will generate additional usage and costs for that

database product.

Data Studio is heavily integrated with the Google ecosystem so

extensive integration is required to use outside this environment.

IBM

Cognos

Standard: $15 / user

Plus: $30 / user

Premium: $70 / user.

Workgroup: $1990 / month

Standard: $ 10100 / month

Enterprise: $19950 / month

All prices are monthly costs with minor discounts available if billed

annually. Reporting capabilities are only available to premium

license holders.

Enterprise licenses have fixed costs. Workgroup includes 25 - 500

users. Standard tier includes 100+ users with additional capacity

and features on top of Workgroup.

Enterprise tier includes 150+ users with additional capacity and

features on top of Standard tier.

54

AWS

QuickSight

Standard: $9 - $12 / user

Enterprise: $18 - $24 / user

Readers: $0.30 / session up

to $5 / user.

Standard and Enterprise are monthly costs with lower annual rates.

Fully managed service on the AWS infrastructure. Costs for storage

and analysis of the underlying data are billed separately from the

Quicksight product. As an example, using data stored in a database

will generate additional costs for that database product.

Majority of features are restricted to enterprise license including

Reporting and Dashboard customization.

For public viewing, QuickSight charges on-demand per session.

Each session is a 30 min period of viewing a dashboard. In the

event that a user uses a large amount of sessions a month the cost

is capped at $5 per user per month.

The project requires that a minimum number of every stakeholder needs to be supported per

country. The number of users for each stakeholder includes:

Shipping lines user.

Ports authority user.

Customs user.

10 users for clearing and forwarding agents.

10 users for road transport.

Rail transport user.

Road authority user.

Weighbridge user.

Traffic police user.

Frequent traveller feedback user.

For each of the 4 participating countries a total of 28 users need to be supported on the system

for a total of 112 users. Table 2-8 contains the total cost to license the difference business

intelligence products. The licensing costs of these solutions exceed the operational budget even

without considering the cost of additional infrastructure needed to aggregate and store data.

Google Data Studio is the exception since it is a free solution offered as part of the Google

cloud ecosystem. At the time of this evaluation Data Studio was still in development with

features and costs constantly changing. Given this unreliable nature it was considered to be too

volatile to use for the project despite offering a significant portion of the required functionality.

Once the costs of developing and deploying dashboards in the Data Studio environment can be

determined reliably it might prove to be the most competitive offering of the evaluated solutions.

55

Table 2-9: Annual cost of notable business intelligence products

Annual Cost Additional Details

Tableau $ 57288 Creator license to author dashboards and reports. 112 Explorers licenses

to allow users to explore and view published dashboards and reports.

Qlikview $54600 Professional license to author dashboards and reports. 112 Analyzer

licenses to allow users to interact with dashboards and reports.

MS Power BI $22260 113 Power BI Pro licenses which allow all users to view, edit and create

dashboards and reports. Additional embedded license required for

reporting features.

Google Data Studio None There are no licensing costs for Google Data Studio, but the cost of serving

dashboards and processing results have underlying costs. Underlying costs

are difficult to predict with the service still early in development.

IBM Cognos $23880 A single workgroup license that can support up to 500 users.

AWS QuickSight $32544 113 Enterprise user licenses which allow key people to author dashboards

2.14.4 Conclusion

Most of the business intelligence solutions offer affordable licenses for individuals or small

businesses that want basic data analysis and visualization capabilities for a small number of

users. Features such as reporting and embedding visualizations into your existing software are

typically tied to the enterprise tier offerings. Due to high licensing costs many of these solutions

would not be financially viable for this project. Reports and dashboards need to be publically

viewable by users of the corridor in order to encourage them to provide data and participate for

additional insights.

The business intelligence solutions focus on products targeted towards providing more visibility

to select personnel within a company and not to deliver dashboards to the general public. This

use case makes the cost per user fairly high and the costs of sharing dashboards with self-

registered users would quickly exceed the funding available for this project. The products that

do have a means of publicaly sharing dashboards and reports require expensive enterprise

licensing which would exceed the funding available for the project.

Additional training and development would also be required to author the reports according to

the requirements of the project. Scalability of existing solutions is also a concern since the costs

associated with scaling the software is fixed to the performance of the software. Based on these

observations, the decision was made to implement a custom solution that would satisfy the

minimum requirements of the project. Instead of developing a proprietary solution that satisfies

56

the requirements, an alternative is to combine open-source technologies and commercial

services to develop a solution rapidly.Visualisation Libraries

2.14.5 Possible Solutions

Since the corridor performance dashboard is a web-based system, a JavaScript library will need

to be used to produce visualisations. Some of the visualisation libraries available include:

D3js [77].

Chartjs[78].

Echarts [79].

Highcharts [80].

Vega [81].

Fusion Charts [82].

2.14.6 Conclusion

The identified visualisation solutions contain a mix of commercial and open source options. The

two commercial solutions considered are Highcharts and Fusion Charts. Highcharts starts at

$510 for a single developer license [83]. The cost becomes considerably higher at $4340 for ten

developers using the software. Fusion Charts starts at $497 for a single developer and scales

up to $2497 for 10 developers or $9947 for 50 developers or more [84]. These two options are

not viable as they exceed the available funding for the project.

After considering the available features of the open source solutions, all of the solutions offer

functionality that would address the visualisation requirements of the project. ECharts is

however in the process of joining the Apache foundation, a non-profit software organisation that

supports and maintains some of the world’s most widely used open-source software solutions.

ECharts has standards that are being enforced that will ensure the community has sufficient

support in the form of communication methods and documentation. The other open source

alternatives are not partnered with a similar type of organisation and are being managed by

independent software developers. Due to this partnership ECharts is expected to be supported

and maintained well for the foreseeable future which is not a certainty for the other alternatives.

Based on this advantage ECharts is suggested as the visualisation solution for the corridor

performance dashboard.

57

2.15 Map Provider Services

2.15.1 Possible Solutions

Alongside visualising charts, a solution to creating geographical maps is also required.

Providing context in the form of geographical maps could help with understanding trade

corridors better. Being able to compare similar locations or routes throughout the corridor from a

high-level view can allow for observations that would otherwise require an extensive

investigation of the data. An example might be to overlay a heat map over a geographical map

to quickly identify problem areas. Commonly used web map services and libraries include:

Leaflet [85].

OpenLayers [86].

Google Maps [87].

Bing Maps [88].

MapQuest[89].

MapBox [90].

2.15.2 Conclusion

The most widely used map service for simple navigation tasks is the Google Maps service. For

complicated visualisations, there are, however, alternative solutions. A recent publication

comparing Google Maps and its competitor MapBox points out that Mapbox offers the same

services for less after the price changes Google made to their offerings in 2019 [91]. MapQuest

is a reseller of the services MapBox offers and targets smaller applications and solutions. Bing

Maps primarily offer mapping solutions to enterprise clients since their services start at $4500

for annual subscriptions which exceeds the budget of this project.

Another aspect to consider is that Google prevents the use of third-party solutions to render

maps in their licensing. This means that if Google Maps is used to implement the solution the

entire solution needs to revolve around the Google Maps libraries. This exclusivity raises some

vendor lock-in concerns.

58

Figure 2-17: Example of a Leaflet map from the website.

Alternatives to the Google Maps libraries are Leaflet [85] and OpenLayers [86]. Out of these two

alternatives Leaflet has a much larger community and a more comprehensive set of extensions.

Leaflet and OpenLayers are both provider-agnostic mapping libraries which mean that they can

support a variety of different map tile providers. Mapbox consistently contributes to the Leaflet

library as some of their offerings use the technology. MapBox also offers solutions using

WebGL to create 2D and 3D maps by utilising the capabilities of modern browsers.

After evaluating the available solutions, it was concluded that the differences in cost and the

additional features available in the leaflet community make the combination of Leaflet and

Mapbox the suggested solution for implementing GIS solutions in the corridor performance

dashboard.

2.16 PDF Rendering Libraries

2.16.1 Possible Solutions

The visualisation and reporting solution needs to be able to package visualised results such as

charts and maps into a PDF report as a visual aid in understanding corridor performance. The

most widely used JavaScript libraries for PDF generation include:

PDFKit [92].

jsPDF [93].

pdfMake [94].

PDF.js [95].

59

2.16.2 Conclusion

The final component needed to satisfy all requirements is a solution to generate PDF

documents. The standard for PDF files was registered by Adobe on August 1st 2008 as ISO

standard 32000-1 and is known as PDF 1.7 [96]. This standard is freely available for download

and implementation. PDF 2.0 is the next iteration of the standard and is registered as ISO

standard 32000-2 [97]. Since the format of PDF documents are standardised and available,

support could be implemented using a proprietary solution, commercial service or open-source

libraries.

All of the PDF libraries considered are open source and freely available to incorporate into

software solutions. jsPDF does, however, require a commercial agreement in order gain access

to the latest plugins and fixes. The pdfmake library is a declarative library similar to how ECharts

is declarative for visualisations. pdfMake is also an abstraction of the PDFKit solution which

means they are the same solution abstracted at different levels. PDF.js is the final of the four

identified solutions and the most feature-complete since Mozilla maintains it.

All of the libraries can produce PDFs that comply with the PDF standard mentioned before.

Based on the activity of the communities maintaining these solutions, pdfmake and PDF.js are

suggested as the solutions used to generate reports for the corridor dashboard solution. PDF.js

provides better compatibility with modern browsers as it is backed by a leading browser

developer while pdfmake provides better support for legacy browsers.

60

Figure 2-18: Screenshot of PDF render example from the pdfmake website

Since all of the solutions chosen above are JavaScript libraries (which is mandatory in the

browser environment), the use of Node.js also allows them to be used on the server.

Visualisation and PDF generation could be done without the presence of a browser. Generating

periodic reports on the server and providing it as a static resource that users can download is

possible without the need to introduce additional languages or environments alongside the

technologies needed for the web application. These benefits further unify the front-end and

back-end of the system further since any features developed for either the front-end or the

back-end would be compatible with both.

2.17 Future Considerations

2.17.1 IoT and RFID Integrations

As mentioned in previous chapters, IoT and RFID solutions are expected to generate additional

data alongside current data sources in the near future. Integrating these new sources of data

into the corridor performance monitoring system has the potential to provide a much more

comprehensive view of the trade corridor.

Figure 2-19 is an example of a GPS tracking device that also has the capabilities to capture

temperature readings from up to 50 remotely placed RFID sensors. The device also has

additional wired inputs and outputs which can be connected to any other relevant hardware that

needs to be monitored such as doors opening and closing.

61

Figure 2-19: Photo of a Picollo GPS tracking system with RFID temperature sensors

These types of additional datasets will need to be collected, aggregated and analysed in the

same way existing datasets are collected. Since the corridor performance dashboard is cloud-

based the services offered by cloud providers for IoT could be used as a means to collect and

organise these newly generated data sets. All of the cloud providers considered in this chapter

offer services that aim to simplify the process of integrating with IoT devices. These services

include:

Cloud IoT Core from Google [98].

AWS IoT Core from Amazon [99].

IoT Hub from Azure [100].

These services are fully managed as part of the cloud infrastructure and can adjust as demand

increases or decreases. This reduces the need for developers to provision and configure

additional infrastructure in order to accommodate the increased amount of data. Existing cloud

tools such as logging and monitoring solutions used for other cloud services are integrated with

their respective IoT solutions as well. This allows IoT to be monitored as soon as they are

integrated into the IoT services.

62

2.18 Chapter Summary

The corridor performance monitoring system aims to align the operations of all the entities along

the corridor by creating a set of measurements relevant to everyone. The performance

dashboard solution needs to organise and present the results calculated by the overall

monitoring system in a way that allows every entity along the corridor to view results relevant to

their operations. The performance dashboard also needs to present results in an interactive way

that allows users to explore and discover new insights. Results also need to be presented in a

fixed report format which would allow a set of measurements to be monitored and compared

over time.

Over the last two decades, the introduction of the internet has completely changed the

operations of businesses and the technologies used in software systems. Online web-based

software has become a key component of business operations. The internet has also exposed

companies to larger audiences than ever before. The largest companies around the world have

developed new techniques and technologies to accommodate this new global audience. The

experience and solutions developed by these companies can be leveraged to satisfy the

requirements of a corridor performance dashboard. In this chapter, the different components of

the web-based solution have been evaluated based on literature, surveys and comparisons

available from industry. Solutions for every component have been suggested based on

publically available information.

Determining which solutions to use does not only depend on the technical aspects of each

component but also on the cost, compatibility and the expertise available to support each

solution. It is impractical to consider every possible solution available in the world today and

attempt to arrive at the optimal solution. Instead a solution that is considered acceptable needs

to be derived based on information that is available at the time.

The data analysis approach used within the main corridor performance system has been

successfully used in previous projects to determine and calculate performance measurements.

The process of capturing the operational flow and defining measurements around operations is

still a manual process. Incorporating this process into the corridor monitoring system is a

potential feature that could be introduced in the future. The corridor performance dashboard

needs to be designed with these potential features in mind to ensure that they can be

accommodated with minimal effort.

One of these potential features is the introduction of new data capturing techniques. IoT and

other data capturing solutions such as RFID can potentially increase the types and volume of

63

data available throughout the industry. When selecting technology solutions, these future

requirements need to be considered as well. Overall there is no definitive set of technologies

that work for every situation. The advantages and disadvantages of each technology need to be

considered based on the specific problem being addressed.

3 CORRIDOR PERFORMANCE DASHBOARD IMPLEMENTATION

3.1 Design Approach

3.1.1 Domain-Driven Design

Domain-driven design aims to simply complicated software requirements by dividing the

problem into smaller problems that can be solved in relative isolation. The techniques that can

be used to define these smaller problems were originally described by Eric Evans in Domain-

Driven Design [101]. One of the key components in domain-driven is to establish a common

language between domain experts that will be using the software and the developers that

implement the software. This common language can then be used to define the domain model

which describes the problem being solved by the software. Both the language and the model

are iterated on throughout the project as developers gain a better understanding of the domain

and domain experts provide feedback and refine their requirements as they use and evaluate

the software.

Another key concept of domain-driven design is bounded context. Each bounded context

describes a part of the overall domain model that can be isolated so that the terminology and

requirements of every bounded context are isolated from the other bounded contexts. The same

word or phrases could mean different things depending on the bounded context in question.

Each bounded context also defines an interface that can be used to interact with the systems

within the specific bounded context. Bounded contexts should treat each other as opaque,

meaning that systems in different bounded contexts should be completely isolated from each

other and only be aware of the defined interfaces of other bounded contexts with which they

interact.

64

Figure 3-1: Simplified Diagram of the Domain Model

Figure 3-1 shows a very high-level domain model of the corridor performance dashboard. The

first of the three bounded contexts is the data capture and generation context. In the context of

the trade corridor, this includes all the different companies and systems that provide data. This

bounded context could further be divided into different types of data providers. Each type of

data provider might have their terminology that is specific to their domain but is not important to

any other data provider domain.

The second bounded context is data centralisation and processing. This context describes

everything related to combining data and calculating the results required to satisfy performance

measurements. This domain conforms to the data interface made available by context A. There

is, however, an anti-corruption layer in place between context A and B. The purpose of this

layer is to convert the data exposed by data providers into the format used within the context B.

This allows the interface of context A to evolve without affecting the data format used in context

B.

The data presentation context is the last of the three bounded contexts. Context C focuses on

satisfying the requirements specified in chapter three. Context C also describes who has access

to which performance measurements since some of the results directly compare competing

65

companies. The goal of the project is to help the industry learn from each other and work

together to improve. Publicly ranking companies would discourage low ranking companies from

further participating in the project. Ensuring that confidential information can only be accessed

by the right users is a key requirement of context C.

Context B conforms to both the other contexts since they interact with different parts of the

context interface. Context B conforms to context C directly since Context C controls what needs

to be shown to users. Changes in context C directly reflect changes in project requirements.

Having context B conform to context C directly without an anti-corruption layer will ensure that

context B also changes with Context C. The result is that context C caters directly to user

demands and context B caters to the required results of context C. Context A is isolated from

context B and can change and adapt on its own without affecting the relationship of the other

contexts due to the anti-corruption layer.

3.1.2 Detailed Domain Model

Iterating on the high-level domain model presented in Figure 3-1 presents a more detailed

version in Figure 3-2. This iteration starts to introduce some new terminology that needs to be

defined within each of the bounded contexts. The first bounded context to examine is the data

capture and generation context. A company in this context refers to any entity within the trade

corridor that provides or consumes data. Each company can have users that are registered on

the corridor performance dashboard. A user is defined as a person registered with a unique

email address. Users are registered on the corridor performance dashboard through a direct

invite from other users with the appropriate authority. Note that companies have users

registered on the system, but the relationship does not require users to belong to a company.

A data provider is defined as a process or system that produces data that can be used within

the corridor performance monitoring system. Data providers are typically related to companies

involved with the trade corridor in some way, but a relationship is not a requirement. An

example might be a vehicle tracking service that tracks the vehicles of a company on their

behalf. Data sets are defined as a collection of data used within the corridor performance

monitoring system in some capacity. Data sets are typically produced by data providers, but

data from other sources outside the project could also be used as long as the source of the data

is valid. An example of an external data set might be data produced for a different project. The

data itself might be valuable to the project even if the company or data provider is not

participating directly in the project. Since the data capturing and generation context is not the

focus of this study, it has still been kept relatively vague since the internal details of the context

should not matter to the data presentation context.

66

Figure 3-2: Diagram illustrating a more detailed domain model

Next, the data centralisation and processing context can be examined in more detail. A data

cache is defined as a copy of a data set or a partial copy of a data set. The anti-corruption layer

logic determines how the format of the original data set is transformed when stored in the data

cache. The main motivation behind the duplication of the data set is to allow analysis without

burdening the system that owns the original data set. The original data set might also not be in

the appropriate format for analysis; for example, the data set might be physical documents or

separate files instead of a normalised table in a database.

An analysis is defined as any additional processing that needs to be done on the data caches to

produce results. A result is a value that has been calculated from data in the data cache. Some

data in data caches might be in an acceptable format and can be directly exposed as results,

but in most cases, multiple data sets are likely going to be combined or transformed into results.

An example of an analysis might be to determine how long a specific vehicle was in a city by

67

checking a GPS data set to determine when the vehicle enters and exits the city. A result that

contains the duration of the vehicle in the city can be produced in the required format. This

additional processing on the data cache reduces the total amount of data significantly by

removing any unnecessary detail not required in the result.

In the example above, all detail regarding the movement of the vehicle is sacrificed and

simplified to a single value. If a GPS location for the vehicle is recorded every five minutes, the

vehicle will record 288 locations daily. Regardless of how many days the vehicle stays in the

city, the final summary will always produce a single result. The data sent by the vehicle tracking

device might also include other telemetry data that might be useful for other results but can be

ignored for the result described above. This reduction in complexity without losing the desired

information allows the performance dashboard system to offer near real-time queries from

results. The internal details of the data centralisation and processing context are also kept

simple since it is not the focus of this study.

The data presentation bounded context is the main focus of the corridor performance

dashboard. The definition of a user was explained in the context of companies since companies

are likely to be the main source of registered users. An important component of the corridor

dashboard is security and to ensure security a permission system is used. A permission is

defined as a unique value within the system that gives the owner of the value the consent to

access a specific resource or issue a specific command within the system. To view any results,

a user must have the correct permissions as required by the results. If a result does not require

any permissions, then anyone can view the results.

Roles are defined as collections of permissions and allow multiple permissions to be assigned

to users without the need to manage them individually. Commands are defined actions that

users can perform within the system, typically to alter how the system is configured. An example

of a command is to change the permissions associated with a role or to assign a role to a

different user. The result cache performs the same role as the data cache did in the previous

context. Results are duplicated over from the previous context to separate the two systems from

each other. This duplication allows the analysis to run continuously without impacting the

performance or availability of the corridor performance dashboard.

Results can have either one permission or no permissions. If a result has no permissions, it

means that value can be used in any calculation since the owner does not restrict access. This

is not likely to be the case since most of the data providers will want control over who has

access to their data. Performance measurements can then be calculated by including or

excluding permissions which would include or exclude subsets of data from the calculation with

68

that permission assigned. An example would be to have all the data for a vehicle from a road

transporter share the same permission. The permission might be

“[ProviderType]_[TransporterID]_[VehicleID]” to ensure that the permission is unique. A number

of these permissions could then be combined into a specific role to represent the data for a fleet

of vehicles from the transporter. Performance measurements can be calculated using either all

the permissions together or the role that contains all the permissions. In the context of a

relational database, this would require the value in the permission column to match one of the

permissions in the collection described above. For industry-wide calculations, the permissions

associated with results can be ignored since industry-wide calculations do not identify any

individual vehicle or data provider.

A Key Performance Indicators (KPI) is a measurable outcome which is calculated by evaluating

or combining a set of results. An example of a KPI might be the average duration a vehicle

spends in a city. This value is determined by isolating all the results for that specific vehicle and

calculating the average. Access to KPIs is handled similarly to results. A user can be given

access to a specific KPI by assigning the appropriate permission or role to the user. This does

not give the user access to individual results, but only to the calculated KPI. KPIs can be

presented in various formats and visualisations depending on which format conveys the

message the best.

Stories are defined as collections of related KPIs that try to convey a collective message. The

stories determined for the corridor performance dashboard include profiles, dashboards and

reports. Profiles are collections of KPIs about a specific entity such as a place, vehicle or

person. Profiles provide users with the ability to monitor the performance of individual entities.

Dashboards are collections of KPIs that allow the performance of similar entities to be

compared such as comparing the performance of vehicle across a variety of different KPIs.

Dashboards also provide KPIs that indicate the performance of all similar entities across the

industry. Reports are a combination of the two stories described above with each report

providing KPIs in a print-friendly PDF document.

Similar to results and KPIs, a user needs to have the appropriate permissions to gain access to

a specific story. Unlike the relationship between KPIs and results, having access to a story also

implicitly grants access to all the KPIs included in the story. The reasoning behind this is that

each KPI is still distinguishable within the story and can be viewed separately. This is not true in

the case of KPIs and results. Each result cannot always be distinguished when the result can be

viewed. Some examples include the minimum, maximum, average or median of a set of results.

There are certain KPIs that will make the results distinguishable, for example, a line chart that

shows the value of every result. By choosing to present the KPI as a line chart, access is

69

implicitly given to the underlying results. The KPIs included in a story are always distinguishable

which allows the assumption that access to the story implies access to the KPI to be made. For

KPIs and results, the same assumption cannot be made, and the principle of least privilege is

applied to prevent unintended access to results.

Overall the domain model describes the general problem that the performance dashboard aims

to solve without restricting the solution specifically to logistics trade corridors or technologies.

3.2 Design and Implementation

3.2.1 Overview

The corridor performance dashboard consists of the web application component and the data

API component. These two components are separated into two applications that each

addresses a different concern. The data API is responsible for controlling access to data and

satisfying any requests for data. The web application is responsible for navigating all the

available data and organising it in a way that users of the application can understand. This

approach of separating the system into separate applications to deal with different concerns has

advantages and disadvantages.

3.2.2 Design Advantages

The first advantage of this approach is that the data API can serve multiple presentation clients

and third-party systems and is not just tailored to the web application [102]. If a mobile

application needs to be created in the future, it can reuse data from the same API and organise

the data into an appropriate format for mobile. The second advantage of this approach is that

each of the applications can grow and evolve independently [102]. The data API can expose

more data over time and clients have the option to incorporate it or not.

Clients can also change on their own as long as they conform to the data API. The web client

can change how data is presented without affecting the development or availability of the data

API. Another advantage is that the two applications can scale independently. If the API is

serving multiple clients, it can introduce extra instances to accommodate the additional traffic

[102]. The web application can run a smaller number of separate instances for the traffic using

the web application. If the two applications were combined, the web application would need to

scale with the API to accommodate the traffic of the API.

70

3.2.3 Design Disadvantages

There are, however, drawbacks to using two applications instead of combining them. The first

drawback is an increase in complexity since the two applications need to run independently and

coordinate their efforts [102]. Each application also has independent dependencies and

development pipelines which increases the overall development complexity. The web

application also requires additional logic to react appropriately when the API is not available. In

a single application, this additional logic is not required. Another drawback is that the API

becomes less flexible if it potentially needs to serve multiple clients since changes to the API

need to be compatible with all clients. If the back-end is only subservient to the requirements of

the web front-end, the potential impact of changes to other clients is not a concern. Multiple

applications also increase the attack surface of the system which presents more possibilities for

malicious actions. The concerns surrounding security could, therefore, require additional

attention.

3.2.4 Alternatives

In the case of the corridor performance dashboard, the flexibility offered by using two

applications outweighed the drawbacks. A separated data API opens up the possibility of

allowing third-party integrations and clients for other platforms (e.g. mobile and desktop) without

impacting the web application.

Depending on the requirements of different projects, other design approaches could also be

considered when the advantages listed above would not benefit the project or the

disadvantages would outweigh the benefits. A common approach is to develop everything as a

single application solution. In this case more appropriate web frameworks might be:

ASP.Net [103].

Spring [104].

Django [105].

Laravel [106].

Ruby on Rails [107].

71

3.2.5 Data API

3.2.5.1 Overview

The first of the two applications within the corridor performance dashboard system is the data

API. As previously discussed the data API determines what data is exposed and controls

access to the data. The data API is a public facing application with a separate domain. Anyone

on the internet could go to the URL of the data API and request data, allowing third-party

systems to integrate and retrieve data.

The data API only provides data to clients that have the required permissions to access the

data. Figure 3-3 shows the most notable components within data API application. The overall

design consists of the infrastructure, application hosting, business logic and public interface

sections indicated by the dotted lines with each section performing a specific function within the

overall application.

Figure 3-3: Diagram showing the main components within the data API.

3.2.5.2 Provisioned Cloud Infrastructure

Infrastructure components are the underlying Google Cloud Platform services used within the

application. Google Cloud Memorystore is a fully-managed in-memory data store for Redis [108]

and is used to cache query results as part of the provided cloud infrastructure.

72

Google Cloud Pub/Sub is a messaging solution that allows different applications to publish

messages to a queue system and retrieve messages from queues. The purpose of the event

processing component is to manage all the logic related to asynchronous communication. Event

processing listens for events from the analysis solution and stores the results in the database.

By using an asynchronous communication channel the corridor dashboard system and the

analysis systems can be operational at different times and still communicate results to each

other. Results are queued within Pub/Sub by the analysis solution and remain in the queue until

they are retrieved by the dashboard system.

Google Cloud SQL is a managed database solution capable of running either MySQL, Microsoft

SQL or PostgreSQL databases. The internal configuration and structure of the database are

managed by the development team. The hosting and maintenance of the hardware on which

the database is running are maintained by Google. The development team can also to specify

the hardware on which the database should run, configure automated backups and configure

replication to other data centres for higher availability and failover in the event that one

database instance goes down. Transferring some of the provisioning and operational burdens to

Google allows the development team to focus more on developing software.

These infrastructure solutions are not unique to Google as a cloud provider. The other cloud

providers evaluated in the previous chapter have comparable services. If a different cloud

provider were to be used the same infrastructure could still be achieved using the equivalent

services they offer.

3.2.5.3 Application Hosting Solution

Express is a web application framework that provides a structured approach to developing and

organising a Node.js web application. Express offers various templating engines to generate

and serve HTML pages with dynamic values within the page. Express also offers routing based

on the URL requested and the HTTP method used which is a standardised feature of most web

server solutions.

As described in previous sections, there are alternative web frameworks similar to express for

other programming environments that could serve the same purpose. Express is used as it fits

the skill set of developers working on the project and is the most widely used solution in this

ecosystem for web-based solutions [48].

73

Figure 3-4 shows two examples of routes within Express. The first example responds to the “/”

URL if a get HTTP method was used. This might be used to return all the files required to show

the homepage of a website. The second example also responds to the “/” URL but only if a post

HTTP method was used. Within REST, the post HTTP method is typically used to create a

resource at the specified URL.

Figure 3-4: Screenshot of a routing example in the express documentation.

3.2.5.4 Business Logic

The data access component is primarily responsible for fetching, aggregating and transforming

results to satisfy client requests for data. The data access component uses Sequelize [109], an

Object Relational Mapping (ORM) tool, to interact with the database. Comparable solutions in

other environments include:

Entity Framework for ASP.Net [110].

Hibernate for Spring [111].

Include ORM in Django [112].

Eloquent for Laravel [113].

ActiveRecord for Ruby on Rails [114].

Figure 3-5: Diagram illustrating the purpose of ORM software.

74

The purpose of an ORM is to map the objects used in object-oriented programming to the table

format of relational databases, as demonstrated in Figure 3-5. Developers can interact with the

objects within their programming language, and the ORM handles the interaction with the

database by programmatically composing SQL queries to fetch data. In the context of Figure

3-3, the ORM is found within the data access component and is used to communicate with the

Google Cloud SQL component.

The use of an ORM is a frequently debated topic since using an ORM has advantages and

disadvantages. Some of the advantages include a reduction in code volume and inconsistency,

compatibility with various databases and simplifying the process of mapping complex domains

to the database. Some of the disadvantages include possible performance overheads, potential

difficulties debugging generated SQL and additional learning alongside SQL. The decision to

use Sequelize was motivated by the simplicity of most interactions with the database.

The analysis system performs the majority of the complex transformations on data and

produces simple results that are often not combined. Using an ORM has allowed a large

number of CRUD (Create Read Update Delete) operations to be implemented quickly while

avoiding repetitive code such as mapping query result fields to object attributes or vice versa. If

additional performance is required for a specific query that is used frequently the query can be

optimised by implementing a custom SQL query instead of letting the ORM compile the query.

Custom queries also allow vendor-specific features such as stored procedures in the case of

MSSQL to be called. Other features of the ORM such as hooks, replication, transactions and

migrations could serve as potential solutions to future challenges or at least offer a starting point

from which to find a solution.

Figure 3-6 shows the Sequelize definition of a road segment as an example. Every field within

the definition (e.g. id or name) is converted to a column within the database table. Any

constraints defined in the object definition are also translated to the database table, such as

setting primary keys and default values. Figure 3-7 shows the table generated by Sequelize in

the PostgreSQL database according to the object definition. Relationships between tables such

as one-to-many or many-to-many relationships are defined in a similar way as the object

models.

75

Figure 3-6: Screenshot of a Sequelize object definition.

76

Figure 3-7: Screenshot of the database table created by Sequelize.

3.2.5.5 Public Interfaces

The REST and GraphQL components are used to define the interface of the data API. The web

application and any other potential clients or third-party systems use these components to

request and retrieve data. REST endpoints are used to describe specific resources, for

example, a user. The implementation of each endpoint uses the data access component to

perform CRUD operations on the data that the endpoint represents. The data access

component abstracts the implementation details of data storage away from the REST endpoints

and allows the underlying data storage solution to change without impacting the interaction

between the Rest endpoints and the data access component.

The REST endpoints for the corridor performance dashboard were defined using the OpenAPI

Specification (OAS). The OAS is an open standard developed by the OpenAPI Initiative (OAI)

under the Linux Foundation to offer the industry a vendor-neutral format to describe REST APIs

[115]. Open standards have several benefits including increased security, reduced cost,

interoperability and longevity [116]. The company Smartbear has been the main driver behind

the OpenAPI specification and has developed a set of open-source and commercial tools to

design, develop, document and test REST APIs that adhere to the OpenAPI specification.

77

Figure 3-8 shows a screenshot of the swagger editor being used to develop the user related

endpoints of the Corridor Performance Dashboard. The editor allows developers to design and

document all the endpoints and generate client and server examples in various languages and

environments. Using the swagger editor has allowed developers to rapidly design REST

endpoints using the declarative language shown on the left of the editor. The files generated by

the editor are used to generate the interactive documentation shown on the right of the editor.

The interactive documentation can be incorporated into the API application itself or hosted

elsewhere. Smartbear also offers cloud services that allow developers to design and iterate on

specifications without the additional concerns associated with integrating or hosting the

documentation.

Figure 3-8: Screenshot of the swagger editing tool

78

Figure 3-9: Screenshot of swagger endpoint implementation in Node.js server.

Once endpoints are designed, they can be implemented by interfacing with the data access

component. Figure 3-9 shows a screenshot of the login endpoint implementation as an

example. The endpoint starts by validating the values sent to the endpoint. In this specific case,

it ensures the email and password provided adhere to the requirements of an email and

password. If the validation fails, the API responds with the HTTP 400 response code, which is

the status code used to indicate bad requests. The data API assumes it cannot trust any clients

making requests, so this validation offers additional protection against invalid values.

If the provided information is valid, the request is handed over to Passport. Passport is a

middleware for Node.js that deals primarily with authentication. It allows developers to define

different authentication strategies that can be used to sign users into applications.

Authentication strategies can be developed internally, or existing strategies shared by the

community can be used. Some of the strategies commonly used are strategies that authenticate

users using social media platforms such as Facebook, Twitter, etc. In the example passport

uses the “local-login” strategy which is a strategy developed to interact with the data access

component that verifies the email and password provided with the request.

79

If the credentials provided do not match the credentials stored within the database, the API

responds with the HTTP 401 response code, which is the status code used to indicate

unauthorised requests. If something went wrong that is not directly related to the login process

(e.g. database is unavailable) the API responds with HTTP 500 which is the code used to

indicate internal server errors. This informs the client that something went wrong within the

server and that the failure was not necessarily caused by the client request. If no errors occur

the information requested by the user is transformed into the appropriate formats such as

encrypted tokens, cookies and raw text. Finally, the server returns all the data with an HTTP

200 status code which indicates that the request was successfully handled.

By using multiple HTTP status codes the client and server can have a more comprehensive

interaction which allows the client to react better to the responses it receives. An example might

be to have the client retry the request again when it receives an HTTP 500 response. If the

client receives the HTTP 500 code three times in a row, it can assume that the API is inoperable

and can inform the user that the service is not currently available. If all the failure conditions in

the example returned the HTTP 400 status code, the client could not understand why the

request failed. The user would be expected to try and log in again regardless of the failure

which could create the impression that the user is doing something wrong when in fact the API

is the source of the issue. The general development cycle of a REST endpoint includes [102]:

Determining the resource the endpoint will expose.

Defining the structure and fields of the response under ideal circumstances.

Defining inputs and their effects on the response of the endpoint.

Determining any possible exceptions that could occur and the appropriate HTTP response

codes to describe them.

Implementation of the endpoint definition in the swagger editor.

Integration of the new endpoint definition into the existing data API solution.

Implementation of the endpoint in code.

Testing the endpoint and ensuring the response is correct (including all the exceptions).

Run software that automatically generates updated interactive documentation once the

endpoint implementation is finalised.

Implementation of all the REST endpoints is an ongoing effort since there are still legal and

technical negotiations in progress with data providers. As new data resources and results are

provided by the analysis system the endpoints to access those results will be implemented

accordingly. Long-term the use of design and documentation technologies such as swagger will

80

help to produce a comprehensive and well-documented REST API that client and third-party

developers can use to integrate with the corridor performance dashboard API.

The final component in the data API is the GraphQL component. GraphQL mostly serves the

same purpose as the REST endpoints but presents data using a different approach. The first

difference is that REST exposes a URL for every resource while GraphQL only exposes a single

URL. The advantage of using a single URL is that the client does not have to know the different

URLs of resources and can access all the different data resources from a single point.

GraphqQL has three methods that can be included in any request, namely Queries, Mutations

and Subscription. Queries are equivalent to GET requests in REST and are used to fetch data

from the API. Mutations are equivalent to POST/PUT request in REST and are used to

manipulate data. Subscriptions are a concept that does not have an equivalent in REST

primarily due to the HTTP protocol.

As previously mentioned GraphQL uses POST requests to request data from the URL endpoint.

GraphQL has a declarative query language that allows the client to specify what it wants to

receive in the response. This specification is not limited to a single resource which means that

data from various sources can be compiled into a single HTTP request. In REST, each resource

is bound to a separate URL, so multiple requests need to be made to fetch the same result.

Figure 3-10: Screenshot of the GraphiQL tool interface with an example query

81

Figure 3-10 shows a screenshot of the GraphiQL tool, an interface used to explore and query

GraphQL APIs. In the leftmost column is the request sent to the GraphQL API. The request

contains the query method which is used to request data. The query method contains the

dashboard and notification fields each of which contains their own set of fields. The middle

column shows the response that is returned when the request is made to the API. Note that the

response contains the data for both the dashboard and notifications. The rightmost column

contains interactive documentation for the API. The documentation lists all the different fields for

every defined type. Currently, it is showing the values available to request for a dashboard.

Note that the documentation describes a “layouts field” which is not used in the query and as a

result is not present in the response either.

One key downside in GraphQL is the lack of network-level caching. In REST APIs each URL is

unique and returns a unique result. Caching can be handled by a load balancer or reverse proxy

at the network layer without requiring changes in the application. In the case of GraphQL, the

application needs to handle caching since the contents of requests sent to the same URL may

be different every time. There are open-source libraries that deal with this problem such as the

dataloader library by Facebook which batches and caches repeating requests to data sources

[117].

Overall the data API provides an interface using the widely accepted REST format in order to be

compatible with the majority of systems throughout the industry. The data API also offers

GraphQL as an additional solution for client and third-party developers interested in using more

recent API technologies. Appendix A contains a full list of the libraries used within the data API

as well as a brief description of what every library does and where to find it. The list describes

all the notable libraries as well as the less notable libraries that enhance the development

experience by abstracting away repetitive code or automating tedious tasks.

It is important to note that interfaces such as the REST and GraphQL are not limited to the

development environment used for this project. Libraries that incorporate this functionality into a

software solution can be found for all major web framework solutions. Other communication

solutions previously discussed such as SOAP or JSON-RPC can also be added to the available

interfaces alongside those described in this section if that functionality was required to integrate

with a corridor stakeholder.

82

3.2.6 Web Application

3.2.6.1 Project Template

After identifying the framework of choice, development could either begin by implementing

everything internally or by using a template or boilerplate as a foundation. After investigating

various available template and boilerplates, the react-boilerplate project was selected since it

includes [118]:

Automated scaffolding which reduces the amount of repetitive code that developers need to

type themselves.

Usage of Redux within React to manage complex application states.

ECMAScript support.

Offline-first support, allowing the application to load under poor or no connection conditions.

Linting to ensure that code throughout the project is uniform and clean.

i18n Internationalization support to accommodate different languages easily.

Integrated testing solution for unit and component testing.

Runtime optimisations such as minifying and bundling code to improve application

performance.

Real-time feedback while developing to increase developer productivity.

Figure 3-11: Screenshot of the web application project structure

83

By using a boilerplate as a foundation, the development environment is mostly provided and

allows developers to begin immediately instead of having to invest additional time to configure

or develop the tooling needed.

Some alterations were, however, made to the boilerplate to run the web application in the

Google App Engine (GAE) environment. Some of the scripts needed to be changed so that

GAE could run the application correctly. The GAE app.yaml and dispatch.yaml configuration

files previously discussed needed to be added as well. Figure 3-11 shows a screenshot of the

current project structure after adapting the boilerplate to suit the development needs. The data

API project is also based on the same boilerplate but was written internally while consulting the

boilerplate since many of the browser related functionality is not required.

The app directory contains the web application itself and is where the majority of development is

done. The build directory contains the compiled result of the application and is uploaded to

GAE. The coverage directory contains the results of running automated tests on the software

and is discussed later on in this chapter. The internals directory contains all the code (e.g.

scripts) and configuration files required by the boilerplate to provide the desired development

environment. The node_modules directory contains all the dependencies of the project. The

public directory contains any static assets (e.g. third-party CSS styling) that need to be served

by the web server.

The server directory contains all the code for the web server that browsers interact with to load

the web application. The rest of the files are configuration files for various aspects of the project

including:

Babel configuration for ECMAScript support in development.

Source code editor software configuration.

Environment variables that need to be set for the application.

Code linter configurations to control how the code is styled in the project.

Ignore files to define which files and directories need to be uploaded to the GAE

environment and which files need to be tracked by the source control solution.

The package.json file which describes all the details of the project and the version of every

dependency used within the project.

84

All the tooling and configuration combined offers a powerful development environment that

promotes rapid prototyping and robust testing to ensure that as few defects as possible end up

in the final production software product. These types of project templates are not unique to this

specific environment. Figure 3-12 shows an example of templates provided for the ASP.Net

technologies in Visual Studio 2017.

Figure 3-12: Screenshot of the template browser in Visual Studio

85

3.2.6.2 Dashboard Design Overview

Figure 3-13 shows a summary of all the major technology solutions used in order to create the

web application for the corridor performance dashboard. The web application uses the same

infrastructure components as the data API. The web application uses the same hosting solution

as the data API, but instead of offering a data interface the web application server hosts all

bundled code for the application as well as other static files required by the application such as

external stylesheets and fonts.

Figure 3-13: Diagram showing the main components of the web application

3.2.6.3 Application Framework

Some of the options that have seen major adoption in recent years include AngularJS which

was developed by Google [119], ReactJS which was developed by Facebook and Vue.js, a

framework based on the experience of Evan You after working with AngularJS at Google [120].

By comparing the conclusions of various articles from industry experts across a wide range of

different companies and industries React was selected to develop the web application with

[121,122,123,124,125]. The popularity of React in the Stack Overflow survey as presented in

the previous chapter is also a validation of this technology choice [48]. Web frameworks such as

86

those discussed are not a requirement to develop a web application, but provide structure to the

project based on the experience gained by developers collectively.

3.2.6.4 Component Based Design.

In the context of React, a component is an object that contains a combination of JavaScript,

HTML and CSS and describes the functionality, contents and appearance of the object

respectively. Figure 3-14 shows an example of a React component as implemented in code.

The first lines import dependencies used to create this component. The LoadingIndicator

function describes the contents and behaviour of the component. The LoadingIndicator function

has a parameter called “props” which is used to pass values to the component. The propTypes

property describes all the values that the component expects to receive.

The values passed into the component are evaluated against the list of expected values and

exceptions are raised if values that have not been declared are accessed. By defining

components and reusing the definition every time that component is needed results in less code

that is easier to understand. Components also encourage a modular approach to building the

application which tends to make it easier to separate the concerns of components from each

other.

Figure 3-14: Screenshot of a ReactJS component

87

Figure 3-15: Diagram illustrating complex nesting.

Figure 3-15 shows a visual representation of how an application page could be constructed by

defining components and reusing them. To produce this page a total of six components would

need to be defined. The Application component would be responsible for the highest level

behaviour such as, for example, deciding if the header and navigation should be visible and the

contents of the Route component. Similarly, the Navigation component renders a Button

component for every route in the application. If the appearance or behaviour of all the buttons

has to be updated, the change can be made inside the button component once. Since the

Navigation component uses the Button component, all the buttons rendered by the Navigation

component will reflect any changes.

This concept of reusing existing code is not new to React.js and has been present in most

notable programming languages since the creation of code compilers and assemblers. In the

context of web development, however, Reac.jst and the other recent front-end application

frameworks created the idea of reusable components that contain JavaScript, CSS and HTML

together in the same component. The underlying framework can manage relationships between

the different languages in components and easily incorporate new components due to their

modular nature.

88

3.2.6.5 Stateful Components

The LoadingIndicator example used before is known as a stateless function. Stateless functions

do not store any values internally and will always produce the same result for the same inputs.

Stateless functions are similar to simple math functions with defined inputs and outputs. This

makes the behaviour of the component very easy to reason about. Stateful components, on the

other hand, store values internally in a property known as “state”. The state of a stateful

component can change due to the behaviour of the component or can be changed by external

components.

State is typically grouped and centralised to as few components as possible and then shared

with stateless components by passing the relevant values down as properties. These

components that govern state are often referred to as high-order components or container

components. A typical use case for these components is to fetch data from another system and

then pass the results down to stateless components to render the desired output.

3.2.6.6 Component Approach Drawbacks

As with most decisions in software development, there are drawbacks to this compositional

approach of developing applications. One drawback that was observed during the development

of the corridor performance dashboard was that reusing a component too much can have

negative effects as well. As a component is incorporated into more sections of the application,

the effect of changing that component grows. This can result in hesitation to evolve that

component since the effects of changes might be spread across the entire application. This

same problem has been observed before in monolithic applications where developers were

rarely able to change parts of the software that is heavily depended upon since no single person

knows all the ramifications of the change. In the case of React, a good practice is to use

stateless components as much as possible for visual elements. If a change causes a visual

flaw, it is more likely to be noticed than a logical flaw that might not be apparent while using the

software.

89

3.2.6.7 State Containers

Components that manage and interact with data typically have unique concerns and are often

created for a specific purpose. Redux [126] is a state container for React applications that can

store all the values that need to remain persistent throughout the application lifecycle. Individual

components can connect to Redux to retrieve the data they need. Stateful components are

often still used to manage state when a state container is used, but instead of storing the state

internally, the state is stored in the state container.

3.2.6.8 Project Layout

Figure 3-16 shows how the application is composed of components and containers. The

Application component is responsible for managing behaviour that affects the entire application.

Some examples include the internationalisation which needs to be accessible by every

component displaying text. This allows those components to retrieve the text associated with a

specific language and render it accordingly. Another example is user information such as

permissions so that every part of the application can verify user access.

The components folder contains stateless components that are shared across the application.

The majority of the components in this directory are user interface components. Each

component directory contains the source code for what the component does as well as tests

used to verify that the component is behaving as intended.

Figure 3-16: Diagram illustrating the application component structure

90

The container folders contain additional files related to interfacing with Redux and data fetching

solutions such as Apollo. Apollo is a client library used to communicate with data interfaces

such as the data API of this project. Defining each different query in a file makes it easy to find

and change the contents of queries since the files are grouped with the component using the

queries. Figure 3-17 shows an example of a GraphQL query file used to retrieve notifications

from the data API.

Figure 3-17: Screenshot of an example GraphQL query file.

The files structure above consists of a large number of files that each serves a specific purpose

and might seem excessive. The file structure has been derived from how the boilerplate has

been structured and personal experience from implementing prototypes and the final solution.

The majority of the files contain less than 100 lines of code and as a result are easy to inspect

and consume. The presence or absence of files also indicates what each container does since

the lack of specific files means that the container does not use the functionality of those files.

The files could all be combined into a simpler structure, but would sacrifice some of the benefits

mentioned above and creates lengthy files that are harder to understand.

In order to access REST endpoints, the corridor performance dashboard needs an HTTP client

since REST uses the HTTP protocol. Axios is a popular open-source HTTP Client library that

abstracts away the HTTP protocol and provides a comprehensive set of commands which can

be used to interact with any HTTP Server. Figure 3-18 shows an example of how Axios is used

in the LoginForm previously discussed to authenticate with the data API.

91

An important motivation behind using HTTP (and to a degree REST) for authentication is to be

able to support third-party authentication solutions. Solutions such as OAuth requires HTTPS

endpoints for integration. OAuth allows users to sign in using their accounts on third-party

services such as social media platforms (e.g. Facebook, Twitter) or any other system that

supports OAuth. If companies have an authentication solution that they would like to reuse to

authenticate users with, OAuth provides a way to give their users access to the corridor

performance dashboard without having to share or expose sensitive information about their

users.

Figure 3-18: Screenshot showing an example where Axios was used.

3.2.6.9 User Interface

In order to increase the speed at which the user interface of the project can be prototyped and

developed, two open-source user interface frameworks for React were incorporated into the

project. User interface frameworks offer developers a set of components with predefined

appearances and behaviours that can be used with their applications to compile a user interface

quickly. The benefits of using user interface frameworks are that they reduce development time

and indirectly development cost.

One downside to using a user interface framework is that depending on how popular a user

interface framework is, the application might look generic if the framework commonly used

throughout the industry. Differentiating an application visually from competitors can be key to

gaining market share since the user experience is the first thing end users are exposed to in

software. The decision to use a framework is also influenced by the use case of the software. If

the software is used internally by employees for daily operations, a user interface framework

might be acceptable since the user experience might not be as important as it can be with

customer-facing software.

92

The user interface frameworks incorporated into the corridor performance dashboard are

Semantic UI React [127] and Ant Design [128]. These user interface frameworks were selected

as no visual requirements for the website were specified in the ToR of the project. Both of these

frameworks have a very similar aesthetics which allows them to be combined with minimal

changes. Figure 3-19 illustrates an example from the documentation of how a single button

component can be customised to create the desired look.

Figure 3-19: Screenshot from Semantic UI React documentation of button colours.

3.2.6.10 Visualisation Support

ECharts was used in order to implement the visualisation capabilities of the dashboard software.

The primary purpose of ECharts is to implement the chart and graph functionality of the

dashboard. In order to incorporate ECharts into the React environment, a custom React

component would need to be created that utilises the ECharts library to render the component.

An open-source solution to this problem already exists under the name “echarts-for-react” [129]

and after inspecting the source code, it was incorporated into the application as the Chart

component. Since ECharts is a declarative library, each visualisation requires a definition that

specifies the appearance and content of everything that should be rendered. Figure 3-20 shows

an example of a placeholder Bar Chart definition used for testing the Chart component.

Figure 3-20: Screenshot of a placeholder bar chart definition.

93

Figure 3-21: Screenshot of visualisations in web application.

Figure 3-21 shows a sample of prototype visualisations there were implemented within the

corridor performance dashboard to evaluate the capabilities of the library. The Chart component

has been created to be dynamic, allowing users to rearrange and resize visualisations. Figure

3-22 shows the same components resized and rearranged differently. Individual visualisations

can also be saved by selecting the picture icon (indicated with a red outline in Figure 3-22)

when the user has their mouse cursor over the visualisation.

Figure 3-22: Screenshot of customised visualisations in web application.

94

When the indicated icon is pressed, the chart container converts the HTML 5 canvas used by

ECharts to a PNG file and saves it to the local machine. Figure 3-23 shows an example of a

saved image from the dashboard in Figure 3-22. The visualisations are interactive and different

sections of the data can be excluded from the visualisation by toggling them in the legend to the

right. Figure 3-23 shows two of the Cargo types greyed out since they were toggled off in Figure

3-22 before the visualisation was saved. The image that is generated when the save button is

pressed is a direct copy of the way the visualisation currently looks. Future improvements

include the ability to remove disabled entries from the legend in the saved image since there is

no data for those entries in the visualisation any more.

Figure 3-23: Screenshot of a saved chart opened in Windows 10.

3.2.6.11 Interactive GIS Map Support

The next core elements required in the corridor performance dashboard is support for GIS maps

and the ability to embed visualisations into the map. The library used to implement interactive

GIS support for the dashboard was Leaflet. Similar to the Chart component from the previous

section, a custom React component would be needed to integrate the two software solutions.

An open-source component already exists that facilitates the use of the Leaflet library within

React and is called “react-leaflet” [130]. Using this component GIS maps can be incorporated

into the web application.

The map tiles are provided by MapBox as discussed during the technology survey. Mapbox also

has a routing API that provides direction data which is used to calculate the polylines for

sections of road. Figure 3-24 shows an example of a truck profile from the corridor performance

dashboard. The profile contains all the measurements related to this specific vehicle (e.g.

anonymised identity 65) and the route between Dar es Salaam and Lubumbashi. This example

showcases a GIS map implemented with Map component.

95

Figure 3-24: Screenshot from performance dashboard of the truck profile.

The implementation also supports embedding rich content into Leaflet which means that text

and visualisations can be embedded into Leaflet maps and viewed when a user clicks on an

element such as a location marker. Figure 3-25 shows a screenshot from an early iteration of

the dashboard that was used to test the capabilities of Leaflet which contains a Leaflet Map

Component with an embedded Chart component. When the user selects the marker, the popup

window is presented, revealing the information and Chart related to the location marked. The

ability to combine custom visualisations into interactive GIS Maps was one of key features that

could not be found in any of the evaluated Business intelligence solutions.

Figure 3-25: Screenshot from early prototype testing visualisation in Leaflet.

96

3.2.6.12 PDF Rendering Support

In order to add the ability to render PDF documents within the corridor performance dashboard,

the Pdfmake and PDF.js libraries were used. Pdfmake is used to generate PDF documents

according to the provided inputs. PDF.js is used to render and display the documents created

by pdfmake in the browser.These libraries are some of the most widely used PDF solutions

since they are maintained by the creators of the Firefox browser [131]. Similar to the previous

sections, each of these libraries were integrated as custom React components.

Rendering PDF document starts with collecting user inputs. The user inputs are used to

determine which sections of the PDF document should be included in the rendered result. After

a user has provided the required inputs for the report, they can get a preview of the report by

pressing the search button. Figure 3-26 shows an example of a PDF file being previewed.

Previews allow users to inspect the document before downloading it to ensure that everything

they want in the document is included and correct.

When a user renders a PDF report, the container responsible for PDFs evaluates the inputs,

fetches the correct data and adapts the document declaration that describes the PDF

dynamically to include the correct information. The modified declaration is passed to pdfmake

which renders the declaration into a PDF document. The rendered PDF document is passed

from pdfmake to PDF.js and rendered within the user interface. If the user selects download

then the browser downloads the PDF file directly from pdfmake.

Figure 3-26: Screenshot of PDF report rendering page in web application.

97

Figure 3-27: Screenshot of PDF document with an embedded chart.

Figure 3-27 demonstrates that visualisations created using the Chart component from the

previous sections are also compatible with the PDF rendering pipeline. In order to verify that the

PDF documents that are being generated work correctly they are tested using external PDF

viewing software such as Adobe Acrobat Reader DC, a free PDF viewer provided by Adobe.

Figure 3-28 shows the results of viewing the PDF document outside the performance

dashboard software

Figure 3-28: Screenshot of PDF document in Adobe Acrobat Reader DC.

98

With the proof of concept demonstration for PDF reporting implemented, all the major technical

requirements of the corridor performance dashboard have been addressed. The current

implementation shows that from a technical standpoint the desired functionality is achievable

with the selected set of technologies.

With the project still ongoing, companies that will be using the system will provide detailed

feedback going forward. The feedback will define all the KPI’s that need to be presented in

Profiles, Dashboards and Reports. The feedback will also describe which visualisation formats

should be available for every KPI such as tables, line charts, bar chart, etc. Pages that allow

users to manage their accounts within the performance dashboard have also been identified to

be implemented but was not necessary for the proof of concept implementation since they do

not present any new technological challenges.

3.2.6.13 Software Features

Figure 3-29 shows the page a user sees after they have successfully logged in. On the left of

the page is the collapsible navigation bar used to quickly navigate to the different sections of the

dashboard or a saved favourite. The performance dashboard has categorised all the different

KPI measurements into three main categories depending if the goal is to inspect a single entity

(e.g. profiles), compare a group of the same entities (e.g. dashboards) or retrieve a predefined

summary that contains both (e.g. reports).

Each of these sections can also have favourites which are generated and saved by users for

easier access. Favourites are a collection of user inputs that automatically load previously

saved inputs so that a user does not have to memorise the inputs to recreate the same page

again. Each category contains a tile for the different stakeholders throughout the trade corridor

and aims to group the metrics that are important to each stakeholder under their specific tile.

When a tile is selected, the user is redirected to the specific stakeholder dashboard where they

can view KPI measurements. If a user selects the name of a specific category, the user is

instead redirected to the overview of that category. The overview of a category shows the same

content as the home page as well as favourites.

99

Figure 3-29: Screenshot of the performance dashboard home page

Figure 3-30 shows an example of the Profile overview page. The images used in the dashboard

were acquired from Pixabay, a royalty-free image and video library [132]. In the example the

user has access to the data of at least one stakeholder of every tile, otherwise, the tile would

not be present for the user. The two favourites at the top allow the user to view different

configurations of the trucks profile quickly.

Favourites are also listed in the navigation bar to the left when it is expanded so users can

quickly move between saved configurations for different stakeholders and categories. Figure

3-30 also shows an example of the notifications section being opened in the top left corner of

the application. Notifications also offer a means to quickly navigate the dashboard by concisely

presenting the information. Notifications are also prioritised according to the severity of event

the notification is about.

100

Figure 3-30: Screenshot of web application Profile page showing notifications.

3.2.7 Authentication and Authorization

Security is a constant concern in software systems and especially in systems connected to the

internet since anyone can interact with it. Security overall is a best effort attempt to keep

systems and assets safe by putting enough obstacles in place so that the cost to steal

something is higher than the value of what is being stolen. In computer systems, cryptography is

the main mechanism that is used to protect the data stored in systems and transmitted between

systems.

3.2.7.1 Encrypted Communication

The corridor performance dashboard uses HTTPS to transmit all data between the web

application and data API. The data API also uses SSL to encrypt transported data when

communicating with other systems since Google Pub/Sub enforces secure connections. When

the data is at rest in the cloud, it is also stored on the physical hardware in an encrypted state.

The result of all this is that the only time data is not encrypted is when the user is viewing it in a

browser.

101

Figure 3-31: Screenshot showing the use of HTTPS in the performance dashboard

Since only users with the appropriate permissions are allowed to access data, it becomes

critical to ensure that the process of validating a user and giving them permissions is as secure

as the rest of the components that handle data throughout the system. Figure 3-31 shows in the

top left corner that the connection is secure. The certificate used for encryption has been

validated to ensure that the website is authentic. The website is also currently using two

cookies. On the right side in the developer tools, the page also shows that the connection is

secure and lists all the sources from which the website retrieved information. These checks

verify that the communication methods used are encrypted and safe.

Figure 3-32: Screenshot of vulnerability test results from pentest-tools.com

Some companies and experts specialise in ensuring that the software systems do not have any

known vulnerabilities. Figure 3-32 shows the vulnerability test results from pentest-tools.com, a

102

company that offers website vulnerability scanning services. The results indicate that none of

the vulnerabilities that were tested for was found in the corridor performance dashboard. Since

multiple companies offer these types of services, the results from different companies can be

used to validate each other. Figure 3-33 shows the results of the security scan functionality

offered within the Google Cloud platform, indicating that it did not find any obvious

vulnerabilities with the web application.

It should, however, be noted that vulnerabilities could still exist within a software system. New

security threats are frequently discovered and addressed. It is important for developers to keep

the software used to implement solutions with as up to date as possible. This will lower the risk

of a system being compromised as it should receive fixes to vulnerabilities with updates.

Figure 3-33: Screenshot of Google Cloud Platform security scan results.

103

Figure 3-34: Screenshot of web application cookies.

In order to identify users that sign into the web application or communicate directly with the data

API, JSON Web Tokens (JWTs) are used to encrypt and store the identity of each user as well

as the permissions discussed in chapter 4.3.2. The IETF is a standards body that develops

open standards related to the internet of which the adoption is voluntary. The IETF works

alongside other standards organisations such as the World Wide Web Consortium (W3C) to

standardise the web. RFC 7797 is the current iteration of the JWT specification and has been

accepted as a proposed standard for the industry [133].

Once a JWT for a user is created, the token is placed within a cookie and given to the browser.

The browser includes the cookie with every request made to the data API as a means to inform

the data API on whose behalf the request is made. Figure 3-34 shows a screenshot of the

cookies returned from the data API to the browser. The value field contains the encrypted token

and is decrypted by the data API. The domain describes which website the cookies is intended

for, in this case, the data API. The name value is unique in order to identify a specific cookie.

The path property allows multiple cookies to be used within a single website depending on the

URL. The HTTP and Secure fields describe what the browser is allowed to do with the cookie.

If the HTTP flag is checked, JavaScript running in the browser is not allowed to access the

cookie under any circumstances. This is to prevent malicious code from making requests using

cookies the code should not have access to. If the Secure flag is set, the cookie will only be

transported across a secure HTTPS connection. This prevents malicious users from being able

to intercept the transmitted data and acquire a copy of the contents without the consent of the

user the data is intended for. Since the performance dashboard uses HTTPS as previously

shown, the Secure flag will prevent a user from gaining access to the system, if the HTTP

connection was at any point not secure.

104

3.2.8 Testing

3.2.8.1 Testing Frameworks

For the corridor performance dashboard, testing is done as a mix of automated testing and

manual testing. Automated tests are used when the logic for the test itself is simple and can be

reasoned about quickly. For the corridor performance dashboard, testing is done using enzyme

[134] and jest [135]. There are over ten different options to choose from for testing JavaScript

alone. The two libraries were chosen mainly for their compatibility with React since Facebook

also developed jest along with React.

3.2.8.2 Testing Demonstration

Figure 3-35 shows the results after running the test script within the command console. Each

green checkmark is a test that was completed. Failed tests show which components and tests

within each component failed as well as the reason for the failure. In the first of the failed tests

shown at the bottom of the image, the test expected a value of 2 to be returned. Automated

tests allow developers to innovate faster by catching any mistakes developers make when

changing or refactoring code. Tests can, however, also slow down developers if the tests are

too hard to define and implement.

105

Figure 3-35: Screenshot of test results in the command line terminal.

3.2.8.3 Code Coverage

Code coverage is another feature that can be used when software is tested in an automated

fashion. Figure 3-36 shows a screenshot from a generated test report. Code coverage shows

developers what code is currently tested regardless of the test outcome. Developers can use

this information to ensure that all the exceptions and edge cases are tested and not just the

path where nothing goes wrong. Complicated testing such as testing the interaction between

the web application and data API is currently done manually and is a potential area that can be

automated within this solution.

106

Figure 3-36: Screenshot of code coverage report generated by jest.

Code coverage in this particular case is included with the jest testing library. Similar solutions

are available for other technology environments. The ASP.Net environments, for example,

include a fully-featured suite of software testing solutions similar to what is discussed above.

3.2.9 Operations and Maintenance

Most of the maintenance and operations are handled by the Google Cloud Platform. By using

managed services such as Cloud SQL, Cloud Memorystore and App Engine, the burden of

maintaining server hardware and upgrading system components is carried by Google.

Developers can focus on software development while cloud providers ensure that the

environment in which the software is executed is stable.

107

Figure 3-37: Screenshot from the Cloud SQL database management page.

Figure 3-37 shows the configuration for the management page of a PostgreSQL database. Note

that a maintenance window has been configured when service could potentially be interrupted

to perform maintenance on the underlying infrastructure. This maintenance is carried out

automatically with no actions required by developers.

Figure 3-38: Screenshot from Gmail of an automated notification.

108

The Google Cloud platform also allows automated messages about resource usage to be

configured. Instead of having to monitor system components actively, developers can be

informed when something requires their attention. Traditionally these types of systems would

have to be bought or developed internally and deployed along with the software being

developed. All the major cloud platforms provide these types of monitoring tools free of charge

since their software development teams benefit from them as well.

3.3 Chapter Summary

Modern software development has evolved significantly over the last decade with the adoption

of cloud computing. Software developers and engineers need to be versed in various tools and

environments in order to deliver higher quality software solutions at a faster rate. Open-source

has allowed technologies and tools to evolve at a rapid pace since the developers of various

companies from different commercial domains are all contributing to the same tools.

The use cases of websites have evolved significantly from the initial purpose of displaying static

text. Today, use cases range from the original static content page to fully interactive

applications that resemble native applications within the browser. New tools and technologies

have been created to accommodate these advanced use cases. The corridor performance

dashboard is implemented using technologies such as React to create an experience similar to

native applications with the accessibility of the web. The technical requirements of the corridor

performance dashboard have been addressed but the exact KPI’s need to be defined and

implemented based on the data made available by data providers.

Open-source libraries have allowed small development teams to rapidly prototype and

implement software that would have otherwise taken a large number of people a long time to

develop internally. The security of public facing systems on the internet is constantly being

improved as vulnerabilities are discovered across the industry. Implementing industry-standard

security practices can greatly increase the security of systems. Utilising third-party vulnerability

detection services can verify that sufficient security has been put in place.

Software development tools have continued to evolve and support new technologies and

development methodologies. The combination of cloud migration, continuous integration,

continuous deployment and DevOps has resulted in more automation within the development

pipeline in the pursuit of lower costs, more scalable and reliable systems and faster product

development.

109

4 CORRIDOR PERFORMANCE DASHBOARD EVALUATION

4.1 Overview

In this chapter, the corridor performance dashboard is evaluated across a wide variety of criteria

to determine if it complies with the stated criteria and if there are any aspects of the system that

requires immediate attention and changes. The evaluation criteria within this chapter are based

on the software quality attributes as defined by Ian Gorton in Essential software architecture

[136].

4.2 Reliability

The software solution should be reliable in that it can detect when faults occur, recover from

faults that have occurred and if possible, prevent the same faults from occurring again. Reliable

systems aim to minimise the number of services interruptions that users experience and aim to

maximise availability.

4.2.1 Fault Detection

The App Engine environment in which the corridor performance dashboard is running monitors

the performance of every instance and provides a set of key metrics. Figure 4-1 shows an

example of the number of errors that have occurred while being monitored. The dashboard also

has a summary which aggregates errors by type, allowing developers to identify the most

prominent errors within the system.

Figure 4-1: Screenshot of monitoring tools in a cloud environment.

110

Figure 4-2: Screenshot showing traffic splitting in the cloud environment.

4.2.2 Fault Recovery

The system should have some means of recovering from faults. If instances of the software start

to fail due to an implementation error by developers or some other unforeseen problem, the

system should provide the means to recover from the situation and restore service as soon as

possible. Figure 4-2 shows an example of the traffic splitting feature available with the App

Engine platform.

Traffic splitting allows developers to use blue-green deployment. Blue-green deployment is a

practice in which at least two versions of the application is available to serve traffic at any given

time. When a new version of the application is deployed, it is deployed alongside the existing

system that is still serving traffic. Once the new version is operational, and developers are

satisfied with its behaviour, a small fraction of the traffic is redirected to the new version. Traffic

is incrementally transferred to the new system until all the traffic is running on the new version.

At this point, the old version can be turned off and kept as a backup incase of slow failures

within the new version such as memory leak. If at any point during the process of transferring

traffic to the new version something goes wrong, the process can be reversed and the new

version updated to fix the problems.

4.2.3 Fault Prevention

Within the corridor performance dashboard, fault prevention is primarily done using

comprehensive testing, both automated and manual. The web application is also written in a

way that assumes the data API might not be available. Figure 3-18 showed an example of a

request being made to the data API using Axios. The code defines what should happen when

nothing goes wrong but also defines a behaviour used for all circumstances other than the ideal

111

outcome. By implementing behaviour for everything that could go wrong before implementing

the behaviour for the ideal circumstance results in more reliable software.

4.3 Security

The system should be secure and prevent unauthorised access to systems and services. This

section describes some of the security-related features in place to detect and react to threats.

4.3.1 Threat Detection

In previous chapters, the security features and testing used for the system were described.

Despite those features and tests, vigilance has been proven to be the most reliable form of

security. The first step to being vigilant is the ability to detect possible threats or intrusions. By

implementing HTTP status codes that correctly reflect the types of responses returned by the

system (as discussed in chapter 4.4.2) the cloud environment can identify and sort responses

according to those status codes. Figure 4-3 shows an example of a log query that shows all the

unauthorised responses sent to request. A large influx of unauthorised requests from the same

entity could indicate malicious intent since that entity is performing various attempts to get

authenticated with the system.

Figure 4-3: Screenshot showing error logs in the cloud environment.

112

4.3.2 Threat Resistance

The system should have mechanisms in place that actively try to resist attempts to access the

system in an unintended way. One example of such a mechanism within the corridor

performance dashboard is the expiration times used within authentication tokens. Figure 3-34

showed an example of the authentication cookie returned to the browser. When a user signs

into the dashboard and a cookie is created that represents them, the cookie is assigned an

expiration time that is currently set to one week from the creation date.

This means that if a user is absent from the system, their tokens will automatically expire after a

week and would require them to sign in again. This protects users against threats resulting from

accidental negligence such as using a shared device and not logging out or invalidating logins

on lost or stolen devices. System administrators could also invalidate the tokens and require

users to sign in again.

Having mechanisms in place that aims to enforce the principle of least privilege either

automatically or manually can help mitigate the damage done by a malicious entity if they do

gain access to the system.

4.3.3 Threat Reaction

The ability to react to threats appropriately in the least amount of time possible is important to

mitigate the damage done by malicious entities. Figure 4-4 shows an example of a Google

Cloud environment feature that is used in the corridor performance dashboard to inform

developers when specific errors reach defined thresholds. This feature also helps with reliability

since it can report various types of errors.

A potential improvement to the system includes limiting the number of changes a user can make

or the amount of data a user can request within a specific time frame as a means to give

developers additional time to react. This approach, however, requires user behaviour

information in order to implement limitations that do not restrict regular use but prevents

abnormally excessive usage or behaviour.

113

Figure 4-4: Screenshot showing error notifications in the cloud environment.

4.4 Modifiability

Changes to the system should be quick and cost-effective. This section discusses the systems

and practices in place that allow developers to change functionality without being concerned

that those changes will introduce faults into the software.

4.4.1 Modular Design

The technologies used in the corridor performance dashboard such as React encourages code

to be structured as components and containers. The file structure described in Figure 3-16

isolates every component and container into their respective directories. Stateless components

should never interact with code outside their own. Containers nested within the pages section of

the container's directory can interact with containers outside the pages directory since they deal

with cross-cutting concerns. Containers in the pages directory should, however, not interact with

each other since they should encapsulate a single responsibility which in this case is a single

page.

If these principles are adhered to, pages will be completely independent and can be changed

without being concerned that different pages affect the code of one another. Containers also

have their layouts separated which further separates the functionality from the appearance. This

makes it possible to duplicate a component to a different project and keep the functionality

unchanged but change the appearance easily. By defining clear boundaries around each

responsibility from the system level (e.g. data provider, analytics system, performance

dashboard), application level (e.g. data API and web application) down to the container level

with clear interfaces between boundaries simplifies the system at every level.

114

Figure 4-5: Screenshot showing results after running a lint script.

4.4.2 Uniform Implementation

The system should be implemented as if it was done by a single person with a distinct style.

This should be the case not only for the internal code but for public and private interfaces as

well. When third-party developers read documentation about interfaces, the descriptions and

examples should not vary in quality. In the case of the corridor performance dashboard tools

like swagger for REST documentation and GraphiQL for GraphQL allows developers to refine

documentation. Maintaining consistent implementations manually can be very time consuming

and should be automated where possible.

Currently, source code within the project is linted to guarantee consistent code quality. Figure

4-5 shows an example of what the linter produces. By enforcing consistency through linting,

developers learn to submit code that is in line with the style guide used within the project. The

style guide used for the performance dashboard is the Airbnb JavaScript style guide [137]. This

style guide has seen widespread adoption across the industry and is used in most of the

modules listed in Appendix A. This means that by using the style guide, the code in this project

is styled similarly to many other projects, making it easier for developers to read the modules.

115

Figure 4-6: Screenshot showing an example of reduced coupling.

4.4.3 Reduced Coupling

Coupling is closely associated with the modularity of code mentioned before. Figure 4-5 shows

an example of the folder structure in the data API and where those folders are imported. Note

that code lines 9 to 16 all import directly from the file or directory and do not reach into the

directories. This is done intentionally since each of those files or directories need to be treated

as opaque by code outside those directories. This prevents content coupling which happens

when files in different directories interact with each other directly instead of through the defined

interface.

Each separate directory or file implements a specific aspect of the data API. The “graphql”

directory implements the GraphQL interface. The “models” directory implements Sequelize and

the connection to the database. The “passport” directory implements the authentication

strategies and implements the JWT token middleware. The “routes” directory implements the

REST endpoints. The “config” file contains all the variables that can be modified within the

application and is discussed in section 5.7. The “logger” file contains all the logging related

functionality to create uniformly formatted logs. The “redis” directory contains the logic for

interacting with the in-memory cache running on Google Cloud Memorystore.

The objects that these directories and files encapsulate do interact with each other and are

reliant on each other, but always interact through the objects exposed at the boundary and not

directly with internal objects.

116

4.5 Portability

The system should be able to run on as many platforms as possible. The system should also be

usable on as many devices as possible to ensure as many customers as possible are

accommodated. This section defines the devices and platforms this system targets and

showcases the results in each environment.

4.5.1 Cross-platform Design

As discussed in the technology survey, the technologies chosen for this project have very few

restrictions regarding the platforms on which they run. Currently, the software is deployed using

Google App Engine, but it could be moved to any of the other cloud providers since they all

support the Node.js environment and have equivalent services for Cloud SQL and Cloud

Memorystore.

The only environment not currently supported is the container environment. This is not due to a

limitation in the technologies but a lack of implemented Docker files. Future improvements to

this project would include implementing a Docker file in order to be able to run the data API and

web application inside containers. That would allow the applications to be run inside

environments such as Docker and Kubernetes. Since this implementation was not required for

App Engine, it was omitted from the proof of concept implementation.

Figure 4-7: Screenshot of the performance dashboard in a mobile aspect ratio.

117

4.5.2 Responsive User Interface

The user interface for the corridor performance dashboard has been implemented to be

responsive which means that it works on devices of all sizes. Implementation is focused on the

best user experience for desktop and tablets first since the majority of the users are expected to

use those devices, but mobile is supported as a long vertical strip with a custom drop down

menu as shown in Figure 4-7.

The performance dashboard is currently tested in the five browsers including:

Opera Version 56.0.3051.99

Microsoft Edge Version 42.17134.0

Google Chrome Version 70.0.3538.102

Mozilla Firefox Version 62.0.2

Apple Safari Version 11.1.1

Microsoft Internet Explorer 11.407.17134

Additional devices and platforms can be evaluated if users request support for a specific device

or platform. Supporting additional devices and platforms requires an initial investment as well as

an ongoing effort to ensure the software remains compatible as the device or platform continues

to update.

4.6 Functionality

The system should be able to perform the intended work in a satisfactory amount of time. This

section demonstrates how the system satisfies each of the main technical requirements of the

project.

4.6.1 Visualisation

One of the key requirements for the project was to be able to visualise data in various forms

including tables, line charts, bar charts, pie charts and potentially more customised solutions

depending on the feedback given by the client.

The integration of the ECharts library into the application has provided a means for creating

visualisations shown in Figure 3-21. More custom visualisations can be made using the

extension system. Since ECharts was originally developed with the goal of being performant,

the library is capable of visualising far more data than the current requirements of the project.

118

Along with the visualisation was the requirement to support GIS capabilities. Integrating Leaflet

into the application has allowed maps to be used within the application to provide geographical

context to the data being shown and also makes interactive geographical visualisations

possible. Leaflet has a large variety of plug-ins that could be used in the future to implement

business requirements quickly. Figure 3-24 shows the profile of a specific vehicle and visualises

a route along which the vehicle travels with the map, providing geographical context to the

operations of the vehicle. Figure 3-25 showed an example of how simple chart visualisations

can be embedded into elements of the map to present results based on the geographical

context.

The current implementation has shown that visualisations are possible with the final

4.6.2 Reporting

Being able to generate and compose PDF documents is another key requirement of the project.

The combination of the pdfmake and PDF.js libraries provide the capability to define the

contents of a PDF document and render it within the browser for users to inspect.

The concept of customising the document was shown by including or excluding specific pages,

but since the document definition is done in code the contents of each page could also be

modified. The purpose of the proof of concept system was to show that it is possible to compile

a PDF document programmatically. The exact contents of the reports will be defined and

implemented as soon as data from industry partners have been received and evaluated.

4.7 Variability

It should be possible to actively change the configuration of the system to expand or modify the

architecture to produce new solutions. This section discusses how services can be configured

and connections changed to accommodate change.

Figure 4-8: Screenshot of the data API aap.yaml file

119

4.7.1 Cloud Configuration

The Google App Engine environment is controlled using the app.yaml file discussed in section

4.2.4 to control the configuration of the underlying infrastructure. Figure 4-8 shows the current

app.yaml file for the data API. The web application has a similar file with the only difference

being that the service name is called “default” since App Engine requires a default service. The

environment that should be used to try and run the software is determined by the “runtime”

value. The size of the underlying computers executing the software is controlled by the

“instance_class” value. The handlers define how traffic should be handled if a more complicated

routing solution is required. Currently, it only ensures that HTTPS is used.

4.7.2 Software Configuration

The software applications also have configuration files that define values that can be changed in

order to change the behaviour or the application. Figure 4-9 shows an example of the data API

configuration file. The first five lines of code import a dependency and loads a set of

environment variables that are universally accessible within the application. These values are

mainly used within the config file but are available outside it if needed. It is however

recommended to access them through the config file in order to minimise code coupling.

Figure 4-9: Screenshot of the data API config file.

120

Code lines 8 to 11 accesses values provided by the Google App Engine environment in order to

access the managed service provided by Google. If the values are not available, default values

are assigned. Lines 14 to 20 access values related to the security of the application. The JWT id

value matches the value used as the name of the cookie in Figure 3-34. The secret is used

during the encryption process of the token. If the encryption secret is changed, all the tokens

that were generated with the previous secret are no longer valid. This allows system

administrators to invalidate all existing tokens if there was at any point a need to do so.

Lines 23 to 31 define the allowed domains for Cross-Origin Resource Sharing (CORS) which

allows software applications running on different domains to share resources. In the case of the

corridor performance dashboard, the web application is on a different domain as the data API.

Since resource sharing between domains is not allowed by default for security reasons, CORS

needs to be explicitly configured.

Line 34 configures the address of the Redis instance to be used which in this case resides in

Cloud Memorystore. Lines 37 to 39 configures the address of the database which in this case

resides in Cloud SQL. These values allow the data API to connect to other databases or Redis

instances if for example a database migration has been done. The configuration can be

adjusted without changing the source code.

4.8 Subsetability

The system needs to remain functional if only a subset of the system is operational. In the

pursuit of maximum availability, the operational parts of the system should continue to remain

operational regardless of the state of other parts.

4.8.1 Component Independence

Each component/container within the dashboard is able to perform anything it needs to do

independently of the others. Figure 4-10 shows the truck profile screen previously depicted in

Figure 3-24 as it is still busy loading. The component on the left next to the map has finished

loading data. The bottom component has also finished retrieving events. The map, however, is

still in the process of receiving map tiles from Mapbox. The response for the waypoint locations

has been received, but the response that describes the route has not. Each of the three main

components is able to fail independently without affecting the other components. The map in

this case also receives data from different sources which might fail on their own. One could

argue that in the case of the map it might be a requirement that all the sources load otherwise it

might provide a bad user experience if no map tiles or route is shown.

121

Figure 4-10: Screenshot from the performance dashboard busy loading.

4.8.2 Service independence

The data API and web application are independent applications that can fail on their own. In this

case, however, the web application needs the data API in order to sign users in and retrieve

data. The data API, on the other hand, will not fail if the web application were to fail. This would

allow third-party systems to be able to interact with the data API even if the web application was

offline.

The three main systems associated with the bounded contexts of the are also independent. The

corridor performance dashboard can be offline, and the data providers and analysis systems

would still be able to perform their work without interruption.

4.9 Conceptual Integrity

The system should follow as few principles and practices as possible to provide a level of

consistency throughout the entire system. The system should also aim to remain as relevant as

possible which would reduce additional development costs in the long term.

122

Figure 4-11: Screenshot of an English language file in the web application.

4.9.1 Open Standards

The corridor performance dashboard uses several open standards and internet standards for

interactions with external systems. The REST endpoints are defined following the OpenAPI

standard. The web application implements the i18n standard which means that the application

is localisation-ready and can support multiple languages. Figure 4-11 shows an example of a

language file for English. If another language needs to be supported, an identical file could be

created for that language with the English phrases replaced with the localised equivalent. The

application then uses the appropriate language file when a language is selected.

The performance dashboard implements the JSON Web Token RFC 7797 standard for

authentication. This allows users to securely interact with the dashboard using industry standard

encryption solutions. Finally, the PDF documents generated by pdkmake adheres to the PDF

32000-1 specification, allowing other programs to read the generated documents.

4.10 Overall User Experience

The application should provide a pleasant user experience that does not confuse or frustrate

users.

4.10.1 Single Page Application

The performance dashboard has been developed as a single page application that aims to

deliver a fast and fluid user experience and is built using technologies developed by some of the

world’s leading software companies. Those technologies have enabled the creation of a

responsive web application. Google Lighthouse is a tool developed to automatically test the

quality of a website and is included with the Google Chrome and Opera browsers [138]. Figure

4-12 shows the results of auditing the web application using Lighthouse.

123

Figure 4-12: Screenshot of the performance dashboard and auditing tool.

The application performs well according to all the metrics except accessibility. Accessibility, in

this case, is the ability to support unconventional ways to use the website (e.g. keyboard only

navigation) as well as support for people with disabilities. Supporting these use cases is future

work on the project that can be done to provide a universally good experience.

124

4.10.2 Minimalistic Design

Previously the dashboard was shown as it will appear to a person with administrative rights that

can view everything that the dashboard has to offer. This is to demonstrate everything that will

be included in the dashboard, provided that participating companies provide all the data

required for it.

Figure 4-13: Screenshot of the performance dashboard for a limited user.

Figure 4-13 shows the web application from the perspective of a user with limited access to

what the application has to offer. By eliminating everything users do not need, the application

avoids giving them pointless options from which they will have to navigate back once they are

told they lack permissions. By simplifying what is presented to the user to the extent that they

can only select meaningful things should reduce frustration and confusion.

4.10.3 Usage Context

Since the application is being tailored to the requirements of the client, features such as being

able to save visualisations and use them outside the dashboard can be accommodated. The

larger platforms similar to the performance dashboard have a standardised set of features which

might not be a precise fit to the user requirements. Interacting with the client to understand how

they plan to use the platform can help to define the functionality that they need which might not

be available in other solutions.

125

4.11 Performance

The software needs to be able to operate at scale. In this chapter the software is evaluated and

tested for scalability to ensure that if the number of users increased, the software would be able

to accommodate the increased demands.

4.11.1 Load Testing

In order to test that the corridor performance benchmarking dashboard could accommodate a

large number of users, a load testing service called Loadium [139] was used to simulate a large

amount of traffic. Loadium uses automated systems to send artificial traffic to websites. This

provides an accurate way to test the capability of the system but does not take into account

actual user behaviour patterns. The web application server primarily serves static files that are

requested by the browser. The load test simulates the browsers of users by requesting a

random file from a list of URL paths to simulate real requests.

The test was scheduled to last 10 minutes and would ramp from 1 concurrent user to 100

concurrent users, incrementing by one user per second. This level of load is well beyond the

expected amount of users that will access the web application simultaneously. Another key

difference is that the 100 simulated users continuously request resources for the entire 10

minutes, which is not the case with real users.

Figure 4-14: Screenshot from Loadium results for the web application.

126

Browsers cache resources locally in order to avoid the additional overhead and delays

associated with network communication. This means that each simulated user is much more

demanding than an actual user would be since the simulated users are effectively simulating

real users that refresh their browser (with caching disabled) for 10 minutes continuously.

Figure 4-14 shows the results of the test after it completed the 10 minutes. The lines on the

graph are the same colour as the metrics shown above the graph. As seen in the chart, the

users ramped up from 1 to 100 as expected. The system was able to provide a throughput of

almost 5600 responses per second, with only 0.03 % resulting in errors. The inconsistent

behaviour during the ramp is caused by the creation of new instances and the transfer of traffic

to those instances as the system scales. Warm-up requests is an App Engine feature that helps

to mitigate the effects of servers starting and stopping which should reduce that behaviour once

implemented.

The average latency between the Google Cloud Platform hosting the web application and

Amazon Web Services hosting the load generators was on average about 16 milliseconds

which is an acceptable response time for this application. Using the web application from the

African continent should still provide a good user experience.

Figure 4-15: Screenshot of the GCP dashboard during the load test.

127

4.11.2 Resource Scaling

App Engine can scale the system automatically based on the resource utilisation of the existing

application instances. Figure 4-15 shows how the number of instances changed over time as

the load on the system increased. As expected, both graphs start at about the same time, and

the instance count also declines as expected immediately after the test is over in order to

reduce costs.

The high number of created instances is due to the scheduler observing high response times

from starting instances and creating additional instances as a response. This should be

significantly lower once warm-up requests have been implemented. “Active instances” is the

real measurement of running applications instances which peaked at 18 instances. Depending

on the instance size that is being created, the instance is billed in multiples of F1 instances. An

F2 instance is equivalent to 2 F1 instances, resulting in 2 billed instances. In the case of this

load test, the excessive creation of instances inflated the billed instances.

Overall, the system can scale to loads far greater than what is initially expected from the web

application. Implementing warm-up requests will help to utilise App Engine resources better and

reduce costs. For the foreseeable future, however, one or two instances will be enough to

satisfy expected demands which will likely not exceed 1-2 % of the calculated average

throughput.

4.12 Chapter Summary

The performance benchmarking dashboard has systems in place that will detect faults and

notify developers to take preventative actions. These detection measures help to improve

system reliability and avoid downtime when serving users. The components of the system each

offer a set of configurable values that can be used to change aspects of the system when

needed. The data API, for example, offers ways to reconfigure the connections to different data

storage instances.

The web application, on the other hand, allows the URL for the data API to be changed. These

variables allow developers to quickly substitute or upgrade components when needed, reducing

downtime and increasing availability and reliability. Components within the corridor performance

system can also be created to function independently, further improving reliability by allowing

subsets of the system to function normally, despite other components in the system being

offline. The component-based model of the technologies used to create the dashboard allows

rapid changes to existing components and the introduction of new components from external

libraries.

128

The performance benchmarking dashboard has the functionality to visualise key performance

indicators (KPIs) in a large number of ways, including charts and geographical maps. Reports

can be created in the form of PDF documents and can incorporate visualisations into the

reports. The performance benchmarking dashboard is compatible with the six most commonly

used web browsers and is also compatible with desktop, tablet and mobile screens. The

performance benchmarking dashboard offers a fast and simple user experience and aims to

avoid the confusion and frustration caused by complicated software.

The performance benchmarking dashboard is implemented using open standards and internet

standards commonly used throughout the industry. Incorporating these standards into the

system increases interoperability and system longevity. These standards also offer solutions to

security problems found throughout the industry to improve the level of protection offered to

users of the corridor performance dashboard.

The performance benchmarking dashboard can scale automatically to accommodate additional

load. Additional development effort is required to optimise the interaction between the

performance benchmarking dashboard and the Scheduler inside the App Engine Environment.

Improving this aspect of the system will result in better resource utilisation and lower operational

costs.

129

5 CONCLUSIONS AND RECOMMENDATIONS

5.1 Development Concerns of a Performance Benchmarking Dashboard

5.1.1 Data Availability

The first step to developing a corridor performance benchmarking dashboard was to understand

the trade corridor. There are similarities to how corridors function, but the key thing to

understand about each corridor is the nuanced problems each corridor might have.

Understanding the corridor will help to point the discussion towards the areas that need the

most attention. To define KPIs that will add value to the trade corridor, the corridor needs to be

understood. If the KPI’s do not offer significant value to stakeholders along the trade corridor,

the implementation of a performance benchmarking dashboard will not be considered a high

priority by stakeholders.

The next step was to investigate or inquire about the operations of stakeholders to understand

where data was being generated and how it was being stored. Evaluating the current condition

of data collection and storage within the trade corridor is an important step as it will determine

how much effort is needed in order to start centralising data. Accommodating a paper-based

operation is a lot more challenging than integration with an existing API. Ideally, the collection of

data should not disrupt the existing operations of data providers. Collecting data without

disrupting operations is easier if the data collection processes and systems are automated.

More sophisticated monitoring and data capturing systems will typically also provide an interface

from which data can be extracted. On the other hand, in less sophisticated operations (e.g.

paper-based solutions) disruptions are almost unavoidable since a person will likely need to get

involved in the data capturing process. Convincing stakeholders to implement data collection

practices that could potentially disrupt their operations can prove to be challenging.

5.1.2 Data Quality

Once data is being collected from the corridor, it is important to assess the quality of the data.

High-quality data contains more detail than might be necessary in order to calculate the current

KPI values. Timestamps in the data that are formatted to a frequently used standard is a

possible indicator that the data is of high quality. High-quality data should not contain

ambiguous values or values that are hard to interpret. An example of values that are hard to

parse is user-generated text. Digital systems will often prevent users from submitting free text

since it is hard to store in a normalised way and difficult to analyse.

130

Companies with more sophisticated systems likely do not generate ambiguous data sets since

they would also need to manage that data internally. Unsophisticated paper-based operations

will likely produce a large amount of user-generated text as operators fill out various forms on

paper. Determining if there is anything valuable to extract from user-generated text ahead of

time will determine how complicated the analysis and aggregation of the data will be.

5.1.3 Clear Responsibilities

When negotiations started with various stakeholders along the trade corridor, it was important to

define the responsibilities of the every stakeholder clearly. Ensuring that there are no

misunderstandings about the role that each stakeholder plays in the trade corridor was crucial

to extracting data from stakeholders. When negotiating responsibilities, some compromises

were most likely made in order to accommodate some of the stakeholders. An example might

be to implement a web portal on behalf of paper-based operations in order to be able to collect

their data.

5.1.4 Iterative Development

As the corridor performance benchmarking dashboard was being developed, it was important to

evaluate the design and requirements of the system constantly. It is important to ensure that the

defined KPIs still add value to the operations of stakeholders as the project unfolds. If the KPIs

are never updated to remain relevant to stakeholders, they might start to lose interest in the

project. Using development methodologies and technologies that allow developers to receive

frequent feedback from stakeholders can be an effective way of keeping them involved

throughout the development process and ensuring that their requirements are taken into

consideration constantly.

5.2 Software Design Considerations

5.2.1 Domain-Driven Design

Deconstructing a complex set of software requirements can be challenging, but methodologies

that simplify the process have existed for many years. Traditionally domain-driven design was

applied to large monolithic systems in order to structure the system in a maintainable way. As

the industry has moved to distributed systems, the techniques used in domain-driven design

can also be used to decompose complex requirements into a collection of smaller systems that

function as a larger system. In this study, the domain model for a specific corridor performance

benchmarking dashboard is defined and decomposed into several independent systems that

each have their own set of responsibilities within the larger system

131

5.2.2 Task Responsibility

The responsibilities of services within the corridor performance benchmarking dashboard were

defined around the different roles present in the overall system. The first role was identified as

services that supply data. The second role was identified as systems that transform data and

produce a more condensed version of the data. The final role was the presentation of data

which is the responsibility of the corridor performance benchmarking dashboard. By determining

the responsibilities of each system according to its relationship to the data, the same systems

can be used regardless of the industry.

5.3 Cloud Infrastructure Benefits

5.3.1 Reduced Cost

The idea of centralisation has been repeated countless times throughout history and almost

always leads to reduced costs of some sort, be it financial or effort. Factories centralise the

manufacturing of goods. Banks centralise monetary transactions and storage. Cloud providers

centralise computing power and information storage. By implementing a self-service system for

provisioning processing power and storage space, cloud providers have greatly reduced the

cost of creating and maintaining IT systems.

Since cloud platforms are the products of cloud providers, the platforms themselves also evolve

in order to remain competitive. This means that the infrastructure improves over time at the

expense of the cloud provider and not the cloud users. IT systems can, therefore, improve in

terms of efficiency or cost without platform users investing additional resources which indirectly

saves development resources as well.

5.3.2 Automation

Managed platforms such as Google App Engine greatly simplify the complexities associated

with scaling IT systems. The cloud environment can change and accommodate the needs of

developers almost immediately. The infrastructure can scale automatically without the need to

go through complex and time-consuming upgrade procedures. Features such as disaster

recovery, loss prevention and global replication are made simple thanks to cloud technologies.

Implementing an equivalent on-site solution would require extensive time and resources to

implement and would likely exceed the cost of cloud-based solutions.

132

5.3.3 Open-Source

The popularity and benefits of open-source software have become apparent in recent years.

The reach of open-source is even more apparent when cloud solutions are involved since so

many of the technologies surrounding cloud platforms are open-sourced in order to drive

adoption and gain market share. Developers need to invest in understanding the ecosystems

that surround cloud platforms and how they can take advantage of them to produce higher

quality software in less time and for a lower cost.

5.4 Future Work

With the technical aspects in place to accommodate stakeholder requirements, the

implementation of all the performance measurements can start as feedback is received.

Improved utilisation of the Google App Engine environment needs to be investigated to ensure

that no additional costs are being generated due to the platform being used incorrectly.

Performance testing on the data API will need to be done once it starts to accept data from the

analytics system. Currently, there is a very small data set available that is not representative of

the expected amount of results. Load tests similar to those done on the web application will

have to be performed to ensure that the database can provide results within acceptable

response times. These load tests will help to determine if database replication needs to be

implemented to support the amount of data.

The management components of the web application need to be implemented and tested.

These components will allow users to manage their accounts and in the case of system

administrators the accounts of others. If additional login solutions besides the use of emails and

passwords are desired they would also have to be implemented. Finally, accessibility

improvements need to be done on the web application to ensure that the user interface is

pleasant to use for all users.

133

BIBLIOGRAPHY

[1] Continental 1. (2018, June) Trade Corridors. [Online]. http://continental1.org/trade-corridors

[2] D. M. Lambert, J. R. Stock, and L. M. Ellram, "The Role of Logistics in the Economy and

Organization," in Fundamentals of Logistics Management.: McGraw-Hill Higher Education,

1998, ch. 1, pp. 7-21.

[3] D. M. Lambert, J. R. Stock, and L. M. Ellram, "The Role of Logistics in the Economy and

Organization," in Fundamentals of Logistics Management, McGraw-Hill Higher Education,

Ed., 1998, ch. 2, pp. 40-41.

[4] J. Havenga, Z. Simson, D. King, A. de Bod, and M. Braun. (2018, July) Logistics

Barometer. [Online].

https://www.sun.ac.za/english/faculty/economy/logistics/Pages/logisticsbarometer.aspx

[5] C. J. Langley. (2018, June) Third-Party Logistics Study. [Online].

http://www.3plstudy.com/3plabout.php

[6] J. Arvis, G. Smith, and R. Carruthers, "Landlocked Developing Countries and Trade

Corridors: An Overview," in Connecting Landlocked Developing Countries to Markets:

Trade COrridors in the 21st Century.: World Bank, 2011, ch. 1, pp. 1-11.

[7] J. Arvis, G. Smith, and R. Carruthers, "Maps of LLDCs and Transit Corridors, by Region,"

in Connecting Landlocked Developing Countries to Markets: Trade COrridors in the 21st

Century.: World Bank, 2011.

[8] Embassy Freight. (2018, October) Second Party Logistic Model. [Online].

https://www.logisticsglossary.com/term/2pl/

[9] GWT Import & Export Specialists. (2018, October) Role Of Clearing & Forwarding Agents

In Sea Cargo. [Online]. https://gwtimpex.co.uk/role-of-clearing-forwarding-agents-in-sea-cargo/

[10] J. Arvis, G. Smith, and R. Carruthers, "Unreliability of LLDC Corridors Carries a High

Cost," in Connecting Landlocked Developing Countries to Markets: Trade Corridors in the

21st Century.: World Bank, 2011, ch. 2, pp. 21-24.

[11] C. M. Melhuish, "Tanzania Transport Sector Review," African Development Bank Group,

134

2013.

[12] Klipfolio. (2018, October) What is a KPI? Definition, Best-Practices, and Examples.

[Online]. https://www.klipfolio.com/resources/articles/what-is-a-key-performance-indicator

[13] Rightscale cloud industry research team. (2019, November) Cloud Computing Trends:

2019 State of the Cloud Survey. [Online]. https://www.flexera.com/blog/cloud/2019/02/cloud-

computing-trends-2019-state-of-the-cloud-survey/

[14] United Nations. (2019, November) Information Economy Report 2013: The Cloud

Economy and Developing Countries. [Online].

https://unctad.org/en/PublicationsLibrary/ier2013_en.pdf

[15] Red Hat, Inc. (2019, November) Enterprise Open Source Report 2019. [Online].

https://www.redhat.com/en/enterprise-open-source-report/2019

[16] F. Manjoo. (2018, July) A Murky Road Ahead for Android, Despite Market Dominance -

The New York Times. [Online]. https://www.nytimes.com/2015/05/28/technology/personaltech/a-

murky-road-ahead-for-android-despite-market-dominance.html

[17] D. Bass and E. Newcomer. (2018, July) Buying GitHub Would Take Microsoft Back To It's

Roots - Bloomberg. [Online]. https://www.bloomberg.com/news/articles/2018-06-03/microsoft-is-

said-to-have-agreed-to-acquire-coding-site-github

[18] Red Hat, Inc. (2019, November) IBM To Acquire Red Hat, Completely Changing the Cloud

Landscape and Becoming the World's #1 Hybrid Cloud Provider. [Online].

https://www.redhat.com/en/about/press-releases/ibm-acquire-red-hat-completely-changing-cloud-

landscape-and-becoming-worlds-1-hybrid-cloud-provider

[19] J. Macaulay, L. Buckalew, and G. Chung, "Internet of Things in Logistics," DHL Trend

Research, 2015.

[20] VDC Research LOWRY. (2019, November) Are You Realizing the Full Benefits of RFID?

[Online]. https://marketing.lowrysolutions.com/acton/attachment/7009/f-00a3/1/-/-/-/-/Full-Benefits-

of-RFID-VDC-Research-LOWRY.pdf

[21] M. Kirch, O. Poenicke, and K. Richter. (2019, November) RFID in Logistics and Production

- Applications, Research and Visions for Smart Logistics Zones. [Online].

https://www.researchgate.net/publication/314274484_RFID_in_Logistics_and_Production_-

135

Applications_Research_and_Visions_for_Smart_Logistics_Zones

[22] International Telecommunications Union. (2018, June) ICT Facts and Figures 2017.

[Online]. https://www.itu.int/en/ITU-D/Statistics/Documents/facts/ICTFactsFigures2017.pdf

[23] Gartner, Inc. (2019, November) Market Share Analysis: Iaas and IUS, Worldwide, 2018.

[Online]. https://www.gartner.com/en/newsroom/press-releases/2019-07-29-gartner-says-

worldwide-iaas-public-cloud-services-market-grew-31point3-percent-in-2018

[24] F. Ilyas. (2019, November) A detailed comparison and mapping between various cloud

services. [Online]. http://comparecloud.in

[25] Alibaba Cloud. (2019, November) Alibaba Cloud Product SLA. [Online].

https://www.alibabacloud.com/help/faq-list/42389.htm

[26] AWS. (2019, November) AWS Service Level Agreements. [Online].

https://aws.amazon.com/legal/service-level-agreements/

[27] Google. (2019, November) Google Cloud Platform Service Level Agreements. [Online].

https://cloud.google.com/terms/sla/

[28] IBM. (2019, November) IBM Cloud Service Level Agreements. [Online].

https://cloud.ibm.com/docs/overview?topic=overview-slas

[29] Microsoft. (2019, Novemeber) Microsift Azure Service Level Agreements. [Online].

https://azure.microsoft.com/en-us/support/legal/sla/

[30] Oracle. (2019, November) Oracle Cloud Infrastructure Service Level Agreement. [Online].

https://www.oracle.com/cloud/iaas/sla.html

[31] Alibaba Cloud. (2019, November) Alibaba Cloud Global Locations. [Online].

https://www.alibabacloud.com/global-locations

[32] AWS. (2019, November) AWS Global Infrastructures Regions. [Online].

https://aws.amazon.com/about-aws/global-infrastructure/regions_az/

[33] Google. (2019, November) Google Cloud Regions and Zones. [Online].

https://cloud.google.com/compute/docs/regions-zones/

136

[34] IBM Cloud. (2019, November) IBM Cloud Locations. [Online].

https://cloud.ibm.com/docs/containers?topic=containers-regions-and-zones

[35] Microsoft. (2019, November) Microsoft Azure Regions. [Online].

https://azure.microsoft.com/en-us/global-infrastructure/regions/

[36] Oracle. (2019, November) Oracle Cloud Regions and Availability Domains. [Online].

https://docs.cloud.oracle.com/iaas/Content/General/Concepts/regions.htm

[37] S. Guthrie. (2018, October) Microsoft to deliver Microsoft Cloud from data centres in Africa

- The Official Microsoft Blog. [Online]. https://blogs.microsoft.com/blog/2017/05/18/microsoft-

deliver-microsoft-cloud-datacenters-africa/

[38] J. Barr. (2018, October) In The Works - AWS Region in South Africa | AWS News Blog.

[Online]. https://aws.amazon.com/blogs/aws/in-the-works-aws-region-in-south-africa/

[39] Alibaba Clound. (2019, November) Alibaba Cloud Price Calculator. [Online].

https://www.alibabacloud.com/pricing-calculator#/manifest

[40] AWS. (2018, October) Amazon Web Services Simple Monthly Calculator. [Online].

https://calculator.s3.amazonaws.com/index.html

[41] Google. (2018, October) Google Cloud Platform Pricing Calculator. [Online].

https://cloud.google.com/products/calculator/

[42] IBM. (2019, November) IBM Cloud Cost Estimator. [Online]. https://cloud.ibm.com/estimator

[43] Microsoft. (2018, October) Pricing Calculator | Microsoft Azure. [Online].

https://azure.microsoft.com/en-us/pricing/calculator/

[44] Oracle. (2019, November) Cloud Cost Estimator. [Online]. https://www.oracle.com/cloud/cost-

estimator.html

[45] K. Weins. (2018, October) AWS vs Azure vs Google Cloud Pricing: Compute Instances.

[Online]. https://www.rightscale.com/blog/cloud-cost-analysis/aws-vs-azure-vs-google-cloud-

pricing-compute-instances

[46] TIOBE. (2018, October) TIOBE Index. [Online]. https://www.tiobe.com/tiobe-index/

137

[47] P. Carbonnelle. (2018, October) PYPL PopularitY of Programming Language index.

[Online]. http://pypl.github.io/PYPL.html

[48] Stack Overflow. (2019, November) Stack Overflow Developer Survey Results. [Online].

https://insights.stackoverflow.com/survey/2019#most-popular-technologies

[49] WebAssembly. (2019, November) WebAssembly Roadmap. [Online].

https://webassembly.org/roadmap/

[50] J. Harrel. (2018, October) Node.js At PayPal | PayPal Engineering Blog. [Online].

https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/

[51] K. Oliver. (2018, October) How Node.js Powers the Many User Interfaces of Netflix - The

New Stack. [Online]. https://thenewstack.io/netflix-uses-node-js-power-user-interface/

[52] solid IT. (2019, Novmeber) Db-Engines Ranking - popularity ranking of database

management systems. [Online]. https://db-engines.com/en/ranking

[53] Oracle. (2019, November) What is Oracle Database. [Online].

https://www.oracletutorial.com/getting-started/what-is-oracle-database/

[54] PostgreSQL Global Development Group. (2019, November) About PostgreSQL. [Online].

https://www.postgresql.org/about/

[55] Oracle Corporation. (2019, November) What is MySQL? [Online].

https://dev.mysql.com/doc/refman/8.0/en/what-is-mysql.html

[56] Microsoft. (2019, November) Microsoft SQL Server 2019. [Online].

https://www.microsoft.com/en-us/sql-server/sql-server-2019

[57] MongoDB Inc. (2019, November) Introduction to MongoDB. [Online].

https://docs.mongodb.com/manual/introduction/

[58] IBM. (2019, November) IBM Db2 Data Management Software. [Online].

https://www.ibm.com/za-en/analytics/db2

[59] Oracle. (2019, November) Oracle Technology Global Price List. [Online].

https://www.oracle.com/assets/technology-price-list-070617.pdf

138

[60] Oracle. (2019, November) MySQL Editions. [Online]. https://www.mysql.com/products/

[61] Micorosft. (2019, November) SQL Server Pricing and Licensing. [Online].

https://www.microsoft.com/en-us/sql-server/sql-server-2017-pricing

[62] MongoDB Inc. (2019, November) Mongo Atlas Pricing on AWS, Azure and GCP. [Online].

https://www.mongodb.com/cloud/atlas/pricing

[63] IBM. (2019, November) IBM Db2 Database Pricing. [Online].

https://www.ibm.com/products/db2-database/pricing

[64] T. Russell. (2018, October) Project Mezzanine: The Great Migration | Uber Engineering.

[Online]. http://eng.uber.com/mezzanine-migration/

[65] 2ndQuadrant. (2018, October) Met Office 2ndQuadrant Case Study | 2ndQuadrant.

[Online]. https://www.2ndquadrant.com/en/about/case-studies/met-office-2ndquadrant-case-study/

[66] Instagram Engineering. (2018, October) Under the Hood: Instagram in 2015 - Instagram

engineering. [Online]. https://instagram-engineering.com/under-the-hood-instagram-in-2015-

8e8aff5ab7c2

[67] W. Santos. (2018, October) Which API Types and Architectural Styles are Most Used? |

ProgrammableWeb. [Online]. https://www.programmableweb.com/news/which-api-types-and-

architectural-styles-are-most-used/research/2017/11/26

[68] Github Engineering. (2018, October) The GitHub GraphQL API | Github Engineering.

[Online]. https://githubengineering.com/the-github-graphql-api/

[69] Pinterest Engineering. (2018, October) Driving user growth with performance

improvements - Pinterest Engineering - Medium. [Online].

https://medium.com/@Pinterest_Engineering/driving-user-growth-with-performance-improvements-

cfc50dafadd7

[70] S. Taylor. (2018, October) React, Realy and GraphQL: Under the Hoot of the Times

Website Redesign. [Online]. https://open.nytimes.com/react-relay-and-graphql-under-the-hood-

of-the-times-website-redesign-22fb62ea9764

[71] Tableau Software. (2019, November) About Tableau: Helping people see and understand

data. [Online]. https://www.tableau.com/about

139

[72] QlikTech International. (2019, November) The platform for the Next Generation of BI.

[Online]. https://www.qlik.com/us/products/why-qlik-is-different?ga-link=HP_WhyQlik_US

[73] Microsoft. (2019, November) Why Power BI - Features and Benefits. [Online].

https://powerbi.microsoft.com/en-us/why-power-bi/

[74] Google. (2019, November) Dashboarding & Data Visualization Tools. [Online].

https://marketingplatform.google.com/about/data-studio/

[75] IBM. (2019, November) Cognos Analytics. [Online]. https://www.ibm.com/za-

en/products/cognos-analytics

[76] AWS. (2019, November) Amazon QuickSight. [Online]. https://aws.amazon.com/quicksight/

[77] M. Bostock. (2019, November) D3.js - Data-DriverDocuments. [Online]. https://d3js.org

[78] Chart.js Contributors. (2019, November) Open source HTML 5 Charts for your website.

[Online]. https://www.chartjs.org

[79] Apache Software Foundation. (2019, November) Apache Echarts (incubating). [Online].

https://echarts.apache.org/en/index.html

[80] Highcharts. (2019, November) Interactive JavaScript charts for your website. [Online].

https://www.highcharts.com

[81] University of Washington Iteractive Data Lab. (2019, November) About the Vega Project.

[Online]. https://vega.github.io/vega/about/

[82] InfoSoft Global Private Limited. (2019, November) JavaScript charts for web & mobile.

[Online]. https://www.fusioncharts.com

[83] Highcharts. (2019, November) Highcharts JS Licenses. [Online].

https://shop.highsoft.com/highcharts/

[84] InfoSoft Global Private Limited. (2019, November) Pricing and plans. [Online].

https://www.fusioncharts.com/buy

[85] V. Agafonkin. (2019, November) Leaflet - a JavaScript library for interactive maps.

[Online]. https://leafletjs.com

140

[86] OpenLayers Contributors. (2019, November) A high-performance, feature-packed library

for all your mapping needs. [Online]. https://openlayers.org

[87] Google. (2019, November) Google Maps Pricing and Plans. [Online].

https://cloud.google.com/maps-platform/pricing/

[88] Microsoft. (2019, November) Business Maps Licensing. [Online].

https://www.microsoft.com/en-us/maps/licensing/options

[89] Mapquest Inc. (2019, November) Mapquest Developer Network Pricing & Plans. [Online].

https://developer.mapquest.com/plans

[90] Mapbox. (2019, November) Mapbox Pricing. [Online]. https://www.mapbox.com/pricing/

[91] A. Osypenko. (2019, November) Mapbox vs Google Maps: Choosing a Map for Your App.

[Online]. https://madappgang.com/blog/mapbox-vs-google-maps-choosing-a-map-for-your-app

[92] D. Govett. (2019, November) A JavaScript PDF generation library for Node and the

browser. [Online]. https://pdfkit.org

[93] Parallax Agency Ltd. (2019, November) jsPDF - HTML5 PDF Generator. [Online].

https://parall.ax/products/jspdf

[94] pdfmake Conributors. (2019, November) Client/server side PDF printing in pure

JavaScript. [Online]. http://pdfmake.org/#/

[95] Mozilla. (2019, November) A general-purpose, web standards-based platform for parsing

and rendering PDFs. [Online]. https://mozilla.github.io/pdf.js/

[96] PDF Association. (2018, October) ISO 32000-1 (PDF 1.7) - PDF Association. [Online].

https://www.pdfa.org/publication/iso-32000-1-pdf-1-7/

[97] PDF Association. (2018, Octiber) ISO 32000-2 (PDF 2.0) - PDF Association. [Online].

https://www.pdfa.org/publication/iso-32000-2-pdf-2-0/

[98] Google. (2019, November) Google Cloud IoT - Fully Managed IoT services. [Online].

https://cloud.google.com/solutions/iot/

[99] AWS. (2019, November) AWS IoT Core Overview. [Online]. https://aws.amazon.com/iot-core/

141

[100] Microsoft. (2019, November) Azure IoT Hub. [Online]. https://azure.microsoft.com/en-

us/services/iot-hub/

[101] E. Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software.: Addison

Wesley, 2003.

[102] H. Subramanian and P. Raj, Hands-On RESTful API Design Patterns and Best Practices,

Safis Editing, Ed. Birmingham, UK: Packt Publishing, 2019.

[103] Microsoft. (2019, November) What is ASP.Net. [Online].

https://dotnet.microsoft.com/learn/aspnet/what-is-aspnet

[104] Pivotal Software, Inc. (2019, November) Introduction to Spring Framework. [Online].

https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/overview.html

[105] Django Software Foundation. (2019, November) Getting started with Django. [Online].

https://www.djangoproject.com/start/

[106] Laravel LLC. (2019, November) Laravel Introduction. [Online].

https://laravel.com/docs/4.2/introduction

[107] Rails. (2019, November) Getting Started with Rails. [Online].

https://guides.rubyonrails.org/getting_started.html

[108] Google. (2018, October) MemoryStore | Google Cloud. [Online].

https://cloud.google.com/memorystore/

[109] 2014-present Sequelize contributors. (2018, October) Manual | Sequelize | The node.js

ORM for PostgreSQL, MySQL, SQLite and MSSQL. [Online]. http://docs.sequelizejs.com

[110] Microsoft. (2019, November) Entity Framework. [Online]. https://docs.microsoft.com/en-us/ef/

[111] Red Hat. (2019, November) Hibernate ORM - Your relational data. Objectively. [Online].

https://hibernate.org/orm/

[112] Django Software Foundation. (2019, November) Models and Databases. [Online].

https://docs.djangoproject.com/en/2.2/topics/db/

[113] Laravel LLC. (2019, November) Eloquent: Getting Started. [Online].

142

https://laravel.com/docs/5.8/eloquent

[114] Rails. (2019, November) Active Record Basics. [Online].

https://guides.rubyonrails.org/active_record_basics.html

[115] OpenAPI Initiative. (2018, October) About - OpenAPI Initiatie. [Online].

https://www.openapis.org/about

[116] K. Sandoval. (2018, October) Building With Open Standards Will Result in IT Longevity |

Nordic APIs. [Online]. https://nordicapis.com/building-with-open-standards-will-result-in-it-

longevity/

[117] Facebook. (2018, October) facebook/dataloader. [Online].

https://github.com/facebook/dataloader

[118] M. Stoiber. (2018, October) React.js Boilerplate. [Online]. https://www.reactboilerplate.com

[119] M. Huszárik. (2018, October) AngularJS to Angular - history & tips to get started |

@RisingStack. [Online]. https://blog.risingstack.com/angularjs-to-angular-history-and-tips-to-get-

started/

[120] V. Cromwell. (2018, October) Between the Wires interview with Evan You. | Between the

Wires. [Online].

https://web.archive.org/web/20170603052649/https://betweenthewires.org/2016/11/03/evan-you/

[121] A. Kumar. (2018, October) React vs. Angular vs. Vue.js: A Complete Comparison Guide.

[Online]. https://dzone.com/articles/react-vs-angular-vs-vuejs-a-complete-comparison-gu

[122] M. Butusov. (2018, October) ReactJS vs Angular5 vs Vue.js - What to choose in 2018?

[Online]. https://blog.techmagic.co/reactjs-vs-angular5-vs-vue-js-what-to-choose-in-2018/

[123] J. Ganai. (2018, October) Angular vs. React vs. Vue: A 2018 comparison. [Online].

https://www.linkedin.com/pulse/angular-vs-react-vue-2018-comparison-javed-ganai/

[124] Cuelogic Insights. (2018, October) Angular vs. React vs. Vue: A 2018 Comparison

(Updated). [Online]. https://www.cuelogic.com/blog/angular-vs-react-vs-vue-a-2018-comparison

[125] C. Upton. (2018, October) React vs Angular vs Vue 2018 | Dev6. [Online].

https://www.dev6.com/React_vs_Angular_vs_Vue_2018

143

[126] D. Abramov and A. Clark. (2018, October) Read Me - Redux. [Online]. https://redux.js.org/

[127] TechnologyAdvice. (2018, October) Introduction - Semantic UI React. [Online].

https://react.semantic-ui.com

[128] Alipay.com. (2018, October) Introduction - Ant Design. [Online].

https://ant.design/docs/spec/introduce

[129] hustcc. (2018, October) hustcc/echarts-for-react. [Online]. https://github.com/hustcc/echarts-

for-react/blob/master/LICENSE

[130] P. Le Cam. (2018, October) PaulLeCam/react-leaflet. [Online].

https://github.com/PaulLeCam/react-leaflet

[131] Mozilla. (2018, October) PDF.js. [Online]. https://mozilla.github.io/pdf.js/

[132] Pixabay. (2018, October) Stunning Free Images Pixabay. [Online]. https://pixabay.com/en/

[133] IETF. (2018, October) JSON Web Signature (JWS) Unencoded Payload Option. [Online].

https://datatracker.ietf.org/doc/rfc7797/

[134] Airbnb, Inc. (2018, October) Introduction Enzyme. [Online]. https://airbnb.io/enzyme/

[135] Facebook, Inc. (2018, October) Jest Delightful JavaScript Testing. [Online]. https://jestjs.io

[136] I. Gorton, "Software Quality Attributes," in Essential Software Architecture.: Springer,

2006, ch. 3, pp. 23-41.

[137] Airbnb. (2018, October) airbnb/javascript JavaScript Style Guide. [Online].

https://github.com/airbnb/javascript

[138] Google. (2018, October) Lighthouse | Tools for Web Developers | Google Developers.

[Online]. https://developers.google.com/web/tools/lighthouse/

[139] Loadium. (2018, October) Loadium - Jmeter Based performance Testing Tool. [Online].

https://loadium.com

144

ANNEXURE A: OPEN-SOURCE TOOLS AND TECHNOLOGIES

This appendix lists all the open-source libraries and packages used throughout this project.

Table 5-1: List of npm modules used in the project.

Name Version License Source

@axelspringer/graphql-

google-pubsub

1.0.9 MIT https://github.com/axelspringer/graphql-

google-pubsub

add-asset-html-webpack-

plugin

2.1.3 MIT https://github.com/SimenB/add-asset-

html-webpack-plugin

antd 3.7.3 MIT https://github.com/ant-design/ant-

design

apollo-cache-inmemory 1.3.0-

beta.6

MIT https://github.com/apollographql/apollo-

client

apollo-client 2.3.7 MIT https://github.com/apollographql/apollo-

client

apollo-errors 1.9.0 MIT https://github.com/thebigredgeek/apollo

-errors

apollo-link 1.2.2 MIT https://github.com/apollographql/apollo-

link

apollo-link-http 1.5.4 MIT https://github.com/apollographql/apollo-

link

apollo-link-ws 1.0.8 MIT https://github.com/apollographql/apollo-

link

apollo-resolvers 1.4.1 MIT https://github.com/thebigredgeek/apollo

-resolvers

apollo-utilities 1.0.17 MIT https://github.com/apollographql/apollo-

client

145

axios 0.18.0 MIT https://github.com/axios/axios

babel-cli 6.26.0 MIT https://github.com/babel/babel/tree/mas

ter/packages/babel-cli

babel-core 6.26.0 MIT https://github.com/babel/babel/tree/mas

ter/packages/babel-core

babel-eslint 8.2.1 MIT https://github.com/babel/babel-eslint

babel-loader 7.1.4 MIT https://github.com/babel/babel-loader

babel-plugin-add-module-

exports

0.2.1 MIT https://github.com/59naga/babel-plugin-

add-module-exports

babel-plugin-dev-expression 0.2.1 BSD-3-Clause https://github.com/4Catalyzer/babel-

plugin-dev-expression

babel-plugin-dynamic-

import-node

1.2.0 MIT https://github.com/airbnb/babel-plugin-

dynamic-import-node

babel-plugin-graphql-tag 1.6.0 Unspecified https://github.com/gajus/babel-plugin-

graphql-tag

babel-plugin-import 1.8.0 MIT https://github.com/ant-design/babel-

plugin-import

babel-plugin-inline-import 2.0.6 MIT https://github.com/credcollective/babel-

plugin-inline-import

babel-plugin-lodash 3.3.4 MIT https://github.com/lodash/babel-plugin-

lodash

babel-plugin-react-intl 2.4.0 BSD-3-Clause https://github.com/yahoo/babel-plugin-

react-intl

babel-plugin-react-

transform

3.0.0 MIT https://github.com/gaearon/babel-

plugin-react-transform

babel-plugin-styled- 1.5.1 MIT https://github.com/styled-

146

components components/babel-plugin-styled-

components

babel-plugin-transform-

es2015-modules-commonjs

6.26.2 MIT https://github.com/babel/babel/tree/mas

ter/packages/babel-plugin-transform-

modules-commonjs

babel-plugin-transform-

react-constant-elements

6.23.0 MIT https://github.com/babel/babel/tree/mas

ter/packages/babel-plugin-transform-

react-constant-elements

babel-plugin-transform-

react-inline-elements

6.22.0 MIT https://github.com/babel/babel/tree/mas

ter/packages/babel-plugin-transform-

react-inline-elements

babel-plugin-transform-

react-jsx-source

6.22.0 MIT https://github.com/babel/babel/tree/mas

ter/packages/babel-plugin-transform-

react-jsx-source

babel-plugin-transform-

react-remove-prop-types

0.4.13 MIT https://github.com/oliviertassinari/babel-

plugin-transform-react-remove-prop-

types

babel-plugin-transform-

semantic-ui-react-imports

1.3.1 MIT https://github.com/skleeschulte/babel-

plugin-transform-semantic-ui-react-

imports

babel-polyfill 6.26.0 MIT https://github.com/babel/babel/tree/mas

ter/packages/babel-polyfill

babel-preset-env 1.7.0 MIT https://github.com/babel/babel-preset-

env

babel-preset-react 6.24.1 MIT https://github.com/babel/babel/tree/mas

ter/packages/babel-preset-react

babel-preset-react-optimize 1.0.1 MIT https://github.com/jamiebuilds/babel-

react-optimize

147

babel-preset-stage-0 6.24.1 MIT https://github.com/babel/babel/tree/mas

ter/packages/babel-preset-stage-0

babel-preset-stage-2 6.24.1 MIT https://github.com/babel/babel/tree/mas

ter/packages/babel-preset-stage-2

babel-register 6.26.0 MIT https://github.com/babel/babel/tree/mas

ter/packages/babel-register

bcryptjs 2.4.3 MIT https://github.com/dcodeIO/bcrypt.js

body-parser 1.18.2 MIT https://github.com/expressjs/body-

parser

chalk 2.4.1 MIT https://github.com/chalk/chalk

circular-dependency-plugin 5.0.2 ISC https://github.com/aackerman/circular-

dependency-plugin

compression 1.7.2 MIT https://github.com/expressjs/compressi

on

cookie-parser 1.4.3 MIT https://github.com/expressjs/cookie-

parser

cors 2.8.4 MIT https://github.com/expressjs/cors

coveralls 3.0.1 BSD-2-Clause https://github.com/nickmerwin/node-

coveralls

cross-env 5.2.0 MIT https://github.com/kentcdodds/cross-

env

crypto 1.0.1 ISC https://www.npmjs.com/package/crypto

css-loader 0.28.11 MIT https://github.com/webpack-contrib/css-

loader

dataloader 1.4.0 BSD-3-Clause https://github.com/facebook/dataloader

148

date-fns 1.29.0 MIT https://github.com/date-fns/date-fns

dotenv-safe 6.0.0 MIT https://github.com/rolodato/dotenv-safe

downloadjs 1.4.7 MIT https://github.com/rndme/download

echarts 4.1.0 Apache-2.0 https://github.com/apache/incubator-

echarts

echarts-for-react 2.0.14 MIT https://github.com/hustcc/echarts-for-

react

enzyme 3.3.0 MIT https://github.com/airbnb/enzyme

enzyme-adapter-react-16 1.1.1 MIT https://github.com/airbnb/enzyme

enzyme-to-json 3.3.4 MIT https://github.com/adriantoine/enzyme-

to-json

eslint 4.19.1 MIT https://github.com/eslint/eslint

eslint-config-airbnb 16.1.0 MIT https://github.com/airbnb/javascript

eslint-config-airbnb-base 12.1.0 MIT https://github.com/airbnb/javascript

eslint-config-prettier 2.9.0 MIT https://github.com/prettier/eslint-plugin-

prettier

eslint-formatter-pretty 1.3.0 MIT https://github.com/sindresorhus/eslint-

formatter-pretty

eslint-import-resolver-

webpack

0.10.0 MIT https://github.com/benmosher/eslint-

plugin-import

eslint-plugin-babel 4.1.2 MIT https://github.com/babel/eslint-plugin-

babel

eslint-plugin-compat 2.2.0 MIT https://github.com/amilajack/eslint-

plugin-compat

149

eslint-plugin-import 2.12.0 MIT https://github.com/benmosher/eslint-

plugin-import

eslint-plugin-jest 21.8.0 MIT https://github.com/jest-

community/eslint-plugin-jest

eslint-plugin-jsx-a11y 6.0.3 MIT https://github.com/evcohen/eslint-

plugin-jsx-a11y

eslint-plugin-prettier 2.6.0 MIT https://github.com/prettier/eslint-plugin-

prettier

eslint-plugin-promise 3.6.0 ISC https://github.com/xjamundx/eslint-

plugin-promise

eslint-plugin-react 7.9.1 MIT https://github.com/yannickcr/eslint-

plugin-react

eslint-plugin-redux-saga 0.9.0 MIT https://github.com/pke/eslint-plugin-

redux-saga

eventsource-polyfill 0.9.6 MIT https://github.com/Yaffle/EventSource

exports-loader 0.7.0 MIT https://github.com/webpack-

contrib/exports-loader

express 4.16.3 MIT https://github.com/expressjs/express

express-graphql 0.6.11 BSD-3-Clause https://github.com/graphql/express-

graphql

file-loader 1.1.11 MIT https://github.com/webpack-contrib/file-

loader

fontfaceobserver 2.0.13 BSD-3-Clause https://github.com/bramstein/fontfaceob

server

graphiql 0.11.11 MIT https://github.com/graphql/graphiql

graphql 0.13.2 MIT https://github.com/graphql/graphql-js

150

graphql-iso-date 3.5.0 MIT https://github.com/excitement-

engineer/graphql-iso-date

graphql-redis-subscriptions 1.4.0 MIT https://github.com/davidyaha/graphql-

redis-subscriptions

graphql-server-express 1.3.2 MIT https://github.com/apollographql/apollo-

server/tree/master/packages/apollo-

server-express

graphql-subscriptions 0.5.7 MIT https://github.com/apollographql/graphq

l-subscriptions

graphql-tag 2.9.2 MIT https://github.com/apollographql/graphq

l-tag

graphql-tools 2.21.0 MIT https://github.com/apollographql/graphq

l-tools

helmet 3.13.0 MIT https://github.com/helmetjs/helmet

history 4.7.2 MIT https://github.com/ReactTraining/history

hoist-non-react-statics 2.5.5 BSD-3-Clause https://github.com/mridgway/hoist-non-

react-statics

html-loader 0.5.5 MIT https://github.com/webpack-

contrib/html-loader

html-webpack-plugin 3.2.0 MIT https://github.com/jantimon/html-

webpack-plugin

html2canvas 1.0.0-

alpha.12

MIT https://github.com/niklasvh/html2canvas

husky 0.14.3 MIT https://github.com/typicode/husky

image-webpack-loader 4.3.1 MIT https://github.com/tcoopman/image-

webpack-loader

151

immutable 3.8.2 MIT https://github.com/facebook/immutable-

js

imports-loader 0.8.0 MIT https://github.com/webpack-

contrib/imports-loader

intl 1.2.5 MIT https://github.com/andyearnshaw/Intl.js

invariant 2.2.4 MIT https://github.com/zertosh/invariant

ioredis 3.2.2 MIT https://github.com/luin/ioredis

ip 1.1.5 MIT https://github.com/indutny/node-ip

jest-cli 23.1.0 MIT https://github.com/facebook/jest

jest-styled-components 5.0.1 MIT https://github.com/styled-

components/jest-styled-components

jsonwebtoken 8.1.1 MIT https://github.com/auth0/node-

jsonwebtoken

leaflet 1.3.4 BSD-2-Clause https://github.com/Leaflet/Leaflet

lint-staged 7.2.0 MIT https://github.com/okonet/lint-staged

localforage 1.7.2 Apache-2.0 https://github.com/localForage/localFor

age

lodash 4.17.10 MIT https://github.com/lodash/lodash

logger 0.0.1 MIT https://github.com/quirkey/node-logger

mailgun.js 2.0.1 MIT https://github.com/bojand/mailgun-js

merge-graphql-schemas 1.5.3 MIT https://github.com/okgrow/merge-

graphql-schemas

minimist 1.2.0 MIT https://github.com/substack/minimist

moment 2.22.2 MIT https://github.com/moment/moment

152

node-plop 0.15.0 MIT https://github.com/amwmedia/node-

plop

nodemon 1.14.12 MIT https://github.com/remy/nodemon

null-loader 0.1.1 MIT https://github.com/webpack-contrib/null-

loader

offline-plugin 5.0.5 MIT https://github.com/NekR/offline-plugin

otplib 10.0.1 MIT https://github.com/yeojz/otplib

passport 0.4.0 MIT https://github.com/jaredhanson/passpor

t

passport-jwt 4.0.0 MIT https://github.com/themikenicholson/pa

ssport-jwt

passport-local 1.0.0 MIT https://github.com/jaredhanson/passpor

t-local

pdfmake 0.1.38 MIT https://github.com/bpampuch/pdfmake

pg 7.4.3 MIT https://github.com/brianc/node-postgres

plop 2.0.0 MIT https://github.com/amwmedia/plop

pre-commit 1.2.2 MIT https://github.com/observing/pre-

commit

prettier 1.13.5 MIT https://github.com/prettier/prettier

prop-types 15.6.1 MIT https://github.com/facebook/prop-types

query-string 5.1.1 MIT https://github.com/sindresorhus/query-

string

react 16.4.1 MIT https://github.com/facebook/react

react-apollo 2.1.9 MIT https://github.com/apollographql/react-

153

apollo

react-dimensions 1.3.1 MIT https://github.com/digidem/react-

dimensions

react-dom 16.4.1 MIT https://www.npmjs.com/package/react-

dom

react-grid-layout 0.16.6 MIT https://www.npmjs.com/package/react-

grid-layout

react-helmet 5.2.0 MIT https://www.npmjs.com/package/react-

helmet

react-intl 2.4.0 BSD-3-Clause https://github.com/yahoo/react-intl

react-leaflet 2.0.1 MIT https://github.com/PaulLeCam/react-

leaflet

react-load-image 0.1.6 MIT https://github.com/DeedMob/react-load-

image

react-loadable 5.4.0 MIT https://github.com/jamiebuilds/react-

loadable

react-pdf-js 4.0.0-

alpha.6

MIT https://github.com/mikecousins/react-

pdf-js

react-redux 5.0.7 MIT https://github.com/reduxjs/react-redux

react-router-dom 4.3.1 MIT https://github.com/ReactTraining/react-

router

react-router-redux 5.0.0-

alpha.9

MIT https://github.com/reactjs/react-router-

redux

react-scrollbar 0.5.4 MIT https://github.com/souhe/reactScrollbar

react-test-renderer 16.4.1 MIT https://github.com/facebook/react

154

redux 4.0.0 MIT https://github.com/reduxjs/redux

redux-immutable 4.0.0 BSD-3-Clause https://github.com/gajus/redux-

immutable

redux-logger 3.0.6 MIT https://github.com/LogRocket/redux-

logger

redux-saga 0.16.0 MIT https://github.com/redux-saga/redux-

saga

reselect 3.0.1 MIT https://github.com/reduxjs/reselect

rimraf 2.6.2 ISC https://github.com/isaacs/rimraf

sanitize.css 4.1.0 CC-1.0 https://github.com/csstools/sanitize.css

semantic-ui-css 2.3.3 MIT https://github.com/Semantic-

Org/Semantic-UI-CSS

semantic-ui-react 0.81.0 MIT https://github.com/Semantic-

Org/Semantic-UI-React

sequelize 4.38.1 MIT https://github.com/sequelize/sequelize

shelljs 0.8.2 BSD-3-Clause https://github.com/shelljs/shelljs

style-loader 0.21.0 MIT https://github.com/webpack-

contrib/style-loader

styled-components 3.3.2 MIT https://github.com/styled-

components/styled-components

stylelint 9.3.0 MIT https://github.com/stylelint/stylelint

stylelint-config-

recommended

2.1.0 MIT https://github.com/stylelint/stylelint-

config-recommended

stylelint-config-styled-

components

0.1.1 MIT https://github.com/styled-

components/stylelint-config-styled-

155

components

stylelint-processor-styled-

components

1.3.1 MIT https://github.com/styled-

components/stylelint-processor-styled-

components

subscriptions-transport-ws 0.9.14 MIT https://github.com/apollographql/subscri

ptions-transport-ws

svg-url-loader 2.3.2 MIT https://github.com/bhovhannes/svg-url-

loader

swagger-node-express 2.1.3 Apache-2.0

url-loader 1.0.1 MIT https://github.com/webpack-contrib/url-

loader

uuid 3.2.1 MIT https://github.com/kelektiv/node-uuid

validator 9.4.0 MIT https://github.com/chriso/validator.js

warning 4.0.1 MIT https://github.com/BerkeleyTrue/warnin

g

webpack 4.12.0 MIT https://github.com/webpack/webpack

webpack-bundle-analyzer 2.13.1 MIT https://github.com/webpack-

contrib/webpack-bundle-analyzer

webpack-cli 3.0.8 MIT https://github.com/webpack/webpack-cli

webpack-dev-middleware 3.1.3 MIT https://github.com/webpack/webpack-

dev-middleware

webpack-hot-middleware 2.22.2 MIT https://github.com/webpack-

contrib/webpack-hot-middleware

webpack-pwa-manifest 3.6.2 MIT https://github.com/arthurbergmz/webpa

ck-pwa-manifest

156

whatwg-fetch 2.0.4 MIT https://github.com/github/fetch

winston 3.0.0-rc1 MIT https://github.com/winstonjs/winston

157

ANNEXURE B: COMPATIBILITY TESTING

This appendix shows results from testing the corridor performance benchmarking dashboard in

each of the supported browsers.

Figure 5-1: Screenshot of the performance dashboard in Opera.

Figure 5-2: Screenshot of the performance dashboard in Google Chrome.

158

Figure 5-3: Screenshot of the performance dashboard in Mozilla Firefox.

Figure 5-4: Screenshot of the performance dashboard in Microsoft Edge.

159

Figure 5-5: Screenshot of the performance dashboard in Apple Safari.

Figure 5-6: Screenshot of the performance dashboard in Microsoft Internet Explorer

160