.. 
.. Copyright 2015 Comcast Cable Communications Management, LLC
.. 
.. Licensed under the Apache License, Version 2.0 (the "License");
.. you may not use this file except in compliance with the License.
.. You may obtain a copy of the License at
.. 
..     http://www.apache.org/licenses/LICENSE-2.0
.. 
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS,
.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
.. See the License for the specific language governing permissions and
.. limitations under the License.
.. 

.. index::
	Traffic Portal - Overview
	
Traffic Portal
==============
Traffic Portal is an `AngularJS 1.x <https://angularjs.org/>`_ client served from a `Node.js <https://nodejs.org/en/>`_ web server designed to consume the Traffic Ops 1.x API. Traffic Portal provides a set of functionality restricted to the delivery service(s) of the authenticated user. Functionality primarily includes a set of charts / graphs designed to provide insight into the performance of a user's delivery service(s).

Charts / Graphs include:

	- Overall Cache Group Status
	- Delivery Service Bandwidth Per Second
	- Delivery Service Transactions Per Second
	- Delivery Service HTTP Status By Class
	- Delivery Service Capacity
	- Delivery Service Routing Methods
	- Delivery Service Cache Group Status

Other features:

	- Ability to manager user profile
	- Ability to reset user password
	- Ability to view delivery service configuration
	- Ability to invalidate content for a delivery service
	- Ability to retrieve all caches associated with a delivery service
	- Ability to request a new delivery service



