Merge branch 'apigen'
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..86fe485
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,53 @@
+NAME = opencloud
+SPECFILE = $(NAME).spec
+VERSION = $(shell rpm -q --specfile $(SPECFILE) --qf '%{VERSION}\n' | head -n 1)
+RELEASE = $(shell rpm -q --specfile $(SPECFILE) --qf '%{RELEASE}\n' | head -n 1)
+
+UPLOAD_SLICE=princeton_planetstack
+
+PWD = $(shell pwd)
+
+dist rpm: $(NAME)-$(VERSION)-$(RELEASE).rpm
+
+$(NAME)-$(VERSION).tar.gz:
+ mkdir -p $(NAME)-$(VERSION)
+ rsync -av --exclude=.svn --exclude=.git --exclude=*.tar.gz --exclude=*.rpm --exclude=__history --exclude=$(NAME)-$(VERSION)/ ./ $(NAME)-$(VERSION)
+ tar -czf $@ $(NAME)-$(VERSION)
+ rm -fr $(NAME)-$(VERSION)
+
+$(NAME)-$(VERSION)-$(RELEASE).rpm: $(NAME)-$(VERSION).tar.gz
+ mkdir -p build
+ rpmbuild -bb --define '_sourcedir $(PWD)' \
+ --define '_builddir $(PWD)/build' \
+ --define '_srcrpmdir $(PWD)' \
+ --define '_rpmdir $(PWD)' \
+ --define '_build_name_fmt %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm' \
+ $(SPECFILE)
+
+srpm: $(NAME)-$(VERSION)-$(RELEASE).src.rpm
+$(NAME)-$(VERSION)-$(RELEASE).src.rpm: $(NAME)-$(VERSION).tar.gz
+ rpmbuild -bs --define "_sourcedir $$(pwd)" \
+ --define "_srcrpmdir $$(pwd)" \
+ $(SPECFILE)
+
+clean:
+ rm -f $(NAME)-$(VERSION).tar.gz $(NAME)-$(VERSION)-$(RELEASE).src.rpm $(NAME)-$(VERSION)-$(RELEASE).noarch.rpm
+ rm -rf build
+
+install: $(NAME)-$(VERSION)-$(RELEASE).rpm
+ifndef UPLOAD_HOST
+ $(error please specify UPLOAD_HOST=<hostname> on make command line)
+endif
+ scp $(NAME)-$(VERSION)-$(RELEASE).x86_64.rpm $(UPLOAD_SLICE)@$(UPLOAD_HOST):/root/
+ ssh $(UPLOAD_SLICE)@$(UPLOAD_HOST) yum -y install gcc graphviz-devel graphviz-python postgresql postgresql-server python-pip python-psycopg2 libxslt-devel python-httplib2 GeoIP
+ ssh $(UPLOAD_SLICE)@$(UPLOAD_HOST) rpm --install --upgrade --replacefiles --replacepkgs /root/$(NAME)-$(VERSION)-$(RELEASE).x86_64.rpm
+ scp /opt/planetstack/hpc_wizard/bigquery_credentials.dat /opt/planetstack/hpc_wizard/client_secrets.json $(UPLOAD_SLICE)@$(UPLOAD_HOST):/opt/planetstack/hpc_wizard/
+
+install-keys:
+ifndef UPLOAD_HOST
+ $(error please specify UPLOAD_HOST=<hostname> on make command line)
+endif
+ scp /opt/planetstack/hpc_wizard/bigquery_credentials.dat /opt/planetstack/hpc_wizard/client_secrets.json $(UPLOAD_SLICE)@$(UPLOAD_HOST):/opt/planetstack/hpc_wizard/
+
+.PHONY: dist
+
diff --git a/opencloud.spec b/opencloud.spec
new file mode 100644
index 0000000..e877ff4
--- /dev/null
+++ b/opencloud.spec
@@ -0,0 +1,105 @@
+Summary: OpenCloud core services
+Name: opencloud
+Version: 1.0.10
+Release: 4
+License: GPL+
+Group: Development/Tools
+Source0: %{_tmppath}/%{name}-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
+requires: postgresql
+requires: postgresql-server
+requires: python-psycopg2
+requires: graphviz
+requires: graphviz-devel
+requires: graphviz-python
+requires: libxslt-devel
+requires: python-pip
+requires: tar
+requires: gcc
+requires: python-httplib2
+requires: GeoIP
+
+%description
+%{summary}
+
+%prep
+%setup -q
+
+%build
+# Empty section.
+
+%pre
+pip-python install django==1.5
+pip-python install djangorestframework
+pip-python install markdown # Markdown support for the browseable API.
+pip-python install pyyaml # YAML content-type support.
+pip-python install django-filter # Filtering support
+pip-python install lxml # XML manipulation library
+pip-python install netaddr # IP Addr library
+pip-python install pytz
+pip-python install django-timezones
+pip-python install requests
+pip-python install django-crispy-forms
+pip-python install django-geoposition
+pip-python install django-extensions
+pip-python install django-suit
+pip-python install django-evolution
+pip-python install django-bitfield
+pip-python install django-ipware
+
+easy_install django_evolution
+easy_install python_gflags
+easy_install google_api_python_client
+
+wget -P /usr/lib/python2.7/site-packages/suit/static/suit/js http://code.jquery.com/jquery-1.9.1.min.js
+
+if [ ! -f /usr/share/GeoIP/GeoLiteCity.dat ]; then
+ rm -f /usr/share/GeoIP/GeoLiteCity.*
+ wget -P /usr/share/GeoIP http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
+ gzip -d /usr/share/GeoIP/GeoLiteCity*.gz
+fi
+
+if [ "$1" == 2 ] ; then
+ echo "UPGRADE - saving current state"
+ /opt/planetstack/scripts/opencloud dumpdata
+fi
+
+%install
+rm -rf %{buildroot}
+mkdir -p %{buildroot}
+install -d %{buildroot}/opt/planetstack
+
+# in builddir
+cp -rp ./planetstack %{buildroot}/opt/.
+
+find %{buildroot}/opt/planetstack -type f -print | sed "s@^$RPM_BUILD_ROOT@@g" > %{_tmppath}/tmp-filelist
+cp %{_tmppath}/tmp-filelist /tmp/tmp-filelist
+
+%clean
+rm -rf %{buildroot}
+
+%files -f %{_tmppath}/tmp-filelist
+%defattr(-,root,root,-)
+%config /opt/planetstack/plstackapi_config
+
+%post
+if [ "$1" == 1 ] ; then
+ echo "NEW INSTALL - initializing database"
+ /opt/planetstack/scripts/opencloud initdb
+else
+ echo "UPGRADE - doing evolution"
+ /opt/planetstack/scripts/opencloud evolvedb
+fi
+# start the server
+/opt/planetstack/scripts/opencloud runserver
+
+%preun
+if [ "$1" = 0 ] ; then
+ echo "UNINSTALL - destroying planetstack"
+ rm -rf /opt/planetstack
+fi
+
+%changelog
+* Sat Feb 22 2014 Siobhan Tully 1.0.0
+- First Build
+
diff --git a/planetstack/apigen/api.template.py b/planetstack/apigen/api.template.py
index c3e76e1..6638808 100644
--- a/planetstack/apigen/api.template.py
+++ b/planetstack/apigen/api.template.py
@@ -60,9 +60,39 @@
class {{ object.camel }}List(generics.ListCreateAPIView):
queryset = {{ object.camel }}.objects.select_related().all()
serializer_class = {{ object.camel }}Serializer
+
+ def get_queryset(self):
+ return {{ object.camel }}.select_by_user(self.request.user)
+
+ def create(self, request, *args, **kwargs):
+ #obj = {{ object.camel }}().update(request.DATA)
+ obj = self.get_object()
+ obj.caller = request.user
+ if obj.can_update(request.user):
+ return super({{ object.camel }}List, self).create(request, *args, **kwargs)
+ else:
+ return Response(status=status.HTTP_400_BAD_REQUEST)
class {{ object.camel }}Detail(generics.RetrieveUpdateDestroyAPIView):
queryset = {{ object.camel }}.objects.select_related().all()
serializer_class = {{ object.camel }}Serializer
+
+ def get_queryset(self):
+ return {{ object.camel }}.select_by_user(self.request.user)
+
+ def update(self, request, *args, **kwargs):
+ obj = self.get_object()
+ if obj.can_update(request.user):
+ return super({{ object.camel }}Detail, self).update(request, *args, **kwargs)
+ else:
+ return Response(status=status.HTTP_400_BAD_REQUEST)
+
+ def destroy(self, request, *args, **kwargs):
+ obj = self.get_object()
+ if obj.can_update(request.user):
+ return super({{ object.camel }}Detail, self).destroy(request, *args, **kwargs)
+ else:
+ return Response(status=status.HTTP_400_BAD_REQUEST)
+
{% endfor %}
diff --git a/planetstack/cassandra/__init__.py b/planetstack/cassandra/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/planetstack/cassandra/__init__.py
diff --git a/planetstack/cassandra/admin.py b/planetstack/cassandra/admin.py
new file mode 100644
index 0000000..e736815
--- /dev/null
+++ b/planetstack/cassandra/admin.py
@@ -0,0 +1,32 @@
+from django.contrib import admin
+
+from cassandra.models import *
+from django import forms
+from django.utils.safestring import mark_safe
+from django.contrib.auth.admin import UserAdmin
+from django.contrib.admin.widgets import FilteredSelectMultiple
+from django.contrib.auth.forms import ReadOnlyPasswordHashField
+from django.contrib.auth.signals import user_logged_in
+from django.utils import timezone
+from django.contrib.contenttypes import generic
+from suit.widgets import LinkedSelect
+from core.admin import SingletonAdmin,SliceInline,ServiceAttrAsTabInline, SliceROInline,ServiceAttrAsTabROInline, ReadOnlyAwareAdmin
+
+class CassandraServiceAdmin(SingletonAdmin):
+ model = CassandraService
+ verbose_name = "Cassandra Service"
+ verbose_name_plural = "Cassandra Service"
+ list_display = ("name","enabled")
+ fieldsets = [(None, {'fields': ['name','enabled','versionNumber', 'description','clusterSize','replicationFactor'], 'classes':['suit-tab suit-tab-general']})]
+ inlines = [SliceInline,ServiceAttrAsTabInline]
+
+ user_readonly_inlines = [SliceROInline, ServiceAttrAsTabROInline]
+ user_readonly_fields = ["name", "enabled", "versionNumber", "description", "clusterSize", "replicationFactor"]
+
+ suit_form_tabs =(('general', 'Cassandra Service Details'),
+ ('slices','Slices'),
+ ('serviceattrs','Additional Attributes'),
+ )
+
+admin.site.register(CassandraService, CassandraServiceAdmin)
+
diff --git a/planetstack/cassandra/models.py b/planetstack/cassandra/models.py
new file mode 100644
index 0000000..12479b3
--- /dev/null
+++ b/planetstack/cassandra/models.py
@@ -0,0 +1,17 @@
+from core.models import User,Site,Service,SingletonModel,PlCoreBase, Slice
+import os
+from django.db import models
+from django.forms.models import model_to_dict
+
+# Create your models here.
+
+class CassandraService(SingletonModel,Service):
+ class Meta:
+ app_label = "cassandra"
+ verbose_name = "Cassandra Service"
+
+ clusterSize = models.PositiveIntegerField(default=1)
+ replicationFactor = models.PositiveIntegerField(default=1)
+
+ def __unicode__(self): return u'Cassandra Service'
+
diff --git a/planetstack/core/acl.py b/planetstack/core/acl.py
new file mode 100644
index 0000000..7856414
--- /dev/null
+++ b/planetstack/core/acl.py
@@ -0,0 +1,135 @@
+from fnmatch import fnmatch
+
+"""
+ A General-purpose ACL mechanism.
+
+ [allow | deny] <type_of_object> <text_pattern>
+
+ "allow all" and "deny all" are shorthand for allowing or denying all objects.
+ Lines are executed from top to bottom until a match was found, typical
+ iptables style. An implicit 'deny all' exists at the bottom of the list.
+
+ For example,
+ allow site Max Planck Institute
+ deny site Arizona
+ allow region US
+ deny user scott@onlab.us
+ allow user *@onlab.us
+"""
+
+class AccessControlList:
+ def __init__(self, aclText=None):
+ self.rules = []
+ if aclText:
+ self.import_text(aclText)
+
+ def import_text(self, aclText):
+ # allow either newline or ';' to separate rules
+ aclText = aclText.replace("\n", ";")
+ for line in aclText.split(";"):
+ line = line.strip()
+ if line.startswith("#"):
+ continue
+
+ if line=="":
+ continue
+
+ parts = line.split()
+
+ if len(parts)==2 and (parts[1]=="all"):
+ # "allow all" has no pattern
+ parts = (parts[0], parts[1], "")
+
+ if len(parts)!=3:
+ raise ACLValidationError(line)
+
+ (action, object, pattern) = parts
+
+ if action not in ["allow", "deny"]:
+ raise ACLValidationError(line)
+
+ if object not in ["site", "user", "all"]:
+ raise ACLValidationError(line)
+
+ self.rules.append( (action, object, pattern) )
+
+ def __str__(self):
+ lines = []
+ for rule in self.rules:
+ lines.append( " ".join(rule) )
+ return ";\n".join(lines)
+
+ def test(self, user, site=None):
+ for rule in self.rules:
+ if self.match_rule(rule, user):
+ return rule[0]
+ return "deny"
+
+ def match_rule(self, rule, user, site=None):
+ (action, object, pattern) = rule
+
+ if (site==None):
+ site = user.site
+
+ if (object == "site"):
+ if fnmatch(site.name, pattern):
+ return True
+ elif (object == "user"):
+ if fnmatch(user.email, pattern):
+ return True
+ elif (object == "all"):
+ return True
+
+ return False
+
+
+if __name__ == '__main__':
+ # self-test
+
+ class fakesite:
+ def __init__(self, siteName):
+ self.name = siteName
+
+ class fakeuser:
+ def __init__(self, email, siteName):
+ self.email = email
+ self.site = fakesite(siteName)
+
+ u_scott = fakeuser("scott@onlab.us", "ON.Lab")
+ u_bill = fakeuser("bill@onlab.us", "ON.Lab")
+ u_andy = fakeuser("acb@cs.princeton.edu", "Princeton")
+ u_john = fakeuser("jhh@cs.arizona.edu", "Arizona")
+ u_hacker = fakeuser("somehacker@foo.com", "Not A Real Site")
+
+ # check the "deny all" rule
+ acl = AccessControlList("deny all")
+ assert(acl.test(u_scott) == "deny")
+
+ # a blank ACL results in "deny all"
+ acl = AccessControlList("")
+ assert(acl.test(u_scott) == "deny")
+
+ # check the "allow all" rule
+ acl = AccessControlList("allow all")
+ assert(acl.test(u_scott) == "allow")
+
+ # allow only one site
+ acl = AccessControlList("allow site ON.Lab")
+ assert(acl.test(u_scott) == "allow")
+ assert(acl.test(u_andy) == "deny")
+
+ # some complicated ACL
+ acl = AccessControlList("""allow site Princeton
+ allow user *@cs.arizona.edu
+ deny site Arizona
+ deny user scott@onlab.us
+ allow site ON.Lab""")
+
+ assert(acl.test(u_scott) == "deny")
+ assert(acl.test(u_bill) == "allow")
+ assert(acl.test(u_andy) == "allow")
+ assert(acl.test(u_john) == "allow")
+ assert(acl.test(u_hacker) == "deny")
+
+ print acl
+
diff --git a/planetstack/core/admin.py b/planetstack/core/admin.py
index 5281bb1..0e38d43 100644
--- a/planetstack/core/admin.py
+++ b/planetstack/core/admin.py
@@ -43,10 +43,21 @@
return actions
def change_view(self,request,object_id, extra_context=None):
-
if self.__user_is_readonly(request):
- self.readonly_fields=self.user_readonly_fields
- self.inlines = self.user_readonly_inlines
+ if not hasattr(self, "readonly_save"):
+ # save the original readonly fields
+ self.readonly_save = self.readonly_fields
+ self.inlines_save = self.inlines
+ if hasattr(self, "user_readonly_fields"):
+ self.readonly_fields=self.user_readonly_fields
+ if hasattr(self, "user_readonly_inlines"):
+ self.inlines = self.user_readonly_inlines
+ else:
+ if hasattr(self, "readonly_save"):
+ # restore the original readonly fields
+ self.readonly_fields = self.readonly_save
+ if hasattr(self, "inlines_save"):
+ self.inlines = self.inlines_save
try:
return super(ReadOnlyAwareAdmin, self).change_view(request, object_id, extra_context=extra_context)
@@ -57,12 +68,14 @@
request.readonly = True
return super(ReadOnlyAwareAdmin, self).change_view(request, object_id, extra_context=extra_context)
-
def __user_is_readonly(self, request):
return request.user.isReadOnlyUser()
-class SingletonAdmin (admin.ModelAdmin):
+class SingletonAdmin (ReadOnlyAwareAdmin):
def has_add_permission(self, request):
+ if not super(SingletonAdmin, self).has_add_permission(request):
+ return False
+
num_objects = self.model.objects.count()
if num_objects >= 1:
return False
@@ -156,6 +169,9 @@
model = Reservation
extra = 0
suit_classes = 'suit-tab suit-tab-reservations'
+
+ def queryset(self, request):
+ return Reservation.select_by_user(request.user)
class TagROInline(generic.GenericTabularInline):
model = Tag
@@ -175,6 +191,10 @@
model = Tag
extra = 0
suit_classes = 'suit-tab suit-tab-tags'
+ fields = ['service', 'name', 'value']
+
+ def queryset(self, request):
+ return Tag.select_by_user(request.user)
class NetworkLookerUpper:
""" This is a callable that looks up a network name in a sliver and returns
@@ -198,16 +218,27 @@
class SliverROInline(ReadOnlyTabularInline):
model = Sliver
- fields = ['ip', 'instance_name', 'slice', 'numberCores', 'image', 'node', 'deploymentNetwork']
+ fields = ['ip', 'instance_name', 'slice', 'numberCores', 'deploymentNetwork', 'image', 'node']
suit_classes = 'suit-tab suit-tab-slivers'
class SliverInline(PlStackTabularInline):
model = Sliver
- fields = ['ip', 'instance_name', 'slice', 'numberCores', 'image', 'node', 'deploymentNetwork']
+ fields = ['ip', 'instance_name', 'slice', 'numberCores', 'deploymentNetwork', 'image', 'node']
extra = 0
readonly_fields = ['ip', 'instance_name']
suit_classes = 'suit-tab suit-tab-slivers'
+ def queryset(self, request):
+ return Sliver.select_by_user(request.user)
+
+ def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
+ if db_field.name == 'deploymentNetwork':
+ kwargs['queryset'] = Deployment.select_by_acl(request.user)
+
+ field = super(SliverInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
+
+ return field
+
# Note this is breaking in the admin.py when trying to use an inline to add a node/image
# def _declared_fieldsets(self):
# # Return None so django will call get_fieldsets and we can insert our
@@ -252,6 +283,9 @@
extra = 0
suit_classes = 'suit-tab suit-tab-sites'
+ def queryset(self, request):
+ return Site.select_by_user(request.user)
+
class UserROInline(ReadOnlyTabularInline):
model = User
fields = ['email', 'firstname', 'lastname']
@@ -264,6 +298,9 @@
extra = 0
suit_classes = 'suit-tab suit-tab-users'
+ def queryset(self, request):
+ return User.select_by_user(request.user)
+
class SliceROInline(ReadOnlyTabularInline):
model = Slice
suit_classes = 'suit-tab suit-tab-slices'
@@ -275,27 +312,35 @@
extra = 0
suit_classes = 'suit-tab suit-tab-slices'
+ def queryset(self, request):
+ return Slice.select_by_user(request.user)
+
class NodeROInline(ReadOnlyTabularInline):
model = Node
extra = 0
suit_classes = 'suit-tab suit-tab-nodes'
- fields = ['name','deployment']
+ fields = ['name','deployment','site']
class NodeInline(PlStackTabularInline):
model = Node
extra = 0
suit_classes = 'suit-tab suit-tab-nodes'
+ fields = ['name','deployment','site']
class DeploymentPrivilegeROInline(ReadOnlyTabularInline):
model = DeploymentPrivilege
extra = 0
suit_classes = 'suit-tab suit-tab-deploymentprivileges'
- fields = ['user','role']
+ fields = ['user','role','deployment']
class DeploymentPrivilegeInline(PlStackTabularInline):
model = DeploymentPrivilege
extra = 0
suit_classes = 'suit-tab suit-tab-deploymentprivileges'
+ fields = ['user','role','deployment']
+
+ def queryset(self, request):
+ return DeploymentPrivilege.select_by_user(request.user)
#CLEANUP DOUBLE SitePrivilegeInline
class SitePrivilegeROInline(ReadOnlyTabularInline):
@@ -308,34 +353,44 @@
model = SitePrivilege
extra = 0
suit_classes = 'suit-tab suit-tab-siteprivileges'
+ fields = ['user','site', 'role']
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'site':
- if not request.user.is_admin:
- # only show sites where user is an admin or pi
- roles = Role.objects.filter(role_type__in=['admin', 'pi'])
- site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
- login_bases = [site_privilege.site.login_base for site_privilege in site_privileges]
- sites = Site.objects.filter(login_base__in=login_bases)
- kwargs['queryset'] = sites
+ kwargs['queryset'] = Site.select_by_user(request.user)
if db_field.name == 'user':
- if not request.user.is_admin:
- # only show users from sites where caller has admin or pi role
- roles = Role.objects.filter(role_type__in=['admin', 'pi'])
- site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
- sites = [site_privilege.site for site_privilege in site_privileges]
- site_privileges = SitePrivilege.objects.filter(site__in=sites)
- emails = [site_privilege.user.email for site_privilege in site_privileges]
- users = User.objects.filter(email__in=emails)
- kwargs['queryset'] = users
+ kwargs['queryset'] = User.select_by_user(request.user)
return super(SitePrivilegeInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
-class SitePrivilegeInline(PlStackTabularInline):
- model = SitePrivilege
- suit_classes = 'suit-tab suit-tab-siteprivileges'
+ def queryset(self, request):
+ return SitePrivilege.select_by_user(request.user)
+
+class SiteDeploymentROInline(ReadOnlyTabularInline):
+ model = SiteDeployments
+ #model = Site.deployments.through
extra = 0
- fields = ('user', 'site','role')
+ suit_classes = 'suit-tab suit-tab-deployments'
+ fields = ['deployment','site']
+
+class SiteDeploymentInline(PlStackTabularInline):
+ model = SiteDeployments
+ #model = Site.deployments.through
+ extra = 0
+ suit_classes = 'suit-tab suit-tab-deployments'
+ fields = ['deployment','site']
+
+ def formfield_for_foreignkey(self, db_field, request, **kwargs):
+ if db_field.name == 'site':
+ kwargs['queryset'] = Site.select_by_user(request.user)
+
+ if db_field.name == 'deployment':
+ kwargs['queryset'] = Deployment.select_by_user(request.user)
+ return super(SiteDeploymentInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
+
+ def queryset(self, request):
+ return SiteDeployments.select_by_user(request.user)
+
class SlicePrivilegeROInline(ReadOnlyTabularInline):
model = SlicePrivilege
@@ -351,26 +406,15 @@
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'slice':
- if not request.user.is_admin:
- # only show slices at sites where caller has admin or pi role
- roles = Role.objects.filter(role_type__in=['admin', 'pi'])
- site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
- sites = [site_privilege.site for site_privilege in site_privileges]
- slices = Slice.objects.filter(site__in=sites)
- kwargs['queryset'] = slices
+ kwargs['queryset'] = Slice.select_by_user(request.user)
if db_field.name == 'user':
- if not request.user.is_admin:
- # only show users from sites where caller has admin or pi role
- roles = Role.objects.filter(role_type__in=['admin', 'pi'])
- site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
- sites = [site_privilege.site for site_privilege in site_privileges]
- site_privileges = SitePrivilege.objects.filter(site__in=sites)
- emails = [site_privilege.user.email for site_privilege in site_privileges]
- users = User.objects.filter(email__in=emails)
- kwargs['queryset'] = list(users)
+ kwargs['queryset'] = User.select_by_user(request.user)
return super(SlicePrivilegeInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
+ def queryset(self, request):
+ return SlicePrivilege.select_by_user(request.user)
+
class SliceNetworkROInline(ReadOnlyTabularInline):
model = Network.slices.through
extra = 0
@@ -386,6 +430,16 @@
verbose_name = "Network Connection"
verbose_name_plural = "Network Connections"
suit_classes = 'suit-tab suit-tab-slicenetworks'
+ fields = ['network']
+
+class ImageDeploymentsInline(PlStackTabularInline):
+ model = ImageDeployments
+ extra = 0
+ verbose_name = "Image Deployments"
+ verbose_name_plural = "Image Deployments"
+ suit_classes = 'suit-tab suit-tab-imagedeployments'
+ fields = ['deployment', 'glance_image_id']
+ readonly_fields = ['deployment', 'glance_image_id']
class PlainTextWidget(forms.HiddenInput):
input_type = 'hidden'
@@ -397,6 +451,20 @@
class PlanetStackBaseAdmin(ReadOnlyAwareAdmin):
save_on_top = False
+
+ def save_model(self, request, obj, form, change):
+ obj.caller = request.user
+ # update openstack connection to use this site/tenant
+ obj.save_by_user(request.user)
+
+ def delete_model(self, request, obj):
+ obj.delete_by_user(request.user)
+
+ def save_formset(self, request, form, formset, change):
+ instances = formset.save(commit=False)
+ for instance in instances:
+ instance.save_by_user(request.user)
+ formset.save_m2m()
class SliceRoleAdmin(PlanetStackBaseAdmin):
model = SliceRole
@@ -410,6 +478,7 @@
sites = forms.ModelMultipleChoiceField(
queryset=Site.objects.all(),
required=False,
+ help_text="Select which sites are allowed to host nodes in this deployment",
widget=FilteredSelectMultiple(
verbose_name=('Sites'), is_stacked=False
)
@@ -418,10 +487,13 @@
model = Deployment
def __init__(self, *args, **kwargs):
+ request = kwargs.pop('request', None)
super(DeploymentAdminForm, self).__init__(*args, **kwargs)
+ self.fields['accessControl'].initial = "allow site " + request.user.site.name
+
if self.instance and self.instance.pk:
- self.fields['sites'].initial = self.instance.sites.all()
+ self.fields['sites'].initial = [x.site for x in self.instance.sitedeployments_set.all()]
def save(self, commit=True):
deployment = super(DeploymentAdminForm, self).save(commit=False)
@@ -430,20 +502,42 @@
deployment.save()
if deployment.pk:
- deployment.sites = self.cleaned_data['sites']
+ # save_m2m() doesn't seem to work with 'through' relations. So we
+ # create/destroy the through models ourselves. There has to be
+ # a better way...
+
+ sites = self.cleaned_data['sites']
+
+ existing_sites = []
+ for sdp in list(deployment.sitedeployments_set.all()):
+ if sdp.site not in sites:
+ #print "deleting site", sdp.site
+ sdp.delete()
+ else:
+ existing_sites.append(sdp.site)
+
+ for site in sites:
+ if site not in existing_sites:
+ #print "adding site", site
+ sdp = SiteDeployments(site=site, deployment=deployment)
+ sdp.save()
+
self.save_m2m()
return deployment
+class DeploymentAdminROForm(DeploymentAdminForm):
+ def save(self, commit=True):
+ raise PermissionDenied
+
class SiteAssocInline(PlStackTabularInline):
model = Site.deployments.through
extra = 0
suit_classes = 'suit-tab suit-tab-sites'
class DeploymentAdmin(PlanetStackBaseAdmin):
- form = DeploymentAdminForm
model = Deployment
- fieldList = ['name','sites']
+ fieldList = ['name','sites', 'accessControl']
fieldsets = [(None, {'fields': fieldList, 'classes':['suit-tab suit-tab-sites']})]
inlines = [DeploymentPrivilegeInline,NodeInline,TagInline]
@@ -452,6 +546,22 @@
suit_form_tabs =(('sites','Deployment Details'),('nodes','Nodes'),('deploymentprivileges','Privileges'),('tags','Tags'))
+ def get_form(self, request, obj=None, **kwargs):
+ if request.user.isReadOnlyUser():
+ kwargs["form"] = DeploymentAdminROForm
+ else:
+ kwargs["form"] = DeploymentAdminForm
+ adminForm = super(DeploymentAdmin,self).get_form(request, obj, **kwargs)
+
+ # from stackexchange: pass the request object into the form
+
+ class AdminFormMetaClass(adminForm):
+ def __new__(cls, *args, **kwargs):
+ kwargs['request'] = request
+ return adminForm(*args, **kwargs)
+
+ return AdminFormMetaClass
+
class ServiceAttrAsTabROInline(ReadOnlyTabularInline):
model = ServiceAttribute
fields = ['name','value']
@@ -482,7 +592,7 @@
fieldList = ['name', 'site_url', 'enabled', 'is_public', 'login_base', 'accountLink','location']
fieldsets = [
(None, {'fields': fieldList, 'classes':['suit-tab suit-tab-general']}),
- ('Deployment Networks', {'fields': ['deployments'], 'classes':['suit-tab suit-tab-deployments']}),
+ #('Deployment Networks', {'fields': ['deployments'], 'classes':['suit-tab suit-tab-deployments']}),
]
suit_form_tabs =(('general', 'Site Details'),
('users','Users'),
@@ -495,23 +605,15 @@
readonly_fields = ['accountLink']
user_readonly_fields = ['name', 'deployments','site_url', 'enabled', 'is_public', 'login_base', 'accountLink']
- user_readonly_inlines = [SliceROInline,UserROInline,TagROInline, NodeROInline, SitePrivilegeROInline]
+ user_readonly_inlines = [SliceROInline,UserROInline,TagROInline, NodeROInline, SitePrivilegeROInline,SiteDeploymentROInline]
list_display = ('name', 'login_base','site_url', 'enabled')
filter_horizontal = ('deployments',)
- inlines = [SliceInline,UserInline,TagInline, NodeInline, SitePrivilegeInline]
+ inlines = [SliceInline,UserInline,TagInline, NodeInline, SitePrivilegeInline, SiteDeploymentInline]
search_fields = ['name']
def queryset(self, request):
- # admins can see all keys. Users can only see sites they belong to.
- qs = super(SiteAdmin, self).queryset(request)
- if not request.user.is_admin:
- valid_sites = [request.user.site.login_base]
- roles = request.user.get_roles()
- for tenant_list in roles.values():
- valid_sites.extend(tenant_list)
- qs = qs.filter(login_base__in=valid_sites)
- return qs
+ return Site.select_by_user(request.user)
def get_formsets(self, request, obj=None):
for inline in self.get_inline_instances(request, obj):
@@ -542,6 +644,13 @@
accountLink.allow_tags = True
accountLink.short_description = "Billing"
+ def save_model(self, request, obj, form, change):
+ # update openstack connection to use this site/tenant
+ obj.save_by_user(request.user)
+
+ def delete_model(self, request, obj):
+ obj.delete_by_user(request.user)
+
class SitePrivilegeAdmin(PlanetStackBaseAdmin):
fieldList = ['user', 'site', 'role']
@@ -579,12 +688,12 @@
# admins can see all privileges. Users can only see privileges at sites
# where they have the admin role or pi role.
qs = super(SitePrivilegeAdmin, self).queryset(request)
- if not request.user.is_admin:
- roles = Role.objects.filter(role_type__in=['admin', 'pi'])
- site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
- login_bases = [site_privilege.site.login_base for site_privilege in site_privileges]
- sites = Site.objects.filter(login_base__in=login_bases)
- qs = qs.filter(site__in=sites)
+ #if not request.user.is_admin:
+ # roles = Role.objects.filter(role_type__in=['admin', 'pi'])
+ # site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
+ # login_bases = [site_privilege.site.login_base for site_privilege in site_privileges]
+ # sites = Site.objects.filter(login_base__in=login_bases)
+ # qs = qs.filter(site__in=sites)
return qs
class SliceForm(forms.ModelForm):
@@ -596,9 +705,9 @@
class SliceAdmin(PlanetStackBaseAdmin):
form = SliceForm
- fieldList = ['name', 'site', 'serviceClass', 'enabled','description', 'service', 'slice_url']
+ fieldList = ['name', 'site', 'serviceClass', 'enabled','description', 'service', 'slice_url', 'max_slivers']
fieldsets = [('Slice Details', {'fields': fieldList, 'classes':['suit-tab suit-tab-general']}),]
- list_display = ('name', 'site','serviceClass', 'slice_url')
+ list_display = ('name', 'site','serviceClass', 'slice_url', 'max_slivers')
inlines = [SlicePrivilegeInline,SliverInline, TagInline, ReservationInline,SliceNetworkInline]
user_readonly_fields = fieldList
@@ -614,26 +723,13 @@
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'site':
- if not request.user.is_admin:
- # only show sites where user is a pi or admin
- roles = Role.objects.filter(role_type__in=['admin', 'pi'])
- site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
- login_bases = [site_privilege.site.login_base for site_privilege in site_privileges]
- sites = Site.objects.filter(login_base__in=login_bases)
- kwargs['queryset'] = sites
-
+ kwargs['queryset'] = Site.select_by_user(request.user)
+
return super(SliceAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
def queryset(self, request):
# admins can see all keys. Users can only see slices they belong to.
- qs = super(SliceAdmin, self).queryset(request)
- if not request.user.is_admin:
- valid_slices = []
- roles = request.user.get_roles()
- for tenant_list in roles.values():
- valid_slices.extend(tenant_list)
- qs = qs.filter(name__in=valid_slices)
- return qs
+ return Slice.select_by_user(request.user)
def get_formsets(self, request, obj=None):
for inline in self.get_inline_instances(request, obj):
@@ -644,12 +740,6 @@
inline.model.caller = request.user
yield inline.get_formset(request, obj)
- def get_queryset(self, request):
- qs = super(SliceAdmin, self).get_queryset(request)
- if request.user.is_superuser:
- return qs
- # users can only see slices at their site
- return qs.filter(site=request.user.site)
class SlicePrivilegeAdmin(PlanetStackBaseAdmin):
fieldsets = [
@@ -662,39 +752,17 @@
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'slice':
- if not request.user.is_admin:
- # only show slices at sites where caller has admin or pi role
- roles = Role.objects.filter(role_type__in=['admin', 'pi'])
- site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
- sites = [site_privilege.site for site_privilege in site_privileges]
- slices = Slice.objects.filter(site__in=sites)
- kwargs['queryset'] = slices
+ kwargs['queryset'] = Slice.select_by_user(request.user)
if db_field.name == 'user':
- if not request.user.is_admin:
- # only show users from sites where caller has admin or pi role
- roles = Role.objects.filter(role_type__in=['admin', 'pi'])
- site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
- sites = [site_privilege.site for site_privilege in site_privileges]
- site_privileges = SitePrivilege.objects.filter(site__in=sites)
- emails = [site_privilege.user.email for site_privilege in site_privileges]
- users = User.objects.filter(email__in=emails)
- kwargs['queryset'] = users
+ kwargs['queryset'] = User.select_by_user(request.user)
return super(SlicePrivilegeAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
def queryset(self, request):
# admins can see all memberships. Users can only see memberships of
# slices where they have the admin role.
- qs = super(SlicePrivilegeAdmin, self).queryset(request)
- if not request.user.is_admin:
- roles = Role.objects.filter(role_type__in=['admin', 'pi'])
- site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
- login_bases = [site_privilege.site.login_base for site_privilege in site_privileges]
- sites = Site.objects.filter(login_base__in=login_bases)
- slices = Slice.objects.filter(site__in=sites)
- qs = qs.filter(slice__in=slices)
- return qs
+ return SlicePrivilege.select_by_user(request.user)
def save_model(self, request, obj, form, change):
# update openstack connection to use this site/tenant
@@ -714,15 +782,15 @@
class ImageAdmin(PlanetStackBaseAdmin):
fieldsets = [('Image Details',
- {'fields': ['image_id', 'name', 'disk_format', 'container_format'],
+ {'fields': ['name', 'disk_format', 'container_format'],
'classes': ['suit-tab suit-tab-general']})
]
- suit_form_tabs =(('general','Image Details'),('slivers','Slivers'))
+ suit_form_tabs =(('general','Image Details'),('slivers','Slivers'),('imagedeployments','Deployments'))
- inlines = [SliverInline]
+ inlines = [SliverInline, ImageDeploymentsInline]
- user_readonly_fields = ['image_id', 'name', 'disk_format', 'container_format']
+ user_readonly_fields = ['name', 'disk_format', 'container_format']
user_readonly_inlines = [SliverROInline]
class NodeForm(forms.ModelForm):
@@ -783,24 +851,15 @@
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'slice':
- if not request.user.is_admin:
- slices = set([sm.slice.name for sm in SlicePrivilege.objects.filter(user=request.user)])
- kwargs['queryset'] = Slice.objects.filter(name__in=list(slices))
+ kwargs['queryset'] = Slice.select_by_user(request.user)
return super(SliverAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
def queryset(self, request):
# admins can see all slivers. Users can only see slivers of
# the slices they belong to.
- qs = super(SliverAdmin, self).queryset(request)
- if not request.user.is_admin:
- tenants = []
- roles = request.user.get_roles()
- for tenant_list in roles.values():
- tenants.extend(tenant_list)
- valid_slices = Slice.objects.filter(name__in=tenants)
- qs = qs.filter(slice__in=valid_slices)
- return qs
+ return Sliver.select_by_user(request.user)
+
def get_formsets(self, request, obj=None):
# make some fields read only if we are updating an existing record
@@ -815,10 +874,8 @@
# hide MyInline in the add view
if obj is None:
continue
- # give inline object access to driver and caller
- auth = request.session.get('auth', {})
- auth['tenant'] = obj.name # meed to connect using slice's tenant
- inline.model.os_manager = OpenStackManager(auth=auth, caller=request.user)
+ if isinstance(inline, SliverInline):
+ inline.model.caller = request.user
yield inline.get_formset(request, obj)
#def save_model(self, request, obj, form, change):
@@ -881,6 +938,18 @@
# field does not have access to the initial value
return self.initial["password"]
+class UserDashboardViewInline(PlStackTabularInline):
+ model = UserDashboardView
+ extra = 0
+ suit_classes = 'suit-tab suit-tab-dashboards'
+ fields = ['user', 'dashboardView', 'order']
+
+class UserDashboardViewROInline(ReadOnlyTabularInline):
+ model = UserDashboardView
+ extra = 0
+ suit_classes = 'suit-tab suit-tab-dashboards'
+ fields = ['user', 'dashboardView', 'order']
+
class UserAdmin(UserAdmin):
class Meta:
app_label = "core"
@@ -895,7 +964,7 @@
list_display = ('email', 'firstname', 'lastname', 'site', 'last_login')
#list_display = ('email', 'username','firstname', 'lastname', 'is_admin', 'last_login')
list_filter = ('site',)
- inlines = [SlicePrivilegeInline,SitePrivilegeInline,DeploymentPrivilegeInline]
+ inlines = [SlicePrivilegeInline,SitePrivilegeInline,DeploymentPrivilegeInline,UserDashboardViewInline]
fieldListLoginDetails = ['email','site','password','is_readonly','is_amin','public_key']
fieldListContactInfo = ['firstname','lastname','phone','timezone']
@@ -903,6 +972,7 @@
fieldsets = (
('Login Details', {'fields': ['email', 'site','password', 'is_readonly', 'is_admin', 'public_key'], 'classes':['suit-tab suit-tab-general']}),
('Contact Information', {'fields': ('firstname','lastname','phone', 'timezone'), 'classes':['suit-tab suit-tab-contact']}),
+ #('Dashboard Views', {'fields': ('dashboards',), 'classes':['suit-tab suit-tab-dashboards']}),
#('Important dates', {'fields': ('last_login',)}),
)
add_fieldsets = (
@@ -915,20 +985,19 @@
ordering = ('email',)
filter_horizontal = ()
- user_readonly_fields = fieldListLoginDetails
- user_readonly_inlines = [SlicePrivilegeROInline,SitePrivilegeROInline,DeploymentPrivilegeROInline]
+ user_readonly_fields = fieldListLoginDetails + fieldListContactInfo
+ user_readonly_inlines = [SlicePrivilegeROInline,SitePrivilegeROInline,DeploymentPrivilegeROInline,UserDashboardViewROInline]
- suit_form_tabs =(('general','Login Details'),('contact','Contact Information'),('sliceprivileges','Slice Privileges'),('siteprivileges','Site Privileges'),('deploymentprivileges','Deployment Privileges'))
+ suit_form_tabs =(('general','Login Details'),
+ ('contact','Contact Information'),
+ ('sliceprivileges','Slice Privileges'),
+ ('siteprivileges','Site Privileges'),
+ ('deploymentprivileges','Deployment Privileges'),
+ ('dashboards','Dashboard Views'))
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'site':
- if not request.user.is_admin:
- # show sites where caller is an admin or pi
- sites = []
- for site_privilege in SitePrivilege.objects.filer(user=request.user):
- if site_privilege.role.role_type in ['admin', 'pi']:
- sites.append(site_privilege.site.login_base)
- kwargs['queryset'] = Site.objects.filter(login_base__in(list(sites)))
+ kwargs['queryset'] = Site.select_by_user(request.user)
return super(UserAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
@@ -950,8 +1019,18 @@
def change_view(self,request,object_id, extra_context=None):
if self.__user_is_readonly(request):
+ if not hasattr(self, "readonly_save"):
+ # save the original readonly fields
+ self.readonly_save = self.readonly_fields
+ self.inlines_save = self.inlines
self.readonly_fields=self.user_readonly_fields
self.inlines = self.user_readonly_inlines
+ else:
+ if hasattr(self, "readonly_save"):
+ # restore the original readonly fields
+ self.readonly_fields = self.readonly_save
+ self.inlines = self.inlines_save
+
try:
return super(UserAdmin, self).change_view(request, object_id, extra_context=extra_context)
except PermissionDenied:
@@ -966,7 +1045,16 @@
#return "readonly" in groups
return request.user.isReadOnlyUser()
+ def queryset(self, request):
+ return User.select_by_user(request.user)
+class DashboardViewAdmin(PlanetStackBaseAdmin):
+ fieldsets = [('Dashboard View Details',
+ {'fields': ['name', 'url'],
+ 'classes': ['suit-tab suit-tab-general']})
+ ]
+
+ suit_form_tabs =(('general','Dashboard View Details'),)
class ServiceResourceROInline(ReadOnlyTabularInline):
model = ServiceResource
@@ -1015,6 +1103,9 @@
return field
+ def queryset(self, request):
+ return ReservedResource.select_by_user(request.user)
+
class ReservationChangeForm(forms.ModelForm):
class Meta:
model = Reservation
@@ -1124,6 +1215,9 @@
else:
return []
+ def queryset(self, request):
+ return Reservation.select_by_user(request.user)
+
class NetworkParameterTypeAdmin(PlanetStackBaseAdmin):
list_display = ("name", )
user_readonly_fields = ['name']
@@ -1382,4 +1476,5 @@
#admin.site.register(SitePrivilege, SitePrivilegeAdmin)
admin.site.register(Sliver, SliverAdmin)
admin.site.register(Image, ImageAdmin)
+ admin.site.register(DashboardView, DashboardViewAdmin)
diff --git a/planetstack/core/context_processors.py b/planetstack/core/context_processors.py
new file mode 100644
index 0000000..270ec4e
--- /dev/null
+++ b/planetstack/core/context_processors.py
@@ -0,0 +1,4 @@
+from django.conf import settings
+
+def planetstack(request):
+ return {"DISABLE_MINIDASHBOARD": settings.DISABLE_MINIDASHBOARD}
diff --git a/planetstack/core/plus/__init__.py b/planetstack/core/dashboard/__init__.py
similarity index 100%
rename from planetstack/core/plus/__init__.py
rename to planetstack/core/dashboard/__init__.py
diff --git a/planetstack/core/dashboard/sites.py b/planetstack/core/dashboard/sites.py
new file mode 100644
index 0000000..5d670d0
--- /dev/null
+++ b/planetstack/core/dashboard/sites.py
@@ -0,0 +1,66 @@
+#sites.py
+
+from django.contrib.admin.sites import AdminSite
+
+
+class AdminMixin(object):
+ """Mixin for AdminSite to allow custom dashboard views."""
+
+ def __init__(self, *args, **kwargs):
+ return super(AdminMixin, self).__init__(*args, **kwargs)
+
+ def get_urls(self):
+ """Add our dashboard view to the admin urlconf. Deleted the default index."""
+ from django.conf.urls import patterns, url
+ from views import DashboardCustomize, DashboardDynamicView, DashboardWelcomeView, DashboardAjaxView, SimulatorView, \
+ DashboardSummaryAjaxView, DashboardAddOrRemoveSliverView, DashboardUserSiteView, DashboardAnalyticsAjaxView, \
+ TenantViewData,TenantCreateSlice, TenantAddOrRemoveSliverView, TenantPickSitesView, TenantDeleteSliceView, \
+ TenantUpdateSlice, DashboardSliceInteractions
+
+ urls = super(AdminMixin, self).get_urls()
+ del urls[0]
+ custom_url = patterns('',
+ url(r'^$', self.admin_view(DashboardDynamicView.as_view()),
+ name="index"),
+ url(r'^test/', self.admin_view(DashboardUserSiteView.as_view()),
+ name="test"),
+ url(r'^sliceinteractions/(?P<name>\w+)/$', self.admin_view(DashboardSliceInteractions.as_view()),
+ name="interactions"),
+ url(r'^dashboard/(?P<name>\w+)/$', self.admin_view(DashboardDynamicView.as_view()),
+ name="dashboard"),
+ url(r'^customize/$', self.admin_view(DashboardCustomize.as_view()),
+ name="customize"),
+ url(r'^hpcdashuserslices/', self.admin_view(DashboardUserSiteView.as_view()),
+ name="hpcdashuserslices"),
+ url(r'^hpcdashboard/', self.admin_view(DashboardAjaxView.as_view()), # DEPRECATED
+ name="hpcdashboard"),
+ url(r'^simulator/', self.admin_view(SimulatorView.as_view()),
+ name="simulator"),
+ url(r'^hpcsummary/', self.admin_view(DashboardSummaryAjaxView.as_view()), # DEPRECATED
+ name="hpcsummary"),
+ url(r'^analytics/(?P<name>\w+)/$', DashboardAnalyticsAjaxView.as_view(),
+ name="analytics"),
+ url(r'^dashboardaddorremsliver/$', self.admin_view(DashboardAddOrRemoveSliverView.as_view()),
+ name="addorremsliver"),
+ url(r'^tenantaddorremsliver/$', self.admin_view(TenantAddOrRemoveSliverView.as_view()),
+ name="tenantaddorremsliver"),
+ url(r'^tenantview/$', self.admin_view(TenantViewData.as_view()),
+ name="tenantview"),
+ url(r'^createnewslice/$', self.admin_view(TenantCreateSlice.as_view()),
+ name="createnewslice"),
+ url(r'^updateslice/$', self.admin_view(TenantUpdateSlice.as_view()),
+ name="updateslice"),
+ url(r'^picksites/$', self.admin_view(TenantPickSitesView.as_view()),
+ name="picksites"),
+ url(r'^tenantdeleteslice/$', self.admin_view(TenantDeleteSliceView.as_view()),
+ name="tenantdeleteslice")
+ )
+
+ return custom_url + urls
+
+
+class SitePlus(AdminMixin, AdminSite):
+ """
+ A Django AdminSite with the AdminMixin to allow registering custom
+ dashboard view.
+ """
diff --git a/planetstack/core/dashboard/views/__init__.py b/planetstack/core/dashboard/views/__init__.py
new file mode 100644
index 0000000..a152700
--- /dev/null
+++ b/planetstack/core/dashboard/views/__init__.py
@@ -0,0 +1,9 @@
+from home import DashboardWelcomeView, DashboardDynamicView
+from tenant import TenantCreateSlice, TenantUpdateSlice, TenantDeleteSliceView, TenantAddOrRemoveSliverView, TenantPickSitesView, TenantViewData
+from simulator import SimulatorView
+from cdn import DashboardSummaryAjaxView, DashboardAddOrRemoveSliverView, DashboardAjaxView
+from analytics import DashboardAnalyticsAjaxView
+from customize import DashboardCustomize
+from interactions import DashboardSliceInteractions
+from test import DashboardUserSiteView
+
diff --git a/planetstack/core/dashboard/views/analytics.py b/planetstack/core/dashboard/views/analytics.py
new file mode 100644
index 0000000..09d1bbc
--- /dev/null
+++ b/planetstack/core/dashboard/views/analytics.py
@@ -0,0 +1,9 @@
+from view_common import *
+
+class DashboardAnalyticsAjaxView(View):
+ def get(self, request, name="hello_world", **kwargs):
+ if (name == "bigquery"):
+ (mimetype, data) = DoPlanetStackAnalytics(request)
+ return HttpResponse(data, mimetype=mimetype)
+ else:
+ return HttpResponse(json.dumps("Unknown"), mimetype='application/javascript')
diff --git a/planetstack/core/dashboard/views/cdn.py b/planetstack/core/dashboard/views/cdn.py
new file mode 100644
index 0000000..63ec2f2
--- /dev/null
+++ b/planetstack/core/dashboard/views/cdn.py
@@ -0,0 +1,49 @@
+from view_common import *
+
+class DashboardSummaryAjaxView(View):
+ def get(self, request, **kwargs):
+ def avg(x):
+ if len(x)==0:
+ return 0
+ return float(sum(x))/len(x)
+
+ sites = getCDNOperatorData().values()
+
+ sites = [site for site in sites if site["numHPCSlivers"]>0]
+
+ total_slivers = sum( [site["numHPCSlivers"] for site in sites] )
+ total_bandwidth = sum( [site["bandwidth"] for site in sites] )
+ average_cpu = int(avg( [site["load"] for site in sites] ))
+
+ result= {"total_slivers": total_slivers,
+ "total_bandwidth": total_bandwidth,
+ "average_cpu": average_cpu}
+
+ return HttpResponse(json.dumps(result), mimetype='application/javascript')
+
+class DashboardAddOrRemoveSliverView(View):
+ # TODO: deprecate this view in favor of using TenantAddOrRemoveSliverView
+
+ def post(self, request, *args, **kwargs):
+ siteName = request.POST.get("site", None)
+ actionToDo = request.POST.get("actionToDo", "0")
+
+ siteList = [Site.objects.get(name=siteName)]
+ slice = Slice.objects.get(name="HyperCache")
+
+ if request.user.isReadOnlyUser():
+ return HttpResponseForbidden("User is in read-only mode")
+
+ if (actionToDo == "add"):
+ user_ip = request.GET.get("ip", get_ip(request))
+ slice_increase_slivers(request.user, user_ip, siteList, slice, 1)
+ elif (actionToDo == "rem"):
+ slice_decrease_slivers(request.user, siteList, slice, 1)
+
+ print '*' * 50
+ print 'Ask for site: ' + siteName + ' to ' + actionToDo + ' another HPC Sliver'
+ return HttpResponse(json.dumps("Success"), mimetype='application/javascript')
+
+class DashboardAjaxView(View):
+ def get(self, request, **kwargs):
+ return HttpResponse(json.dumps(getCDNOperatorData(True)), mimetype='application/javascript')
diff --git a/planetstack/core/dashboard/views/customize.py b/planetstack/core/dashboard/views/customize.py
new file mode 100644
index 0000000..f081cfb
--- /dev/null
+++ b/planetstack/core/dashboard/views/customize.py
@@ -0,0 +1,22 @@
+from view_common import *
+
+class DashboardCustomize(View):
+ def post(self, request, *args, **kwargs):
+ if request.user.isReadOnlyUser():
+ return HttpResponseForbidden("User is in read-only mode")
+
+ dashboards = request.POST.get("dashboards", None)
+ if not dashboards:
+ dashboards=[]
+ else:
+ dashboards = [x.strip() for x in dashboards.split(",")]
+ dashboards = [DashboardView.objects.get(name=x) for x in dashboards]
+
+ request.user.dashboardViews.all().delete()
+
+ for i,dashboard in enumerate(dashboards):
+ udbv = UserDashboardView(user=request.user, dashboardView=dashboard, order=i)
+ udbv.save()
+
+ return HttpResponse(json.dumps("Success"), mimetype='application/javascript')
+
diff --git a/planetstack/core/dashboard/views/home.py b/planetstack/core/dashboard/views/home.py
new file mode 100644
index 0000000..06e2c5f
--- /dev/null
+++ b/planetstack/core/dashboard/views/home.py
@@ -0,0 +1,92 @@
+from view_common import *
+
+class DashboardWelcomeView(TemplateView):
+ template_name = 'admin/dashboard/welcome.html'
+
+ def get(self, request, *args, **kwargs):
+ context = self.get_context_data(**kwargs)
+ context = getDashboardContext(request.user, context)
+ return self.render_to_response(context=context)
+
+class DashboardDynamicView(TemplateView):
+ head_template = r"""{% extends "admin/dashboard/dashboard_base.html" %}
+ {% load admin_static %}
+ {% block content %}
+ """
+
+ tail_template = r"{% endblock %}"
+
+ def get(self, request, name="root", *args, **kwargs):
+ context = self.get_context_data(**kwargs)
+ context = getDashboardContext(request.user, context)
+
+ if name=="root":
+ return self.multiDashboardView(request, context)
+ else:
+ return self.singleDashboardView(request, name, context)
+
+ def readDashboard(self, fn):
+ try:
+ template= open("/opt/planetstack/templates/admin/dashboard/%s.html" % fn, "r").read()
+ if (fn=="tenant"):
+ # fix for tenant view - it writes html to a div called tabs-5
+ template = '<div id="tabs-5"></div>' + template
+ return template
+ except:
+ return "failed to open %s" % fn
+
+ def multiDashboardView(self, request, context):
+ head_template = self.head_template
+ tail_template = self.tail_template
+
+ body = """
+ <div id="hometabs" >
+ <ul id="suit_form_tabs" class="nav nav-tabs nav-tabs-suit" data-tab-prefix="suit-tab">
+ """
+
+ dashboards = request.user.get_dashboards()
+
+ # customize is a special dashboard they always get
+ customize = DashboardView.objects.filter(name="Customize")
+ if customize:
+ dashboards.append(customize[0])
+
+ for i,view in enumerate(dashboards):
+ body = body + '<li><a href="#dashtab-%d">%s</a></li>\n' % (i, view.name)
+
+ body = body + "</ul>\n"
+
+ for i,view in enumerate(dashboards):
+ url = view.url
+ body = body + '<div id="dashtab-%d">\n' % i
+ if url.startswith("template:"):
+ fn = url[9:]
+ body = body + self.readDashboard(fn)
+ body = body + '</div>\n'
+
+ body=body+"</div>\n"
+
+ t = template.Template(head_template + body + self.tail_template)
+
+ response_kwargs = {}
+ response_kwargs.setdefault('content_type', self.content_type)
+ return self.response_class(
+ request = request,
+ template = t,
+ context = context,
+ **response_kwargs)
+
+ def singleDashboardView(self, request, name, context):
+ head_template = self.head_template
+ tail_template = self.tail_template
+
+ t = template.Template(head_template + self.readDashboard(name) + self.tail_template)
+
+ response_kwargs = {}
+ response_kwargs.setdefault('content_type', self.content_type)
+ return self.response_class(
+ request = request,
+ template = t,
+ context = context,
+ **response_kwargs)
+
diff --git a/planetstack/core/dashboard/views/interactions.py b/planetstack/core/dashboard/views/interactions.py
new file mode 100644
index 0000000..23d755f
--- /dev/null
+++ b/planetstack/core/dashboard/views/interactions.py
@@ -0,0 +1,103 @@
+from view_common import *
+
+class DashboardSliceInteractions(View):
+ def get(self, request, name="users", **kwargs):
+ colors = ["#005586", "#6ebe49", "orange", "#707170", "#00c4b3", "#077767", "dodgerblue", "#a79b94", "#c4e76a", "red"]
+
+ groups = []
+ matrix = []
+ slices = list(Slice.objects.all())
+
+ ids_by_slice = self.build_id_list(slices, name)
+
+ slices = [x for x in slices if (len(ids_by_slice[x])>0)]
+
+ for i,slice in enumerate(slices):
+ groups.append({"name": slice.name, "color": colors[i%len(colors)]})
+ row=self.buildMatrix(slice, slices, name, ids_by_slice)
+ matrix.append(row)
+
+ result = {"groups": groups, "matrix": matrix}
+
+ if name=="users":
+ result["title"] = "Slice interactions by user privilege"
+ result["objectName"] = "users"
+ elif name=="networks":
+ result["title"] = "Slice interactions by network membership"
+ result["objectName"] = "networks"
+ elif name=="sites":
+ result["title"] = "Slice interactions by site ownership"
+ result["objectName"] = "sites"
+ elif name=="sliver_sites":
+ result["title"] = "Slice interactions by sliver sites"
+ result["objectName"] = "sites"
+ elif name=="sliver_nodes":
+ result["title"] = "Slice interactions by sliver nodes"
+ result["objectName"] = "nodes"
+
+ return HttpResponse(json.dumps(result), mimetype='application/javascript')
+
+ def build_id_list(self, slices, name):
+ ids_by_slice = {}
+ for slice in slices:
+ # build up a list of object ids that are used by each slice
+ ids_by_slice[slice] = self.getIds(slice, name)
+
+ return ids_by_slice
+
+ def buildMatrix(self, slice, slices, name, ids_by_slice):
+ not_only_my_ids = []
+
+ # build up a list of object ids that are used by other slices
+ for otherSlice in ids_by_slice.keys():
+ if (slice != otherSlice):
+ for id in ids_by_slice[otherSlice]:
+ if not id in not_only_my_ids:
+ not_only_my_ids.append(id)
+
+ # build up a list of ids that are used only by the slice, and not
+ # shared with any other slice
+ only_my_ids = []
+ for id in ids_by_slice[slice]:
+ if id not in not_only_my_ids:
+ only_my_ids.append(id)
+
+ row = []
+ for otherSlice in ids_by_slice.keys():
+ if (otherSlice == slice):
+ row.append(len(only_my_ids))
+ else:
+ row.append(self.inCommonIds(ids_by_slice[slice], ids_by_slice[otherSlice]))
+
+ return row
+
+ def getIds(self, slice, name):
+ ids=[]
+ if name=="users":
+ for sp in slice.slice_privileges.all():
+ if sp.user.id not in ids:
+ ids.append(sp.user.id)
+ elif name=="networks":
+ for sp in slice.networkslice_set.all():
+ if sp.network.id not in ids:
+ ids.append(sp.network.id)
+ elif name=="sites":
+ ids = [slice.site.id]
+ elif name=="sliver_sites":
+ for sp in slice.slivers.all():
+ if sp.node.site.id not in ids:
+ ids.append(sp.node.site.id)
+ elif name=="sliver_nodes":
+ for sp in slice.slivers.all():
+ if sp.node.id not in ids:
+ ids.append(sp.node.id)
+ return ids
+
+ def inCommonIds(self, ids1, ids2):
+ count = 0
+ for id in ids1:
+ if id in ids2:
+ count+=1
+ return count
+
+
diff --git a/planetstack/core/dashboard/views/simulator.py b/planetstack/core/dashboard/views/simulator.py
new file mode 100644
index 0000000..43332ab
--- /dev/null
+++ b/planetstack/core/dashboard/views/simulator.py
@@ -0,0 +1,18 @@
+from view_common import *
+
+class SimulatorView(View):
+ def get(self, request, **kwargs):
+ sim = json.loads(file("/tmp/simulator.json","r").read())
+ text = "<html><head></head><body>"
+ text += "Iteration: %d<br>" % sim["iteration"]
+ text += "Elapsed since report %d<br><br>" % sim["elapsed_since_report"]
+ text += "<table border=1>"
+ text += "<tr><th>site</th><th>trend</th><th>weight</th><th>bytes_sent</th><th>hot</th></tr>"
+ for site in sim["site_load"].values():
+ text += "<tr>"
+ text += "<td>%s</td><td>%0.2f</td><td>%0.2f</td><td>%d</td><td>%0.2f</td>" % \
+ (site["name"], site["trend"], site["weight"], site["bytes_sent"], site["load_frac"])
+ text += "</tr>"
+ text += "</table>"
+ text += "</body></html>"
+ return HttpResponse(text)
diff --git a/planetstack/core/dashboard/views/tenant.py b/planetstack/core/dashboard/views/tenant.py
new file mode 100644
index 0000000..9066a2b
--- /dev/null
+++ b/planetstack/core/dashboard/views/tenant.py
@@ -0,0 +1,339 @@
+from view_common import *
+import functools
+
+BLESSED_SITES = ["Stanford", "Washington", "Princeton", "GeorgiaTech", "MaxPlanck"]
+
+class TenantCreateSlice(View):
+ def post(self, request, *args, **kwargs):
+ if request.user.isReadOnlyUser():
+ return HttpResponseForbidden("User is in read-only mode")
+
+ sliceName = request.POST.get("sliceName", "0")
+ serviceClass = request.POST.get("serviceClass", "0")
+ imageName = request.POST.get("imageName", "0")
+ actionToDo = request.POST.get("actionToDo", "0")
+ networkPorts = request.POST.get("network","0")
+ mountDataSets = request.POST.get("mountDataSets","0")
+ privateVolume = request.POST.get("privateVolume","0")
+ if (actionToDo == "add"):
+ serviceClass = ServiceClass.objects.get(name=serviceClass)
+ site = request.user.site
+ image = Image.objects.get(name=imageName)
+ newSlice = Slice(name=sliceName,serviceClass=serviceClass,site=site,imagePreference=image,mountDataSets=mountDataSets)
+ newSlice.save()
+ privateTemplate="Private"
+ publicTemplate="Public shared IPv4"
+ privateNetworkName = sliceName+"-"+privateTemplate
+ publicNetworkName = sliceName+"-"+publicTemplate
+ slice=Slice.objects.get(name=sliceName)
+ addNetwork(privateNetworkName,privateTemplate,slice)
+ addNetwork(publicNetworkName,publicTemplate,slice)
+ addOrModifyPorts(networkPorts,sliceName)
+ if privateVolume=="true":
+ privateVolForSlice(request.user,sliceName)
+ return HttpResponse(json.dumps("Slice created"), mimetype='application/javascript')
+
+def privateVolForSlice(user,sliceName):
+ if not hasPrivateVolume(sliceName):
+ volumeName=createPrivateVolume(user,sliceName)
+ readWrite="true"
+ mountVolume(sliceName,volumeName,readWrite)
+
+class TenantUpdateSlice(View):
+ def post(self, request, *args, **kwargs):
+ if request.user.isReadOnlyUser():
+ return HttpResponseForbidden("User is in read-only mode")
+
+ sliceName = request.POST.get("sliceName", "0")
+ serviceClass = request.POST.get("serviceClass", "0")
+ imageName = request.POST.get("imageName", "0")
+ actionToDo = request.POST.get("actionToDo", "0")
+ networkPorts = request.POST.get("networkPorts","0")
+ dataSet = request.POST.get("dataSet","0")
+ privateVolume = request.POST.get("privateVolume","0")
+ slice = Slice.objects.all()
+ for entry in slice:
+ serviceClass = ServiceClass.objects.get(name=serviceClass)
+ if(entry.name==sliceName):
+ if (actionToDo == "update"):
+ setattr(entry,'serviceClass',serviceClass)
+ setattr(entry,'imagePreference',imageName)
+ setattr(entry,'mountDataSets',dataSet)
+ entry.save()
+ break
+ addOrModifyPorts(networkPorts,sliceName)
+ if privateVolume=="true":
+ privateVolForSlice(request.user,sliceName)
+ return HttpResponse(json.dumps("Slice updated"), mimetype='application/javascript')
+
+def addNetwork(name,template,sliceName):
+ networkTemplate=NetworkTemplate.objects.get(name=template)
+ newNetwork = Network(name = name,
+ template = networkTemplate,
+ owner = sliceName)
+ newNetwork.save()
+ addNetworkSlice(newNetwork,sliceName)
+
+def addNetworkSlice(networkSlice,sliceName):
+ newNetworkSlice=NetworkSlice(network =networkSlice,
+ slice=sliceName)
+ newNetworkSlice.save()
+
+def addOrModifyPorts(networkPorts,sliceName):
+ networkList = Network.objects.all()
+ networkInfo = []
+ if networkPorts:
+ for networkEntry in networkList:
+ networkSlices = networkEntry.slices.all()
+ for slice in networkSlices:
+ if slice.name==sliceName:
+ if networkEntry.template.name=="Public shared IPv4":
+ setattr(networkEntry,'ports',networkPorts)
+ networkEntry.save()
+
+def getTenantSliceInfo(user, tableFormat = False):
+ tenantSliceDetails = {}
+ tenantSliceData = getTenantInfo(user)
+ tenantServiceClassData = getServiceClassInfo(user)
+ if (tableFormat):
+ tenantSliceDetails['userSliceInfo'] = userSliceTableFormatter(tenantSliceData)
+ tenantSliceDetails['sliceServiceClass']=userSliceTableFormatter(tenantServiceClassData)
+ else:
+ tenantSliceDetails['userSliceInfo'] = tenantSliceData
+ tenantSliceDetails['sliceServiceClass']=userSliceTableFormatter(tenantServiceClassData)
+ tenantSliceDetails['image']=userSliceTableFormatter(getImageInfo(user))
+ tenantSliceDetails['deploymentSites']=userSliceTableFormatter(getDeploymentSites())
+ tenantSliceDetails['sites'] = userSliceTableFormatter(getTenantSitesInfo())
+ tenantSliceDetails['mountDataSets'] = userSliceTableFormatter(getMountDataSets())
+ tenantSliceDetails['publicKey'] = getPublicKey(user)
+ return tenantSliceDetails
+
+def getTenantInfo(user):
+ slices =Slice.objects.all()
+ userSliceInfo = []
+ for entry in slices:
+ sliceName = Slice.objects.get(id=entry.id).name
+ slice = Slice.objects.get(name=Slice.objects.get(id=entry.id).name)
+ sliceServiceClass = entry.serviceClass.name
+ preferredImage = entry.imagePreference
+ #sliceDataSet = entry.mountDataSets
+ sliceNetwork = {}
+ numSliver = 0
+ sliceImage=""
+ sliceSite = {}
+ sliceNode = {}
+ sliceInstance= {}
+ #createPrivateVolume(user,sliceName)
+ for sliver in slice.slivers.all():
+ if sliver.node.site.name in BLESSED_SITES:
+ sliceSite[sliver.node.site.name] = sliceSite.get(sliver.node.site.name,0) + 1
+ sliceImage = sliver.image.name
+ sliceNode[str(sliver)] = sliver.node.name
+ numSliver = sum(sliceSite.values())
+ numSites = len(sliceSite)
+ userSliceInfo.append({'sliceName': sliceName,'sliceServiceClass': sliceServiceClass,'preferredImage':preferredImage,'numOfSites':numSites, 'sliceSite':sliceSite,'sliceImage':sliceImage,'numOfSlivers':numSliver,'instanceNodePair':sliceNode})
+ return userSliceInfo
+
+def getTenantSitesInfo():
+ tenantSiteInfo=[]
+ for entry in Site.objects.all():
+ if entry.name in BLESSED_SITES:
+ tenantSiteInfo.append({'siteName':entry.name})
+ return tenantSiteInfo
+
+def getPublicKey(user):
+ users=User.objects.all()
+ for key in users:
+ if (str(key.email)==str(user)):
+ sshKey = key.public_key
+ return sshKey
+
+def getServiceClassInfo(user):
+ serviceClassList = ServiceClass.objects.all()
+ sliceInfo = []
+ for entry in serviceClassList:
+ sliceInfo.append({'serviceClass':entry.name})
+ return sliceInfo
+
+def getImageInfo(user):
+ imageList = Image.objects.all()
+ #imageList = ['Fedora 16 LXC rev 1.3','Hadoop','MPI']
+ imageInfo = []
+ for imageEntry in imageList:
+ imageInfo.append({'Image':imageEntry.name})
+ #imageInfo.append({'Image':imageEntry})
+ return imageInfo
+
+def createPrivateVolume(user, sliceName):
+ caps = Volume.CAP_READ_DATA | Volume.CAP_WRITE_DATA | Volume.CAP_HOST_DATA
+ getattr(Volume.default_gateway_caps,"read data") | \
+ getattr(Volume.default_gateway_caps,"write data") | \
+ getattr(Volume.default_gateway_caps,"host files")
+ v = Volume(name="private_" + sliceName, owner_id=user, description="private volume for %s" % sliceName, blocksize=61440, private=True, archive=False, default_gateway_caps = caps)
+ v.save()
+ return v
+
+SYNDICATE_REPLICATE_PORTNUM = 1025
+
+def get_free_port():
+ inuse={}
+ inuse[SYNDICATE_REPLICATE_PORTNUM] = True
+ for vs in VolumeSlice.objects.all():
+ inuse[vs.peer_portnum]=True
+ inuse[vs.replicate_portnum]=True
+ for network in Network.objects.all():
+ if not network.ports:
+ continue
+ network_ports = [x.strip() for x in network.ports.split(",")]
+ for network_port in network_ports:
+ try:
+ inuse[int(network_port)] = True
+ except:
+ # in case someone has put a malformed port number in the list
+ pass
+ for i in range(1025, 65535):
+ if not inuse.get(i,False):
+ return i
+ return False
+
+def mountVolume(sliceName, volumeName, readWrite):
+ slice = Slice.objects.get(name=sliceName)
+ volume = Volume.objects.get(name=volumeName)
+ # choose some unused port numbers
+ flags = Volume.CAP_READ_DATA
+ if readWrite:
+ flags = flags | Volume.CAP_WRITE_DATA
+ vs = VolumeSlice(volume_id = volume, slice_id = slice, gateway_caps=flags, peer_portnum = get_free_port(), replicate_portnum = SYNDICATE_REPLICATE_PORTNUM)
+ vs.save()
+
+def hasPrivateVolume(sliceName):
+ slice = Slice.objects.get(name=sliceName)
+ for vs in VolumeSlice.objects.filter(slice_id=slice):
+ if vs.volume_id.private:
+ return True
+ return False
+
+def getMountDataSets():
+ dataSetInfo=[]
+ for volume in Volume.objects.all():
+ if not volume.private:
+ dataSetInfo.append({'DataSet': volume.name})
+
+ return dataSetInfo
+
+def getDeploymentSites():
+ deploymentList = Deployment.objects.all()
+ deploymentInfo = []
+ for entry in deploymentList:
+ deploymentInfo.append({'DeploymentSite':entry.name})
+ return deploymentInfo
+
+class TenantDeleteSliceView(View):
+ def post(self,request):
+ if request.user.isReadOnlyUser():
+ return HttpResponseForbidden("User is in read-only mode")
+ sliceName = request.POST.get("sliceName",None)
+ slice = Slice.objects.get(name=sliceName)
+ #print slice, slice.id
+ sliceToDel=Slice(name=sliceName, id=slice.id)
+ sliceToDel.delete()
+ return HttpResponse(json.dumps("Slice deleted"), mimetype='application/javascript')
+
+class TenantAddOrRemoveSliverView(View):
+ """ Add or remove slivers from a Slice
+
+ Arguments:
+ siteName - name of site. If not specified, PlanetStack will pick the
+ best site.,
+ actionToDo - [add | rem]
+ count - number of slivers to add or remove
+ sliceName - name of slice
+ noAct - if set, no changes will be made to db, but result will still
+ show which sites would have been modified.
+
+ Returns:
+ Dictionary of sites that were modified, and the count of nodes
+ that were added or removed at each site.
+ """
+ def post(self, request, *args, **kwargs):
+ siteName = request.POST.get("siteName", None)
+ actionToDo = request.POST.get("actionToDo", None)
+ count = int(request.POST.get("count","0"))
+ sliceName = request.POST.get("slice", None)
+ noAct = request.POST.get("noAct", False)
+
+ if not sliceName:
+ return HttpResponseServerError("No slice name given")
+
+ slice = Slice.objects.get(name=sliceName)
+
+ if siteName:
+ siteList = [Site.objects.get(name=siteName)]
+ else:
+ siteList = None
+
+ if (actionToDo == "add"):
+ user_ip = request.GET.get("ip", get_ip(request))
+ if (siteList is None):
+ siteList = tenant_pick_sites(user, user_ip, slice, count)
+
+ sitesChanged = slice_increase_slivers(request.user, user_ip, siteList, slice, count, noAct)
+ elif (actionToDo == "rem"):
+ sitesChanged = slice_decrease_slivers(request.user, siteList, slice, count, noAct)
+ else:
+ return HttpResponseServerError("Unknown actionToDo %s" % actionToDo)
+
+ return HttpResponse(json.dumps(sitesChanged), mimetype='application/javascript')
+
+ def get(self, request, *args, **kwargs):
+ request.POST = request.GET
+ return self.post(request, *args, **kwargs) # for testing REST in browser
+ #return HttpResponseServerError("GET is not supported")
+
+class TenantPickSitesView(View):
+ """ primarily just for testing purposes """
+ def get(self, request, *args, **kwargs):
+ count = request.GET.get("count","0")
+ slice = request.GET.get("slice",None)
+ if slice:
+ slice = Slice.objects.get(name=slice)
+ ip = request.GET.get("ip", get_ip(request))
+ sites = tenant_pick_sites(request.user, user_ip=ip, count=0, slice=slice)
+ sites = [x.name for x in sites]
+ return HttpResponse(json.dumps(sites), mimetype='application/javascript')
+
+def siteSortKey(site, slice=None, count=None, lat=None, lon=None):
+ # try to pick a site we're already using
+ has_slivers_here=False
+ if slice:
+ for sliver in slice.slivers.all():
+ if sliver.node.site.name == site.name:
+ has_slivers_here=True
+
+ # Haversine method
+ d = haversine(site.location.latitude, site.location.longitude, lat, lon)
+
+ return (-has_slivers_here, d)
+
+def tenant_pick_sites(user, user_ip=None, slice=None, count=None):
+ """ Returns list of sites, sorted from most favorable to least favorable """
+ lat=None
+ lon=None
+ try:
+ client_geo = GeoIP().city(user_ip)
+ if client_geo:
+ lat=float(client_geo["latitude"])
+ lon=float(client_geo["longitude"])
+ except:
+ print "exception in geo code"
+ traceback.print_exc()
+
+ sites = Site.objects.all()
+ sites = [x for x in sites if x.name in BLESSED_SITES]
+ sites = sorted(sites, key=functools.partial(siteSortKey, slice=slice, count=count, lat=lat, lon=lon))
+
+ return sites
+
+class TenantViewData(View):
+ def get(self, request, **kwargs):
+ return HttpResponse(json.dumps(getTenantSliceInfo(request.user, True)), mimetype='application/javascript')
diff --git a/planetstack/core/dashboard/views/test.py b/planetstack/core/dashboard/views/test.py
new file mode 100644
index 0000000..24380c5
--- /dev/null
+++ b/planetstack/core/dashboard/views/test.py
@@ -0,0 +1,5 @@
+from view_common import *
+
+class DashboardUserSiteView(View):
+ def get(self, request, **kwargs):
+ return HttpResponse(json.dumps(getDashboardContext(request.user, tableFormat=True)), mimetype='application/javascript')
diff --git a/planetstack/core/dashboard/views/view_common.py b/planetstack/core/dashboard/views/view_common.py
new file mode 100644
index 0000000..4efb8c2
--- /dev/null
+++ b/planetstack/core/dashboard/views/view_common.py
@@ -0,0 +1,254 @@
+import os
+import sys
+from django.views.generic import TemplateView, View
+import datetime
+from pprint import pprint
+import json
+from syndicate.models import *
+from core.models import *
+from hpc.models import ContentProvider
+from operator import attrgetter
+from django import template
+from django.views.decorators.csrf import csrf_exempt
+from django.http import HttpResponse, HttpResponseServerError, HttpResponseForbidden
+from django.core import urlresolvers
+from django.contrib.gis.geoip import GeoIP
+from django.db.models import Q
+from ipware.ip import get_ip
+from operator import itemgetter, attrgetter
+import traceback
+import math
+
+if os.path.exists("/home/smbaker/projects/vicci/cdn/bigquery"):
+ sys.path.append("/home/smbaker/projects/vicci/cdn/bigquery")
+else:
+ sys.path.append("/opt/planetstack/hpc_wizard")
+from planetstack_analytics import DoPlanetStackAnalytics, PlanetStackAnalytics, RED_LOAD, BLUE_LOAD
+
+def getDashboardContext(user, context={}, tableFormat = False):
+ context = {}
+
+ userSliceData = getSliceInfo(user)
+ if (tableFormat):
+ context['userSliceInfo'] = userSliceTableFormatter(userSliceData)
+ else:
+ context['userSliceInfo'] = userSliceData
+ context['cdnData'] = getCDNOperatorData(wait=False)
+ context['cdnContentProviders'] = getCDNContentProviderData()
+
+ (dashboards, unusedDashboards)= getDashboards(user)
+ unusedDashboards=[x for x in unusedDashboards if x!="Customize"]
+ context['dashboards'] = dashboards
+ context['unusedDashboards'] = unusedDashboards
+
+ return context
+
+def getDashboards(user):
+ dashboards = user.get_dashboards()
+
+ dashboard_names = [d.name for d in dashboards]
+
+ unused_dashboard_names = []
+ for dashboardView in DashboardView.objects.all():
+ if not dashboardView.name in dashboard_names:
+ unused_dashboard_names.append(dashboardView.name)
+
+ return (dashboard_names, unused_dashboard_names)
+
+def getSliceInfo(user):
+ sliceList = Slice.objects.all()
+ slicePrivs = SlicePrivilege.objects.filter(user=user)
+ userSliceInfo = []
+ for entry in slicePrivs:
+
+ slicename = Slice.objects.get(id=entry.slice.id).name
+ slice = Slice.objects.get(name=Slice.objects.get(id=entry.slice.id).name)
+ sliverList=Sliver.objects.all()
+ sites_used = {}
+ for sliver in slice.slivers.all():
+ #sites_used['deploymentSites'] = sliver.node.deployment.name
+ # sites_used[sliver.image.name] = sliver.image.name
+ sites_used[sliver.node.site.name] = sliver.numberCores
+ sliceid = Slice.objects.get(id=entry.slice.id).id
+ try:
+ sliverList = Sliver.objects.filter(slice=entry.slice.id)
+ siteList = {}
+ for x in sliverList:
+ if x.node.site not in siteList:
+ siteList[x.node.site] = 1
+ slivercount = len(sliverList)
+ sitecount = len(siteList)
+ except:
+ traceback.print_exc()
+ slivercount = 0
+ sitecount = 0
+
+ userSliceInfo.append({'slicename': slicename, 'sliceid':sliceid,
+ 'sitesUsed':sites_used,
+ 'role': SliceRole.objects.get(id=entry.role.id).role,
+ 'slivercount': slivercount,
+ 'sitecount':sitecount})
+
+ return userSliceInfo
+
+def getCDNContentProviderData():
+ cps = []
+ for dm_cp in ContentProvider.objects.all():
+ cp = {"name": dm_cp.name,
+ "account": dm_cp.account}
+ cps.append(cp)
+
+ return cps
+
+def getCDNOperatorData(randomizeData = False, wait=True):
+ HPC_SLICE_NAME = "HyperCache"
+
+ bq = PlanetStackAnalytics()
+
+ rows = bq.get_cached_query_results(bq.compose_cached_query(), wait)
+
+ # wait=False on the first time the Dashboard is opened. This means we might
+ # not have any rows yet. The dashboard code polls every 30 seconds, so it
+ # will eventually pick them up.
+
+ if rows:
+ rows = bq.postprocess_results(rows, filter={"event": "hpc_heartbeat"}, maxi=["cpu"], count=["hostname"], computed=["bytes_sent/elapsed"], groupBy=["Time","site"], maxDeltaTime=80)
+
+ # dictionaryize the statistics rows by site name
+ stats_rows = {}
+ for row in rows:
+ stats_rows[row["site"]] = row
+ else:
+ stats_rows = {}
+
+ slice = Slice.objects.filter(name=HPC_SLICE_NAME)
+ if slice:
+ slice_slivers = list(slice[0].slivers.all())
+ else:
+ slice_slivers = []
+
+ new_rows = {}
+ for site in Site.objects.all():
+ # compute number of slivers allocated in the data model
+ allocated_slivers = 0
+ for sliver in slice_slivers:
+ if sliver.node.site == site:
+ allocated_slivers = allocated_slivers + 1
+
+ stats_row = stats_rows.get(site.name,{})
+
+ max_cpu = stats_row.get("max_avg_cpu", stats_row.get("max_cpu",0))
+ cpu=float(max_cpu)/100.0
+ hotness = max(0.0, ((cpu*RED_LOAD) - BLUE_LOAD)/(RED_LOAD-BLUE_LOAD))
+
+ # format it to what that CDN Operations View is expecting
+ new_row = {"lat": float(site.location.longitude),
+ "long": float(site.location.longitude),
+ "lat": float(site.location.latitude),
+ "health": 0,
+ "numNodes": int(site.nodes.count()),
+ "activeHPCSlivers": int(stats_row.get("count_hostname", 0)), # measured number of slivers, from bigquery statistics
+ "numHPCSlivers": allocated_slivers, # allocated number of slivers, from data model
+ "siteUrl": str(site.site_url),
+ "bandwidth": stats_row.get("sum_computed_bytes_sent_div_elapsed",0),
+ "load": max_cpu,
+ "hot": float(hotness)}
+ new_rows[str(site.name)] = new_row
+
+ # get rid of sites with 0 slivers that overlap other sites with >0 slivers
+ for (k,v) in new_rows.items():
+ bad=False
+ if v["numHPCSlivers"]==0:
+ for v2 in new_rows.values():
+ if (v!=v2) and (v2["numHPCSlivers"]>=0):
+ d = haversine(v["lat"],v["long"],v2["lat"],v2["long"])
+ if d<100:
+ bad=True
+ if bad:
+ del new_rows[k]
+
+ return new_rows
+
+def slice_increase_slivers(user, user_ip, siteList, slice, count, noAct=False):
+ sitesChanged = {}
+
+ # let's compute how many slivers are in use in each node of each site
+ for site in siteList:
+ site.nodeList = list(site.nodes.all())
+ for node in site.nodeList:
+ node.sliverCount = 0
+ for sliver in node.slivers.all():
+ if sliver.slice.id == slice.id:
+ node.sliverCount = node.sliverCount + 1
+
+ # Allocate slivers to nodes
+ # for now, assume we want to allocate all slivers from the same site
+ nodes = siteList[0].nodeList
+ while (count>0):
+ # Sort the node list by number of slivers per node, then pick the
+ # node with the least number of slivers.
+ nodes = sorted(nodes, key=attrgetter("sliverCount"))
+ node = nodes[0]
+
+ print "adding sliver at node", node.name, "of site", node.site.name
+
+ if not noAct:
+ sliver = Sliver(name=node.name,
+ slice=slice,
+ node=node,
+ image = Image.objects.all()[0],
+ creator = User.objects.get(email=user),
+ deploymentNetwork=node.deployment,
+ numberCores =1 )
+ sliver.save()
+
+ node.sliverCount = node.sliverCount + 1
+
+ count = count - 1
+
+ sitesChanged[node.site.name] = sitesChanged.get(node.site.name,0) + 1
+
+ return sitesChanged
+
+def slice_decrease_slivers(user, siteList, slice, count, noAct=False):
+ sitesChanged = {}
+ sliverList ={}
+ if siteList:
+ siteNames = [site.name for site in siteList]
+ else:
+ siteNames = None
+
+ for sliver in slice.slivers.all():
+ if(not siteNames) or (sliver.node.site.name in siteNames):
+ node = sliver.node
+ sliverList[sliver.name]=node.name
+
+ for key in sliverList:
+ if count>0:
+ sliver = Sliver.objects.filter(name=key)[0]
+ sliver.delete()
+ print "deleting sliver",sliverList[key],"at node",sliver.node.name
+ count=count-1
+ sitesChanged[sliver.node.site.name] = sitesChanged.get(sliver.node.site.name,0) - 1
+
+ return sitesChanged
+
+def haversine(site_lat, site_lon, lat, lon):
+ d=0
+ if lat and lon and site_lat and site_lon:
+ site_lat = float(site_lat)
+ site_lon = float(site_lon)
+ lat = float(lat)
+ lon = float(lon)
+ R = 6378.1
+ a = math.sin( math.radians((lat - site_lat)/2.0) )**2 + math.cos( math.radians(lat) )*math.cos( math.radians(site_lat) )*(math.sin( math.radians((lon - site_lon)/2.0 ) )**2)
+ c = 2 * math.atan2( math.sqrt(a), math.sqrt(1 - a) )
+ d = R * c
+
+ return d
+
+def userSliceTableFormatter(data):
+ formattedData = {
+ 'rows' : data
+ }
+ return formattedData
diff --git a/planetstack/core/fixtures/demo_data.json b/planetstack/core/fixtures/demo_data.json
index 8905b47..36ae176 100644
--- a/planetstack/core/fixtures/demo_data.json
+++ b/planetstack/core/fixtures/demo_data.json
@@ -7,9 +7,10 @@
"description": "Used to help accelerate delivery of content through the CDN.",
"created": "2013-11-26T12:45:24.212Z",
"enabled": true,
+ "name": "HPC Service",
"versionNumber": "1.0",
"published": true,
- "name": "HPC Service"
+ "enacted": null
}
},
{
@@ -20,9 +21,10 @@
"description": "Service to help load balance and direct traffic flow to content within the CDN",
"created": "2013-11-26T12:45:59.003Z",
"enabled": true,
+ "name": "Request Router Service",
"versionNumber": "1.0",
"published": true,
- "name": "Request Router Service"
+ "enacted": null
}
},
{
@@ -33,9 +35,10 @@
"description": "Syndicate Shared Filesystem.",
"created": "2013-12-04T22:51:07.137Z",
"enabled": true,
+ "name": "Syndicate",
"versionNumber": "",
"published": true,
- "name": "Syndicate"
+ "enacted": null
}
},
{
@@ -46,9 +49,52 @@
"description": "A provisioning service for long-term experiments.",
"created": "2013-12-13T21:48:58.304Z",
"enabled": true,
+ "name": "Raven",
"versionNumber": "1.0",
"published": true,
- "name": "Raven"
+ "enacted": null
+ }
+},
+{
+ "pk": 11,
+ "model": "core.service",
+ "fields": {
+ "updated": "2014-05-20T18:56:51.847Z",
+ "description": "Cassandra distributed database management system",
+ "created": "2014-05-20T18:56:51.847Z",
+ "enabled": true,
+ "name": "Cassandra",
+ "versionNumber": "2.0.7",
+ "published": true,
+ "enacted": null
+ }
+},
+{
+ "pk": 12,
+ "model": "core.service",
+ "fields": {
+ "updated": "2014-05-20T18:57:33.778Z",
+ "description": "KairosDB Time Series Database Service",
+ "created": "2014-05-20T18:57:33.778Z",
+ "enabled": true,
+ "name": "KairosDB",
+ "versionNumber": "0.9.3",
+ "published": true,
+ "enacted": null
+ }
+},
+{
+ "pk": 13,
+ "model": "core.service",
+ "fields": {
+ "updated": "2014-05-20T18:58:53.563Z",
+ "description": "Nagios Monitoring Service",
+ "created": "2014-05-20T18:58:53.563Z",
+ "enabled": true,
+ "name": "Nagios",
+ "versionNumber": "4.0.6",
+ "published": true,
+ "enacted": null
}
},
{
@@ -58,7 +104,6 @@
"updated": "2013-12-17T18:00:47.910Z",
"name": "Stanford",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.stanford.edu/",
@@ -66,10 +111,8 @@
"location": "37.4294,-122.17200000000003",
"latitude": null,
"is_public": true,
- "deployments": [
- 5
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -79,7 +122,6 @@
"updated": "2013-12-17T18:00:38.431Z",
"name": "Washington",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "https://www.washington.edu/",
@@ -87,10 +129,8 @@
"location": "47.6531,-122.31299999999999",
"latitude": null,
"is_public": true,
- "deployments": [
- 6
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -100,7 +140,6 @@
"updated": "2013-12-17T18:00:28.495Z",
"name": "Princeton",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://princeton.edu/",
@@ -108,10 +147,8 @@
"location": "40.3502,-74.6524",
"latitude": null,
"is_public": true,
- "deployments": [
- 7
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -121,7 +158,6 @@
"updated": "2013-12-17T18:00:18.964Z",
"name": "GeorgiaTech",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.gatech.edu/",
@@ -129,10 +165,8 @@
"location": "33.7772,-84.39760000000001",
"latitude": null,
"is_public": true,
- "deployments": [
- 8
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -142,7 +176,6 @@
"updated": "2013-12-17T18:00:07.704Z",
"name": "MaxPlanck",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.mpi-sws.mpg.de/",
@@ -150,10 +183,8 @@
"location": "49.14,6.588999999999942",
"latitude": null,
"is_public": true,
- "deployments": [
- 9
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -163,7 +194,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Atlanta",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -171,10 +201,8 @@
"location": "33.0075,-84.0038",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -184,7 +212,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Chicago",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -192,10 +219,8 @@
"location": "41.0085,-87.0065",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -205,7 +230,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Houston",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -213,10 +237,8 @@
"location": "29.0077,-95.0037",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -226,7 +248,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Kansas City",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -234,10 +255,8 @@
"location": "39.0012,-94.0063",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -247,7 +266,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Los Angeles",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -255,10 +273,8 @@
"location": "33.2505,-117.503",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -268,7 +284,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 New York",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -276,10 +291,8 @@
"location": "40.72,-73.99",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -289,7 +302,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Salt Lake City",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -297,31 +309,26 @@
"location": "40.7659,-111.844",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
"pk": 20,
"model": "core.site",
"fields": {
- "updated": "2013-06-21T21:17:13.982Z",
+ "updated": "2014-03-22T06:27:07.824Z",
"name": "I2 Seattle",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
- "site_url": "http://www.internet2.edu",
+ "site_url": "http://www.internet2.edu/",
"login_base": "i2seat",
- "location": "47.6531,-122.313",
+ "location": "47.6531,-122.31299999999999",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -331,7 +338,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Washington DC",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -339,10 +345,8 @@
"location": "38.009,-77.0003",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -352,7 +356,6 @@
"updated": "2013-12-17T17:30:14.491Z",
"name": "ON.Lab",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.onlab.us/",
@@ -360,15 +363,8 @@
"location": "37.452955,-122.18176599999998",
"latitude": null,
"is_public": true,
- "deployments": [
- 5,
- 6,
- 7,
- 8,
- 9,
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -378,7 +374,6 @@
"updated": "2013-12-17T18:21:43.870Z",
"name": "I2 Singapore",
"created": "2013-12-17T17:08:49.669Z",
- "tenant_id": null,
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu/",
@@ -386,10 +381,8 @@
"location": "1.33544,103.88999999999999",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -399,7 +392,6 @@
"updated": "2013-12-17T18:08:01.373Z",
"name": "Arizona",
"created": "2013-12-17T18:07:14.190Z",
- "tenant_id": null,
"enabled": true,
"longitude": null,
"site_url": "http://www.cs.arizona.edu/",
@@ -407,8 +399,8 @@
"location": "32.2333,-110.94799999999998",
"latitude": null,
"is_public": true,
- "deployments": [],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -416,15 +408,47 @@
"model": "core.siterole",
"fields": {
"updated": "2013-12-17T18:08:54.842Z",
+ "enacted": null,
"role": "pi",
"created": "2013-12-17T18:08:54.842Z"
}
},
{
+ "pk": 2,
+ "model": "core.siterole",
+ "fields": {
+ "updated": "2014-04-22T11:34:09.655Z",
+ "enacted": null,
+ "role": "admin",
+ "created": "2014-04-22T11:34:09.655Z"
+ }
+},
+{
+ "pk": 3,
+ "model": "core.siterole",
+ "fields": {
+ "updated": "2014-04-22T11:34:27.403Z",
+ "enacted": null,
+ "role": "tech",
+ "created": "2014-04-22T11:34:27.403Z"
+ }
+},
+{
+ "pk": 4,
+ "model": "core.siterole",
+ "fields": {
+ "updated": "2014-04-22T11:34:39.770Z",
+ "enacted": null,
+ "role": "billing",
+ "created": "2014-04-22T11:34:39.770Z"
+ }
+},
+{
"pk": 5,
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "US-Stanford",
"created": "2013-04-03T22:57:23.015Z"
}
@@ -434,6 +458,7 @@
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "US-Washington",
"created": "2013-04-03T22:57:23.015Z"
}
@@ -443,6 +468,7 @@
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "US-Princeton",
"created": "2013-04-03T22:57:23.015Z"
}
@@ -452,6 +478,7 @@
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "US-GeorgiaTech",
"created": "2013-04-03T22:57:23.015Z"
}
@@ -461,6 +488,7 @@
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "EU-MaxPlanck",
"created": "2013-04-03T22:57:23.015Z"
}
@@ -470,11 +498,351 @@
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "Internet2",
"created": "2013-04-03T22:57:23.015Z"
}
},
{
+ "pk": 11,
+ "model": "core.deployment",
+ "fields": {
+ "updated": "2014-05-22T22:49:27.623Z",
+ "enacted": null,
+ "name": "Amazon EC2",
+ "created": "2014-05-22T22:49:27.623Z"
+ }
+},
+{
+ "pk": 1,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.453Z",
+ "created": "2014-05-07T23:52:01.453Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 2,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.455Z",
+ "created": "2014-05-07T23:52:01.455Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 3,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.456Z",
+ "created": "2014-05-07T23:52:01.456Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 4,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.457Z",
+ "created": "2014-05-07T23:52:01.456Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 5,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.457Z",
+ "created": "2014-05-07T23:52:01.457Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 6,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.458Z",
+ "created": "2014-05-07T23:52:01.458Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 7,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:00:37.305Z",
+ "created": "2014-05-08T00:00:37.305Z",
+ "tenant_id": null,
+ "site": 23,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 8,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:01:18.181Z",
+ "created": "2014-05-08T00:01:18.181Z",
+ "tenant_id": null,
+ "site": 21,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 9,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:01:29.768Z",
+ "created": "2014-05-08T00:01:29.768Z",
+ "tenant_id": null,
+ "site": 20,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 10,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:01:52.173Z",
+ "created": "2014-05-08T00:01:52.173Z",
+ "tenant_id": null,
+ "site": 19,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 11,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:02:03.435Z",
+ "created": "2014-05-08T00:02:03.435Z",
+ "tenant_id": null,
+ "site": 18,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 12,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:02:16.038Z",
+ "created": "2014-05-08T00:02:16.038Z",
+ "tenant_id": null,
+ "site": 17,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 13,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:02:33.626Z",
+ "created": "2014-05-08T00:02:33.626Z",
+ "tenant_id": null,
+ "site": 16,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 14,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:02:46.549Z",
+ "created": "2014-05-08T00:02:46.549Z",
+ "tenant_id": null,
+ "site": 15,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 15,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:03:01.445Z",
+ "created": "2014-05-08T00:03:01.445Z",
+ "tenant_id": null,
+ "site": 14,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 16,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:03:18.238Z",
+ "created": "2014-05-08T00:03:18.238Z",
+ "tenant_id": null,
+ "site": 13,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 17,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:03:32.156Z",
+ "created": "2014-05-08T00:03:32.156Z",
+ "tenant_id": null,
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 18,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:03:45.449Z",
+ "created": "2014-05-08T00:03:45.448Z",
+ "tenant_id": null,
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 19,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:03:59.510Z",
+ "created": "2014-05-08T00:03:59.510Z",
+ "tenant_id": null,
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 20,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:04:12.516Z",
+ "created": "2014-05-08T00:04:12.516Z",
+ "tenant_id": null,
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 21,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:04:25.576Z",
+ "created": "2014-05-08T00:04:25.576Z",
+ "tenant_id": null,
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 1,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:developer",
+ "updated": "2014-05-19T22:11:11.408Z",
+ "enacted": null,
+ "name": "Developer",
+ "created": "2014-05-19T22:11:11.408Z"
+ }
+},
+{
+ "pk": 2,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:cdnoperations",
+ "updated": "2014-05-19T22:11:32.782Z",
+ "enacted": null,
+ "name": "CDN Operations",
+ "created": "2014-05-19T22:11:32.781Z"
+ }
+},
+{
+ "pk": 3,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:tenant",
+ "updated": "2014-05-19T22:11:46.731Z",
+ "enacted": null,
+ "name": "Tenant",
+ "created": "2014-05-19T22:11:46.731Z"
+ }
+},
+{
+ "pk": 4,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:hpc_historical",
+ "updated": "2014-05-19T22:11:59.956Z",
+ "enacted": null,
+ "name": "Historical",
+ "created": "2014-05-19T22:11:59.956Z"
+ }
+},
+{
+ "pk": 5,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:customize",
+ "updated": "2014-05-20T00:32:44.462Z",
+ "enacted": null,
+ "name": "Customize",
+ "created": "2014-05-20T00:32:44.462Z"
+ }
+},
+{
+ "pk": 6,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:slice_interactions",
+ "updated": "2014-05-20T00:33:32.454Z",
+ "enacted": null,
+ "name": "Slice Interactions",
+ "created": "2014-05-20T00:33:32.454Z"
+ }
+},
+{
+ "pk": 7,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:cdn_nodes",
+ "updated": "2014-05-26T23:12:15.410Z",
+ "enacted": null,
+ "name": "CDN Nodes",
+ "created": "2014-05-20T00:33:52.101Z"
+ }
+},
+{
"pk": 1,
"model": "core.user",
"fields": {
@@ -489,9 +857,8 @@
"is_active": true,
"site": null,
"phone": null,
- "kuser_id": null,
"is_staff": true,
- "last_login": "2013-12-13T05:21:52.645Z",
+ "last_login": "2014-03-23T13:57:56.529Z",
"timezone": "America/New_York",
"is_admin": true,
"password": "pbkdf2_sha256$10000$v5qKhIyhSQ2N$V8vh2mkqYdjQib6d2jBkpwV57eMBfhd/9eiXqaDLUWg=",
@@ -503,24 +870,23 @@
"pk": 2,
"model": "core.user",
"fields": {
- "username": "tony@onlab.us",
- "public_key": null,
- "updated": "2013-09-22T21:47:30.993Z",
+ "username": "tmack@cs.princeton.edu",
+ "public_key": "",
+ "updated": "2014-03-23T23:10:57.378Z",
"is_readonly": false,
"firstname": "Tony",
"user_url": null,
"lastname": "Mack",
"created": "2013-09-22T21:47:30.959Z",
"is_active": true,
- "site": 22,
- "phone": null,
- "kuser_id": null,
+ "site": 10,
+ "phone": "",
"is_staff": true,
"last_login": "2013-12-14T03:21:24.872Z",
"timezone": "America/New_York",
"is_admin": true,
"password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=",
- "email": "tony@onlab.us",
+ "email": "tmack@cs.princeton.edu",
"enacted": null
}
},
@@ -528,24 +894,23 @@
"pk": 3,
"model": "core.user",
"fields": {
- "username": "mike@onlab.us",
- "public_key": null,
- "updated": "2013-09-22T21:47:30.993Z",
+ "username": "mhw@cs.princeton.edu",
+ "public_key": "",
+ "updated": "2014-03-23T23:10:01.387Z",
"is_readonly": false,
"firstname": "Mike",
"user_url": null,
"lastname": "Wawrzoniak",
"created": "2013-09-22T21:47:30.959Z",
"is_active": true,
- "site": 22,
- "phone": null,
- "kuser_id": null,
+ "site": 10,
+ "phone": "",
"is_staff": true,
"last_login": "2013-12-04T20:46:15.904Z",
"timezone": "America/New_York",
"is_admin": true,
"password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=",
- "email": "mike@onlab.us",
+ "email": "mhw@cs.princeton.edu",
"enacted": null
}
},
@@ -553,24 +918,23 @@
"pk": 4,
"model": "core.user",
"fields": {
- "username": "andy@onlab.us",
- "public_key": null,
- "updated": "2013-09-22T21:47:30.993Z",
+ "username": "acb@cs.princeton.edu",
+ "public_key": "",
+ "updated": "2014-03-23T23:09:34.844Z",
"is_readonly": false,
"firstname": "Andy",
"user_url": null,
"lastname": "Bavier",
"created": "2013-09-22T21:47:30.959Z",
"is_active": true,
- "site": 22,
- "phone": null,
- "kuser_id": null,
+ "site": 10,
+ "phone": "",
"is_staff": true,
- "last_login": "2013-12-17T18:22:01.970Z",
+ "last_login": "2014-05-12T19:20:28.533Z",
"timezone": "America/New_York",
"is_admin": true,
"password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=",
- "email": "andy@onlab.us",
+ "email": "acb@cs.princeton.edu",
"enacted": null
}
},
@@ -578,24 +942,23 @@
"pk": 5,
"model": "core.user",
"fields": {
- "username": "sapan@onlab.us",
- "public_key": null,
- "updated": "2013-09-22T21:47:30.993Z",
+ "username": "sapanb@cs.princeton.edu",
+ "public_key": "",
+ "updated": "2014-03-23T23:10:35.450Z",
"is_readonly": false,
"firstname": "Sapan",
"user_url": null,
"lastname": "Bhatia",
"created": "2013-09-22T21:47:30.959Z",
"is_active": true,
- "site": 22,
- "phone": null,
- "kuser_id": null,
+ "site": 10,
+ "phone": "",
"is_staff": true,
- "last_login": "2013-12-17T16:21:46.493Z",
+ "last_login": "2014-05-09T18:41:01.026Z",
"timezone": "America/New_York",
"is_admin": true,
"password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=",
- "email": "sapan@onlab.us",
+ "email": "sapanb@cs.princeton.edu",
"enacted": null
}
},
@@ -614,9 +977,8 @@
"is_active": true,
"site": 10,
"phone": "",
- "kuser_id": null,
"is_staff": true,
- "last_login": "2013-09-22T21:48:01.047Z",
+ "last_login": "2014-05-09T02:08:32.840Z",
"timezone": "America/New_York",
"is_admin": true,
"password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=",
@@ -630,7 +992,7 @@
"fields": {
"username": "llp@onlab.us",
"public_key": "",
- "updated": "2013-12-04T20:47:03.679Z",
+ "updated": "2014-03-23T23:11:22.436Z",
"is_readonly": false,
"firstname": "Larry",
"user_url": null,
@@ -639,12 +1001,11 @@
"is_active": true,
"site": 22,
"phone": "",
- "kuser_id": null,
"is_staff": true,
- "last_login": "2013-12-17T17:29:10.464Z",
+ "last_login": "2014-05-10T15:19:58.401Z",
"timezone": "America/New_York",
"is_admin": true,
- "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=",
+ "password": "pbkdf2_sha256$10000$EOrqG6KzVO8z$4jSJMN/35PKPmJkDEHjAY1c/mDpBfoW1U8XAfk1eDLk=",
"email": "llp@onlab.us",
"enacted": null
}
@@ -664,9 +1025,8 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
- "last_login": "2013-12-12T17:31:25.520Z",
+ "last_login": "2014-05-26T23:11:54.353Z",
"timezone": "America/New_York",
"is_admin": true,
"password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=",
@@ -689,7 +1049,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-09-22T21:48:01.047Z",
"timezone": "America/New_York",
@@ -714,7 +1073,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-09-22T21:48:01.047Z",
"timezone": "America/New_York",
@@ -739,7 +1097,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-09-22T21:48:01.047Z",
"timezone": "America/New_York",
@@ -764,7 +1121,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-09-22T21:48:01.047Z",
"timezone": "America/New_York",
@@ -789,7 +1145,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-09-22T21:48:01.047Z",
"timezone": "America/New_York",
@@ -805,7 +1160,7 @@
"fields": {
"username": "demo@onlab.us",
"public_key": "",
- "updated": "2013-12-06T11:25:52.457Z",
+ "updated": "2014-05-23T22:03:14.065Z",
"is_readonly": true,
"firstname": "Demo",
"user_url": null,
@@ -814,9 +1169,8 @@
"is_active": true,
"site": 22,
"phone": "",
- "kuser_id": null,
"is_staff": true,
- "last_login": "2013-12-17T18:54:01.976Z",
+ "last_login": "2014-05-23T22:03:56.256Z",
"timezone": "America/New_York",
"is_admin": true,
"password": "pbkdf2_sha256$10000$jaLSTW2ksHEN$HDpjDKieFDjMvtV5wbF/ow3zfq8EqcFtNXLfuo+150s=",
@@ -839,7 +1193,6 @@
"is_active": true,
"site": 24,
"phone": "",
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-12-17T18:08:01.356Z",
"timezone": "America/New_York",
@@ -851,10 +1204,95 @@
},
{
"pk": 1,
+ "model": "core.userdashboardview",
+ "fields": {
+ "updated": "2014-05-23T22:03:14.097Z",
+ "created": "2014-05-23T22:03:14.097Z",
+ "dashboardView": 1,
+ "user": 14,
+ "order": 0,
+ "enacted": null
+ }
+},
+{
+ "pk": 2,
+ "model": "core.userdashboardview",
+ "fields": {
+ "updated": "2014-05-23T22:03:14.102Z",
+ "created": "2014-05-23T22:03:14.102Z",
+ "dashboardView": 2,
+ "user": 14,
+ "order": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 3,
+ "model": "core.userdashboardview",
+ "fields": {
+ "updated": "2014-05-23T22:03:14.106Z",
+ "created": "2014-05-23T22:03:14.106Z",
+ "dashboardView": 4,
+ "user": 14,
+ "order": 2,
+ "enacted": null
+ }
+},
+{
+ "pk": 4,
+ "model": "core.userdashboardview",
+ "fields": {
+ "updated": "2014-05-23T22:03:14.110Z",
+ "created": "2014-05-23T22:03:14.110Z",
+ "dashboardView": 6,
+ "user": 14,
+ "order": 3,
+ "enacted": null
+ }
+},
+{
+ "pk": 5,
+ "model": "core.userdashboardview",
+ "fields": {
+ "updated": "2014-05-23T22:03:14.115Z",
+ "created": "2014-05-23T22:03:14.115Z",
+ "dashboardView": 3,
+ "user": 14,
+ "order": 4,
+ "enacted": null
+ }
+},
+{
+ "pk": 6,
+ "model": "core.userdashboardview",
+ "fields": {
+ "updated": "2014-05-26T23:12:24.855Z",
+ "created": "2014-05-26T23:12:24.855Z",
+ "dashboardView": 3,
+ "user": 8,
+ "order": 0,
+ "enacted": null
+ }
+},
+{
+ "pk": 7,
+ "model": "core.userdashboardview",
+ "fields": {
+ "updated": "2014-05-26T23:12:24.895Z",
+ "created": "2014-05-26T23:12:24.895Z",
+ "dashboardView": 7,
+ "user": 8,
+ "order": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 1,
"model": "core.serviceclass",
"fields": {
"updated": "2013-05-10T23:30:52.931Z",
"membershipFee": 0,
+ "description": "Best Effort",
"membershipFeeMonths": 0,
"created": "2013-05-10T23:30:52.931Z",
"upgradeFrom": [
@@ -864,7 +1302,7 @@
"commitment": 0,
"name": "Best Effort",
"upgradeRequiresApproval": false,
- "description": "Best Effort"
+ "enacted": null
}
},
{
@@ -873,6 +1311,7 @@
"fields": {
"updated": "2013-05-10T23:35:51.694Z",
"membershipFee": 100,
+ "description": "Silver",
"membershipFeeMonths": 1,
"created": "2013-05-10T23:33:24.930Z",
"upgradeFrom": [
@@ -882,7 +1321,7 @@
"commitment": 365,
"name": "Silver",
"upgradeRequiresApproval": false,
- "description": "Silver"
+ "enacted": null
}
},
{
@@ -891,6 +1330,7 @@
"fields": {
"updated": "2013-05-10T23:34:01.320Z",
"membershipFee": 18000,
+ "description": "Gold",
"membershipFeeMonths": 12,
"created": "2013-05-10T23:34:01.320Z",
"upgradeFrom": [
@@ -900,217 +1340,2069 @@
"commitment": 365,
"name": "Gold",
"upgradeRequiresApproval": false,
- "description": "Gold"
+ "enacted": null
}
},
{
"pk": 4,
"model": "core.slice",
"fields": {
- "router_id": null,
- "updated": "2013-12-05T01:41:11.410Z",
+ "updated": "2014-03-23T23:13:28.743Z",
+ "imagePreference": "Ubuntu 12.04 LTS",
"name": "HyperCache",
"service": 3,
"created": "2013-04-03T23:14:11.072Z",
- "network_id": null,
- "tenant_id": "",
+ "slice_url": "",
+ "description": "HyperCache slice for HyperCache service.",
"serviceClass": 1,
"enabled": true,
"site": 22,
"omf_friendly": false,
- "subnet_id": null,
- "slice_url": "",
+ "network": "Private Only",
+ "max_slivers": 10,
+ "mountDataSets": "GenBank",
"creator": 1,
- "description": "HyperCache slice for HyperCache service."
+ "enacted": null
}
},
{
"pk": 6,
"model": "core.slice",
"fields": {
- "router_id": null,
- "updated": "2013-12-05T01:41:23.032Z",
+ "updated": "2014-03-23T23:12:27.541Z",
+ "imagePreference": "Ubuntu 12.04 LTS",
"name": "Syndicate",
"service": 5,
"created": "2013-04-03T23:14:11.072Z",
- "network_id": null,
- "tenant_id": "",
+ "slice_url": "",
+ "description": "",
"serviceClass": 1,
"enabled": true,
- "site": 22,
+ "site": 10,
"omf_friendly": false,
- "subnet_id": null,
- "slice_url": "",
+ "network": "Private Only",
+ "max_slivers": 10,
+ "mountDataSets": "GenBank",
"creator": 1,
- "description": ""
+ "enacted": null
}
},
{
"pk": 8,
"model": "core.slice",
"fields": {
- "router_id": null,
- "updated": "2013-12-12T18:11:27.780Z",
+ "updated": "2014-03-23T23:17:33.686Z",
+ "imagePreference": "Ubuntu 12.04 LTS",
"name": "DnsRedir",
"service": 4,
"created": "2013-12-04T22:48:35.584Z",
- "network_id": null,
- "tenant_id": "",
+ "slice_url": "",
+ "description": "DNS Redirection slice for RequestRouter service.",
"serviceClass": 2,
"enabled": true,
"site": 22,
"omf_friendly": false,
- "subnet_id": null,
- "slice_url": "",
+ "network": "Private Only",
+ "max_slivers": 10,
+ "mountDataSets": "GenBank",
"creator": 8,
- "description": "DNS Redirection slice for RequestRouter service."
+ "enacted": null
}
},
{
"pk": 9,
"model": "core.slice",
"fields": {
- "router_id": null,
- "updated": "2013-12-12T18:12:41.375Z",
+ "updated": "2014-03-23T23:18:00.528Z",
+ "imagePreference": "Ubuntu 12.04 LTS",
"name": "DnsDemux",
"service": 4,
"created": "2013-12-04T22:49:23.051Z",
- "network_id": null,
- "tenant_id": "",
+ "slice_url": "",
+ "description": "DNS Demultiplexing slice for RequestRouter service. ",
"serviceClass": 2,
"enabled": true,
"site": 22,
"omf_friendly": false,
- "subnet_id": null,
- "slice_url": "",
+ "network": "Private Only",
+ "max_slivers": 10,
+ "mountDataSets": "GenBank",
"creator": 8,
- "description": "DNS Demultiplexing slice for RequestRouter service. "
+ "enacted": null
}
},
{
"pk": 10,
"model": "core.slice",
"fields": {
- "router_id": null,
- "updated": "2013-12-09T14:19:28.458Z",
+ "updated": "2014-03-23T23:19:56.253Z",
+ "imagePreference": "Ubuntu 12.04 LTS",
"name": "Infrastructure",
"service": null,
"created": "2013-12-09T14:13:15.392Z",
- "network_id": null,
- "tenant_id": "",
+ "slice_url": "",
+ "description": "",
"serviceClass": 1,
"enabled": true,
"site": 22,
"omf_friendly": false,
- "subnet_id": null,
- "slice_url": "",
- "creator": null,
- "description": ""
+ "network": "Private Only",
+ "max_slivers": 10,
+ "mountDataSets": "GenBank",
+ "creator": 1,
+ "enacted": null
}
},
{
"pk": 11,
"model": "core.slice",
"fields": {
- "router_id": null,
- "updated": "2013-12-17T18:09:29.065Z",
+ "updated": "2014-03-23T23:15:29.953Z",
+ "imagePreference": "Ubuntu 12.04 LTS",
"name": "Stork",
"service": 8,
"created": "2013-12-13T21:49:59.476Z",
- "network_id": null,
- "tenant_id": "",
+ "slice_url": "",
+ "description": "The Stork Package Management Service",
"serviceClass": 1,
"enabled": true,
"site": 24,
"omf_friendly": false,
- "subnet_id": null,
- "slice_url": "",
- "creator": null,
- "description": "The Stork Package Management Service"
+ "network": "Private Only",
+ "max_slivers": 10,
+ "mountDataSets": "GenBank",
+ "creator": 1,
+ "enacted": null
}
},
{
"pk": 12,
"model": "core.slice",
"fields": {
- "router_id": null,
- "updated": "2013-12-17T18:09:20.587Z",
+ "updated": "2014-03-23T23:16:01.742Z",
+ "imagePreference": "Ubuntu 12.04 LTS",
"name": "Owl",
"service": 8,
"created": "2013-12-13T21:52:15.590Z",
- "network_id": null,
- "tenant_id": "",
+ "slice_url": "",
+ "description": "The Owl Data Collection service",
"serviceClass": 1,
"enabled": true,
"site": 24,
"omf_friendly": false,
- "subnet_id": null,
- "slice_url": "",
- "creator": null,
- "description": "The Owl Data Collection service"
+ "network": "Private Only",
+ "max_slivers": 10,
+ "mountDataSets": "GenBank",
+ "creator": 1,
+ "enacted": null
}
},
{
"pk": 13,
"model": "core.slice",
"fields": {
- "router_id": null,
- "updated": "2013-12-13T21:59:36.718Z",
+ "updated": "2014-03-23T23:15:02.712Z",
+ "imagePreference": "Ubuntu 12.04 LTS",
"name": "Hadoop",
"service": null,
"created": "2013-12-13T21:54:20.895Z",
- "network_id": null,
- "tenant_id": "",
+ "slice_url": "",
+ "description": "Hadoop map-reduce service",
"serviceClass": 2,
"enabled": true,
"site": 22,
"omf_friendly": false,
- "subnet_id": null,
- "slice_url": "",
- "creator": null,
- "description": "Hadoop map-reduce service"
+ "network": "Private Only",
+ "max_slivers": 10,
+ "mountDataSets": "GenBank",
+ "creator": 1,
+ "enacted": null
}
},
{
"pk": 14,
"model": "core.slice",
"fields": {
- "router_id": null,
- "updated": "2013-12-13T21:58:44.338Z",
- "name": "test-slice-1",
+ "updated": "2014-03-23T23:14:27.648Z",
+ "imagePreference": "Ubuntu 12.04 LTS",
+ "name": "test",
"service": null,
"created": "2013-12-13T21:56:57.299Z",
- "network_id": null,
- "tenant_id": "",
+ "slice_url": "",
+ "description": "Test slice number one.",
"serviceClass": 1,
"enabled": true,
"site": 10,
"omf_friendly": false,
- "subnet_id": null,
- "slice_url": "",
- "creator": null,
- "description": "Test slice number one."
+ "network": "Private Only",
+ "max_slivers": 10,
+ "mountDataSets": "GenBank",
+ "creator": 1,
+ "enacted": null
}
},
{
"pk": 15,
"model": "core.slice",
"fields": {
- "router_id": null,
- "updated": "2013-12-13T22:01:49.732Z",
- "name": "test-slice-2",
+ "updated": "2014-03-23T23:14:00.911Z",
+ "imagePreference": "Ubuntu 12.04 LTS",
+ "name": "test2",
"service": null,
"created": "2013-12-13T22:00:03.049Z",
- "network_id": null,
- "tenant_id": "",
+ "slice_url": "",
+ "description": "test slice number two.",
"serviceClass": 1,
"enabled": true,
"site": 10,
"omf_friendly": false,
- "subnet_id": null,
+ "network": "Private Only",
+ "max_slivers": 10,
+ "mountDataSets": "GenBank",
+ "creator": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 16,
+ "model": "core.slice",
+ "fields": {
+ "updated": "2014-05-20T23:46:20.205Z",
+ "imagePreference": "Hadoop 2.4.0",
+ "name": "Analytics",
+ "service": null,
+ "created": "2014-05-20T17:54:07.100Z",
"slice_url": "",
- "creator": null,
- "description": "test slice number two."
+ "description": "Analytics ",
+ "serviceClass": 1,
+ "enabled": true,
+ "site": 22,
+ "omf_friendly": false,
+ "network": "Private Only",
+ "max_slivers": 10,
+ "mountDataSets": "GenBank",
+ "creator": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 1,
+ "model": "core.slicerole",
+ "fields": {
+ "updated": "2013-12-18T21:09:27.717Z",
+ "enacted": null,
+ "role": "admin",
+ "created": "2013-12-18T21:09:27.717Z"
+ }
+},
+{
+ "pk": 2,
+ "model": "core.slicerole",
+ "fields": {
+ "updated": "2013-12-18T21:09:35.074Z",
+ "enacted": null,
+ "role": "default",
+ "created": "2013-12-18T21:09:35.074Z"
+ }
+},
+{
+ "pk": 1,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.713Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.713Z",
+ "role": 1,
+ "user": 2,
+ "enacted": null
+ }
+},
+{
+ "pk": 2,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.729Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.729Z",
+ "role": 1,
+ "user": 3,
+ "enacted": null
+ }
+},
+{
+ "pk": 3,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.739Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.739Z",
+ "role": 1,
+ "user": 4,
+ "enacted": null
+ }
+},
+{
+ "pk": 4,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.752Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.752Z",
+ "role": 1,
+ "user": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 5,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.771Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.771Z",
+ "role": 1,
+ "user": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 6,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.790Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.789Z",
+ "role": 1,
+ "user": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 7,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.808Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.808Z",
+ "role": 1,
+ "user": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 8,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.835Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.835Z",
+ "role": 1,
+ "user": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 9,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.862Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.862Z",
+ "role": 1,
+ "user": 11,
+ "enacted": null
+ }
+},
+{
+ "pk": 10,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.890Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.890Z",
+ "role": 1,
+ "user": 12,
+ "enacted": null
+ }
+},
+{
+ "pk": 11,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.925Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.925Z",
+ "role": 1,
+ "user": 13,
+ "enacted": null
+ }
+},
+{
+ "pk": 12,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.960Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.960Z",
+ "role": 1,
+ "user": 14,
+ "enacted": null
+ }
+},
+{
+ "pk": 13,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:37.996Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:37.996Z",
+ "role": 1,
+ "user": 15,
+ "enacted": null
+ }
+},
+{
+ "pk": 14,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.038Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:38.038Z",
+ "role": 1,
+ "user": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 15,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.092Z",
+ "slice": 4,
+ "created": "2013-12-18T21:21:38.091Z",
+ "role": 1,
+ "user": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 16,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.103Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.103Z",
+ "role": 1,
+ "user": 2,
+ "enacted": null
+ }
+},
+{
+ "pk": 17,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.111Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.111Z",
+ "role": 1,
+ "user": 3,
+ "enacted": null
+ }
+},
+{
+ "pk": 18,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.122Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.122Z",
+ "role": 1,
+ "user": 4,
+ "enacted": null
+ }
+},
+{
+ "pk": 19,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.141Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.141Z",
+ "role": 1,
+ "user": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 20,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.160Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.160Z",
+ "role": 1,
+ "user": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 21,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.179Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.179Z",
+ "role": 1,
+ "user": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 22,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.206Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.206Z",
+ "role": 1,
+ "user": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 23,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.233Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.233Z",
+ "role": 1,
+ "user": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 24,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.260Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.260Z",
+ "role": 1,
+ "user": 11,
+ "enacted": null
+ }
+},
+{
+ "pk": 25,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.287Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.287Z",
+ "role": 1,
+ "user": 12,
+ "enacted": null
+ }
+},
+{
+ "pk": 26,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.322Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.322Z",
+ "role": 1,
+ "user": 13,
+ "enacted": null
+ }
+},
+{
+ "pk": 27,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.358Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.358Z",
+ "role": 1,
+ "user": 14,
+ "enacted": null
+ }
+},
+{
+ "pk": 28,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.393Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.393Z",
+ "role": 1,
+ "user": 15,
+ "enacted": null
+ }
+},
+{
+ "pk": 29,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.428Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.428Z",
+ "role": 1,
+ "user": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 30,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.472Z",
+ "slice": 6,
+ "created": "2013-12-18T21:21:38.472Z",
+ "role": 1,
+ "user": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 31,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.484Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.484Z",
+ "role": 1,
+ "user": 2,
+ "enacted": null
+ }
+},
+{
+ "pk": 32,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.492Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.492Z",
+ "role": 1,
+ "user": 3,
+ "enacted": null
+ }
+},
+{
+ "pk": 33,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.503Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.503Z",
+ "role": 1,
+ "user": 4,
+ "enacted": null
+ }
+},
+{
+ "pk": 34,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.522Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.522Z",
+ "role": 1,
+ "user": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 35,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.540Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.540Z",
+ "role": 1,
+ "user": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 36,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.559Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.559Z",
+ "role": 1,
+ "user": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 37,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.578Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.578Z",
+ "role": 1,
+ "user": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 38,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.605Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.605Z",
+ "role": 1,
+ "user": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 39,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.632Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.632Z",
+ "role": 1,
+ "user": 11,
+ "enacted": null
+ }
+},
+{
+ "pk": 40,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.660Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.660Z",
+ "role": 1,
+ "user": 12,
+ "enacted": null
+ }
+},
+{
+ "pk": 41,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.695Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.695Z",
+ "role": 1,
+ "user": 13,
+ "enacted": null
+ }
+},
+{
+ "pk": 42,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.731Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.731Z",
+ "role": 1,
+ "user": 14,
+ "enacted": null
+ }
+},
+{
+ "pk": 43,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.766Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.766Z",
+ "role": 1,
+ "user": 15,
+ "enacted": null
+ }
+},
+{
+ "pk": 44,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.801Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.801Z",
+ "role": 1,
+ "user": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 45,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.845Z",
+ "slice": 8,
+ "created": "2013-12-18T21:21:38.845Z",
+ "role": 1,
+ "user": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 46,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.857Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:38.857Z",
+ "role": 1,
+ "user": 2,
+ "enacted": null
+ }
+},
+{
+ "pk": 47,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.865Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:38.864Z",
+ "role": 1,
+ "user": 3,
+ "enacted": null
+ }
+},
+{
+ "pk": 48,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.875Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:38.875Z",
+ "role": 1,
+ "user": 4,
+ "enacted": null
+ }
+},
+{
+ "pk": 49,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.894Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:38.894Z",
+ "role": 1,
+ "user": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 50,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.913Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:38.913Z",
+ "role": 1,
+ "user": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 51,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.932Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:38.932Z",
+ "role": 1,
+ "user": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 52,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.951Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:38.951Z",
+ "role": 1,
+ "user": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 53,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:38.978Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:38.978Z",
+ "role": 1,
+ "user": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 54,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.005Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:39.005Z",
+ "role": 1,
+ "user": 11,
+ "enacted": null
+ }
+},
+{
+ "pk": 55,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.032Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:39.032Z",
+ "role": 1,
+ "user": 12,
+ "enacted": null
+ }
+},
+{
+ "pk": 56,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.068Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:39.067Z",
+ "role": 1,
+ "user": 13,
+ "enacted": null
+ }
+},
+{
+ "pk": 57,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.103Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:39.103Z",
+ "role": 1,
+ "user": 14,
+ "enacted": null
+ }
+},
+{
+ "pk": 58,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.139Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:39.139Z",
+ "role": 1,
+ "user": 15,
+ "enacted": null
+ }
+},
+{
+ "pk": 59,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.175Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:39.175Z",
+ "role": 1,
+ "user": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 60,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.219Z",
+ "slice": 9,
+ "created": "2013-12-18T21:21:39.219Z",
+ "role": 1,
+ "user": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 61,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.229Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.229Z",
+ "role": 1,
+ "user": 2,
+ "enacted": null
+ }
+},
+{
+ "pk": 62,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.238Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.238Z",
+ "role": 1,
+ "user": 3,
+ "enacted": null
+ }
+},
+{
+ "pk": 63,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.248Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.248Z",
+ "role": 1,
+ "user": 4,
+ "enacted": null
+ }
+},
+{
+ "pk": 64,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.267Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.267Z",
+ "role": 1,
+ "user": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 65,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.286Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.286Z",
+ "role": 1,
+ "user": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 66,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.304Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.304Z",
+ "role": 1,
+ "user": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 67,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.324Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.324Z",
+ "role": 1,
+ "user": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 68,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.351Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.351Z",
+ "role": 1,
+ "user": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 69,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.378Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.378Z",
+ "role": 1,
+ "user": 11,
+ "enacted": null
+ }
+},
+{
+ "pk": 70,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.405Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.405Z",
+ "role": 1,
+ "user": 12,
+ "enacted": null
+ }
+},
+{
+ "pk": 71,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.440Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.440Z",
+ "role": 1,
+ "user": 13,
+ "enacted": null
+ }
+},
+{
+ "pk": 72,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.476Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.476Z",
+ "role": 1,
+ "user": 14,
+ "enacted": null
+ }
+},
+{
+ "pk": 73,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.511Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.511Z",
+ "role": 1,
+ "user": 15,
+ "enacted": null
+ }
+},
+{
+ "pk": 74,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.547Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.547Z",
+ "role": 1,
+ "user": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 75,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.590Z",
+ "slice": 10,
+ "created": "2013-12-18T21:21:39.590Z",
+ "role": 1,
+ "user": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 76,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.602Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.602Z",
+ "role": 1,
+ "user": 2,
+ "enacted": null
+ }
+},
+{
+ "pk": 77,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.610Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.610Z",
+ "role": 1,
+ "user": 3,
+ "enacted": null
+ }
+},
+{
+ "pk": 78,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.621Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.621Z",
+ "role": 1,
+ "user": 4,
+ "enacted": null
+ }
+},
+{
+ "pk": 79,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.640Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.640Z",
+ "role": 1,
+ "user": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 80,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.659Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.659Z",
+ "role": 1,
+ "user": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 81,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.678Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.678Z",
+ "role": 1,
+ "user": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 82,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.705Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.705Z",
+ "role": 1,
+ "user": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 83,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.732Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.732Z",
+ "role": 1,
+ "user": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 84,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.759Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.759Z",
+ "role": 1,
+ "user": 11,
+ "enacted": null
+ }
+},
+{
+ "pk": 85,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.786Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.786Z",
+ "role": 1,
+ "user": 12,
+ "enacted": null
+ }
+},
+{
+ "pk": 86,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.821Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.821Z",
+ "role": 1,
+ "user": 13,
+ "enacted": null
+ }
+},
+{
+ "pk": 87,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.857Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.857Z",
+ "role": 1,
+ "user": 14,
+ "enacted": null
+ }
+},
+{
+ "pk": 88,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.891Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.891Z",
+ "role": 1,
+ "user": 15,
+ "enacted": null
+ }
+},
+{
+ "pk": 89,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.927Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.927Z",
+ "role": 1,
+ "user": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 90,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.971Z",
+ "slice": 11,
+ "created": "2013-12-18T21:21:39.971Z",
+ "role": 1,
+ "user": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 91,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.983Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:39.983Z",
+ "role": 1,
+ "user": 2,
+ "enacted": null
+ }
+},
+{
+ "pk": 92,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:39.991Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:39.991Z",
+ "role": 1,
+ "user": 3,
+ "enacted": null
+ }
+},
+{
+ "pk": 93,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.002Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.002Z",
+ "role": 1,
+ "user": 4,
+ "enacted": null
+ }
+},
+{
+ "pk": 94,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.020Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.020Z",
+ "role": 1,
+ "user": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 95,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.039Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.039Z",
+ "role": 1,
+ "user": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 96,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.058Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.058Z",
+ "role": 1,
+ "user": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 97,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.077Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.077Z",
+ "role": 1,
+ "user": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 98,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.104Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.104Z",
+ "role": 1,
+ "user": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 99,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.131Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.131Z",
+ "role": 1,
+ "user": 11,
+ "enacted": null
+ }
+},
+{
+ "pk": 100,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.159Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.159Z",
+ "role": 1,
+ "user": 12,
+ "enacted": null
+ }
+},
+{
+ "pk": 101,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.194Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.194Z",
+ "role": 1,
+ "user": 13,
+ "enacted": null
+ }
+},
+{
+ "pk": 102,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.230Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.230Z",
+ "role": 1,
+ "user": 14,
+ "enacted": null
+ }
+},
+{
+ "pk": 103,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.265Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.265Z",
+ "role": 1,
+ "user": 15,
+ "enacted": null
+ }
+},
+{
+ "pk": 104,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.300Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.300Z",
+ "role": 1,
+ "user": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 105,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.344Z",
+ "slice": 12,
+ "created": "2013-12-18T21:21:40.344Z",
+ "role": 1,
+ "user": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 106,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.356Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.355Z",
+ "role": 1,
+ "user": 2,
+ "enacted": null
+ }
+},
+{
+ "pk": 107,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.364Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.364Z",
+ "role": 1,
+ "user": 3,
+ "enacted": null
+ }
+},
+{
+ "pk": 108,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.374Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.374Z",
+ "role": 1,
+ "user": 4,
+ "enacted": null
+ }
+},
+{
+ "pk": 109,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.393Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.393Z",
+ "role": 1,
+ "user": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 110,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.412Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.412Z",
+ "role": 1,
+ "user": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 111,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.431Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.431Z",
+ "role": 1,
+ "user": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 112,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.450Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.450Z",
+ "role": 1,
+ "user": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 113,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.477Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.477Z",
+ "role": 1,
+ "user": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 114,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.504Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.504Z",
+ "role": 1,
+ "user": 11,
+ "enacted": null
+ }
+},
+{
+ "pk": 115,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.531Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.531Z",
+ "role": 1,
+ "user": 12,
+ "enacted": null
+ }
+},
+{
+ "pk": 116,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.566Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.566Z",
+ "role": 1,
+ "user": 13,
+ "enacted": null
+ }
+},
+{
+ "pk": 117,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.602Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.602Z",
+ "role": 1,
+ "user": 14,
+ "enacted": null
+ }
+},
+{
+ "pk": 118,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.637Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.637Z",
+ "role": 1,
+ "user": 15,
+ "enacted": null
+ }
+},
+{
+ "pk": 119,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.673Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.673Z",
+ "role": 1,
+ "user": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 120,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.717Z",
+ "slice": 13,
+ "created": "2013-12-18T21:21:40.717Z",
+ "role": 1,
+ "user": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 121,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.728Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.728Z",
+ "role": 1,
+ "user": 2,
+ "enacted": null
+ }
+},
+{
+ "pk": 122,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.736Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.736Z",
+ "role": 1,
+ "user": 3,
+ "enacted": null
+ }
+},
+{
+ "pk": 123,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.747Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.747Z",
+ "role": 1,
+ "user": 4,
+ "enacted": null
+ }
+},
+{
+ "pk": 124,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.766Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.766Z",
+ "role": 1,
+ "user": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 125,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.784Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.784Z",
+ "role": 1,
+ "user": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 126,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.803Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.803Z",
+ "role": 1,
+ "user": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 127,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.822Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.822Z",
+ "role": 1,
+ "user": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 128,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.849Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.849Z",
+ "role": 1,
+ "user": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 129,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.877Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.877Z",
+ "role": 1,
+ "user": 11,
+ "enacted": null
+ }
+},
+{
+ "pk": 130,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.903Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.903Z",
+ "role": 1,
+ "user": 12,
+ "enacted": null
+ }
+},
+{
+ "pk": 131,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.939Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.939Z",
+ "role": 1,
+ "user": 13,
+ "enacted": null
+ }
+},
+{
+ "pk": 132,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:40.975Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:40.975Z",
+ "role": 1,
+ "user": 14,
+ "enacted": null
+ }
+},
+{
+ "pk": 133,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.010Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:41.010Z",
+ "role": 1,
+ "user": 15,
+ "enacted": null
+ }
+},
+{
+ "pk": 134,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.045Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:41.045Z",
+ "role": 1,
+ "user": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 135,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.089Z",
+ "slice": 14,
+ "created": "2013-12-18T21:21:41.089Z",
+ "role": 1,
+ "user": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 136,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.101Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.101Z",
+ "role": 1,
+ "user": 2,
+ "enacted": null
+ }
+},
+{
+ "pk": 137,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.109Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.109Z",
+ "role": 1,
+ "user": 3,
+ "enacted": null
+ }
+},
+{
+ "pk": 138,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.119Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.119Z",
+ "role": 1,
+ "user": 4,
+ "enacted": null
+ }
+},
+{
+ "pk": 139,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.138Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.138Z",
+ "role": 1,
+ "user": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 140,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.157Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.157Z",
+ "role": 1,
+ "user": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 141,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.176Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.176Z",
+ "role": 1,
+ "user": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 142,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.204Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.203Z",
+ "role": 1,
+ "user": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 143,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.231Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.231Z",
+ "role": 1,
+ "user": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 144,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.258Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.258Z",
+ "role": 1,
+ "user": 11,
+ "enacted": null
+ }
+},
+{
+ "pk": 145,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.285Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.285Z",
+ "role": 1,
+ "user": 12,
+ "enacted": null
+ }
+},
+{
+ "pk": 146,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.320Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.320Z",
+ "role": 1,
+ "user": 13,
+ "enacted": null
+ }
+},
+{
+ "pk": 147,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.356Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.356Z",
+ "role": 1,
+ "user": 14,
+ "enacted": null
+ }
+},
+{
+ "pk": 148,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.391Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.391Z",
+ "role": 1,
+ "user": 15,
+ "enacted": null
+ }
+},
+{
+ "pk": 149,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.426Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.426Z",
+ "role": 1,
+ "user": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 150,
+ "model": "core.sliceprivilege",
+ "fields": {
+ "updated": "2013-12-18T21:21:41.470Z",
+ "slice": 15,
+ "created": "2013-12-18T21:21:41.470Z",
+ "role": 1,
+ "user": 8,
+ "enacted": null
}
},
{
@@ -1122,4099 +3414,4511 @@
"created": "2013-12-09T14:26:56.787Z",
"container_format": "bare",
"disk_format": "raw",
- "image_id": "d4bdbba2-6883-4232-863a-202fd4c56c21"
+ "path": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 2,
+ "model": "core.image",
+ "fields": {
+ "updated": "2014-04-23T04:10:59.634Z",
+ "name": "Ubuntu 12.04 LTS",
+ "created": "2014-04-23T04:10:59.634Z",
+ "container_format": "bare",
+ "disk_format": "raw",
+ "path": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 3,
+ "model": "core.image",
+ "fields": {
+ "updated": "2014-04-23T04:11:24.968Z",
+ "name": "Hadoop 2.4.0",
+ "created": "2014-04-23T04:11:24.968Z",
+ "container_format": "bare",
+ "disk_format": "raw",
+ "path": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 4,
+ "model": "core.image",
+ "fields": {
+ "updated": "2014-04-23T04:11:37.141Z",
+ "name": "MPI 1.8",
+ "created": "2014-04-23T04:11:37.141Z",
+ "container_format": "bare",
+ "disk_format": "raw",
+ "path": null,
+ "enacted": null
}
},
{
"pk": 384,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node1.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 385,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node2.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 386,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node3.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 387,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node4.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 388,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node5.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 389,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node6.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 390,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node7.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 391,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node8.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 392,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node9.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 393,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node10.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 394,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node11.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 395,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node12.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 396,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node13.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 397,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node14.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 398,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node15.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 399,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node16.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 400,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node17.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 401,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node18.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 402,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node19.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 403,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node20.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 404,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node21.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 405,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node22.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 406,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node23.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 407,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node24.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 408,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node25.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 409,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node26.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 410,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node27.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 411,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node28.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 412,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node29.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 413,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node30.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 414,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node31.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 415,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node32.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 416,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node33.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 417,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node34.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 418,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node35.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 419,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node36.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 420,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node37.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 421,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node38.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 422,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node39.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 423,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node40.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 424,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node41.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 425,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node42.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 426,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node43.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 427,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node44.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 428,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node45.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 429,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node46.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 430,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node47.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 431,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node48.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 432,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node49.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 433,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node50.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 434,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node51.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 435,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node52.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 436,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node53.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 437,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node54.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 438,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node55.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 439,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node56.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 440,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node57.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 441,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node58.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 442,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node59.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 443,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node60.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 444,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node61.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 445,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node62.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 446,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node63.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 447,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node64.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 448,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node65.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 449,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node66.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 450,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node67.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 451,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node68.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 452,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node69.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 453,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node70.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 454,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node1.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 455,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node2.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 456,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node3.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 457,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node4.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 458,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node5.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 459,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node6.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 460,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node7.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 461,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node8.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 462,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node9.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 463,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node10.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 464,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node11.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 465,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node12.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 466,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node13.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 467,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node14.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 468,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node15.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 469,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node16.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 470,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node17.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 471,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node18.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 472,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node19.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 473,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node20.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 474,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node21.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 475,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node22.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 476,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node23.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 477,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node24.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 478,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node25.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 479,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node26.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 480,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node27.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 481,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node28.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 482,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node29.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 483,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node30.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 484,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node31.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 485,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node32.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 486,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node33.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 487,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node34.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 488,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node35.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 489,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node36.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 490,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node37.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 491,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node38.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 492,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node39.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 493,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node40.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 494,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node41.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 495,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node42.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 496,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node43.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 497,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node44.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 498,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node45.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 499,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node46.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 500,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node47.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 501,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node48.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 502,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node49.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 503,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node50.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 504,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node51.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 505,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node52.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 506,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node53.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 507,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node54.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 508,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node55.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 509,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node56.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 510,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node57.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 511,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node58.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 512,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node59.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 513,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node60.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 514,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node61.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 515,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node62.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 516,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node63.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 517,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node64.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 518,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node65.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 519,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node66.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 520,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node67.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 521,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node68.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 522,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node69.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 523,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node70.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 524,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node1.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 525,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node2.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 526,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node3.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 527,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node4.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 528,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node5.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 529,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node6.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 530,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node7.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 531,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node8.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 532,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node9.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 533,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node10.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 534,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node11.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 535,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node12.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 536,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node13.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 537,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node14.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 538,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node15.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 539,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node16.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 540,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node17.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 541,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node18.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 542,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node19.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 543,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node20.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 544,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node21.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 545,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node22.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 546,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node23.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 547,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node24.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 548,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node25.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 549,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node26.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 550,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node27.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 551,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node28.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 552,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node29.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 553,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node30.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 554,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node31.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 555,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node32.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 556,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node33.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 557,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node34.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 558,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node35.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 559,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node36.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 560,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node37.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 561,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node38.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 562,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node39.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 563,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node40.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 564,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node41.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 565,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node42.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 566,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node43.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 567,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node44.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 568,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node45.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 569,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node46.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 570,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node47.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 571,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node48.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 572,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node49.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 573,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node50.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 574,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node51.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 575,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node52.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 576,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node53.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 577,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node54.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 578,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node55.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 579,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node56.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 580,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node57.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 581,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node58.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 582,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node59.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 583,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node60.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 584,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node61.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 585,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node62.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 586,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node63.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 587,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node64.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 588,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node65.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 589,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node66.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 590,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node67.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 591,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node68.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 592,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node69.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 593,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node70.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 594,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node1.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 595,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node2.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 596,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node3.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 597,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node4.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 598,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node5.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 599,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node6.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 600,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node7.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 601,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node8.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 602,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node9.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 603,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node10.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 604,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node11.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 605,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node12.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 606,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node13.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 607,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node14.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 608,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node15.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 609,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node16.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 610,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node17.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 611,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node18.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 612,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node19.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 613,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node20.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 614,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node21.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 615,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node22.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 616,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node23.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 617,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node24.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 618,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node25.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 619,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node26.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 620,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node27.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 621,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node28.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 622,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node29.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 623,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node30.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 624,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node31.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 625,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node32.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 626,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node33.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 627,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node34.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 628,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node35.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 629,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node36.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 630,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node37.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 631,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node38.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 632,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node39.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 633,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node40.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 634,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node41.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 635,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node42.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 636,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node43.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 637,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node44.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 638,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node45.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 639,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node46.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 640,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node47.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 641,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node48.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 642,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node49.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 643,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node50.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 644,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node51.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 645,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node52.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 646,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node53.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 647,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node54.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 648,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node55.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 649,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node56.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 650,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node57.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 651,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node58.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 652,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node59.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 653,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node60.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 654,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node61.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 655,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node62.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 656,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node63.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 657,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node64.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 658,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node65.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 659,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node66.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 660,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node67.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 661,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node68.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 662,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node69.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 663,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node70.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 664,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node1.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 665,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node2.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 666,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node3.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 667,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node4.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 668,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node5.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 669,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node6.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 670,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node7.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 671,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node8.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 672,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node9.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 673,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node10.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 674,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node11.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 675,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node12.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 676,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node13.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 677,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node14.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 678,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node15.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 679,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node16.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 680,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node17.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 681,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node18.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 682,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node19.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 683,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node20.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 684,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node21.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 685,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node22.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 686,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node23.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 687,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node24.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 688,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node25.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 689,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node26.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 690,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node27.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 691,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node28.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 692,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node29.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 693,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node30.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 694,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node31.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 695,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node32.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 696,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node33.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 697,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node34.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 698,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node35.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 699,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node36.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 700,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node37.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 701,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node38.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 702,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node39.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 703,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node40.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 704,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node41.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 705,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node42.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 706,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node43.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 707,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node44.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 708,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node45.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 709,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node46.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 710,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node47.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 711,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node48.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 712,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node49.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 713,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node50.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 714,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node51.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 715,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node52.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 716,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node53.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 717,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node54.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 718,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node55.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 719,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node56.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 720,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node57.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 721,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node58.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 722,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node59.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 723,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node60.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 724,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node61.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 725,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node62.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 726,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node63.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 727,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node64.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 728,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node65.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 729,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node66.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 730,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node67.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 731,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node68.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 732,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node69.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 733,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node70.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 734,
"model": "core.node",
"fields": {
- "site": 13,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.atla.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 13,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 735,
"model": "core.node",
"fields": {
- "site": 13,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.atla.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 13,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 736,
"model": "core.node",
"fields": {
- "site": 14,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.chic.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 14,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 737,
"model": "core.node",
"fields": {
- "site": 14,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.chic.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 14,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 738,
"model": "core.node",
"fields": {
- "site": 15,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.hous.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 15,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 739,
"model": "core.node",
"fields": {
- "site": 15,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.hous.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 15,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 740,
"model": "core.node",
"fields": {
- "site": 16,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.kans.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 16,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 741,
"model": "core.node",
"fields": {
- "site": 16,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.kans.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 16,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 742,
"model": "core.node",
"fields": {
- "site": 17,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.losa.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 17,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 743,
"model": "core.node",
"fields": {
- "site": 17,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.losa.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 17,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 744,
"model": "core.node",
"fields": {
- "site": 18,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.newy.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 18,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 745,
"model": "core.node",
"fields": {
- "site": 18,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.newy.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 18,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 746,
"model": "core.node",
"fields": {
- "site": 19,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.salt.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 19,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 747,
"model": "core.node",
"fields": {
- "site": 19,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.salt.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 19,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 748,
"model": "core.node",
"fields": {
- "site": 20,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.seat.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 20,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 749,
"model": "core.node",
"fields": {
- "site": 20,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.seat.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 20,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 750,
"model": "core.node",
"fields": {
- "site": 21,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.wash.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 21,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 751,
"model": "core.node",
"fields": {
- "site": 21,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.wash.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 21,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 752,
"model": "core.node",
"fields": {
- "site": 23,
"updated": "2013-12-17T17:10:48.740Z",
- "deployment": 10,
"name": "opencloud0.sing.internet2.edu",
- "created": "2013-12-17T17:10:48.740Z"
+ "created": "2013-12-17T17:10:48.740Z",
+ "site": 23,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 753,
"model": "core.node",
"fields": {
- "site": 23,
"updated": "2013-12-17T17:10:48.742Z",
- "deployment": 10,
"name": "opencloud1.sing.internet2.edu",
- "created": "2013-12-17T17:10:48.741Z"
+ "created": "2013-12-17T17:10:48.741Z",
+ "site": 23,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 754,
"model": "core.node",
"fields": {
- "site": 23,
"updated": "2013-12-17T17:10:48.742Z",
- "deployment": 10,
"name": "opencloud2.sing.internet2.edu",
- "created": "2013-12-17T17:10:48.742Z"
+ "created": "2013-12-17T17:10:48.742Z",
+ "site": 23,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 755,
"model": "core.node",
"fields": {
- "site": 23,
"updated": "2013-12-17T17:10:48.743Z",
- "deployment": 10,
"name": "opencloud3.sing.internet2.edu",
- "created": "2013-12-17T17:10:48.743Z"
+ "created": "2013-12-17T17:10:48.743Z",
+ "site": 23,
+ "deployment": 10,
+ "enacted": null
}
},
{
@@ -5227,11 +7931,12 @@
"created": "2013-12-11T22:18:00.040Z",
"serviceClass": 1,
"maxUnitsDeployment": 0,
+ "calendarReservable": false,
"bucketInRate": 0,
"cost": 7,
- "calendarReservable": false,
+ "maxUnitsNode": 0,
"maxDuration": 0,
- "maxUnitsNode": 0
+ "enacted": null
}
},
{
@@ -5244,11 +7949,12 @@
"created": "2013-12-11T22:18:00.045Z",
"serviceClass": 2,
"maxUnitsDeployment": 0,
+ "calendarReservable": false,
"bucketInRate": 0,
"cost": 7,
- "calendarReservable": false,
+ "maxUnitsNode": 0,
"maxDuration": 0,
- "maxUnitsNode": 0
+ "enacted": null
}
},
{
@@ -5261,11 +7967,12 @@
"created": "2013-12-11T22:18:00.053Z",
"serviceClass": 3,
"maxUnitsDeployment": 0,
+ "calendarReservable": false,
"bucketInRate": 0,
"cost": 7,
- "calendarReservable": false,
+ "maxUnitsNode": 0,
"maxDuration": 0,
- "maxUnitsNode": 0
+ "enacted": null
}
},
{
@@ -5278,11 +7985,12 @@
"created": "2013-12-11T22:18:00.064Z",
"serviceClass": 3,
"maxUnitsDeployment": 210,
+ "calendarReservable": true,
"bucketInRate": 0,
"cost": 0,
- "calendarReservable": true,
+ "maxUnitsNode": 6,
"maxDuration": 8760,
- "maxUnitsNode": 6
+ "enacted": null
}
},
{
@@ -5295,11 +8003,12 @@
"created": "2013-12-11T22:18:00.072Z",
"serviceClass": 2,
"maxUnitsDeployment": 210,
+ "calendarReservable": true,
"bucketInRate": 10,
"cost": 7,
- "calendarReservable": true,
+ "maxUnitsNode": 6,
"maxDuration": 168,
- "maxUnitsNode": 6
+ "enacted": null
}
},
{
@@ -5317,7 +8026,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5335,7 +8045,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5353,7 +8064,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5371,7 +8083,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5389,7 +8102,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5407,7 +8121,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5425,7 +8140,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5443,7 +8159,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5461,7 +8178,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5479,7 +8197,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5497,7 +8216,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5515,7 +8235,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5533,7 +8254,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5551,7 +8273,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5569,7 +8292,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5587,7 +8311,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5605,7 +8330,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5623,7 +8349,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5641,7 +8368,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5659,7 +8387,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5677,7 +8406,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5695,7 +8425,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5713,7 +8444,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5731,7 +8463,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5749,7 +8482,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5767,7 +8501,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5785,7 +8520,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5803,7 +8539,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5821,7 +8558,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5839,7 +8577,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5857,7 +8596,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5875,7 +8615,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5893,7 +8634,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5911,7 +8653,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5929,7 +8672,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5947,7 +8691,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5965,7 +8710,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -5983,7 +8729,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -6001,7 +8748,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -6019,7 +8767,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -6037,16 +8786,17 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
"pk": 81,
"model": "core.sliver",
"fields": {
- "node": 546,
+ "node": 588,
"instance_name": null,
- "updated": "2013-12-13T21:58:13.897Z",
+ "updated": "2013-12-18T22:21:36.513Z",
"slice": 14,
"deploymentNetwork": 7,
"name": "test-slice-1",
@@ -6055,16 +8805,17 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
"pk": 82,
"model": "core.sliver",
"fields": {
- "node": 538,
+ "node": 589,
"instance_name": null,
- "updated": "2013-12-13T21:58:44.349Z",
+ "updated": "2013-12-18T22:21:36.522Z",
"slice": 14,
"deploymentNetwork": 7,
"name": "test-slice-1",
@@ -6073,16 +8824,17 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
"pk": 83,
"model": "core.sliver",
"fields": {
- "node": 556,
+ "node": 590,
"instance_name": null,
- "updated": "2013-12-13T21:58:44.350Z",
+ "updated": "2013-12-18T22:21:36.530Z",
"slice": 14,
"deploymentNetwork": 7,
"name": "test-slice-1",
@@ -6091,7 +8843,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -6109,7 +8862,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -6127,7 +8881,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -6145,16 +8900,17 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
"pk": 87,
"model": "core.sliver",
"fields": {
- "node": 533,
+ "node": 592,
"instance_name": null,
- "updated": "2013-12-13T22:01:30.192Z",
+ "updated": "2013-12-18T22:22:04.726Z",
"slice": 15,
"deploymentNetwork": 7,
"name": "test-slice-2",
@@ -6163,16 +8919,17 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
"pk": 88,
"model": "core.sliver",
"fields": {
- "node": 536,
+ "node": 593,
"instance_name": null,
- "updated": "2013-12-13T22:01:49.742Z",
+ "updated": "2013-12-18T22:22:04.734Z",
"slice": 15,
"deploymentNetwork": 7,
"name": "test-slice-2",
@@ -6181,7 +8938,1585 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 288,
+ "model": "core.sliver",
+ "fields": {
+ "node": 433,
+ "instance_name": "instance-000005dc",
+ "updated": "2013-12-18T21:41:49.275Z",
+ "slice": 6,
+ "deploymentNetwork": 5,
+ "name": "node50.stanford.vicci.org",
+ "created": "2013-12-18T21:41:49.275Z",
+ "ip": "171.67.92.188",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 289,
+ "model": "core.sliver",
+ "fields": {
+ "node": 643,
+ "instance_name": "instance-000005dd",
+ "updated": "2013-12-18T21:41:49.293Z",
+ "slice": 6,
+ "deploymentNetwork": 8,
+ "name": "node50.gt.vicci.org",
+ "created": "2013-12-18T21:41:49.293Z",
+ "ip": "130.207.98.59",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 290,
+ "model": "core.sliver",
+ "fields": {
+ "node": 713,
+ "instance_name": "instance-000005de",
+ "updated": "2013-12-18T21:41:49.310Z",
+ "slice": 6,
+ "deploymentNetwork": 9,
+ "name": "node50.mpisws.vicci.org",
+ "created": "2013-12-18T21:41:49.310Z",
+ "ip": "141.39.220.60",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 291,
+ "model": "core.sliver",
+ "fields": {
+ "node": 503,
+ "instance_name": "instance-000005df",
+ "updated": "2013-12-18T21:41:49.326Z",
+ "slice": 6,
+ "deploymentNetwork": 6,
+ "name": "node50.washington.vicci.org",
+ "created": "2013-12-18T21:41:49.326Z",
+ "ip": "128.95.1.155",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 292,
+ "model": "core.sliver",
+ "fields": {
+ "node": 513,
+ "instance_name": "instance-000005e0",
+ "updated": "2013-12-18T21:41:49.343Z",
+ "slice": 6,
+ "deploymentNetwork": 6,
+ "name": "node60.washington.vicci.org",
+ "created": "2013-12-18T21:41:49.343Z",
+ "ip": "128.95.1.165",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 293,
+ "model": "core.sliver",
+ "fields": {
+ "node": 723,
+ "instance_name": "instance-000005e1",
+ "updated": "2013-12-18T21:41:49.359Z",
+ "slice": 6,
+ "deploymentNetwork": 9,
+ "name": "node60.mpisws.vicci.org",
+ "created": "2013-12-18T21:41:49.359Z",
+ "ip": "141.39.220.70",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 294,
+ "model": "core.sliver",
+ "fields": {
+ "node": 603,
+ "instance_name": "instance-000005e2",
+ "updated": "2013-12-18T21:41:49.376Z",
+ "slice": 6,
+ "deploymentNetwork": 8,
+ "name": "node10.gt.vicci.org",
+ "created": "2013-12-18T21:41:49.376Z",
+ "ip": "130.207.98.19",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 295,
+ "model": "core.sliver",
+ "fields": {
+ "node": 559,
+ "instance_name": "instance-000005e3",
+ "updated": "2013-12-18T21:41:49.393Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node36.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.393Z",
+ "ip": "128.112.171.90",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 296,
+ "model": "core.sliver",
+ "fields": {
+ "node": 560,
+ "instance_name": "instance-000005e4",
+ "updated": "2013-12-18T21:41:49.409Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node37.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.409Z",
+ "ip": "128.112.171.92",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 297,
+ "model": "core.sliver",
+ "fields": {
+ "node": 561,
+ "instance_name": "instance-000005e5",
+ "updated": "2013-12-18T21:41:49.426Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node38.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.426Z",
+ "ip": "128.112.171.94",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 298,
+ "model": "core.sliver",
+ "fields": {
+ "node": 562,
+ "instance_name": "instance-000005e6",
+ "updated": "2013-12-18T21:41:49.442Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node39.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.442Z",
+ "ip": "128.112.171.96",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 299,
+ "model": "core.sliver",
+ "fields": {
+ "node": 563,
+ "instance_name": "instance-000005e7",
+ "updated": "2013-12-18T21:41:49.459Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node40.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.459Z",
+ "ip": "128.112.171.98",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 300,
+ "model": "core.sliver",
+ "fields": {
+ "node": 564,
+ "instance_name": "instance-000005e8",
+ "updated": "2013-12-18T21:41:49.476Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node41.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.475Z",
+ "ip": "128.112.171.100",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 301,
+ "model": "core.sliver",
+ "fields": {
+ "node": 565,
+ "instance_name": "instance-000005e9",
+ "updated": "2013-12-18T21:41:49.492Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node42.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.492Z",
+ "ip": "128.112.171.102",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 302,
+ "model": "core.sliver",
+ "fields": {
+ "node": 566,
+ "instance_name": "instance-000005ea",
+ "updated": "2013-12-18T21:41:49.508Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node43.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.508Z",
+ "ip": "128.112.171.104",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 303,
+ "model": "core.sliver",
+ "fields": {
+ "node": 567,
+ "instance_name": "instance-000005eb",
+ "updated": "2013-12-18T21:41:49.525Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node44.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.525Z",
+ "ip": "128.112.171.106",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 304,
+ "model": "core.sliver",
+ "fields": {
+ "node": 568,
+ "instance_name": "instance-000005ec",
+ "updated": "2013-12-18T21:41:49.542Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node45.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.542Z",
+ "ip": "128.112.171.108",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 305,
+ "model": "core.sliver",
+ "fields": {
+ "node": 569,
+ "instance_name": "instance-000005ed",
+ "updated": "2013-12-18T21:41:49.558Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node46.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.558Z",
+ "ip": "128.112.171.110",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 306,
+ "model": "core.sliver",
+ "fields": {
+ "node": 570,
+ "instance_name": "instance-000005ee",
+ "updated": "2013-12-18T21:41:49.575Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node47.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.575Z",
+ "ip": "128.112.171.112",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 307,
+ "model": "core.sliver",
+ "fields": {
+ "node": 571,
+ "instance_name": "instance-000005ef",
+ "updated": "2013-12-18T21:41:49.591Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node48.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.591Z",
+ "ip": "128.112.171.114",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 308,
+ "model": "core.sliver",
+ "fields": {
+ "node": 572,
+ "instance_name": "instance-000005f0",
+ "updated": "2013-12-18T21:41:49.608Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node49.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.608Z",
+ "ip": "128.112.171.116",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 309,
+ "model": "core.sliver",
+ "fields": {
+ "node": 573,
+ "instance_name": "instance-000005f1",
+ "updated": "2013-12-18T21:41:49.625Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node50.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.625Z",
+ "ip": "128.112.171.118",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 310,
+ "model": "core.sliver",
+ "fields": {
+ "node": 574,
+ "instance_name": "instance-000005f2",
+ "updated": "2013-12-18T21:41:49.641Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node51.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.641Z",
+ "ip": "128.112.171.120",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 311,
+ "model": "core.sliver",
+ "fields": {
+ "node": 575,
+ "instance_name": "instance-000005f3",
+ "updated": "2013-12-18T21:41:49.658Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node52.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.658Z",
+ "ip": "128.112.171.122",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 312,
+ "model": "core.sliver",
+ "fields": {
+ "node": 576,
+ "instance_name": "instance-000005f4",
+ "updated": "2013-12-18T21:41:49.674Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node53.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.674Z",
+ "ip": "128.112.171.124",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 313,
+ "model": "core.sliver",
+ "fields": {
+ "node": 577,
+ "instance_name": "instance-000005f5",
+ "updated": "2013-12-18T21:41:49.691Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node54.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.691Z",
+ "ip": "128.112.171.126",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 314,
+ "model": "core.sliver",
+ "fields": {
+ "node": 578,
+ "instance_name": "instance-000005f6",
+ "updated": "2013-12-18T21:41:49.707Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node55.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.707Z",
+ "ip": "128.112.171.128",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 315,
+ "model": "core.sliver",
+ "fields": {
+ "node": 579,
+ "instance_name": "instance-000005f7",
+ "updated": "2013-12-18T21:41:49.724Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node56.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.724Z",
+ "ip": "128.112.171.130",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 316,
+ "model": "core.sliver",
+ "fields": {
+ "node": 580,
+ "instance_name": "instance-000005f8",
+ "updated": "2013-12-18T21:41:49.741Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node57.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.740Z",
+ "ip": "128.112.171.132",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 317,
+ "model": "core.sliver",
+ "fields": {
+ "node": 581,
+ "instance_name": "instance-000005f9",
+ "updated": "2013-12-18T21:41:49.757Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node58.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.757Z",
+ "ip": "128.112.171.134",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 318,
+ "model": "core.sliver",
+ "fields": {
+ "node": 582,
+ "instance_name": "instance-000005fa",
+ "updated": "2013-12-18T21:41:49.774Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node59.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.774Z",
+ "ip": "128.112.171.136",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 319,
+ "model": "core.sliver",
+ "fields": {
+ "node": 583,
+ "instance_name": "instance-000005fb",
+ "updated": "2013-12-18T21:41:49.790Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node60.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.790Z",
+ "ip": "128.112.171.138",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 320,
+ "model": "core.sliver",
+ "fields": {
+ "node": 584,
+ "instance_name": "instance-000005fc",
+ "updated": "2013-12-18T21:41:49.807Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node61.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.807Z",
+ "ip": "128.112.171.140",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 321,
+ "model": "core.sliver",
+ "fields": {
+ "node": 585,
+ "instance_name": "instance-000005fd",
+ "updated": "2013-12-18T21:41:49.823Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node62.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.823Z",
+ "ip": "128.112.171.142",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 322,
+ "model": "core.sliver",
+ "fields": {
+ "node": 586,
+ "instance_name": "instance-000005fe",
+ "updated": "2013-12-18T21:41:49.840Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node63.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.840Z",
+ "ip": "128.112.171.144",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 323,
+ "model": "core.sliver",
+ "fields": {
+ "node": 587,
+ "instance_name": "instance-000005ff",
+ "updated": "2013-12-18T21:41:49.856Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node64.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.856Z",
+ "ip": "128.112.171.146",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 324,
+ "model": "core.sliver",
+ "fields": {
+ "node": 588,
+ "instance_name": "instance-00000600",
+ "updated": "2013-12-18T21:41:49.873Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node65.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.873Z",
+ "ip": "128.112.171.148",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 325,
+ "model": "core.sliver",
+ "fields": {
+ "node": 589,
+ "instance_name": "instance-00000601",
+ "updated": "2013-12-18T21:41:49.890Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node66.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.890Z",
+ "ip": "128.112.171.150",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 326,
+ "model": "core.sliver",
+ "fields": {
+ "node": 590,
+ "instance_name": "instance-00000602",
+ "updated": "2013-12-18T21:41:49.906Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node67.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.906Z",
+ "ip": "128.112.171.152",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 327,
+ "model": "core.sliver",
+ "fields": {
+ "node": 591,
+ "instance_name": "instance-00000603",
+ "updated": "2013-12-18T21:41:49.923Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node68.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.923Z",
+ "ip": "128.112.171.154",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 328,
+ "model": "core.sliver",
+ "fields": {
+ "node": 592,
+ "instance_name": "instance-00000604",
+ "updated": "2013-12-18T21:41:49.939Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node69.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.939Z",
+ "ip": "128.112.171.156",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 329,
+ "model": "core.sliver",
+ "fields": {
+ "node": 593,
+ "instance_name": "instance-00000605",
+ "updated": "2013-12-18T21:41:49.956Z",
+ "slice": 6,
+ "deploymentNetwork": 7,
+ "name": "node70.princeton.vicci.org",
+ "created": "2013-12-18T21:41:49.956Z",
+ "ip": "128.112.171.158",
+ "image": 1,
+ "creator": 8,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 330,
+ "model": "core.sliver",
+ "fields": {
+ "node": 453,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:07.852Z",
+ "slice": 13,
+ "deploymentNetwork": 5,
+ "name": "node70.stanford.vicci.org",
+ "created": "2014-05-20T16:19:07.852Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 331,
+ "model": "core.sliver",
+ "fields": {
+ "node": 523,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:07.940Z",
+ "slice": 13,
+ "deploymentNetwork": 6,
+ "name": "node70.washington.vicci.org",
+ "created": "2014-05-20T16:19:07.940Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 332,
+ "model": "core.sliver",
+ "fields": {
+ "node": 452,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.011Z",
+ "slice": 13,
+ "deploymentNetwork": 5,
+ "name": "node69.stanford.vicci.org",
+ "created": "2014-05-20T16:19:08.011Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 333,
+ "model": "core.sliver",
+ "fields": {
+ "node": 522,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.076Z",
+ "slice": 13,
+ "deploymentNetwork": 6,
+ "name": "node69.washington.vicci.org",
+ "created": "2014-05-20T16:19:08.076Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 334,
+ "model": "core.sliver",
+ "fields": {
+ "node": 451,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.160Z",
+ "slice": 13,
+ "deploymentNetwork": 5,
+ "name": "node68.stanford.vicci.org",
+ "created": "2014-05-20T16:19:08.159Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 335,
+ "model": "core.sliver",
+ "fields": {
+ "node": 521,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.244Z",
+ "slice": 13,
+ "deploymentNetwork": 6,
+ "name": "node68.washington.vicci.org",
+ "created": "2014-05-20T16:19:08.244Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 336,
+ "model": "core.sliver",
+ "fields": {
+ "node": 450,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.305Z",
+ "slice": 13,
+ "deploymentNetwork": 5,
+ "name": "node67.stanford.vicci.org",
+ "created": "2014-05-20T16:19:08.305Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 337,
+ "model": "core.sliver",
+ "fields": {
+ "node": 593,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.403Z",
+ "slice": 13,
+ "deploymentNetwork": 7,
+ "name": "node70.princeton.vicci.org",
+ "created": "2014-05-20T16:19:08.397Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 338,
+ "model": "core.sliver",
+ "fields": {
+ "node": 520,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.421Z",
+ "slice": 13,
+ "deploymentNetwork": 6,
+ "name": "node67.washington.vicci.org",
+ "created": "2014-05-20T16:19:08.421Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 339,
+ "model": "core.sliver",
+ "fields": {
+ "node": 449,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.465Z",
+ "slice": 13,
+ "deploymentNetwork": 5,
+ "name": "node66.stanford.vicci.org",
+ "created": "2014-05-20T16:19:08.465Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 340,
+ "model": "core.sliver",
+ "fields": {
+ "node": 592,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.555Z",
+ "slice": 13,
+ "deploymentNetwork": 7,
+ "name": "node69.princeton.vicci.org",
+ "created": "2014-05-20T16:19:08.555Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 341,
+ "model": "core.sliver",
+ "fields": {
+ "node": 519,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.567Z",
+ "slice": 13,
+ "deploymentNetwork": 6,
+ "name": "node66.washington.vicci.org",
+ "created": "2014-05-20T16:19:08.567Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 342,
+ "model": "core.sliver",
+ "fields": {
+ "node": 591,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.788Z",
+ "slice": 13,
+ "deploymentNetwork": 7,
+ "name": "node68.princeton.vicci.org",
+ "created": "2014-05-20T16:19:08.788Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 343,
+ "model": "core.sliver",
+ "fields": {
+ "node": 590,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.903Z",
+ "slice": 13,
+ "deploymentNetwork": 7,
+ "name": "node67.princeton.vicci.org",
+ "created": "2014-05-20T16:19:08.903Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 344,
+ "model": "core.sliver",
+ "fields": {
+ "node": 589,
+ "instance_name": null,
+ "updated": "2014-05-20T16:19:08.995Z",
+ "slice": 13,
+ "deploymentNetwork": 7,
+ "name": "node66.princeton.vicci.org",
+ "created": "2014-05-20T16:19:08.995Z",
+ "ip": null,
+ "image": 1,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 345,
+ "model": "core.sliver",
+ "fields": {
+ "node": 535,
+ "instance_name": null,
+ "updated": "2014-05-20T17:55:00.654Z",
+ "slice": 16,
+ "deploymentNetwork": 7,
+ "name": "Analytics",
+ "created": "2014-05-20T17:55:00.654Z",
+ "ip": null,
+ "image": 1,
+ "creator": 8,
+ "numberCores": 0,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 346,
+ "model": "core.sliver",
+ "fields": {
+ "node": 384,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.304Z",
+ "slice": 16,
+ "deploymentNetwork": 5,
+ "name": "node1.stanford.vicci.org",
+ "created": "2014-05-20T23:45:35.304Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 347,
+ "model": "core.sliver",
+ "fields": {
+ "node": 454,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.322Z",
+ "slice": 16,
+ "deploymentNetwork": 6,
+ "name": "node1.washington.vicci.org",
+ "created": "2014-05-20T23:45:35.322Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 348,
+ "model": "core.sliver",
+ "fields": {
+ "node": 385,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.397Z",
+ "slice": 16,
+ "deploymentNetwork": 5,
+ "name": "node2.stanford.vicci.org",
+ "created": "2014-05-20T23:45:35.397Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 349,
+ "model": "core.sliver",
+ "fields": {
+ "node": 455,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.436Z",
+ "slice": 16,
+ "deploymentNetwork": 6,
+ "name": "node2.washington.vicci.org",
+ "created": "2014-05-20T23:45:35.436Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 350,
+ "model": "core.sliver",
+ "fields": {
+ "node": 524,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.461Z",
+ "slice": 16,
+ "deploymentNetwork": 7,
+ "name": "node1.princeton.vicci.org",
+ "created": "2014-05-20T23:45:35.461Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 351,
+ "model": "core.sliver",
+ "fields": {
+ "node": 386,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.472Z",
+ "slice": 16,
+ "deploymentNetwork": 5,
+ "name": "node3.stanford.vicci.org",
+ "created": "2014-05-20T23:45:35.472Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 352,
+ "model": "core.sliver",
+ "fields": {
+ "node": 456,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.508Z",
+ "slice": 16,
+ "deploymentNetwork": 6,
+ "name": "node3.washington.vicci.org",
+ "created": "2014-05-20T23:45:35.508Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 353,
+ "model": "core.sliver",
+ "fields": {
+ "node": 525,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.565Z",
+ "slice": 16,
+ "deploymentNetwork": 7,
+ "name": "node2.princeton.vicci.org",
+ "created": "2014-05-20T23:45:35.565Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 354,
+ "model": "core.sliver",
+ "fields": {
+ "node": 457,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.707Z",
+ "slice": 16,
+ "deploymentNetwork": 6,
+ "name": "node4.washington.vicci.org",
+ "created": "2014-05-20T23:45:35.706Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 355,
+ "model": "core.sliver",
+ "fields": {
+ "node": 526,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.812Z",
+ "slice": 16,
+ "deploymentNetwork": 7,
+ "name": "node3.princeton.vicci.org",
+ "created": "2014-05-20T23:45:35.812Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 356,
+ "model": "core.sliver",
+ "fields": {
+ "node": 458,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.860Z",
+ "slice": 16,
+ "deploymentNetwork": 6,
+ "name": "node5.washington.vicci.org",
+ "created": "2014-05-20T23:45:35.860Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 357,
+ "model": "core.sliver",
+ "fields": {
+ "node": 527,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.887Z",
+ "slice": 16,
+ "deploymentNetwork": 7,
+ "name": "node4.princeton.vicci.org",
+ "created": "2014-05-20T23:45:35.887Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 358,
+ "model": "core.sliver",
+ "fields": {
+ "node": 459,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.926Z",
+ "slice": 16,
+ "deploymentNetwork": 6,
+ "name": "node6.washington.vicci.org",
+ "created": "2014-05-20T23:45:35.926Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 359,
+ "model": "core.sliver",
+ "fields": {
+ "node": 528,
+ "instance_name": null,
+ "updated": "2014-05-20T23:45:35.961Z",
+ "slice": 16,
+ "deploymentNetwork": 7,
+ "name": "node5.princeton.vicci.org",
+ "created": "2014-05-20T23:45:35.961Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 360,
+ "model": "core.sliver",
+ "fields": {
+ "node": 387,
+ "instance_name": null,
+ "updated": "2014-05-20T23:46:01.919Z",
+ "slice": 16,
+ "deploymentNetwork": 5,
+ "name": "node4.stanford.vicci.org",
+ "created": "2014-05-20T23:46:01.919Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 361,
+ "model": "core.sliver",
+ "fields": {
+ "node": 388,
+ "instance_name": null,
+ "updated": "2014-05-20T23:46:01.987Z",
+ "slice": 16,
+ "deploymentNetwork": 5,
+ "name": "node5.stanford.vicci.org",
+ "created": "2014-05-20T23:46:01.987Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 362,
+ "model": "core.sliver",
+ "fields": {
+ "node": 389,
+ "instance_name": null,
+ "updated": "2014-05-20T23:46:02.054Z",
+ "slice": 16,
+ "deploymentNetwork": 5,
+ "name": "node6.stanford.vicci.org",
+ "created": "2014-05-20T23:46:02.054Z",
+ "ip": null,
+ "image": 2,
+ "creator": 7,
+ "numberCores": 1,
+ "instance_id": null,
+ "enacted": null
+ }
+},
+{
+ "pk": 1,
+ "model": "core.reservation",
+ "fields": {
+ "updated": "2013-12-18T23:32:41.619Z",
+ "slice": 9,
+ "created": "2013-12-18T23:32:07.665Z",
+ "startTime": "2013-12-20T20:31:42Z",
+ "duration": 48,
+ "enacted": null
+ }
+},
+{
+ "pk": 2,
+ "model": "core.reservation",
+ "fields": {
+ "updated": "2013-12-18T23:34:02.148Z",
+ "slice": 8,
+ "created": "2013-12-18T23:33:27.591Z",
+ "startTime": "2013-12-20T20:33:23Z",
+ "duration": 48,
+ "enacted": null
+ }
+},
+{
+ "pk": 3,
+ "model": "core.reservation",
+ "fields": {
+ "updated": "2013-12-18T23:35:45.483Z",
+ "slice": 13,
+ "created": "2013-12-18T23:34:55.406Z",
+ "startTime": "2013-12-20T20:34:32Z",
+ "duration": 24,
+ "enacted": null
+ }
+},
+{
+ "pk": 4,
+ "model": "core.reservation",
+ "fields": {
+ "updated": "2013-12-18T23:35:25.727Z",
+ "slice": 13,
+ "created": "2013-12-18T23:34:55.407Z",
+ "startTime": "2013-12-23T20:34:49Z",
+ "duration": 24,
+ "enacted": null
+ }
+},
+{
+ "pk": 1,
+ "model": "core.reservedresource",
+ "fields": {
+ "updated": "2013-12-18T23:32:41.622Z",
+ "resource": 8,
+ "quantity": 5,
+ "created": "2013-12-18T23:32:41.622Z",
+ "reservationSet": 1,
+ "sliver": 78,
+ "enacted": null
+ }
+},
+{
+ "pk": 2,
+ "model": "core.reservedresource",
+ "fields": {
+ "updated": "2013-12-18T23:34:02.152Z",
+ "resource": 8,
+ "quantity": 5,
+ "created": "2013-12-18T23:34:02.152Z",
+ "reservationSet": 2,
+ "sliver": 77,
+ "enacted": null
+ }
+},
+{
+ "pk": 3,
+ "model": "core.reservedresource",
+ "fields": {
+ "updated": "2013-12-18T23:35:25.731Z",
+ "resource": 8,
+ "quantity": 1,
+ "created": "2013-12-18T23:35:25.731Z",
+ "reservationSet": 4,
+ "sliver": 84,
+ "enacted": null
+ }
+},
+{
+ "pk": 4,
+ "model": "core.reservedresource",
+ "fields": {
+ "updated": "2013-12-18T23:35:25.732Z",
+ "resource": 8,
+ "quantity": 1,
+ "created": "2013-12-18T23:35:25.732Z",
+ "reservationSet": 4,
+ "sliver": 85,
+ "enacted": null
+ }
+},
+{
+ "pk": 5,
+ "model": "core.reservedresource",
+ "fields": {
+ "updated": "2013-12-18T23:35:25.733Z",
+ "resource": 8,
+ "quantity": 1,
+ "created": "2013-12-18T23:35:25.733Z",
+ "reservationSet": 4,
+ "sliver": 86,
+ "enacted": null
+ }
+},
+{
+ "pk": 6,
+ "model": "core.reservedresource",
+ "fields": {
+ "updated": "2013-12-18T23:35:45.486Z",
+ "resource": 8,
+ "quantity": 1,
+ "created": "2013-12-18T23:35:45.486Z",
+ "reservationSet": 3,
+ "sliver": 84,
+ "enacted": null
+ }
+},
+{
+ "pk": 7,
+ "model": "core.reservedresource",
+ "fields": {
+ "updated": "2013-12-18T23:35:45.488Z",
+ "resource": 8,
+ "quantity": 1,
+ "created": "2013-12-18T23:35:45.487Z",
+ "reservationSet": 3,
+ "sliver": 85,
+ "enacted": null
+ }
+},
+{
+ "pk": 8,
+ "model": "core.reservedresource",
+ "fields": {
+ "updated": "2013-12-18T23:35:45.488Z",
+ "resource": 8,
+ "quantity": 1,
+ "created": "2013-12-18T23:35:45.488Z",
+ "reservationSet": 3,
+ "sliver": 86,
+ "enacted": null
}
},
{
@@ -6191,27 +10526,13 @@
"guaranteedBandwidth": 0,
"description": "Connect a sliver to the public network using dedicated public IPv4 address",
"created": "2013-12-09T14:15:16.899Z",
- "sharedNetworkName": "",
- "updated": "2013-12-09T14:15:16.899Z",
- "visibility": "private",
- "translation": "none",
- "sharedNetworkId": "",
- "name": "dedicated-public-IPv4"
- }
-},
-{
- "pk": 2,
- "model": "core.networktemplate",
- "fields": {
- "guaranteedBandwidth": 0,
- "description": "For PlanetLab compatibility: connect to the public network by sharing the node's public IP address.",
- "created": "2013-12-09T14:16:12.358Z",
- "sharedNetworkName": "",
- "updated": "2013-12-09T14:16:12.358Z",
+ "sharedNetworkName": "ext-net",
+ "updated": "2014-05-12T19:23:35.239Z",
"visibility": "public",
+ "name": "Public dedicated IPv4",
"translation": "none",
"sharedNetworkId": "",
- "name": "planetlab-legacy"
+ "enacted": "2014-05-12T19:24:09Z"
}
},
{
@@ -6219,14 +10540,15 @@
"model": "core.networktemplate",
"fields": {
"guaranteedBandwidth": 0,
- "description": "Connect a sliver to the public network via NAT",
+ "description": "Connect a sliver to the public network via NAT, with port forwarding",
"created": "2013-12-09T14:17:29.551Z",
"sharedNetworkName": "nat-net",
- "updated": "2013-12-09T14:17:29.551Z",
+ "updated": "2014-05-12T19:22:45.473Z",
"visibility": "private",
+ "name": "Public shared IPv4",
"translation": "NAT",
"sharedNetworkId": "51d641ba-9e1e-46f5-8069-bf4a929f851f",
- "name": "private-IPv4-plus-NAT"
+ "enacted": "2014-05-12T19:23:54Z"
}
},
{
@@ -6237,11 +10559,12 @@
"description": "A private virtual network",
"created": "2013-12-09T14:18:02.336Z",
"sharedNetworkName": "",
- "updated": "2013-12-09T14:18:02.336Z",
+ "updated": "2014-05-12T19:22:24.929Z",
"visibility": "private",
+ "name": "Private",
"translation": "none",
"sharedNetworkId": "",
- "name": "private-virtual"
+ "enacted": "2014-05-12T19:23:30Z"
}
},
{
@@ -6261,7 +10584,8 @@
"network_id": "7cb4291d-f8d3-4797-83b0-8deefd85bdf5",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6281,7 +10605,8 @@
"network_id": "810b4cb8-9d8e-4eee-becc-676785a07725",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6301,7 +10626,8 @@
"network_id": "4b37f048-11de-4ddd-acaf-2fc5e8716f0e",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6321,7 +10647,8 @@
"network_id": "684386d7-1286-4e58-acda-8ff45deac99e",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6341,7 +10668,8 @@
"network_id": "fa090174-ec59-4b7a-812b-9206d911fb61",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6361,7 +10689,50 @@
"network_id": "017a3914-5eaf-4bcb-8609-6d17ebcdf075",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 7,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "64.57.18.32/28",
+ "updated": "2013-12-09T14:38:11.552Z",
+ "subnet_id": "4438dfbd-099a-4229-bd86-cf29478a009b",
+ "name": "VINI-I2Houston-public",
+ "created": "2013-12-09T14:38:11.552Z",
+ "permitAllSlices": false,
+ "permittedSlices": [],
+ "labels": "public-net",
+ "guaranteedBandwidth": 0,
+ "network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7",
+ "template": 1,
+ "owner": 10,
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 8,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "64.57.18.32/28",
+ "updated": "2013-12-09T14:39:51.262Z",
+ "subnet_id": "4438dfbd-099a-4229-bd86-cf29478a009b",
+ "name": "VINI-I2Houston-public",
+ "created": "2013-12-09T14:39:51.262Z",
+ "permitAllSlices": false,
+ "permittedSlices": [],
+ "labels": "public-net",
+ "guaranteedBandwidth": 0,
+ "network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7",
+ "template": 1,
+ "owner": 10,
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6381,7 +10752,8 @@
"network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6401,7 +10773,8 @@
"network_id": "ecdbaf66-b659-4d59-b0b7-1bf6d232ccba",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6421,7 +10794,8 @@
"network_id": "ae4d42e8-a97c-440d-9533-4bcbd62dfb00",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6441,7 +10815,8 @@
"network_id": "",
"template": 4,
"owner": 11,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6461,7 +10836,8 @@
"network_id": "",
"template": 4,
"owner": 12,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6481,7 +10857,8 @@
"network_id": "",
"template": 4,
"owner": 13,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6501,7 +10878,8 @@
"network_id": "",
"template": 1,
"owner": 14,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -6521,15 +10899,230 @@
"network_id": "",
"template": 3,
"owner": 15,
- "ports": ""
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 17,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "",
+ "updated": "2013-12-18T22:05:09.944Z",
+ "subnet_id": "",
+ "name": "infrastructure-private",
+ "created": "2013-12-18T22:05:09.944Z",
+ "permitAllSlices": false,
+ "permittedSlices": [],
+ "labels": "",
+ "guaranteedBandwidth": 0,
+ "network_id": "",
+ "template": 4,
+ "owner": 10,
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 18,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "",
+ "updated": "2013-12-18T22:05:50.112Z",
+ "subnet_id": "",
+ "name": "infrastructure-public",
+ "created": "2013-12-18T22:05:50.112Z",
+ "permitAllSlices": false,
+ "permittedSlices": [],
+ "labels": "",
+ "guaranteedBandwidth": 0,
+ "network_id": "",
+ "template": 1,
+ "owner": 10,
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 19,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "",
+ "updated": "2013-12-18T22:13:17.310Z",
+ "subnet_id": "",
+ "name": "dnsdemux-private",
+ "created": "2013-12-18T22:13:17.310Z",
+ "permitAllSlices": false,
+ "permittedSlices": [],
+ "labels": "",
+ "guaranteedBandwidth": 0,
+ "network_id": "",
+ "template": 4,
+ "owner": 9,
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 20,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "",
+ "updated": "2013-12-18T22:13:38.194Z",
+ "subnet_id": "",
+ "name": "dnsdemux-public",
+ "created": "2013-12-18T22:13:38.194Z",
+ "permitAllSlices": false,
+ "permittedSlices": [],
+ "labels": "",
+ "guaranteedBandwidth": 0,
+ "network_id": "",
+ "template": 1,
+ "owner": 9,
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 21,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "",
+ "updated": "2013-12-18T22:16:19.797Z",
+ "subnet_id": "",
+ "name": "DnsRedir-private",
+ "created": "2013-12-18T22:16:19.797Z",
+ "permitAllSlices": false,
+ "permittedSlices": [],
+ "labels": "",
+ "guaranteedBandwidth": 0,
+ "network_id": "",
+ "template": 4,
+ "owner": 8,
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 22,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "",
+ "updated": "2013-12-18T22:16:38.335Z",
+ "subnet_id": "",
+ "name": "DnsRedir-public",
+ "created": "2013-12-18T22:16:38.335Z",
+ "permitAllSlices": false,
+ "permittedSlices": [],
+ "labels": "",
+ "guaranteedBandwidth": 0,
+ "network_id": "",
+ "template": 1,
+ "owner": 8,
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 23,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "",
+ "updated": "2013-12-19T00:13:55.598Z",
+ "subnet_id": "",
+ "name": "HyperCache-private",
+ "created": "2013-12-18T22:24:19.109Z",
+ "permitAllSlices": false,
+ "permittedSlices": [
+ 6,
+ 8
+ ],
+ "labels": "",
+ "guaranteedBandwidth": 0,
+ "network_id": "",
+ "template": 4,
+ "owner": 4,
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 24,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "",
+ "updated": "2013-12-18T22:24:38.066Z",
+ "subnet_id": "",
+ "name": "HyperCache-public",
+ "created": "2013-12-18T22:24:38.066Z",
+ "permitAllSlices": false,
+ "permittedSlices": [],
+ "labels": "",
+ "guaranteedBandwidth": 0,
+ "network_id": "",
+ "template": 1,
+ "owner": 4,
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 25,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "",
+ "updated": "2013-12-18T22:26:46.435Z",
+ "subnet_id": "",
+ "name": "Syndicate-private",
+ "created": "2013-12-18T22:26:46.435Z",
+ "permitAllSlices": false,
+ "permittedSlices": [],
+ "labels": "",
+ "guaranteedBandwidth": 0,
+ "network_id": "",
+ "template": 4,
+ "owner": 6,
+ "ports": "",
+ "enacted": null
+ }
+},
+{
+ "pk": 26,
+ "model": "core.network",
+ "fields": {
+ "router_id": "",
+ "subnet": "",
+ "updated": "2013-12-18T22:27:12.647Z",
+ "subnet_id": "",
+ "name": "Syndicate-public",
+ "created": "2013-12-18T22:27:12.647Z",
+ "permitAllSlices": false,
+ "permittedSlices": [],
+ "labels": "",
+ "guaranteedBandwidth": 0,
+ "network_id": "",
+ "template": 1,
+ "owner": 6,
+ "ports": "",
+ "enacted": null
}
},
{
"pk": 1,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:51:09.711Z",
"slice": 11,
+ "updated": "2013-12-13T21:51:09.711Z",
+ "enacted": null,
"network": 12,
"created": "2013-12-13T21:51:09.711Z"
}
@@ -6538,8 +11131,9 @@
"pk": 2,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:53:15.909Z",
"slice": 12,
+ "updated": "2013-12-13T21:53:15.909Z",
+ "enacted": null,
"network": 13,
"created": "2013-12-13T21:53:15.909Z"
}
@@ -6548,8 +11142,9 @@
"pk": 3,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:53:15.914Z",
"slice": 12,
+ "updated": "2013-12-13T21:53:15.914Z",
+ "enacted": null,
"network": 12,
"created": "2013-12-13T21:53:15.914Z"
}
@@ -6558,8 +11153,9 @@
"pk": 4,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:56:04.235Z",
"slice": 13,
+ "updated": "2013-12-13T21:56:04.235Z",
+ "enacted": null,
"network": 14,
"created": "2013-12-13T21:56:04.235Z"
}
@@ -6568,8 +11164,9 @@
"pk": 5,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:56:04.241Z",
"slice": 13,
+ "updated": "2013-12-13T21:56:04.241Z",
+ "enacted": null,
"network": 12,
"created": "2013-12-13T21:56:04.241Z"
}
@@ -6578,8 +11175,9 @@
"pk": 6,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:56:04.246Z",
"slice": 13,
+ "updated": "2013-12-13T21:56:04.246Z",
+ "enacted": null,
"network": 13,
"created": "2013-12-13T21:56:04.246Z"
}
@@ -6588,8 +11186,9 @@
"pk": 7,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:57:56.826Z",
"slice": 14,
+ "updated": "2013-12-13T21:57:56.826Z",
+ "enacted": null,
"network": 15,
"created": "2013-12-13T21:57:56.826Z"
}
@@ -6598,8 +11197,9 @@
"pk": 8,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:57:56.831Z",
"slice": 14,
+ "updated": "2013-12-13T21:57:56.831Z",
+ "enacted": null,
"network": 13,
"created": "2013-12-13T21:57:56.831Z"
}
@@ -6608,8 +11208,9 @@
"pk": 9,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:57:56.836Z",
"slice": 14,
+ "updated": "2013-12-13T21:57:56.836Z",
+ "enacted": null,
"network": 12,
"created": "2013-12-13T21:57:56.836Z"
}
@@ -6618,8 +11219,9 @@
"pk": 10,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T22:01:14.038Z",
"slice": 15,
+ "updated": "2013-12-13T22:01:14.038Z",
+ "enacted": null,
"network": 16,
"created": "2013-12-13T22:01:14.038Z"
}
@@ -6628,18 +11230,152 @@
"pk": 11,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T22:01:14.043Z",
"slice": 15,
+ "updated": "2013-12-13T22:01:14.043Z",
+ "enacted": null,
"network": 14,
"created": "2013-12-13T22:01:14.043Z"
}
},
{
+ "pk": 12,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 10,
+ "updated": "2013-12-18T22:06:00.381Z",
+ "enacted": null,
+ "network": 17,
+ "created": "2013-12-18T22:06:00.381Z"
+ }
+},
+{
+ "pk": 13,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 10,
+ "updated": "2013-12-18T22:06:00.386Z",
+ "enacted": null,
+ "network": 18,
+ "created": "2013-12-18T22:06:00.386Z"
+ }
+},
+{
+ "pk": 14,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 9,
+ "updated": "2013-12-18T22:13:42.177Z",
+ "enacted": null,
+ "network": 19,
+ "created": "2013-12-18T22:13:42.177Z"
+ }
+},
+{
+ "pk": 15,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 9,
+ "updated": "2013-12-18T22:13:42.183Z",
+ "enacted": null,
+ "network": 20,
+ "created": "2013-12-18T22:13:42.183Z"
+ }
+},
+{
+ "pk": 16,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 8,
+ "updated": "2013-12-18T22:16:41.007Z",
+ "enacted": null,
+ "network": 21,
+ "created": "2013-12-18T22:16:41.007Z"
+ }
+},
+{
+ "pk": 17,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 8,
+ "updated": "2013-12-18T22:16:41.013Z",
+ "enacted": null,
+ "network": 22,
+ "created": "2013-12-18T22:16:41.013Z"
+ }
+},
+{
+ "pk": 18,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 4,
+ "updated": "2013-12-18T22:24:44.997Z",
+ "enacted": null,
+ "network": 23,
+ "created": "2013-12-18T22:24:44.997Z"
+ }
+},
+{
+ "pk": 19,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 4,
+ "updated": "2013-12-18T22:24:45.003Z",
+ "enacted": null,
+ "network": 24,
+ "created": "2013-12-18T22:24:45.003Z"
+ }
+},
+{
+ "pk": 20,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 6,
+ "updated": "2013-12-18T22:27:16.953Z",
+ "enacted": null,
+ "network": 25,
+ "created": "2013-12-18T22:27:16.953Z"
+ }
+},
+{
+ "pk": 21,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 6,
+ "updated": "2013-12-18T22:27:16.959Z",
+ "enacted": null,
+ "network": 26,
+ "created": "2013-12-18T22:27:16.959Z"
+ }
+},
+{
+ "pk": 22,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 6,
+ "updated": "2013-12-19T00:14:36.949Z",
+ "enacted": null,
+ "network": 23,
+ "created": "2013-12-19T00:14:36.949Z"
+ }
+},
+{
+ "pk": 23,
+ "model": "core.networkslice",
+ "fields": {
+ "slice": 8,
+ "updated": "2013-12-19T00:15:11.362Z",
+ "enacted": null,
+ "network": 23,
+ "created": "2013-12-19T00:15:11.362Z"
+ }
+},
+{
"pk": 1,
"model": "core.networkparametertype",
"fields": {
- "updated": "2013-12-09T14:43:25.664Z",
"description": "End of IPv4 address allocation pool",
+ "updated": "2013-12-09T14:43:25.664Z",
+ "enacted": null,
"name": "allocation-pool-end",
"created": "2013-12-09T14:43:25.664Z"
}
@@ -6648,8 +11384,9 @@
"pk": 2,
"model": "core.networkparametertype",
"fields": {
- "updated": "2013-12-09T14:43:45.564Z",
"description": "Start of IPv4 address allocation pool",
+ "updated": "2013-12-09T14:43:45.564Z",
+ "enacted": null,
"name": "allocation-pool-start",
"created": "2013-12-09T14:43:45.564Z"
}
@@ -6658,24809 +11395,32894 @@
"pk": 3,
"model": "core.networkparametertype",
"fields": {
- "updated": "2013-12-09T14:44:05.513Z",
"description": "CIDR block for network",
+ "updated": "2013-12-09T14:44:05.513Z",
+ "enacted": null,
"name": "cidr",
"created": "2013-12-09T14:44:05.513Z"
}
},
{
- "pk": 12,
+ "pk": 14,
"model": "core.account",
"fields": {
- "updated": "2013-12-13T22:19:42.679Z",
+ "updated": "2013-12-18T21:29:00.470Z",
+ "enacted": null,
"site": 10,
- "created": "2013-12-13T22:19:42.679Z"
+ "created": "2013-12-18T21:29:00.470Z"
}
},
{
- "pk": 13,
+ "pk": 15,
"model": "core.account",
"fields": {
- "updated": "2013-12-13T22:19:42.705Z",
+ "updated": "2013-12-18T21:29:00.495Z",
+ "enacted": null,
"site": 22,
- "created": "2013-12-13T22:19:42.705Z"
+ "created": "2013-12-18T21:29:00.495Z"
}
},
{
- "pk": 53,
+ "pk": 16,
+ "model": "core.account",
+ "fields": {
+ "updated": "2013-12-18T21:29:00.502Z",
+ "enacted": null,
+ "site": 24,
+ "created": "2013-12-18T21:29:00.502Z"
+ }
+},
+{
+ "pk": 63,
"model": "core.invoice",
"fields": {
- "date": "2013-11-13T22:00:00Z",
- "updated": "2013-12-13T22:19:55.029Z",
- "account": 12,
- "created": "2013-12-13T22:19:55.029Z"
+ "date": "2013-11-18T21:00:00Z",
+ "updated": "2013-12-18T21:29:16.421Z",
+ "enacted": null,
+ "account": 14,
+ "created": "2013-12-18T21:29:16.421Z"
}
},
{
- "pk": 54,
+ "pk": 64,
"model": "core.invoice",
"fields": {
- "date": "2013-11-17T22:00:00Z",
- "updated": "2013-12-13T22:19:55.041Z",
- "account": 12,
- "created": "2013-12-13T22:19:55.041Z"
+ "date": "2013-11-24T21:00:00Z",
+ "updated": "2013-12-18T21:29:16.434Z",
+ "enacted": null,
+ "account": 14,
+ "created": "2013-12-18T21:29:16.434Z"
}
},
{
- "pk": 55,
+ "pk": 65,
"model": "core.invoice",
"fields": {
- "date": "2013-11-24T22:00:00Z",
- "updated": "2013-12-13T22:19:55.604Z",
- "account": 12,
- "created": "2013-12-13T22:19:55.604Z"
+ "date": "2013-12-01T21:00:00Z",
+ "updated": "2013-12-18T21:29:17.229Z",
+ "enacted": null,
+ "account": 14,
+ "created": "2013-12-18T21:29:17.229Z"
}
},
{
- "pk": 56,
+ "pk": 66,
"model": "core.invoice",
"fields": {
- "date": "2013-12-01T22:00:00Z",
- "updated": "2013-12-13T22:19:56.482Z",
- "account": 12,
- "created": "2013-12-13T22:19:56.482Z"
+ "date": "2013-12-08T21:00:00Z",
+ "updated": "2013-12-18T21:29:18.213Z",
+ "enacted": null,
+ "account": 14,
+ "created": "2013-12-18T21:29:18.212Z"
}
},
{
- "pk": 57,
+ "pk": 67,
"model": "core.invoice",
"fields": {
- "date": "2013-12-08T22:00:00Z",
- "updated": "2013-12-13T22:19:57.362Z",
- "account": 12,
- "created": "2013-12-13T22:19:57.362Z"
+ "date": "2013-12-15T21:00:00Z",
+ "updated": "2013-12-18T21:29:19.091Z",
+ "enacted": null,
+ "account": 14,
+ "created": "2013-12-18T21:29:19.091Z"
}
},
{
- "pk": 58,
+ "pk": 68,
"model": "core.invoice",
"fields": {
- "date": "2013-11-13T22:00:00Z",
- "updated": "2013-12-13T22:19:58.399Z",
- "account": 13,
- "created": "2013-12-13T22:19:58.399Z"
+ "date": "2013-11-18T21:00:00Z",
+ "updated": "2013-12-18T21:29:20.175Z",
+ "enacted": null,
+ "account": 15,
+ "created": "2013-12-18T21:29:20.175Z"
}
},
{
- "pk": 59,
+ "pk": 69,
"model": "core.invoice",
"fields": {
- "date": "2013-11-17T22:00:00Z",
- "updated": "2013-12-13T22:19:58.414Z",
- "account": 13,
- "created": "2013-12-13T22:19:58.414Z"
+ "date": "2013-11-24T21:00:00Z",
+ "updated": "2013-12-18T21:29:20.193Z",
+ "enacted": null,
+ "account": 15,
+ "created": "2013-12-18T21:29:20.193Z"
}
},
{
- "pk": 60,
+ "pk": 70,
"model": "core.invoice",
"fields": {
- "date": "2013-11-24T22:00:00Z",
- "updated": "2013-12-13T22:19:59.616Z",
- "account": 13,
- "created": "2013-12-13T22:19:59.616Z"
+ "date": "2013-12-01T21:00:00Z",
+ "updated": "2013-12-18T21:29:22.239Z",
+ "enacted": null,
+ "account": 15,
+ "created": "2013-12-18T21:29:22.239Z"
}
},
{
- "pk": 61,
+ "pk": 71,
"model": "core.invoice",
"fields": {
- "date": "2013-12-01T22:00:00Z",
- "updated": "2013-12-13T22:20:01.950Z",
- "account": 13,
- "created": "2013-12-13T22:20:01.950Z"
+ "date": "2013-12-08T21:00:00Z",
+ "updated": "2013-12-18T21:29:24.550Z",
+ "enacted": null,
+ "account": 15,
+ "created": "2013-12-18T21:29:24.550Z"
}
},
{
- "pk": 62,
+ "pk": 72,
"model": "core.invoice",
"fields": {
- "date": "2013-12-08T22:00:00Z",
- "updated": "2013-12-13T22:20:03.878Z",
- "account": 13,
- "created": "2013-12-13T22:20:03.878Z"
+ "date": "2013-12-15T21:00:00Z",
+ "updated": "2013-12-18T21:29:26.820Z",
+ "enacted": null,
+ "account": 15,
+ "created": "2013-12-18T21:29:26.820Z"
}
},
{
- "pk": 89,
+ "pk": 73,
+ "model": "core.invoice",
+ "fields": {
+ "date": "2013-11-18T21:00:00Z",
+ "updated": "2013-12-18T21:29:29.206Z",
+ "enacted": null,
+ "account": 16,
+ "created": "2013-12-18T21:29:29.206Z"
+ }
+},
+{
+ "pk": 74,
+ "model": "core.invoice",
+ "fields": {
+ "date": "2013-11-24T21:00:00Z",
+ "updated": "2013-12-18T21:29:29.222Z",
+ "enacted": null,
+ "account": 16,
+ "created": "2013-12-18T21:29:29.222Z"
+ }
+},
+{
+ "pk": 75,
+ "model": "core.invoice",
+ "fields": {
+ "date": "2013-12-01T21:00:00Z",
+ "updated": "2013-12-18T21:29:29.538Z",
+ "enacted": null,
+ "account": 16,
+ "created": "2013-12-18T21:29:29.538Z"
+ }
+},
+{
+ "pk": 76,
+ "model": "core.invoice",
+ "fields": {
+ "date": "2013-12-08T21:00:00Z",
+ "updated": "2013-12-18T21:29:29.894Z",
+ "enacted": null,
+ "account": 16,
+ "created": "2013-12-18T21:29:29.894Z"
+ }
+},
+{
+ "pk": 77,
+ "model": "core.invoice",
+ "fields": {
+ "date": "2013-12-15T21:00:00Z",
+ "updated": "2013-12-18T21:29:30.251Z",
+ "enacted": null,
+ "account": 16,
+ "created": "2013-12-18T21:29:30.251Z"
+ }
+},
+{
+ "pk": 104,
"model": "core.usableobject",
"fields": {
- "updated": "2013-12-13T22:19:42.730Z",
- "name": "node20.gt.vicci.org",
- "created": "2013-12-13T22:19:42.730Z"
+ "updated": "2013-12-18T21:29:00.529Z",
+ "enacted": null,
+ "name": "node17.washington.vicci.org",
+ "created": "2013-12-18T21:29:00.529Z"
}
},
{
- "pk": 90,
+ "pk": 105,
"model": "core.usableobject",
"fields": {
- "updated": "2013-12-13T22:19:43.483Z",
- "name": "node22.gt.vicci.org",
- "created": "2013-12-13T22:19:43.483Z"
- }
-},
-{
- "pk": 91,
- "model": "core.usableobject",
- "fields": {
- "updated": "2013-12-13T22:19:44.237Z",
- "name": "node24.gt.vicci.org",
- "created": "2013-12-13T22:19:44.237Z"
- }
-},
-{
- "pk": 92,
- "model": "core.usableobject",
- "fields": {
- "updated": "2013-12-13T22:19:44.992Z",
- "name": "node29.gt.vicci.org",
- "created": "2013-12-13T22:19:44.992Z"
- }
-},
-{
- "pk": 93,
- "model": "core.usableobject",
- "fields": {
- "updated": "2013-12-13T22:19:45.806Z",
- "name": "node30.princeton.vicci.org",
- "created": "2013-12-13T22:19:45.806Z"
- }
-},
-{
- "pk": 94,
- "model": "core.usableobject",
- "fields": {
- "updated": "2013-12-13T22:19:47.339Z",
+ "updated": "2013-12-18T21:29:01.289Z",
+ "enacted": null,
"name": "node16.washington.vicci.org",
- "created": "2013-12-13T22:19:47.339Z"
+ "created": "2013-12-18T21:29:01.289Z"
}
},
{
- "pk": 95,
+ "pk": 106,
"model": "core.usableobject",
"fields": {
- "updated": "2013-12-13T22:19:48.112Z",
+ "updated": "2013-12-18T21:29:02.189Z",
+ "enacted": null,
+ "name": "node15.washington.vicci.org",
+ "created": "2013-12-18T21:29:02.189Z"
+ }
+},
+{
+ "pk": 107,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.178Z",
+ "enacted": null,
+ "name": "node14.washington.vicci.org",
+ "created": "2013-12-18T21:29:03.178Z"
+ }
+},
+{
+ "pk": 108,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.942Z",
+ "enacted": null,
+ "name": "node70.princeton.vicci.org",
+ "created": "2013-12-18T21:29:03.942Z"
+ }
+},
+{
+ "pk": 109,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:04.702Z",
+ "enacted": null,
+ "name": "node69.princeton.vicci.org",
+ "created": "2013-12-18T21:29:04.702Z"
+ }
+},
+{
+ "pk": 110,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:05.547Z",
+ "enacted": null,
+ "name": "node68.princeton.vicci.org",
+ "created": "2013-12-18T21:29:05.547Z"
+ }
+},
+{
+ "pk": 111,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:06.336Z",
+ "enacted": null,
+ "name": "node67.princeton.vicci.org",
+ "created": "2013-12-18T21:29:06.336Z"
+ }
+},
+{
+ "pk": 112,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.101Z",
+ "enacted": null,
+ "name": "node30.princeton.vicci.org",
+ "created": "2013-12-18T21:29:07.101Z"
+ }
+},
+{
+ "pk": 113,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:09.453Z",
+ "enacted": null,
"name": "node55.stanford.vicci.org",
- "created": "2013-12-13T22:19:48.112Z"
+ "created": "2013-12-18T21:29:09.453Z"
}
},
{
- "pk": 96,
+ "pk": 114,
"model": "core.usableobject",
"fields": {
- "updated": "2013-12-13T22:19:48.875Z",
- "name": "node23.princeton.vicci.org",
- "created": "2013-12-13T22:19:48.875Z"
- }
-},
-{
- "pk": 97,
- "model": "core.usableobject",
- "fields": {
- "updated": "2013-12-13T22:19:49.635Z",
- "name": "node15.princeton.vicci.org",
- "created": "2013-12-13T22:19:49.634Z"
- }
-},
-{
- "pk": 98,
- "model": "core.usableobject",
- "fields": {
- "updated": "2013-12-13T22:19:50.389Z",
- "name": "node33.princeton.vicci.org",
- "created": "2013-12-13T22:19:50.389Z"
- }
-},
-{
- "pk": 99,
- "model": "core.usableobject",
- "fields": {
- "updated": "2013-12-13T22:19:51.178Z",
- "name": "node1.stanford.vicci.org",
- "created": "2013-12-13T22:19:51.178Z"
- }
-},
-{
- "pk": 100,
- "model": "core.usableobject",
- "fields": {
- "updated": "2013-12-13T22:19:51.938Z",
- "name": "node20.washington.vicci.org",
- "created": "2013-12-13T22:19:51.938Z"
- }
-},
-{
- "pk": 101,
- "model": "core.usableobject",
- "fields": {
- "updated": "2013-12-13T22:19:52.691Z",
+ "updated": "2013-12-18T21:29:10.216Z",
+ "enacted": null,
"name": "node12.princeton.vicci.org",
- "created": "2013-12-13T22:19:52.691Z"
+ "created": "2013-12-18T21:29:10.216Z"
}
},
{
- "pk": 102,
+ "pk": 115,
"model": "core.usableobject",
"fields": {
- "updated": "2013-12-13T22:19:53.456Z",
+ "updated": "2013-12-18T21:29:10.975Z",
+ "enacted": null,
+ "name": "node20.washington.vicci.org",
+ "created": "2013-12-18T21:29:10.975Z"
+ }
+},
+{
+ "pk": 116,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:11.729Z",
+ "enacted": null,
+ "name": "node1.stanford.vicci.org",
+ "created": "2013-12-18T21:29:11.729Z"
+ }
+},
+{
+ "pk": 117,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:12.494Z",
+ "enacted": null,
+ "name": "node33.princeton.vicci.org",
+ "created": "2013-12-18T21:29:12.494Z"
+ }
+},
+{
+ "pk": 118,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:13.329Z",
+ "enacted": null,
+ "name": "node15.princeton.vicci.org",
+ "created": "2013-12-18T21:29:13.329Z"
+ }
+},
+{
+ "pk": 119,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:14.083Z",
+ "enacted": null,
+ "name": "node23.princeton.vicci.org",
+ "created": "2013-12-18T21:29:14.083Z"
+ }
+},
+{
+ "pk": 120,
+ "model": "core.usableobject",
+ "fields": {
+ "updated": "2013-12-18T21:29:14.847Z",
+ "enacted": null,
"name": "node10.princeton.vicci.org",
- "created": "2013-12-13T22:19:53.456Z"
+ "created": "2013-12-18T21:29:14.847Z"
}
},
{
- "pk": 103,
+ "pk": 121,
"model": "core.usableobject",
"fields": {
- "updated": "2013-12-13T22:19:54.216Z",
+ "updated": "2013-12-18T21:29:15.609Z",
+ "enacted": null,
"name": "node13.princeton.vicci.org",
- "created": "2013-12-13T22:19:54.216Z"
+ "created": "2013-12-18T21:29:15.609Z"
}
},
{
- "pk": 31,
+ "pk": 37,
"model": "core.payment",
"fields": {
- "date": "2013-11-28T03:00:00Z",
- "amount": 0.1176,
- "updated": "2013-12-13T22:19:58.245Z",
- "account": 12,
- "created": "2013-12-13T22:19:58.245Z"
+ "updated": "2013-12-18T21:29:19.973Z",
+ "created": "2013-12-18T21:29:19.973Z",
+ "account": 14,
+ "amount": 0.2968,
+ "date": "2013-12-03T02:00:00Z",
+ "enacted": null
}
},
{
- "pk": 32,
+ "pk": 38,
"model": "core.payment",
"fields": {
- "date": "2013-12-02T03:00:00Z",
- "amount": 14.9968,
- "updated": "2013-12-13T22:19:58.251Z",
- "account": 12,
- "created": "2013-12-13T22:19:58.251Z"
+ "updated": "2013-12-18T21:29:19.979Z",
+ "created": "2013-12-18T21:29:19.979Z",
+ "account": 14,
+ "amount": 21.14,
+ "date": "2013-12-09T02:00:00Z",
+ "enacted": null
}
},
{
- "pk": 33,
+ "pk": 39,
"model": "core.payment",
"fields": {
- "date": "2013-12-09T03:00:00Z",
- "amount": 24.8248,
- "updated": "2013-12-13T22:19:58.259Z",
- "account": 12,
- "created": "2013-12-13T22:19:58.259Z"
+ "updated": "2013-12-18T21:29:19.987Z",
+ "created": "2013-12-18T21:29:19.987Z",
+ "account": 14,
+ "amount": 24.3768,
+ "date": "2013-12-16T02:00:00Z",
+ "enacted": null
}
},
{
- "pk": 34,
+ "pk": 40,
"model": "core.payment",
"fields": {
- "date": "2013-11-28T03:00:00Z",
- "amount": 0.56,
- "updated": "2013-12-13T22:20:05.812Z",
- "account": 13,
- "created": "2013-12-13T22:20:05.812Z"
+ "updated": "2013-12-18T21:29:29.154Z",
+ "created": "2013-12-18T21:29:29.153Z",
+ "account": 15,
+ "amount": 0.3024,
+ "date": "2013-12-03T02:00:00Z",
+ "enacted": null
}
},
{
- "pk": 35,
+ "pk": 41,
"model": "core.payment",
"fields": {
- "date": "2013-12-02T03:00:00Z",
- "amount": 53.9224,
- "updated": "2013-12-13T22:20:05.825Z",
- "account": 13,
- "created": "2013-12-13T22:20:05.825Z"
+ "updated": "2013-12-18T21:29:29.166Z",
+ "created": "2013-12-18T21:29:29.166Z",
+ "account": 15,
+ "amount": 86.5536,
+ "date": "2013-12-09T02:00:00Z",
+ "enacted": null
}
},
{
- "pk": 36,
+ "pk": 42,
"model": "core.payment",
"fields": {
- "date": "2013-12-09T03:00:00Z",
- "amount": 86.436,
- "updated": "2013-12-13T22:20:05.834Z",
- "account": 13,
- "created": "2013-12-13T22:20:05.834Z"
+ "updated": "2013-12-18T21:29:29.174Z",
+ "created": "2013-12-18T21:29:29.174Z",
+ "account": 15,
+ "amount": 96.404,
+ "date": "2013-12-16T02:00:00Z",
+ "enacted": null
}
},
{
- "pk": 58321,
- "model": "core.charge",
+ "pk": 43,
+ "model": "core.payment",
"fields": {
- "updated": "2013-12-13T22:19:58.498Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.734Z",
- "amount": 0.3248,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 59,
- "date": "2013-11-13T22:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:30.620Z",
+ "created": "2013-12-18T21:29:30.620Z",
+ "account": 16,
+ "amount": 0.1848,
+ "date": "2013-12-03T02:00:00Z",
+ "enacted": null
}
},
{
- "pk": 58322,
- "model": "core.charge",
+ "pk": 44,
+ "model": "core.payment",
"fields": {
- "updated": "2013-12-13T22:19:58.590Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.744Z",
- "amount": 0.2464,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 59,
- "date": "2013-11-14T06:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:30.626Z",
+ "created": "2013-12-18T21:29:30.626Z",
+ "account": 16,
+ "amount": 8.5904,
+ "date": "2013-12-09T02:00:00Z",
+ "enacted": null
}
},
{
- "pk": 58323,
- "model": "core.charge",
+ "pk": 45,
+ "model": "core.payment",
"fields": {
- "updated": "2013-12-13T22:19:58.681Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.752Z",
- "amount": 0.3136,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 59,
- "date": "2013-11-14T14:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:30.634Z",
+ "created": "2013-12-18T21:29:30.634Z",
+ "account": 16,
+ "amount": 10.0016,
+ "date": "2013-12-16T02:00:00Z",
+ "enacted": null
}
},
{
- "pk": 58324,
+ "pk": 59761,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.772Z",
+ "updated": "2013-12-18T21:29:20.186Z",
"slice": 4,
- "created": "2013-12-13T22:19:42.760Z",
- "amount": 0.2576,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 59,
- "date": "2013-11-14T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58325,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.863Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.769Z",
- "amount": 0.2912,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 59,
- "date": "2013-11-15T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58326,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.971Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.777Z",
- "amount": 0.3136,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 59,
- "date": "2013-11-15T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58327,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.062Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.785Z",
- "amount": 0.14,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 59,
- "date": "2013-11-15T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58328,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.154Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.794Z",
- "amount": 0.224,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 59,
- "date": "2013-11-16T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58329,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.245Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.802Z",
- "amount": 0.224,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 59,
- "date": "2013-11-16T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58330,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.336Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.810Z",
- "amount": 0.2912,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 59,
- "date": "2013-11-16T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58331,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.427Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.818Z",
- "amount": 0.1288,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 59,
- "date": "2013-11-17T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58332,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.518Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.827Z",
+ "created": "2013-12-18T21:29:00.540Z",
"amount": 0.3024,
- "object": 89,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 4.32,
- "invoice": 59,
- "date": "2013-11-17T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 68,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58333,
+ "pk": 59762,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:59.609Z",
+ "updated": "2013-12-18T21:29:20.302Z",
"slice": 4,
- "created": "2013-12-13T22:19:42.835Z",
- "amount": 0.1456,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 59,
- "date": "2013-11-17T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58334,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.720Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.843Z",
- "amount": 0.1792,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 60,
- "date": "2013-11-18T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58335,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.812Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.852Z",
- "amount": 0.1512,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 60,
- "date": "2013-11-18T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58336,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.903Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.860Z",
- "amount": 0.168,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.4,
- "invoice": 60,
- "date": "2013-11-18T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58337,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.994Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.868Z",
- "amount": 0.1736,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 60,
- "date": "2013-11-19T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58338,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.085Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.876Z",
- "amount": 0.2184,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 60,
- "date": "2013-11-19T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58339,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.176Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.885Z",
- "amount": 0.3192,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 60,
- "date": "2013-11-19T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58340,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.267Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.893Z",
- "amount": 0.1288,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 60,
- "date": "2013-11-20T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58341,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.358Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.901Z",
- "amount": 0.224,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 60,
- "date": "2013-11-20T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58342,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.452Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.910Z",
- "amount": 0.1736,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 60,
- "date": "2013-11-20T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58343,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.543Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.918Z",
- "amount": 0.224,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 60,
- "date": "2013-11-21T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58344,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.651Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.926Z",
- "amount": 0.1344,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 60,
- "date": "2013-11-21T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58345,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.742Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.934Z",
- "amount": 0.1736,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 60,
- "date": "2013-11-21T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58346,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.833Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.943Z",
- "amount": 0.2576,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 60,
- "date": "2013-11-22T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58347,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.949Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.951Z",
- "amount": 0.3248,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 60,
- "date": "2013-11-22T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58348,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.040Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.959Z",
- "amount": 0.3248,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 60,
- "date": "2013-11-22T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58349,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.131Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.967Z",
- "amount": 0.3136,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 60,
- "date": "2013-11-23T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58350,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.222Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.976Z",
- "amount": 0.2016,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 60,
- "date": "2013-11-23T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58351,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.471Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.984Z",
- "amount": 0.3248,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 60,
- "date": "2013-11-23T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58352,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.761Z",
- "slice": 4,
- "created": "2013-12-13T22:19:42.992Z",
- "amount": 0.2296,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 60,
- "date": "2013-11-24T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58353,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.852Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.001Z",
- "amount": 0.252,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 60,
- "date": "2013-11-24T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58354,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.943Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.009Z",
- "amount": 0.2016,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 60,
- "date": "2013-11-24T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58355,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.042Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.017Z",
- "amount": 0.2744,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 61,
- "date": "2013-11-25T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58356,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.133Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.025Z",
- "amount": 0.2072,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 61,
- "date": "2013-11-25T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58357,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.229Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.034Z",
- "amount": 0.2688,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 61,
- "date": "2013-11-25T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58358,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.320Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.042Z",
- "amount": 0.1288,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 61,
- "date": "2013-11-26T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58359,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.412Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.050Z",
- "amount": 0.1456,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 61,
- "date": "2013-11-26T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58360,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.503Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.059Z",
- "amount": 0.336,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 61,
- "date": "2013-11-26T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58361,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.594Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.067Z",
- "amount": 0.2072,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 61,
- "date": "2013-11-27T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58362,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.685Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.075Z",
- "amount": 0.1736,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 61,
- "date": "2013-11-27T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58363,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.776Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.083Z",
- "amount": 0.2576,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 61,
- "date": "2013-11-27T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58364,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.867Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.092Z",
- "amount": 0.2352,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 61,
- "date": "2013-11-28T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58365,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.958Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.100Z",
- "amount": 0.2912,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 61,
- "date": "2013-11-28T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58366,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.049Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.108Z",
- "amount": 0.336,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 61,
- "date": "2013-11-28T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58367,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.140Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.117Z",
+ "created": "2013-12-18T21:29:00.550Z",
"amount": 0.1176,
- "object": 89,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 1.68,
- "invoice": 61,
- "date": "2013-11-29T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58368,
+ "pk": 59763,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:03.232Z",
+ "updated": "2013-12-18T21:29:20.409Z",
"slice": 4,
- "created": "2013-12-13T22:19:43.125Z",
- "amount": 0.1456,
- "object": 89,
- "account": 13,
+ "created": "2013-12-18T21:29:00.558Z",
+ "amount": 0.2016,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
- "coreHours": 2.08,
- "invoice": 61,
- "date": "2013-11-29T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.88,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58369,
+ "pk": 59764,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:03.323Z",
+ "updated": "2013-12-18T21:29:20.517Z",
"slice": 4,
- "created": "2013-12-13T22:19:43.133Z",
- "amount": 0.1736,
- "object": 89,
- "account": 13,
+ "created": "2013-12-18T21:29:00.567Z",
+ "amount": 0.3024,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
- "coreHours": 2.48,
- "invoice": 61,
- "date": "2013-11-29T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.32,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58370,
+ "pk": 59765,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:03.416Z",
+ "updated": "2013-12-18T21:29:20.625Z",
"slice": 4,
- "created": "2013-12-13T22:19:43.141Z",
- "amount": 0.1344,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 61,
- "date": "2013-11-30T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58371,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.507Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.150Z",
- "amount": 0.1232,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 61,
- "date": "2013-11-30T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58372,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.598Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.158Z",
- "amount": 0.2632,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 61,
- "date": "2013-11-30T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58373,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.689Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.166Z",
- "amount": 0.2184,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 61,
- "date": "2013-12-01T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58374,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.780Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.175Z",
- "amount": 0.224,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 61,
- "date": "2013-12-01T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58375,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.871Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.183Z",
- "amount": 0.2632,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 61,
- "date": "2013-12-01T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58376,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.971Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.191Z",
- "amount": 0.3304,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 62,
- "date": "2013-12-02T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58377,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.062Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.199Z",
- "amount": 0.1456,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 62,
- "date": "2013-12-02T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58378,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.153Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.208Z",
+ "created": "2013-12-18T21:29:00.575Z",
"amount": 0.1848,
- "object": 89,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.64,
- "invoice": 62,
- "date": "2013-12-02T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58379,
+ "pk": 59766,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:04.244Z",
+ "updated": "2013-12-18T21:29:20.732Z",
"slice": 4,
- "created": "2013-12-13T22:19:43.216Z",
- "amount": 0.308,
- "object": 89,
- "account": 13,
+ "created": "2013-12-18T21:29:00.583Z",
+ "amount": 0.3192,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.4,
- "invoice": 62,
- "date": "2013-12-03T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.56,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58380,
+ "pk": 59767,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:04.335Z",
+ "updated": "2013-12-18T21:29:20.840Z",
"slice": 4,
- "created": "2013-12-13T22:19:43.224Z",
- "amount": 0.3304,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 62,
- "date": "2013-12-03T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58381,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.426Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.233Z",
- "amount": 0.224,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 62,
- "date": "2013-12-03T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58382,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.517Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.241Z",
- "amount": 0.2464,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 62,
- "date": "2013-12-04T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58383,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.608Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.249Z",
- "amount": 0.2296,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 62,
- "date": "2013-12-04T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58384,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.700Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.257Z",
- "amount": 0.1904,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 62,
- "date": "2013-12-04T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58385,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.791Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.266Z",
- "amount": 0.2184,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 62,
- "date": "2013-12-05T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58386,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.882Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.274Z",
- "amount": 0.1456,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 62,
- "date": "2013-12-05T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58387,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.973Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.282Z",
- "amount": 0.2576,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 62,
- "date": "2013-12-05T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58388,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.064Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.291Z",
- "amount": 0.3136,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 62,
- "date": "2013-12-06T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58389,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.162Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.299Z",
- "amount": 0.2408,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 62,
- "date": "2013-12-06T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58390,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.253Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.307Z",
- "amount": 0.2184,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 62,
- "date": "2013-12-06T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58391,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.344Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.315Z",
- "amount": 0.2632,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 62,
- "date": "2013-12-07T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58392,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.435Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.324Z",
- "amount": 0.2968,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 62,
- "date": "2013-12-07T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58393,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.526Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.332Z",
- "amount": 0.112,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 62,
- "date": "2013-12-07T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58394,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.617Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.340Z",
- "amount": 0.2128,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 62,
- "date": "2013-12-08T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58395,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.709Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.349Z",
- "amount": 0.336,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 62,
- "date": "2013-12-08T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58396,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.800Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.357Z",
- "amount": 0.1232,
- "object": 89,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 62,
- "date": "2013-12-08T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58397,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:43.365Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.365Z",
- "amount": 0.2184,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 3.12,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58398,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:43.374Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.374Z",
- "amount": 0.2856,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 4.08,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58399,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:43.382Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.382Z",
- "amount": 0.2464,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 3.52,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58400,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:43.390Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.390Z",
+ "created": "2013-12-18T21:29:00.591Z",
"amount": 0.1512,
- "object": 89,
- "account": 13,
- "state": "pending",
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
"coreHours": 2.16,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58401,
+ "pk": 59768,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:43.398Z",
+ "updated": "2013-12-18T21:29:20.948Z",
"slice": 4,
- "created": "2013-12-13T22:19:43.398Z",
- "amount": 0.1176,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 1.68,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "besteffort"
+ "created": "2013-12-18T21:29:00.600Z",
+ "amount": 0.2744,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58402,
+ "pk": 59769,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:43.407Z",
+ "updated": "2013-12-18T21:29:21.055Z",
"slice": 4,
- "created": "2013-12-13T22:19:43.407Z",
- "amount": 0.224,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 3.2,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "besteffort"
+ "created": "2013-12-18T21:29:00.608Z",
+ "amount": 0.3248,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58403,
+ "pk": 59770,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:43.415Z",
+ "updated": "2013-12-18T21:29:21.163Z",
"slice": 4,
- "created": "2013-12-13T22:19:43.415Z",
- "amount": 0.2072,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 2.96,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "besteffort"
+ "created": "2013-12-18T21:29:00.616Z",
+ "amount": 0.14,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58404,
+ "pk": 59771,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:43.423Z",
+ "updated": "2013-12-18T21:29:21.271Z",
"slice": 4,
- "created": "2013-12-13T22:19:43.423Z",
+ "created": "2013-12-18T21:29:00.625Z",
"amount": 0.1288,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 1.84,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58405,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:43.431Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.431Z",
- "amount": 0.14,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 2.0,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58406,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:43.440Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.440Z",
- "amount": 0.196,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 2.8,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58407,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:43.448Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.448Z",
- "amount": 0.112,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 1.6,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58408,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:43.456Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.456Z",
- "amount": 0.3304,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 4.72,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58409,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:43.465Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.465Z",
- "amount": 0.3192,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 4.56,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58410,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:43.473Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.473Z",
- "amount": 0.2856,
- "object": 89,
- "account": 13,
- "state": "pending",
- "coreHours": 4.08,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58411,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.482Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.488Z",
- "amount": 0.1568,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 59,
- "date": "2013-11-13T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58412,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.573Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.498Z",
- "amount": 0.14,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 59,
- "date": "2013-11-14T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58413,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.664Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.506Z",
- "amount": 0.1568,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 59,
- "date": "2013-11-14T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58414,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.755Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.514Z",
- "amount": 0.2184,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 59,
- "date": "2013-11-14T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58415,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.846Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.522Z",
- "amount": 0.1904,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 59,
- "date": "2013-11-15T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58416,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.955Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.531Z",
- "amount": 0.2968,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 59,
- "date": "2013-11-15T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58417,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.046Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.539Z",
- "amount": 0.1568,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 59,
- "date": "2013-11-15T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58418,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.137Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.547Z",
- "amount": 0.2408,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 59,
- "date": "2013-11-16T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58419,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.228Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.556Z",
- "amount": 0.1512,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 59,
- "date": "2013-11-16T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58420,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.319Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.564Z",
- "amount": 0.2744,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 59,
- "date": "2013-11-16T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58421,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.410Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.572Z",
- "amount": 0.3248,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 59,
- "date": "2013-11-17T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58422,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.501Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.580Z",
- "amount": 0.2128,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 59,
- "date": "2013-11-17T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58423,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.593Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.589Z",
- "amount": 0.1904,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 59,
- "date": "2013-11-17T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58424,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.704Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.597Z",
- "amount": 0.1176,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 60,
- "date": "2013-11-18T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58425,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.795Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.605Z",
- "amount": 0.2912,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 60,
- "date": "2013-11-18T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58426,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.886Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.614Z",
- "amount": 0.1232,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 60,
- "date": "2013-11-18T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58427,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.977Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.622Z",
- "amount": 0.1456,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 60,
- "date": "2013-11-19T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58428,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.068Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.630Z",
- "amount": 0.2856,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 60,
- "date": "2013-11-19T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58429,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.168Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.639Z",
- "amount": 0.2072,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 60,
- "date": "2013-11-19T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58430,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.259Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.647Z",
- "amount": 0.1456,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 60,
- "date": "2013-11-20T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58431,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.350Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.655Z",
- "amount": 0.2688,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 60,
- "date": "2013-11-20T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58432,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.444Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.663Z",
- "amount": 0.1456,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 60,
- "date": "2013-11-20T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58433,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.535Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.672Z",
- "amount": 0.3192,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 60,
- "date": "2013-11-21T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58434,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.642Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.680Z",
- "amount": 0.2856,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 60,
- "date": "2013-11-21T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58435,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.733Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.688Z",
- "amount": 0.1568,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 60,
- "date": "2013-11-21T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58436,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.825Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.696Z",
- "amount": 0.224,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 60,
- "date": "2013-11-22T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58437,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.941Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.705Z",
- "amount": 0.1848,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.64,
- "invoice": 60,
- "date": "2013-11-22T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58438,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.032Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.713Z",
- "amount": 0.1176,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 60,
- "date": "2013-11-22T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58439,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.123Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.721Z",
- "amount": 0.3136,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 60,
- "date": "2013-11-23T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58440,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.214Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.730Z",
- "amount": 0.308,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 60,
- "date": "2013-11-23T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58441,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.446Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.738Z",
- "amount": 0.2352,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 60,
- "date": "2013-11-23T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58442,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.752Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.746Z",
- "amount": 0.252,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 60,
- "date": "2013-11-24T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58443,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.843Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.754Z",
- "amount": 0.2184,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 60,
- "date": "2013-11-24T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58444,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.934Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.763Z",
- "amount": 0.14,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 60,
- "date": "2013-11-24T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58445,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.034Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.771Z",
- "amount": 0.1512,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 61,
- "date": "2013-11-25T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58446,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.125Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.779Z",
- "amount": 0.28,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 61,
- "date": "2013-11-25T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58447,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.221Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.788Z",
- "amount": 0.2688,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 61,
- "date": "2013-11-25T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58448,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.312Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.796Z",
- "amount": 0.2576,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 61,
- "date": "2013-11-26T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58449,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.403Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.804Z",
- "amount": 0.2408,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 61,
- "date": "2013-11-26T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58450,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.494Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.813Z",
- "amount": 0.2128,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 61,
- "date": "2013-11-26T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58451,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.585Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.821Z",
- "amount": 0.224,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 61,
- "date": "2013-11-27T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58452,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.676Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.829Z",
- "amount": 0.1904,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 61,
- "date": "2013-11-27T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58453,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.768Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.837Z",
- "amount": 0.2968,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 61,
- "date": "2013-11-27T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58454,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.859Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.846Z",
- "amount": 0.2968,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 61,
- "date": "2013-11-28T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58455,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.950Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.854Z",
- "amount": 0.28,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 61,
- "date": "2013-11-28T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58456,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.041Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.862Z",
- "amount": 0.3248,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 61,
- "date": "2013-11-28T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58457,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.132Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.871Z",
- "amount": 0.2464,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 61,
- "date": "2013-11-29T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58458,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.223Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.879Z",
- "amount": 0.1624,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.32,
- "invoice": 61,
- "date": "2013-11-29T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58459,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.314Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.887Z",
- "amount": 0.1176,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 61,
- "date": "2013-11-29T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58460,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.406Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.895Z",
- "amount": 0.2968,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 61,
- "date": "2013-11-30T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58461,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.498Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.904Z",
- "amount": 0.2688,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 61,
- "date": "2013-11-30T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58462,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.589Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.912Z",
- "amount": 0.1904,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 61,
- "date": "2013-11-30T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58463,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.681Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.920Z",
- "amount": 0.28,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 61,
- "date": "2013-12-01T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58464,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.772Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.929Z",
- "amount": 0.1568,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 61,
- "date": "2013-12-01T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58465,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.863Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.937Z",
- "amount": 0.308,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 61,
- "date": "2013-12-01T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58466,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.962Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.945Z",
- "amount": 0.2128,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 62,
- "date": "2013-12-02T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58467,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.053Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.953Z",
- "amount": 0.2296,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 62,
- "date": "2013-12-02T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58468,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.144Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.962Z",
- "amount": 0.2912,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 62,
- "date": "2013-12-02T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58469,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.236Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.970Z",
- "amount": 0.3304,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 62,
- "date": "2013-12-03T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58470,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.327Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.978Z",
- "amount": 0.2576,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 62,
- "date": "2013-12-03T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58471,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.418Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.986Z",
- "amount": 0.1176,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 62,
- "date": "2013-12-03T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58472,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.509Z",
- "slice": 4,
- "created": "2013-12-13T22:19:43.995Z",
- "amount": 0.1736,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 62,
- "date": "2013-12-04T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58473,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.600Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.003Z",
- "amount": 0.1568,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 62,
- "date": "2013-12-04T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58474,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.691Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.011Z",
- "amount": 0.196,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 62,
- "date": "2013-12-04T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58475,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.782Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.020Z",
- "amount": 0.1176,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 62,
- "date": "2013-12-05T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58476,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.874Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.028Z",
- "amount": 0.1736,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 62,
- "date": "2013-12-05T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58477,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.965Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.036Z",
- "amount": 0.1344,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 62,
- "date": "2013-12-05T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58478,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.056Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.044Z",
- "amount": 0.2296,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 62,
- "date": "2013-12-06T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58479,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.154Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.053Z",
- "amount": 0.2296,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 62,
- "date": "2013-12-06T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58480,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.245Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.061Z",
- "amount": 0.2912,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 62,
- "date": "2013-12-06T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58481,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.336Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.069Z",
- "amount": 0.112,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 62,
- "date": "2013-12-07T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58482,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.427Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.078Z",
- "amount": 0.1344,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 62,
- "date": "2013-12-07T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58483,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.518Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.086Z",
- "amount": 0.2688,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 62,
- "date": "2013-12-07T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58484,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.609Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.094Z",
- "amount": 0.3248,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 62,
- "date": "2013-12-08T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58485,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.700Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.102Z",
- "amount": 0.3192,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 62,
- "date": "2013-12-08T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58486,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.792Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.111Z",
- "amount": 0.2296,
- "object": 90,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 62,
- "date": "2013-12-08T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58487,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.119Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.119Z",
- "amount": 0.14,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 2.0,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58488,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.127Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.127Z",
- "amount": 0.224,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 3.2,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58489,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.136Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.136Z",
- "amount": 0.224,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 3.2,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58490,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.144Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.144Z",
- "amount": 0.112,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 1.6,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58491,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.152Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.152Z",
- "amount": 0.252,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 3.6,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58492,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.160Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.160Z",
- "amount": 0.2408,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 3.44,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58493,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.169Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.169Z",
- "amount": 0.308,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 4.4,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58494,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.177Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.177Z",
- "amount": 0.2744,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 3.92,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58495,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.185Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.185Z",
- "amount": 0.2744,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 3.92,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58496,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.194Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.193Z",
- "amount": 0.1848,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 2.64,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58497,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.202Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.202Z",
- "amount": 0.28,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 4.0,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58498,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.210Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.210Z",
- "amount": 0.1904,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 2.72,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58499,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.218Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.218Z",
- "amount": 0.1792,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 2.56,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58500,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.227Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.227Z",
- "amount": 0.1904,
- "object": 90,
- "account": 13,
- "state": "pending",
- "coreHours": 2.72,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58501,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.473Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.242Z",
- "amount": 0.308,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 59,
- "date": "2013-11-13T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58502,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.565Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.252Z",
- "amount": 0.28,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 59,
- "date": "2013-11-14T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58503,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.656Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.260Z",
- "amount": 0.2632,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 59,
- "date": "2013-11-14T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58504,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.747Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.268Z",
- "amount": 0.168,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.4,
- "invoice": 59,
- "date": "2013-11-14T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58505,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.838Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.276Z",
- "amount": 0.2744,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 59,
- "date": "2013-11-15T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58506,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.929Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.285Z",
- "amount": 0.1736,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 59,
- "date": "2013-11-15T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58507,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.038Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.293Z",
- "amount": 0.1344,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 59,
- "date": "2013-11-15T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58508,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.129Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.301Z",
- "amount": 0.1288,
- "object": 91,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 1.84,
- "invoice": 59,
- "date": "2013-11-16T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58509,
+ "pk": 59772,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:59.220Z",
+ "updated": "2013-12-18T21:29:21.378Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.310Z",
- "amount": 0.2744,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 59,
- "date": "2013-11-16T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58510,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.311Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.318Z",
+ "created": "2013-12-18T21:29:00.633Z",
"amount": 0.336,
- "object": 91,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 4.8,
- "invoice": 59,
- "date": "2013-11-16T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58511,
+ "pk": 59773,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:59.402Z",
+ "updated": "2013-12-18T21:29:21.486Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.326Z",
+ "created": "2013-12-18T21:29:00.641Z",
+ "amount": 0.3192,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59774,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.594Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.650Z",
+ "amount": 0.2184,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59775,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.702Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.658Z",
+ "amount": 0.252,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59776,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.809Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.666Z",
+ "amount": 0.1232,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59777,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.917Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.674Z",
"amount": 0.1624,
- "object": 91,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.32,
- "invoice": 59,
- "date": "2013-11-17T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58512,
+ "pk": 59778,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:59.493Z",
+ "updated": "2013-12-18T21:29:22.025Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.334Z",
- "amount": 0.1848,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.64,
- "invoice": 59,
- "date": "2013-11-17T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58513,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.584Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.343Z",
+ "created": "2013-12-18T21:29:00.683Z",
"amount": 0.1904,
- "object": 91,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.72,
- "invoice": 59,
- "date": "2013-11-17T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58514,
+ "pk": 59779,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:59.696Z",
+ "updated": "2013-12-18T21:29:22.132Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.351Z",
- "amount": 0.14,
- "object": 91,
- "account": 13,
+ "created": "2013-12-18T21:29:00.691Z",
+ "amount": 0.1624,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
- "coreHours": 2.0,
- "invoice": 60,
- "date": "2013-11-18T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.32,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58515,
+ "pk": 59780,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:59.787Z",
+ "updated": "2013-12-18T21:29:22.248Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.359Z",
+ "created": "2013-12-18T21:29:00.699Z",
+ "amount": 0.2912,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59781,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.356Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.708Z",
+ "amount": 0.2072,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59782,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.464Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.716Z",
+ "amount": 0.1456,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59783,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.613Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.724Z",
+ "amount": 0.2408,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59784,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.721Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.732Z",
+ "amount": 0.3024,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59785,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.828Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.741Z",
"amount": 0.1792,
- "object": 91,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.56,
- "invoice": 60,
- "date": "2013-11-18T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58516,
+ "pk": 59786,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:59.878Z",
+ "updated": "2013-12-18T21:29:22.936Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.368Z",
- "amount": 0.224,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 60,
- "date": "2013-11-18T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58517,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.969Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.376Z",
- "amount": 0.2688,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 60,
- "date": "2013-11-19T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58518,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.060Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.384Z",
- "amount": 0.1176,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 60,
- "date": "2013-11-19T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58519,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.159Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.392Z",
- "amount": 0.2016,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 60,
- "date": "2013-11-19T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58520,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.251Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.401Z",
- "amount": 0.2072,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 60,
- "date": "2013-11-20T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58521,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.342Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.409Z",
- "amount": 0.3248,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 60,
- "date": "2013-11-20T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58522,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.435Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.417Z",
- "amount": 0.1232,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 60,
- "date": "2013-11-20T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58523,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.526Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.426Z",
- "amount": 0.336,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 60,
- "date": "2013-11-21T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58524,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.634Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.434Z",
+ "created": "2013-12-18T21:29:00.749Z",
"amount": 0.1736,
- "object": 91,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.48,
- "invoice": 60,
- "date": "2013-11-21T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58525,
+ "pk": 59787,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:00.725Z",
+ "updated": "2013-12-18T21:29:23.043Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.442Z",
- "amount": 0.168,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.4,
- "invoice": 60,
- "date": "2013-11-21T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58526,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.816Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.450Z",
- "amount": 0.2968,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 60,
- "date": "2013-11-22T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58527,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.932Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.459Z",
- "amount": 0.1288,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 60,
- "date": "2013-11-22T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58528,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.023Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.467Z",
- "amount": 0.1736,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 60,
- "date": "2013-11-22T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58529,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.114Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.475Z",
- "amount": 0.1456,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 60,
- "date": "2013-11-23T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58530,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.206Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.484Z",
- "amount": 0.28,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 60,
- "date": "2013-11-23T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58531,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.404Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.492Z",
- "amount": 0.2632,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 60,
- "date": "2013-11-23T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58532,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.744Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.500Z",
- "amount": 0.3304,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 60,
- "date": "2013-11-24T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58533,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.835Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.508Z",
- "amount": 0.112,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 60,
- "date": "2013-11-24T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58534,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.926Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.517Z",
- "amount": 0.112,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 60,
- "date": "2013-11-24T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58535,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.026Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.525Z",
- "amount": 0.2688,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 61,
- "date": "2013-11-25T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58536,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.117Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.533Z",
- "amount": 0.3024,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 61,
- "date": "2013-11-25T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58537,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.208Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.541Z",
- "amount": 0.2576,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 61,
- "date": "2013-11-25T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58538,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.304Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.550Z",
- "amount": 0.252,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 61,
- "date": "2013-11-26T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58539,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.395Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.558Z",
- "amount": 0.1904,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 61,
- "date": "2013-11-26T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58540,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.486Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.566Z",
- "amount": 0.2912,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 61,
- "date": "2013-11-26T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58541,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.577Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.575Z",
- "amount": 0.1792,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 61,
- "date": "2013-11-27T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58542,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.668Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.583Z",
- "amount": 0.2856,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 61,
- "date": "2013-11-27T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58543,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.759Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.591Z",
- "amount": 0.2184,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 61,
- "date": "2013-11-27T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58544,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.851Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.599Z",
- "amount": 0.1176,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 61,
- "date": "2013-11-28T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58545,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.942Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.608Z",
- "amount": 0.2912,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 61,
- "date": "2013-11-28T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58546,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.033Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.616Z",
+ "created": "2013-12-18T21:29:00.757Z",
"amount": 0.1512,
- "object": 91,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.16,
- "invoice": 61,
- "date": "2013-11-28T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58547,
+ "pk": 59788,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:03.124Z",
+ "updated": "2013-12-18T21:29:23.151Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.624Z",
- "amount": 0.1232,
- "object": 91,
- "account": 13,
+ "created": "2013-12-18T21:29:00.766Z",
+ "amount": 0.1288,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
- "coreHours": 1.76,
- "invoice": 61,
- "date": "2013-11-29T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 1.84,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58548,
+ "pk": 59789,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:03.215Z",
+ "updated": "2013-12-18T21:29:23.259Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.633Z",
- "amount": 0.14,
- "object": 91,
- "account": 13,
+ "created": "2013-12-18T21:29:00.774Z",
+ "amount": 0.2408,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
- "coreHours": 2.0,
- "invoice": 61,
- "date": "2013-11-29T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.44,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58549,
+ "pk": 59790,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:03.306Z",
+ "updated": "2013-12-18T21:29:23.367Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.641Z",
- "amount": 0.1176,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 61,
- "date": "2013-11-29T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58550,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.397Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.649Z",
- "amount": 0.1176,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 61,
- "date": "2013-11-30T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58551,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.490Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.657Z",
- "amount": 0.2016,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 61,
- "date": "2013-11-30T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58552,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.581Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.666Z",
- "amount": 0.1624,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.32,
- "invoice": 61,
- "date": "2013-11-30T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58553,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.672Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.674Z",
- "amount": 0.2296,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 61,
- "date": "2013-12-01T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58554,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.763Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.682Z",
- "amount": 0.1176,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 61,
- "date": "2013-12-01T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58555,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.855Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.690Z",
- "amount": 0.2016,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 61,
- "date": "2013-12-01T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58556,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.954Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.699Z",
- "amount": 0.2296,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 62,
- "date": "2013-12-02T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58557,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.045Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.707Z",
- "amount": 0.2856,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 62,
- "date": "2013-12-02T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58558,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.136Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.715Z",
- "amount": 0.2744,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 62,
- "date": "2013-12-02T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58559,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.227Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.724Z",
+ "created": "2013-12-18T21:29:00.782Z",
"amount": 0.1344,
- "object": 91,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 1.92,
- "invoice": 62,
- "date": "2013-12-03T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58560,
+ "pk": 59791,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:04.319Z",
+ "updated": "2013-12-18T21:29:23.474Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.732Z",
- "amount": 0.28,
- "object": 91,
- "account": 13,
+ "created": "2013-12-18T21:29:00.790Z",
+ "amount": 0.2184,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.0,
- "invoice": 62,
- "date": "2013-12-03T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.12,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58561,
+ "pk": 59792,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:04.410Z",
+ "updated": "2013-12-18T21:29:23.582Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.740Z",
- "amount": 0.3136,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 62,
- "date": "2013-12-03T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58562,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.501Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.749Z",
- "amount": 0.1456,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 62,
- "date": "2013-12-04T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58563,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.592Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.757Z",
- "amount": 0.2744,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 62,
- "date": "2013-12-04T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58564,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.683Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.765Z",
- "amount": 0.3024,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 62,
- "date": "2013-12-04T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58565,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.774Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.773Z",
- "amount": 0.2576,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 62,
- "date": "2013-12-05T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58566,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.865Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.782Z",
- "amount": 0.2072,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 62,
- "date": "2013-12-05T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58567,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.956Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.790Z",
- "amount": 0.1904,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 62,
- "date": "2013-12-05T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58568,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.048Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.798Z",
- "amount": 0.1512,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 62,
- "date": "2013-12-06T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58569,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.145Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.807Z",
- "amount": 0.2296,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 62,
- "date": "2013-12-06T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58570,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.236Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.815Z",
- "amount": 0.2128,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 62,
- "date": "2013-12-06T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58571,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.327Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.823Z",
- "amount": 0.1568,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 62,
- "date": "2013-12-07T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58572,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.419Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.831Z",
- "amount": 0.2296,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 62,
- "date": "2013-12-07T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58573,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.510Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.840Z",
- "amount": 0.224,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 62,
- "date": "2013-12-07T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58574,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.601Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.848Z",
- "amount": 0.196,
- "object": 91,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 62,
- "date": "2013-12-08T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58575,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.692Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.856Z",
+ "created": "2013-12-18T21:29:00.799Z",
"amount": 0.308,
- "object": 91,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 4.4,
- "invoice": 62,
- "date": "2013-12-08T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58576,
+ "pk": 59793,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:05.783Z",
+ "updated": "2013-12-18T21:29:23.690Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.865Z",
+ "created": "2013-12-18T21:29:00.807Z",
+ "amount": 0.2968,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59794,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.797Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.815Z",
+ "amount": 0.2352,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59795,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.905Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.823Z",
+ "amount": 0.1904,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59796,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.013Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.832Z",
+ "amount": 0.336,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59797,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.120Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.840Z",
+ "amount": 0.1176,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59798,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.228Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.848Z",
+ "amount": 0.2968,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59799,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.336Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.856Z",
+ "amount": 0.1288,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59800,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.443Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.865Z",
+ "amount": 0.2016,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59801,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.559Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.873Z",
+ "amount": 0.1288,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59802,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.667Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.881Z",
+ "amount": 0.2744,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59803,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.775Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.890Z",
+ "amount": 0.2912,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59804,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.883Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.898Z",
+ "amount": 0.168,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59805,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.990Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.906Z",
+ "amount": 0.3304,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59806,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.098Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.915Z",
+ "amount": 0.3136,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59807,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.206Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.923Z",
+ "amount": 0.168,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59808,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.313Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.931Z",
+ "amount": 0.1176,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59809,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.421Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.939Z",
+ "amount": 0.2576,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59810,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.529Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.948Z",
+ "amount": 0.14,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59811,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.637Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.956Z",
+ "amount": 0.2576,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59812,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.744Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.964Z",
"amount": 0.2128,
- "object": 91,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "invoiced",
"coreHours": 3.04,
- "invoice": 62,
- "date": "2013-12-08T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58577,
+ "pk": 59813,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:44.873Z",
+ "updated": "2013-12-18T21:29:25.852Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.873Z",
- "amount": 0.2408,
- "object": 91,
- "account": 13,
- "state": "pending",
- "coreHours": 3.44,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "besteffort"
+ "created": "2013-12-18T21:29:00.973Z",
+ "amount": 0.2576,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58578,
+ "pk": 59814,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:44.881Z",
+ "updated": "2013-12-18T21:29:25.959Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.881Z",
+ "created": "2013-12-18T21:29:00.981Z",
+ "amount": 0.2744,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59815,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.067Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.989Z",
+ "amount": 0.2744,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59816,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.175Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:00.997Z",
+ "amount": 0.2912,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59817,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.283Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.006Z",
+ "amount": 0.14,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59818,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.390Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.014Z",
+ "amount": 0.1176,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59819,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.498Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.022Z",
+ "amount": 0.2744,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59820,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.606Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.031Z",
+ "amount": 0.3304,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59821,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.713Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.039Z",
+ "amount": 0.336,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59822,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.829Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.047Z",
+ "amount": 0.2912,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59823,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.937Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.055Z",
+ "amount": 0.2128,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59824,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.045Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.064Z",
+ "amount": 0.1848,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59825,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.152Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.072Z",
"amount": 0.2632,
- "object": 91,
- "account": 13,
- "state": "pending",
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
"coreHours": 3.76,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58579,
+ "pk": 59826,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:44.890Z",
+ "updated": "2013-12-18T21:29:27.260Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.890Z",
- "amount": 0.3192,
- "object": 91,
- "account": 13,
- "state": "pending",
- "coreHours": 4.56,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "besteffort"
+ "created": "2013-12-18T21:29:01.080Z",
+ "amount": 0.1288,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58580,
+ "pk": 59827,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:44.898Z",
+ "updated": "2013-12-18T21:29:27.368Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.898Z",
- "amount": 0.2352,
- "object": 91,
- "account": 13,
- "state": "pending",
- "coreHours": 3.36,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "besteffort"
+ "created": "2013-12-18T21:29:01.088Z",
+ "amount": 0.2744,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58581,
+ "pk": 59828,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:44.906Z",
+ "updated": "2013-12-18T21:29:27.475Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.906Z",
+ "created": "2013-12-18T21:29:01.097Z",
+ "amount": 0.1848,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59829,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.641Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.105Z",
"amount": 0.1456,
- "object": 91,
- "account": 13,
- "state": "pending",
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
"coreHours": 2.08,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58582,
+ "pk": 59830,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:44.914Z",
+ "updated": "2013-12-18T21:29:27.749Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.914Z",
- "amount": 0.3136,
- "object": 91,
- "account": 13,
- "state": "pending",
- "coreHours": 4.48,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58583,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.923Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.923Z",
- "amount": 0.1736,
- "object": 91,
- "account": 13,
- "state": "pending",
- "coreHours": 2.48,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58584,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.931Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.931Z",
- "amount": 0.2352,
- "object": 91,
- "account": 13,
- "state": "pending",
- "coreHours": 3.36,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58585,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:44.939Z",
- "slice": 4,
- "created": "2013-12-13T22:19:44.939Z",
+ "created": "2013-12-18T21:29:01.113Z",
"amount": 0.2296,
- "object": 91,
- "account": 13,
- "state": "pending",
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
"coreHours": 3.28,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58586,
+ "pk": 59831,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:44.947Z",
+ "updated": "2013-12-18T21:29:27.856Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.947Z",
- "amount": 0.1456,
- "object": 91,
- "account": 13,
- "state": "pending",
- "coreHours": 2.08,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "besteffort"
+ "created": "2013-12-18T21:29:01.122Z",
+ "amount": 0.3024,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58587,
+ "pk": 59832,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:44.957Z",
+ "updated": "2013-12-18T21:29:27.964Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.957Z",
+ "created": "2013-12-18T21:29:01.130Z",
+ "amount": 0.2912,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59833,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.072Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.138Z",
+ "amount": 0.2856,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59834,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.180Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.147Z",
+ "amount": 0.308,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59835,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.287Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.155Z",
+ "amount": 0.1848,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59836,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.395Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.163Z",
"amount": 0.2688,
- "object": 91,
- "account": 13,
- "state": "pending",
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
"coreHours": 3.84,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58588,
+ "pk": 59837,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:44.966Z",
+ "updated": "2013-12-18T21:29:28.503Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.966Z",
- "amount": 0.224,
- "object": 91,
- "account": 13,
+ "created": "2013-12-18T21:29:01.171Z",
+ "amount": 0.1344,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59838,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.610Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.180Z",
+ "amount": 0.2856,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59839,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.718Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.188Z",
+ "amount": 0.3024,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59840,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.826Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.196Z",
+ "amount": 0.308,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59841,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.933Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.205Z",
+ "amount": 0.308,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59842,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.041Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.213Z",
+ "amount": 0.2576,
+ "object": 104,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59843,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:01.221Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.221Z",
+ "amount": 0.196,
+ "object": 104,
+ "account": 15,
"state": "pending",
- "coreHours": 3.2,
+ "coreHours": 2.8,
"invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58589,
+ "pk": 59844,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:44.974Z",
+ "updated": "2013-12-18T21:29:01.230Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.974Z",
+ "created": "2013-12-18T21:29:01.229Z",
+ "amount": 0.168,
+ "object": 104,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 2.4,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59845,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:01.238Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.238Z",
+ "amount": 0.2576,
+ "object": 104,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.68,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59846,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:01.246Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.246Z",
+ "amount": 0.168,
+ "object": 104,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 2.4,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59847,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:01.254Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.254Z",
"amount": 0.3248,
- "object": 91,
- "account": 13,
+ "object": 104,
+ "account": 15,
"state": "pending",
"coreHours": 4.64,
"invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58590,
+ "pk": 59848,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:44.982Z",
+ "updated": "2013-12-18T21:29:01.263Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.982Z",
- "amount": 0.2352,
- "object": 91,
- "account": 13,
+ "created": "2013-12-18T21:29:01.263Z",
+ "amount": 0.28,
+ "object": 104,
+ "account": 15,
"state": "pending",
- "coreHours": 3.36,
+ "coreHours": 4.0,
"invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58591,
+ "pk": 59849,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.465Z",
+ "updated": "2013-12-18T21:29:01.271Z",
"slice": 4,
- "created": "2013-12-13T22:19:44.997Z",
- "amount": 0.308,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:01.271Z",
+ "amount": 0.28,
+ "object": 104,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.0,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59850,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:01.279Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.279Z",
+ "amount": 0.3304,
+ "object": 104,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.72,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59851,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.202Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.294Z",
+ "amount": 0.1456,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.4,
- "invoice": 59,
- "date": "2013-11-13T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.08,
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58592,
+ "pk": 59852,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.556Z",
+ "updated": "2013-12-18T21:29:20.310Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.007Z",
+ "created": "2013-12-18T21:29:01.304Z",
+ "amount": 0.2352,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59853,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.417Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.312Z",
+ "amount": 0.3192,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59854,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.525Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.320Z",
+ "amount": 0.2464,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59855,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.633Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.329Z",
+ "amount": 0.2184,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59856,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.741Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.337Z",
"amount": 0.168,
- "object": 92,
- "account": 13,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.4,
- "invoice": 59,
- "date": "2013-11-14T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58593,
+ "pk": 59857,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.648Z",
+ "updated": "2013-12-18T21:29:20.848Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.015Z",
- "amount": 0.252,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:01.345Z",
+ "amount": 0.1792,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
- "coreHours": 3.6,
- "invoice": 59,
- "date": "2013-11-14T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.56,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58594,
+ "pk": 59858,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.739Z",
+ "updated": "2013-12-18T21:29:20.956Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.024Z",
- "amount": 0.28,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 59,
- "date": "2013-11-14T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58595,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.830Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.032Z",
- "amount": 0.2576,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 59,
- "date": "2013-11-15T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58596,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.921Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.040Z",
- "amount": 0.1736,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 59,
- "date": "2013-11-15T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58597,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.029Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.049Z",
- "amount": 0.1512,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 59,
- "date": "2013-11-15T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58598,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.120Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.057Z",
- "amount": 0.112,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 59,
- "date": "2013-11-16T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58599,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.212Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.065Z",
- "amount": 0.2464,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 59,
- "date": "2013-11-16T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58600,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.303Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.073Z",
- "amount": 0.2128,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 59,
- "date": "2013-11-16T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58601,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.394Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.082Z",
- "amount": 0.3024,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 59,
- "date": "2013-11-17T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58602,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.485Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.090Z",
- "amount": 0.308,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 59,
- "date": "2013-11-17T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58603,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.576Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.098Z",
- "amount": 0.3304,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 59,
- "date": "2013-11-17T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58604,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.675Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.106Z",
- "amount": 0.2688,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 60,
- "date": "2013-11-18T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58605,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.778Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.115Z",
- "amount": 0.3192,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 60,
- "date": "2013-11-18T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58606,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.870Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.123Z",
- "amount": 0.2352,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 60,
- "date": "2013-11-18T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58607,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.961Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.131Z",
- "amount": 0.2856,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 60,
- "date": "2013-11-19T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58608,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.052Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.140Z",
- "amount": 0.2408,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 60,
- "date": "2013-11-19T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58609,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.151Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.148Z",
- "amount": 0.2128,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 60,
- "date": "2013-11-19T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58610,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.242Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.156Z",
- "amount": 0.2464,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 60,
- "date": "2013-11-20T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58611,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.333Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.164Z",
- "amount": 0.14,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 60,
- "date": "2013-11-20T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58612,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.427Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.173Z",
- "amount": 0.1568,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 60,
- "date": "2013-11-20T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58613,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.518Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.181Z",
- "amount": 0.2296,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 60,
- "date": "2013-11-21T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58614,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.626Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.189Z",
- "amount": 0.1232,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 60,
- "date": "2013-11-21T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58615,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.717Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.198Z",
- "amount": 0.224,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 60,
- "date": "2013-11-21T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58616,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.808Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.206Z",
- "amount": 0.2856,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 60,
- "date": "2013-11-22T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58617,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.924Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.214Z",
- "amount": 0.336,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 60,
- "date": "2013-11-22T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58618,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.015Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.222Z",
- "amount": 0.3192,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 60,
- "date": "2013-11-22T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58619,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.106Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.231Z",
- "amount": 0.252,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 60,
- "date": "2013-11-23T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58620,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.197Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.239Z",
- "amount": 0.1512,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 60,
- "date": "2013-11-23T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58621,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.363Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.247Z",
- "amount": 0.14,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 60,
- "date": "2013-11-23T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58622,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.736Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.256Z",
- "amount": 0.14,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 60,
- "date": "2013-11-24T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58623,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.827Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.264Z",
- "amount": 0.1288,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 60,
- "date": "2013-11-24T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58624,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.918Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.272Z",
- "amount": 0.1288,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 60,
- "date": "2013-11-24T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58625,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.017Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.280Z",
- "amount": 0.2296,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 61,
- "date": "2013-11-25T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58626,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.108Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.289Z",
- "amount": 0.14,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 61,
- "date": "2013-11-25T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58627,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.199Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.297Z",
- "amount": 0.2464,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 61,
- "date": "2013-11-25T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58628,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.296Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.305Z",
- "amount": 0.1904,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 61,
- "date": "2013-11-26T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58629,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.387Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.314Z",
- "amount": 0.2408,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 61,
- "date": "2013-11-26T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58630,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.478Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.322Z",
- "amount": 0.1736,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 61,
- "date": "2013-11-26T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58631,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.569Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.330Z",
- "amount": 0.1512,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 61,
- "date": "2013-11-27T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58632,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.660Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.339Z",
+ "created": "2013-12-18T21:29:01.353Z",
"amount": 0.2912,
- "object": 92,
- "account": 13,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
"coreHours": 4.16,
- "invoice": 61,
- "date": "2013-11-27T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58633,
+ "pk": 59859,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.751Z",
+ "updated": "2013-12-18T21:29:21.064Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.347Z",
- "amount": 0.1512,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 61,
- "date": "2013-11-27T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58634,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.842Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.355Z",
- "amount": 0.2632,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 61,
- "date": "2013-11-28T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58635,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.933Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.363Z",
- "amount": 0.2968,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 61,
- "date": "2013-11-28T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58636,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.025Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.372Z",
- "amount": 0.2352,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 61,
- "date": "2013-11-28T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58637,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.116Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.380Z",
- "amount": 0.252,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 61,
- "date": "2013-11-29T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58638,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.207Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.388Z",
- "amount": 0.2072,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 61,
- "date": "2013-11-29T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58639,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.298Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.396Z",
- "amount": 0.224,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 61,
- "date": "2013-11-29T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58640,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.389Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.405Z",
- "amount": 0.2408,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 61,
- "date": "2013-11-30T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58641,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.482Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.413Z",
- "amount": 0.1512,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 61,
- "date": "2013-11-30T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58642,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.573Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.421Z",
- "amount": 0.1736,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 61,
- "date": "2013-11-30T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58643,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.664Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.430Z",
- "amount": 0.3136,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 61,
- "date": "2013-12-01T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58644,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.755Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.438Z",
+ "created": "2013-12-18T21:29:01.362Z",
"amount": 0.2184,
- "object": 92,
- "account": 13,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
"coreHours": 3.12,
- "invoice": 61,
- "date": "2013-12-01T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58645,
+ "pk": 59860,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:03.838Z",
+ "updated": "2013-12-18T21:29:21.171Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.446Z",
- "amount": 0.336,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 61,
- "date": "2013-12-01T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58646,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.937Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.454Z",
+ "created": "2013-12-18T21:29:01.370Z",
"amount": 0.14,
- "object": 92,
- "account": 13,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.0,
- "invoice": 62,
- "date": "2013-12-02T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58647,
+ "pk": 59861,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:04.028Z",
+ "updated": "2013-12-18T21:29:21.279Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.463Z",
- "amount": 0.1288,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:01.378Z",
+ "amount": 0.3248,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
- "coreHours": 1.84,
- "invoice": 62,
- "date": "2013-12-02T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.64,
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58648,
+ "pk": 59862,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:04.120Z",
+ "updated": "2013-12-18T21:29:21.387Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.471Z",
- "amount": 0.1624,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:01.387Z",
+ "amount": 0.1904,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
- "coreHours": 2.32,
- "invoice": 62,
- "date": "2013-12-02T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.72,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58649,
+ "pk": 59863,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:04.211Z",
+ "updated": "2013-12-18T21:29:21.494Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.479Z",
- "amount": 0.196,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:01.395Z",
+ "amount": 0.2632,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
- "coreHours": 2.8,
- "invoice": 62,
- "date": "2013-12-03T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.76,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58650,
+ "pk": 59864,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:04.302Z",
+ "updated": "2013-12-18T21:29:21.602Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.487Z",
- "amount": 0.2576,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:01.403Z",
+ "amount": 0.336,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
- "coreHours": 3.68,
- "invoice": 62,
- "date": "2013-12-03T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.8,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58651,
+ "pk": 59865,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:04.393Z",
+ "updated": "2013-12-18T21:29:21.710Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.496Z",
- "amount": 0.308,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:01.412Z",
+ "amount": 0.2688,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.4,
- "invoice": 62,
- "date": "2013-12-03T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.84,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58652,
+ "pk": 59866,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:04.484Z",
+ "updated": "2013-12-18T21:29:21.818Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.504Z",
- "amount": 0.28,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:01.420Z",
+ "amount": 0.2352,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.0,
- "invoice": 62,
- "date": "2013-12-04T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.36,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58653,
+ "pk": 59867,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:04.575Z",
+ "updated": "2013-12-18T21:29:21.925Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.534Z",
- "amount": 0.2464,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 62,
- "date": "2013-12-04T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58654,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.666Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.554Z",
- "amount": 0.2464,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 62,
- "date": "2013-12-04T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58655,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.757Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.562Z",
- "amount": 0.2464,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 62,
- "date": "2013-12-05T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58656,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.849Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.570Z",
- "amount": 0.2184,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 62,
- "date": "2013-12-05T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58657,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.940Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.579Z",
- "amount": 0.196,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 62,
- "date": "2013-12-05T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58658,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.039Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.587Z",
- "amount": 0.3024,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 62,
- "date": "2013-12-06T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58659,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.137Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.595Z",
- "amount": 0.3192,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 62,
- "date": "2013-12-06T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58660,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.228Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.603Z",
- "amount": 0.196,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 62,
- "date": "2013-12-06T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58661,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.319Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.612Z",
- "amount": 0.1624,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.32,
- "invoice": 62,
- "date": "2013-12-07T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58662,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.410Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.620Z",
- "amount": 0.2072,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 62,
- "date": "2013-12-07T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58663,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.501Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.628Z",
- "amount": 0.3304,
- "object": 92,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 62,
- "date": "2013-12-07T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58664,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.593Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.637Z",
+ "created": "2013-12-18T21:29:01.428Z",
"amount": 0.2128,
- "object": 92,
- "account": 13,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
"coreHours": 3.04,
- "invoice": 62,
- "date": "2013-12-08T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58665,
+ "pk": 59868,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:05.684Z",
+ "updated": "2013-12-18T21:29:22.033Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.645Z",
- "amount": 0.252,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:01.436Z",
+ "amount": 0.196,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
- "coreHours": 3.6,
- "invoice": 62,
- "date": "2013-12-08T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.8,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58666,
+ "pk": 59869,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:05.775Z",
+ "updated": "2013-12-18T21:29:22.141Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.653Z",
- "amount": 0.3192,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:01.445Z",
+ "amount": 0.1792,
+ "object": 105,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.56,
- "invoice": 62,
- "date": "2013-12-08T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.56,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58667,
+ "pk": 59870,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:45.662Z",
+ "updated": "2013-12-18T21:29:22.257Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.661Z",
+ "created": "2013-12-18T21:29:01.453Z",
+ "amount": 0.1288,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59871,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.364Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.461Z",
+ "amount": 0.1736,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59872,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.472Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.470Z",
"amount": 0.112,
- "object": 92,
- "account": 13,
- "state": "pending",
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
"coreHours": 1.6,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58668,
+ "pk": 59873,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:45.670Z",
+ "updated": "2013-12-18T21:29:22.621Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.670Z",
+ "created": "2013-12-18T21:29:01.478Z",
+ "amount": 0.2128,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59874,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.729Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.486Z",
+ "amount": 0.308,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59875,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.836Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.494Z",
+ "amount": 0.1512,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59876,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.944Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.503Z",
+ "amount": 0.112,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59877,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.052Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.511Z",
+ "amount": 0.308,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59878,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.160Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.519Z",
"amount": 0.2072,
- "object": 92,
- "account": 13,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59879,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.267Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.528Z",
+ "amount": 0.28,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59880,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.375Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.536Z",
+ "amount": 0.1792,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59881,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.483Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.544Z",
+ "amount": 0.224,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59882,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.590Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.552Z",
+ "amount": 0.1568,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59883,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.698Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.561Z",
+ "amount": 0.2968,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59884,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.806Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.569Z",
+ "amount": 0.1232,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59885,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.913Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.577Z",
+ "amount": 0.2352,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59886,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.021Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.586Z",
+ "amount": 0.1736,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59887,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.129Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.594Z",
+ "amount": 0.196,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59888,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.236Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.602Z",
+ "amount": 0.1344,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59889,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.344Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.610Z",
+ "amount": 0.1904,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59890,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.452Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.619Z",
+ "amount": 0.2352,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59891,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.568Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.627Z",
+ "amount": 0.2072,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59892,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.676Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.635Z",
+ "amount": 0.2968,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59893,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.783Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.644Z",
+ "amount": 0.3136,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59894,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.891Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.652Z",
+ "amount": 0.1288,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59895,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.999Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.660Z",
+ "amount": 0.1568,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59896,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.106Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.669Z",
+ "amount": 0.1792,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59897,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.214Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.677Z",
+ "amount": 0.3024,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59898,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.322Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.685Z",
+ "amount": 0.2856,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59899,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.429Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.693Z",
+ "amount": 0.2912,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59900,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.537Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.702Z",
+ "amount": 0.1288,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59901,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.645Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.710Z",
+ "amount": 0.3136,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59902,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.752Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.718Z",
+ "amount": 0.3248,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59903,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.860Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.727Z",
+ "amount": 0.3024,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59904,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.968Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.735Z",
+ "amount": 0.14,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59905,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.075Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.743Z",
+ "amount": 0.3304,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59906,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.183Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.751Z",
+ "amount": 0.2744,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59907,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.291Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.760Z",
+ "amount": 0.2632,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59908,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.399Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.768Z",
+ "amount": 0.2408,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59909,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.506Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.776Z",
+ "amount": 0.1624,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59910,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.614Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.784Z",
+ "amount": 0.2968,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59911,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.722Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.793Z",
+ "amount": 0.2016,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59912,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.838Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.801Z",
+ "amount": 0.2296,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59913,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.945Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.809Z",
+ "amount": 0.2128,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59914,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.053Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.818Z",
+ "amount": 0.112,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59915,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.161Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.826Z",
+ "amount": 0.168,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59916,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.268Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.834Z",
+ "amount": 0.168,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59917,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.376Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.842Z",
+ "amount": 0.196,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59918,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.484Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.851Z",
+ "amount": 0.2464,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59919,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.649Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.859Z",
+ "amount": 0.112,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59920,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.757Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.867Z",
+ "amount": 0.1792,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59921,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.865Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.875Z",
+ "amount": 0.308,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59922,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.972Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.884Z",
+ "amount": 0.1176,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59923,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.080Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.892Z",
+ "amount": 0.2016,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59924,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.188Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.900Z",
+ "amount": 0.1512,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59925,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.296Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.909Z",
+ "amount": 0.2352,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59926,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.403Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.917Z",
+ "amount": 0.308,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59927,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.511Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.925Z",
+ "amount": 0.2856,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59928,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.619Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.934Z",
+ "amount": 0.1792,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59929,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.726Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.942Z",
+ "amount": 0.2856,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59930,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.834Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.950Z",
+ "amount": 0.1456,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59931,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.942Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:01.980Z",
+ "amount": 0.3136,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59932,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.049Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.021Z",
+ "amount": 0.1232,
+ "object": 105,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59933,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:02.066Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.066Z",
+ "amount": 0.2072,
+ "object": 105,
+ "account": 15,
"state": "pending",
"coreHours": 2.96,
"invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58669,
+ "pk": 59934,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:45.678Z",
+ "updated": "2013-12-18T21:29:02.116Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.678Z",
+ "created": "2013-12-18T21:29:02.116Z",
+ "amount": 0.2408,
+ "object": 105,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.44,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59935,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:02.124Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.124Z",
+ "amount": 0.2352,
+ "object": 105,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.36,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59936,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:02.132Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.132Z",
+ "amount": 0.2576,
+ "object": 105,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.68,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59937,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:02.141Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.141Z",
+ "amount": 0.2744,
+ "object": 105,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.92,
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59938,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:02.149Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.149Z",
+ "amount": 0.14,
+ "object": 105,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 2.0,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59939,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:02.157Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.157Z",
+ "amount": 0.2688,
+ "object": 105,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.84,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59940,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:02.165Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.165Z",
+ "amount": 0.3192,
+ "object": 105,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.56,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59941,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.210Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.205Z",
+ "amount": 0.1624,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59942,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.318Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.246Z",
+ "amount": 0.196,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59943,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.426Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.273Z",
+ "amount": 0.3136,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59944,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.533Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.323Z",
+ "amount": 0.1288,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59945,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.641Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.348Z",
+ "amount": 0.28,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59946,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.749Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.379Z",
+ "amount": 0.2688,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59947,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.857Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.430Z",
+ "amount": 0.1792,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59948,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.964Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.471Z",
+ "amount": 0.1736,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59949,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.072Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.497Z",
+ "amount": 0.1176,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59950,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.180Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.505Z",
+ "amount": 0.2576,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59951,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.287Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.513Z",
+ "amount": 0.1904,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59952,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.395Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.521Z",
+ "amount": 0.3136,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59953,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.503Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.530Z",
+ "amount": 0.3192,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59954,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.610Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.538Z",
+ "amount": 0.3248,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59955,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.718Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.546Z",
+ "amount": 0.3304,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59956,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.826Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.555Z",
+ "amount": 0.2744,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59957,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.933Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.563Z",
+ "amount": 0.168,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59958,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.041Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.571Z",
+ "amount": 0.28,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59959,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.149Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.579Z",
+ "amount": 0.14,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59960,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.265Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.588Z",
+ "amount": 0.3248,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59961,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.372Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.596Z",
"amount": 0.2464,
- "object": 92,
- "account": 13,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59962,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.480Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.604Z",
+ "amount": 0.1232,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59963,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.629Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.613Z",
+ "amount": 0.1792,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59964,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.737Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.621Z",
+ "amount": 0.336,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59965,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.845Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.629Z",
+ "amount": 0.2632,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59966,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.952Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.638Z",
+ "amount": 0.168,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59967,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.060Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.646Z",
+ "amount": 0.3192,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59968,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.168Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.654Z",
+ "amount": 0.3304,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59969,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.275Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.662Z",
+ "amount": 0.2744,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59970,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.383Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.671Z",
+ "amount": 0.2016,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59971,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.491Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.679Z",
+ "amount": 0.196,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59972,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.598Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.687Z",
+ "amount": 0.3136,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59973,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.706Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.695Z",
+ "amount": 0.3192,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59974,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.814Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.704Z",
+ "amount": 0.3192,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59975,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.922Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.712Z",
+ "amount": 0.2464,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59976,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.029Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.720Z",
+ "amount": 0.2912,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59977,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.137Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.729Z",
+ "amount": 0.2016,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59978,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.245Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.737Z",
+ "amount": 0.2128,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59979,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.352Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.745Z",
+ "amount": 0.1288,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59980,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.460Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.753Z",
+ "amount": 0.2408,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59981,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.576Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.762Z",
+ "amount": 0.2856,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59982,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.684Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.770Z",
+ "amount": 0.2688,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59983,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.791Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.778Z",
+ "amount": 0.2072,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59984,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.899Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.787Z",
+ "amount": 0.224,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59985,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.007Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.795Z",
+ "amount": 0.3304,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59986,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.114Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.803Z",
+ "amount": 0.224,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59987,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.222Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.811Z",
+ "amount": 0.2576,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59988,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.330Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.820Z",
+ "amount": 0.2352,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59989,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.438Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.828Z",
+ "amount": 0.308,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59990,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.545Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.836Z",
+ "amount": 0.3136,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59991,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.653Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.845Z",
+ "amount": 0.224,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59992,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.761Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.853Z",
+ "amount": 0.308,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59993,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.868Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.861Z",
+ "amount": 0.2688,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59994,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.976Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.869Z",
+ "amount": 0.2464,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59995,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.084Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.878Z",
+ "amount": 0.3024,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59996,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.192Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.886Z",
+ "amount": 0.1456,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59997,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.299Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.894Z",
+ "amount": 0.2968,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59998,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.407Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.902Z",
+ "amount": 0.1344,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 59999,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.514Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.911Z",
+ "amount": 0.3192,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60000,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.622Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.919Z",
+ "amount": 0.1288,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60001,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.730Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.927Z",
+ "amount": 0.2968,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60002,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.846Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.936Z",
+ "amount": 0.1848,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60003,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.953Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.944Z",
+ "amount": 0.1568,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60004,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.061Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.952Z",
+ "amount": 0.1736,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60005,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.169Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.960Z",
+ "amount": 0.3024,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60006,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.277Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.969Z",
+ "amount": 0.2128,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60007,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.384Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.977Z",
+ "amount": 0.168,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60008,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.492Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.985Z",
+ "amount": 0.2968,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60009,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.658Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:02.994Z",
+ "amount": 0.14,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60010,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.765Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.002Z",
+ "amount": 0.252,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60011,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.873Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.010Z",
+ "amount": 0.2744,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60012,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.981Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.018Z",
+ "amount": 0.196,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60013,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.088Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.027Z",
+ "amount": 0.168,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60014,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.196Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.035Z",
+ "amount": 0.1176,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60015,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.304Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.043Z",
+ "amount": 0.3248,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60016,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.411Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.052Z",
+ "amount": 0.1792,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60017,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.519Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.060Z",
+ "amount": 0.1232,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60018,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.627Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.068Z",
+ "amount": 0.1512,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60019,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.735Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.076Z",
+ "amount": 0.3024,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60020,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.842Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.085Z",
+ "amount": 0.1792,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60021,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.950Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.093Z",
+ "amount": 0.1512,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60022,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.058Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.101Z",
+ "amount": 0.2016,
+ "object": 106,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60023,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.110Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.110Z",
+ "amount": 0.2408,
+ "object": 106,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.44,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60024,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.118Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.118Z",
+ "amount": 0.2184,
+ "object": 106,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.12,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60025,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.126Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.126Z",
+ "amount": 0.1904,
+ "object": 106,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 2.72,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60026,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.134Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.134Z",
+ "amount": 0.2464,
+ "object": 106,
+ "account": 15,
"state": "pending",
"coreHours": 3.52,
"invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58670,
+ "pk": 60027,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:45.686Z",
+ "updated": "2013-12-18T21:29:03.143Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.686Z",
- "amount": 0.1232,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:03.143Z",
+ "amount": 0.2408,
+ "object": 106,
+ "account": 15,
"state": "pending",
- "coreHours": 1.76,
+ "coreHours": 3.44,
"invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58671,
+ "pk": 60028,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:45.695Z",
+ "updated": "2013-12-18T21:29:03.151Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.695Z",
+ "created": "2013-12-18T21:29:03.151Z",
+ "amount": 0.196,
+ "object": 106,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 2.8,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60029,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.160Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.159Z",
+ "amount": 0.2632,
+ "object": 106,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.76,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60030,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.168Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.168Z",
+ "amount": 0.1176,
+ "object": 106,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 1.68,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60031,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.219Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.183Z",
+ "amount": 0.112,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60032,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.326Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.193Z",
+ "amount": 0.168,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60033,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.434Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.201Z",
+ "amount": 0.3248,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60034,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.542Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.209Z",
+ "amount": 0.2296,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60035,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.650Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.217Z",
+ "amount": 0.2912,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60036,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.757Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.226Z",
+ "amount": 0.2016,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60037,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.865Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.234Z",
+ "amount": 0.1736,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60038,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.973Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.242Z",
+ "amount": 0.1456,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60039,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.080Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.251Z",
+ "amount": 0.1568,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60040,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.188Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.259Z",
+ "amount": 0.224,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60041,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.296Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.267Z",
+ "amount": 0.1176,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60042,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.403Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.275Z",
+ "amount": 0.2856,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60043,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.511Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.284Z",
+ "amount": 0.3192,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60044,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.619Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.292Z",
+ "amount": 0.1736,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60045,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.726Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.300Z",
+ "amount": 0.2352,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60046,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.834Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.308Z",
+ "amount": 0.1736,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60047,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.942Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.317Z",
+ "amount": 0.2128,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60048,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.049Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.325Z",
+ "amount": 0.2968,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60049,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.157Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.333Z",
+ "amount": 0.1176,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60050,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.273Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.342Z",
+ "amount": 0.1792,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60051,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.381Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.350Z",
+ "amount": 0.3304,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60052,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.488Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.358Z",
+ "amount": 0.2912,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60053,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.638Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.366Z",
+ "amount": 0.252,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60054,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.745Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.375Z",
+ "amount": 0.3024,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60055,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.853Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.383Z",
+ "amount": 0.168,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60056,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.961Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.391Z",
+ "amount": 0.308,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60057,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.068Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.400Z",
+ "amount": 0.196,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60058,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.176Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.408Z",
+ "amount": 0.1232,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60059,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.284Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.416Z",
+ "amount": 0.3024,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60060,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.391Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.424Z",
+ "amount": 0.2912,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60061,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.499Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.433Z",
+ "amount": 0.1904,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60062,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.607Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.441Z",
+ "amount": 0.1176,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60063,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.715Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.449Z",
+ "amount": 0.1456,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60064,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.822Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.457Z",
+ "amount": 0.3136,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60065,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.930Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.466Z",
+ "amount": 0.308,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60066,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.038Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.474Z",
+ "amount": 0.252,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60067,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.145Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.482Z",
+ "amount": 0.2856,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60068,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.253Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.491Z",
"amount": 0.1624,
- "object": 92,
- "account": 13,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60069,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.361Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.499Z",
+ "amount": 0.3304,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60070,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.468Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.507Z",
+ "amount": 0.168,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60071,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.584Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.516Z",
+ "amount": 0.168,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60072,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.692Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.524Z",
+ "amount": 0.28,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60073,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.800Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.532Z",
+ "amount": 0.2856,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60074,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.907Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.541Z",
+ "amount": 0.3024,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60075,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.015Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.549Z",
+ "amount": 0.2296,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60076,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.123Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.557Z",
+ "amount": 0.3304,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60077,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.231Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.565Z",
+ "amount": 0.1792,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60078,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.338Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.574Z",
+ "amount": 0.2912,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60079,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.446Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.582Z",
+ "amount": 0.2128,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60080,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.554Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.590Z",
+ "amount": 0.1456,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60081,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.661Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.598Z",
+ "amount": 0.112,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60082,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.769Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.607Z",
+ "amount": 0.28,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60083,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.877Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.615Z",
+ "amount": 0.112,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60084,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.984Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.623Z",
+ "amount": 0.224,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60085,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.092Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.631Z",
+ "amount": 0.1344,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60086,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.200Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.640Z",
+ "amount": 0.2968,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60087,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.307Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.648Z",
+ "amount": 0.3304,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60088,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.415Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.657Z",
+ "amount": 0.3192,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60089,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.523Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.665Z",
+ "amount": 0.336,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60090,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.630Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.673Z",
+ "amount": 0.308,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60091,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.738Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.681Z",
+ "amount": 0.1288,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60092,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.854Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.690Z",
+ "amount": 0.2632,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60093,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.962Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.698Z",
+ "amount": 0.2184,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60094,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.069Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.706Z",
+ "amount": 0.1904,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60095,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.177Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.714Z",
+ "amount": 0.168,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60096,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.285Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.723Z",
+ "amount": 0.2464,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60097,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.393Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.731Z",
+ "amount": 0.2184,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60098,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.500Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.739Z",
+ "amount": 0.1736,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60099,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.666Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.748Z",
+ "amount": 0.1456,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60100,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.774Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.756Z",
+ "amount": 0.1512,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60101,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.881Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.764Z",
+ "amount": 0.3304,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60102,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.989Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.773Z",
+ "amount": 0.168,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60103,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.097Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.781Z",
+ "amount": 0.3024,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60104,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.204Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.789Z",
+ "amount": 0.2856,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60105,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.312Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.797Z",
+ "amount": 0.2856,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60106,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.420Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.806Z",
+ "amount": 0.1232,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60107,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.527Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.814Z",
+ "amount": 0.2632,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60108,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.635Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.822Z",
+ "amount": 0.196,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60109,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.743Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.830Z",
+ "amount": 0.1344,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60110,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.851Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.839Z",
+ "amount": 0.2352,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60111,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.958Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.847Z",
+ "amount": 0.2632,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60112,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.066Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.855Z",
+ "amount": 0.2128,
+ "object": 107,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60113,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.864Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.864Z",
+ "amount": 0.14,
+ "object": 107,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 2.0,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60114,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.872Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.872Z",
+ "amount": 0.252,
+ "object": 107,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.6,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60115,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.880Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.880Z",
+ "amount": 0.28,
+ "object": 107,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.0,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60116,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:03.888Z",
+ "slice": 4,
+ "created": "2013-12-18T21:29:03.888Z",
+ "amount": 0.1624,
+ "object": 107,
+ "account": 15,
"state": "pending",
"coreHours": 2.32,
"invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58672,
+ "pk": 60117,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:45.703Z",
+ "updated": "2013-12-18T21:29:03.897Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.703Z",
- "amount": 0.14,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:03.897Z",
+ "amount": 0.2744,
+ "object": 107,
+ "account": 15,
"state": "pending",
- "coreHours": 2.0,
+ "coreHours": 3.92,
"invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58673,
+ "pk": 60118,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:45.711Z",
+ "updated": "2013-12-18T21:29:03.905Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.711Z",
- "amount": 0.3304,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:03.905Z",
+ "amount": 0.28,
+ "object": 107,
+ "account": 15,
"state": "pending",
- "coreHours": 4.72,
+ "coreHours": 4.0,
"invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58674,
+ "pk": 60119,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:45.719Z",
+ "updated": "2013-12-18T21:29:03.913Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.719Z",
- "amount": 0.196,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:03.913Z",
+ "amount": 0.2408,
+ "object": 107,
+ "account": 15,
"state": "pending",
- "coreHours": 2.8,
+ "coreHours": 3.44,
"invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58675,
+ "pk": 60120,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:45.728Z",
+ "updated": "2013-12-18T21:29:03.921Z",
"slice": 4,
- "created": "2013-12-13T22:19:45.728Z",
- "amount": 0.2912,
- "object": 92,
- "account": 13,
+ "created": "2013-12-18T21:29:03.921Z",
+ "amount": 0.308,
+ "object": 107,
+ "account": 15,
"state": "pending",
- "coreHours": 4.16,
+ "coreHours": 4.4,
"invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58676,
+ "pk": 60121,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:45.736Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.736Z",
- "amount": 0.1904,
- "object": 92,
- "account": 13,
- "state": "pending",
- "coreHours": 2.72,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58677,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:45.744Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.744Z",
- "amount": 0.3136,
- "object": 92,
- "account": 13,
- "state": "pending",
- "coreHours": 4.48,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58678,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:45.753Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.753Z",
- "amount": 0.3304,
- "object": 92,
- "account": 13,
- "state": "pending",
- "coreHours": 4.72,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58679,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:45.761Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.761Z",
- "amount": 0.1792,
- "object": 92,
- "account": 13,
- "state": "pending",
- "coreHours": 2.56,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58680,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:45.769Z",
- "slice": 4,
- "created": "2013-12-13T22:19:45.769Z",
- "amount": 0.1344,
- "object": 92,
- "account": 13,
- "state": "pending",
- "coreHours": 1.92,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58681,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.457Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.817Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-13T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58682,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.548Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.827Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58683,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.639Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.836Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58684,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.730Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.844Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58685,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.822Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.852Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58686,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.913Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.860Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58687,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.021Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.869Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58688,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.112Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.877Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58689,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.203Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.885Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58690,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.294Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.893Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58691,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.386Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.902Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58692,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.477Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.910Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58693,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.568Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.918Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58694,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.667Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.927Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58695,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.770Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.935Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58696,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.861Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.943Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58697,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.952Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.951Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58698,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.043Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.960Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58699,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.143Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.968Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58700,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.234Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.976Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58701,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.325Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.985Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58702,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.419Z",
- "slice": 8,
- "created": "2013-12-13T22:19:45.993Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58703,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.510Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.001Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58704,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.617Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.009Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58705,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.709Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.018Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58706,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.800Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.026Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58707,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.918Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.034Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58708,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.007Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.043Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58709,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.098Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.051Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58710,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.189Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.059Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58711,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.355Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.067Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58712,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.727Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.076Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58713,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.818Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.084Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58714,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.910Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.092Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58715,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.009Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.101Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58716,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.100Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.109Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58717,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.191Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.117Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58718,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.287Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.125Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58719,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.378Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.134Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58720,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.469Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.142Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58721,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.561Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.150Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58722,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.652Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.158Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58723,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.743Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.167Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58724,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.834Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.175Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58725,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.925Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.183Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58726,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.016Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.192Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58727,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.107Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.200Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58728,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.198Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.208Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58729,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.290Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.216Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58730,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.381Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.225Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58731,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.473Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.233Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58732,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.565Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.241Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58733,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.656Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.250Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58734,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.747Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.258Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58735,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.830Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.266Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58736,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.929Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.274Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58737,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.020Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.283Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58738,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.111Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.291Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58739,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.203Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.299Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58740,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.294Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.308Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58741,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.385Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.316Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58742,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.476Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.324Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58743,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.567Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.333Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58744,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.658Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.341Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58745,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.749Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.349Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58746,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.840Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.357Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58747,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.932Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.366Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58748,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.031Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.374Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58749,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.129Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.382Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58750,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.220Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.391Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58751,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.311Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.399Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58752,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.402Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.407Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58753,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.493Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.415Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58754,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.584Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.424Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58755,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.675Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.432Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58756,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.766Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.440Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58757,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.448Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.448Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58758,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.457Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.457Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58759,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.465Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.465Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58760,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.473Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.473Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58761,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.482Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.482Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58762,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.490Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.490Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58763,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.498Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.498Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58764,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.506Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.506Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58765,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.515Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.515Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58766,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.523Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.523Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58767,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.531Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.531Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58768,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.540Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.540Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58769,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.548Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.548Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58770,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:46.556Z",
- "slice": 8,
- "created": "2013-12-13T22:19:46.556Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58771,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.490Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.577Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-13T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58772,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.581Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.589Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58773,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.672Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.597Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58774,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.764Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.606Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58775,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.855Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.614Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58776,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.963Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.622Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58777,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.054Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.631Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58778,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.145Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.639Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58779,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.236Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.647Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58780,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.328Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.656Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58781,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.419Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.664Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58782,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.510Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.672Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58783,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.601Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.680Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58784,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.712Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.689Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58785,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.803Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.697Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58786,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.894Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.705Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58787,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.985Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.713Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58788,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.077Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.722Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58789,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.135Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.730Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58790,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.226Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.738Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58791,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.317Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.747Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58792,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.410Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.755Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58793,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.501Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.763Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58794,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.602Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.771Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58795,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.700Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.780Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58796,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.792Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.788Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58797,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.883Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.797Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58798,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.999Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.805Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58799,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.090Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.813Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58800,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.181Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.821Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58801,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.347Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.830Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58802,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.719Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.838Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58803,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.810Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.846Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58804,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.901Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.854Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58805,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.001Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.863Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58806,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.092Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.871Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58807,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.183Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.879Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58808,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.279Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.888Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58809,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.370Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.896Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58810,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.461Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.904Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58811,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.552Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.912Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58812,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.643Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.921Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58813,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.735Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.929Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58814,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.826Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.937Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58815,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.917Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.945Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58816,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.008Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.954Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58817,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.091Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.962Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58818,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.182Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.970Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58819,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.273Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.979Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58820,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.364Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.987Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58821,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.457Z",
- "slice": 9,
- "created": "2013-12-13T22:19:46.995Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58822,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.548Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.004Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58823,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.639Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.012Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58824,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.730Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.020Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58825,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.813Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.028Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58826,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.913Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.037Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58827,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.004Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.045Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58828,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.095Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.053Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58829,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.186Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.061Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58830,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.277Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.070Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58831,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.368Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.078Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58832,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.459Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.086Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58833,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.550Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.095Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58834,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.642Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.103Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58835,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.733Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.111Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58836,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.824Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.119Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58837,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.915Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.128Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58838,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.014Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.136Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58839,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.112Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.144Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58840,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.203Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.153Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58841,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.294Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.161Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58842,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.385Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.169Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58843,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.477Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.177Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58844,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.568Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.186Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58845,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.659Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.194Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58846,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.750Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.202Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58847,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.211Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.211Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58848,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.219Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.219Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58849,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.227Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.227Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58850,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.236Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.236Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58851,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.244Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.244Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58852,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.252Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.252Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58853,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.260Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.260Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58854,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.269Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.269Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58855,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.277Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.277Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58856,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.285Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.285Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58857,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.294Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.294Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58858,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.302Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.302Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58859,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.310Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.310Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58860,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.318Z",
- "slice": 9,
- "created": "2013-12-13T22:19:47.318Z",
- "amount": 0.56,
- "object": 93,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 58861,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.449Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.350Z",
- "amount": 0.336,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 59,
- "date": "2013-11-13T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58862,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.540Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.360Z",
- "amount": 0.3024,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 59,
- "date": "2013-11-14T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58863,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.631Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.368Z",
- "amount": 0.2016,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 59,
- "date": "2013-11-14T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58864,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.722Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.376Z",
- "amount": 0.2912,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 59,
- "date": "2013-11-14T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58865,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.813Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.385Z",
- "amount": 0.2632,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 59,
- "date": "2013-11-15T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58866,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.904Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.393Z",
- "amount": 0.2016,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 59,
- "date": "2013-11-15T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58867,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.013Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.401Z",
- "amount": 0.252,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 59,
- "date": "2013-11-15T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58868,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.104Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.410Z",
- "amount": 0.1456,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 59,
- "date": "2013-11-16T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58869,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.195Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.418Z",
- "amount": 0.1512,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 59,
- "date": "2013-11-16T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58870,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.286Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.426Z",
- "amount": 0.2688,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 59,
- "date": "2013-11-16T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58871,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.369Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.434Z",
- "amount": 0.168,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.4,
- "invoice": 59,
- "date": "2013-11-17T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58872,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.460Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.443Z",
- "amount": 0.2856,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 59,
- "date": "2013-11-17T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58873,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.551Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.451Z",
- "amount": 0.3192,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 59,
- "date": "2013-11-17T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58874,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.651Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.459Z",
- "amount": 0.3192,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 60,
- "date": "2013-11-18T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58875,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.753Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.467Z",
- "amount": 0.196,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 60,
- "date": "2013-11-18T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58876,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.845Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.476Z",
- "amount": 0.196,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 60,
- "date": "2013-11-18T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58877,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.936Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.484Z",
- "amount": 0.168,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.4,
- "invoice": 60,
- "date": "2013-11-19T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58878,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.027Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.492Z",
- "amount": 0.2072,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 60,
- "date": "2013-11-19T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58879,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.118Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.501Z",
- "amount": 0.1792,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 60,
- "date": "2013-11-19T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58880,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.209Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.509Z",
- "amount": 0.2464,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 60,
- "date": "2013-11-20T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58881,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.300Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.517Z",
- "amount": 0.2296,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 60,
- "date": "2013-11-20T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58882,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.394Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.525Z",
- "amount": 0.2576,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 60,
- "date": "2013-11-20T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58883,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.485Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.534Z",
+ "updated": "2013-12-18T21:29:20.227Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:03.953Z",
"amount": 0.2968,
- "object": 94,
- "account": 13,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
"coreHours": 4.24,
- "invoice": 60,
- "date": "2013-11-21T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58884,
+ "pk": 60122,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:00.576Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.542Z",
- "amount": 0.2072,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:20.335Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:03.963Z",
+ "amount": 0.196,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 2.96,
- "invoice": 60,
- "date": "2013-11-21T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.8,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58885,
+ "pk": 60123,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:00.684Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.550Z",
+ "updated": "2013-12-18T21:29:20.442Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:03.971Z",
+ "amount": 0.1232,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60124,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.550Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:03.979Z",
+ "amount": 0.308,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60125,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.658Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:03.988Z",
+ "amount": 0.2464,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60126,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.765Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:03.996Z",
+ "amount": 0.196,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60127,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.873Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.004Z",
+ "amount": 0.2464,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60128,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.981Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.013Z",
+ "amount": 0.1736,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60129,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.088Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.021Z",
+ "amount": 0.2968,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60130,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.196Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.029Z",
+ "amount": 0.1568,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60131,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.304Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.037Z",
+ "amount": 0.3136,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60132,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.412Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.046Z",
+ "amount": 0.1456,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60133,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.519Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.054Z",
"amount": 0.1288,
- "object": 94,
- "account": 13,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
"coreHours": 1.84,
- "invoice": 60,
- "date": "2013-11-21T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58886,
+ "pk": 60134,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:00.775Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.559Z",
+ "updated": "2013-12-18T21:29:21.627Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.062Z",
+ "amount": 0.1456,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60135,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.735Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.071Z",
+ "amount": 0.2128,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60136,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.842Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.079Z",
+ "amount": 0.2856,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60137,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.950Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.087Z",
+ "amount": 0.2464,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60138,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.058Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.095Z",
+ "amount": 0.2744,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60139,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.166Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.104Z",
+ "amount": 0.2912,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60140,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.281Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.112Z",
+ "amount": 0.2464,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60141,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.389Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.120Z",
+ "amount": 0.2464,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60142,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.497Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.129Z",
+ "amount": 0.1736,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60143,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.646Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.137Z",
+ "amount": 0.1456,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60144,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.754Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.145Z",
+ "amount": 0.1568,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60145,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.861Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.154Z",
+ "amount": 0.1736,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60146,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.969Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.162Z",
+ "amount": 0.252,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60147,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.077Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.170Z",
+ "amount": 0.2016,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60148,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.184Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.178Z",
+ "amount": 0.3192,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60149,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.292Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.187Z",
+ "amount": 0.2464,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60150,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.400Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.195Z",
+ "amount": 0.112,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60151,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.507Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.203Z",
+ "amount": 0.1568,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60152,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.615Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.212Z",
+ "amount": 0.28,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60153,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.723Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.220Z",
+ "amount": 0.2016,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60154,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.831Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.228Z",
+ "amount": 0.2072,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60155,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.938Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.236Z",
+ "amount": 0.2856,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60156,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.046Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.245Z",
+ "amount": 0.2464,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60157,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.154Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.253Z",
+ "amount": 0.3192,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60158,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.261Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.261Z",
+ "amount": 0.2912,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60159,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.369Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.269Z",
+ "amount": 0.2072,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60160,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.477Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.278Z",
+ "amount": 0.2912,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60161,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.593Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.286Z",
+ "amount": 0.14,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60162,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.700Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.294Z",
+ "amount": 0.1848,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60163,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.808Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.303Z",
+ "amount": 0.2576,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60164,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.916Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.311Z",
+ "amount": 0.2072,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60165,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.023Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.319Z",
+ "amount": 0.1848,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60166,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.131Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.327Z",
+ "amount": 0.1568,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60167,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.239Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.336Z",
+ "amount": 0.2128,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60168,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.346Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.344Z",
+ "amount": 0.168,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60169,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.454Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.352Z",
+ "amount": 0.28,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60170,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.562Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.361Z",
+ "amount": 0.2296,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60171,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.670Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.369Z",
+ "amount": 0.1904,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60172,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.777Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.377Z",
"amount": 0.1624,
- "object": 94,
- "account": 13,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.32,
- "invoice": 60,
- "date": "2013-11-22T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58887,
+ "pk": 60173,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:00.866Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.567Z",
- "amount": 0.3248,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:25.885Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.385Z",
+ "amount": 0.252,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.64,
- "invoice": 60,
- "date": "2013-11-22T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.6,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58888,
+ "pk": 60174,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:00.982Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.575Z",
- "amount": 0.3248,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:25.993Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.394Z",
+ "amount": 0.112,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.64,
- "invoice": 60,
- "date": "2013-11-22T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 1.6,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58889,
+ "pk": 60175,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:01.073Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.583Z",
- "amount": 0.1848,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:26.100Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.402Z",
+ "amount": 0.2576,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 2.64,
- "invoice": 60,
- "date": "2013-11-23T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.68,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58890,
+ "pk": 60176,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:01.164Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.592Z",
- "amount": 0.3136,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:26.208Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.410Z",
+ "amount": 0.3192,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.48,
- "invoice": 60,
- "date": "2013-11-23T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.56,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58891,
+ "pk": 60177,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:01.330Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.600Z",
- "amount": 0.2128,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:26.316Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.419Z",
+ "amount": 0.2632,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 3.04,
- "invoice": 60,
- "date": "2013-11-23T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.76,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58892,
+ "pk": 60178,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:01.636Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.608Z",
- "amount": 0.2688,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:26.423Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.427Z",
+ "amount": 0.1792,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 3.84,
- "invoice": 60,
- "date": "2013-11-24T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.56,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58893,
+ "pk": 60179,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:01.794Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.616Z",
- "amount": 0.2968,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:26.531Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.435Z",
+ "amount": 0.196,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.24,
- "invoice": 60,
- "date": "2013-11-24T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.8,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58894,
+ "pk": 60180,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:01.885Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.625Z",
- "amount": 0.168,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:26.639Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.443Z",
+ "amount": 0.1176,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 2.4,
- "invoice": 60,
- "date": "2013-11-24T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 1.68,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58895,
+ "pk": 60181,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:01.984Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.633Z",
- "amount": 0.3248,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:26.746Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.452Z",
+ "amount": 0.2408,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.64,
- "invoice": 61,
- "date": "2013-11-25T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.44,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58896,
+ "pk": 60182,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.075Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.641Z",
- "amount": 0.2968,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:26.862Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.460Z",
+ "amount": 0.2576,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.24,
- "invoice": 61,
- "date": "2013-11-25T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.68,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58897,
+ "pk": 60183,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.166Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.650Z",
- "amount": 0.2968,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:26.970Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.468Z",
+ "amount": 0.2744,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.24,
- "invoice": 61,
- "date": "2013-11-25T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.92,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58898,
+ "pk": 60184,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.262Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.658Z",
- "amount": 0.2184,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:27.078Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.476Z",
+ "amount": 0.3024,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
- "coreHours": 3.12,
- "invoice": 61,
- "date": "2013-11-26T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.32,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58899,
+ "pk": 60185,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.354Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.666Z",
+ "updated": "2013-12-18T21:29:27.186Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.485Z",
+ "amount": 0.3192,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60186,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.293Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.493Z",
"amount": 0.3304,
- "object": 94,
- "account": 13,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
"coreHours": 4.72,
- "invoice": 61,
- "date": "2013-11-26T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58900,
+ "pk": 60187,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.445Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.674Z",
+ "updated": "2013-12-18T21:29:27.401Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.501Z",
+ "amount": 0.3192,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60188,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.509Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.510Z",
+ "amount": 0.168,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60189,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.674Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.518Z",
+ "amount": 0.3136,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60190,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.782Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.526Z",
+ "amount": 0.1792,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60191,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.890Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.535Z",
+ "amount": 0.2576,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60192,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.997Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.543Z",
+ "amount": 0.2464,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60193,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.105Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.551Z",
+ "amount": 0.2968,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60194,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.213Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.559Z",
+ "amount": 0.28,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60195,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.320Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.568Z",
+ "amount": 0.1344,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60196,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.428Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.576Z",
+ "amount": 0.2128,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60197,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.536Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.584Z",
+ "amount": 0.196,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60198,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.644Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.593Z",
+ "amount": 0.2912,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60199,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.751Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.601Z",
+ "amount": 0.2632,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60200,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.859Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.609Z",
+ "amount": 0.3024,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60201,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.967Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.617Z",
"amount": 0.1568,
- "object": 94,
- "account": 13,
+ "object": 108,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.24,
- "invoice": 61,
- "date": "2013-11-26T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58901,
+ "pk": 60202,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.536Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.683Z",
+ "updated": "2013-12-18T21:29:29.074Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.626Z",
+ "amount": 0.2352,
+ "object": 108,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60203,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:04.634Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.634Z",
+ "amount": 0.2688,
+ "object": 108,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.84,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60204,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:04.642Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.642Z",
+ "amount": 0.14,
+ "object": 108,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 2.0,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60205,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:04.651Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.651Z",
+ "amount": 0.28,
+ "object": 108,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.0,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60206,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:04.659Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.659Z",
+ "amount": 0.2352,
+ "object": 108,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.36,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60207,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:04.667Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.667Z",
"amount": 0.1848,
- "object": 94,
- "account": 13,
- "state": "invoiced",
+ "object": 108,
+ "account": 15,
+ "state": "pending",
"coreHours": 2.64,
- "invoice": 61,
- "date": "2013-11-27T06:00:00Z",
- "kind": "besteffort"
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58902,
+ "pk": 60208,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.627Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.691Z",
- "amount": 0.308,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:04.676Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.676Z",
+ "amount": 0.2688,
+ "object": 108,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.84,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60209,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:04.684Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.684Z",
+ "amount": 0.2184,
+ "object": 108,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.12,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60210,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:04.692Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.692Z",
+ "amount": 0.1176,
+ "object": 108,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 1.68,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60211,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.235Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.707Z",
+ "amount": 0.3136,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.4,
- "invoice": 61,
- "date": "2013-11-27T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.48,
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58903,
+ "pk": 60212,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.718Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.699Z",
+ "updated": "2013-12-18T21:29:20.343Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.717Z",
+ "amount": 0.196,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60213,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.451Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.725Z",
+ "amount": 0.1176,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60214,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.558Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.733Z",
+ "amount": 0.28,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60215,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.666Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.742Z",
+ "amount": 0.1792,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60216,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.774Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.750Z",
+ "amount": 0.14,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60217,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.881Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.758Z",
+ "amount": 0.2576,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60218,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.989Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.767Z",
+ "amount": 0.1736,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60219,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.097Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.775Z",
"amount": 0.336,
- "object": 94,
- "account": 13,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
"coreHours": 4.8,
- "invoice": 61,
- "date": "2013-11-27T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58904,
+ "pk": 60220,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.809Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.708Z",
+ "updated": "2013-12-18T21:29:21.205Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.783Z",
+ "amount": 0.2072,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60221,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.312Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.791Z",
"amount": 0.2184,
- "object": 94,
- "account": 13,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
"coreHours": 3.12,
- "invoice": 61,
- "date": "2013-11-28T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58905,
+ "pk": 60222,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.900Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.716Z",
- "amount": 0.1904,
- "object": 94,
- "account": 13,
+ "updated": "2013-12-18T21:29:21.420Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.800Z",
+ "amount": 0.196,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
- "coreHours": 2.72,
- "invoice": 61,
- "date": "2013-11-28T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.8,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58906,
+ "pk": 60223,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:02.991Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.724Z",
+ "updated": "2013-12-18T21:29:21.528Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.808Z",
+ "amount": 0.3192,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60224,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.636Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.816Z",
+ "amount": 0.1456,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60225,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.743Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.825Z",
+ "amount": 0.2296,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60226,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.851Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.833Z",
+ "amount": 0.2016,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60227,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.958Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.841Z",
+ "amount": 0.2352,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60228,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.066Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.849Z",
+ "amount": 0.1456,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60229,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.174Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.858Z",
+ "amount": 0.252,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60230,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.290Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.866Z",
+ "amount": 0.2296,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60231,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.397Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.874Z",
+ "amount": 0.1792,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60232,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.505Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.883Z",
+ "amount": 0.1848,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60233,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.654Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.891Z",
+ "amount": 0.2128,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60234,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.762Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.899Z",
+ "amount": 0.252,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60235,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.870Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.907Z",
+ "amount": 0.2912,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60236,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.977Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.915Z",
+ "amount": 0.1568,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60237,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.085Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.924Z",
+ "amount": 0.1288,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60238,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.193Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.932Z",
+ "amount": 0.2016,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60239,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.300Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.940Z",
+ "amount": 0.2184,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60240,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.408Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.949Z",
+ "amount": 0.1456,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60241,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.516Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.957Z",
+ "amount": 0.1456,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60242,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.623Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.965Z",
+ "amount": 0.3304,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60243,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.731Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.974Z",
+ "amount": 0.2408,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60244,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.839Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.982Z",
+ "amount": 0.2688,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60245,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.947Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.990Z",
+ "amount": 0.3304,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60246,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.054Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:04.998Z",
"amount": 0.1624,
- "object": 94,
- "account": 13,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.32,
- "invoice": 61,
- "date": "2013-11-28T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 58907,
+ "pk": 60247,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:20:03.083Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.733Z",
- "amount": 0.2072,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 61,
- "date": "2013-11-29T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58908,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.174Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.741Z",
- "amount": 0.2968,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 61,
- "date": "2013-11-29T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58909,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.265Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.749Z",
- "amount": 0.3024,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 61,
- "date": "2013-11-29T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58910,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.356Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.757Z",
- "amount": 0.2856,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 61,
- "date": "2013-11-30T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58911,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.449Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.765Z",
- "amount": 0.1232,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 61,
- "date": "2013-11-30T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58912,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.540Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.774Z",
- "amount": 0.1792,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 61,
- "date": "2013-11-30T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58913,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.631Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.782Z",
- "amount": 0.1792,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 61,
- "date": "2013-12-01T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58914,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.722Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.791Z",
- "amount": 0.1344,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 61,
- "date": "2013-12-01T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58915,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.805Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.799Z",
- "amount": 0.3192,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 61,
- "date": "2013-12-01T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58916,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.904Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.807Z",
- "amount": 0.1232,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 62,
- "date": "2013-12-02T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58917,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.995Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.815Z",
- "amount": 0.1288,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 62,
- "date": "2013-12-02T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58918,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.087Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.824Z",
- "amount": 0.2912,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 62,
- "date": "2013-12-02T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58919,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.178Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.832Z",
- "amount": 0.2744,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 62,
- "date": "2013-12-03T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58920,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.269Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.840Z",
- "amount": 0.1568,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 62,
- "date": "2013-12-03T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58921,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.360Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.849Z",
- "amount": 0.2688,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 62,
- "date": "2013-12-03T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58922,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.451Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.857Z",
- "amount": 0.336,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 62,
- "date": "2013-12-04T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58923,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.542Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.865Z",
- "amount": 0.196,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 62,
- "date": "2013-12-04T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58924,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.633Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.873Z",
- "amount": 0.1176,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 62,
- "date": "2013-12-04T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58925,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.724Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.885Z",
- "amount": 0.1512,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 62,
- "date": "2013-12-05T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58926,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.816Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.893Z",
- "amount": 0.308,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 62,
- "date": "2013-12-05T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58927,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.907Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.902Z",
- "amount": 0.3192,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 62,
- "date": "2013-12-05T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58928,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.006Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.910Z",
- "amount": 0.1904,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 62,
- "date": "2013-12-06T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58929,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.097Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.918Z",
- "amount": 0.14,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 62,
- "date": "2013-12-06T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58930,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.195Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.926Z",
- "amount": 0.1288,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 62,
- "date": "2013-12-06T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58931,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.286Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.935Z",
- "amount": 0.1512,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 62,
- "date": "2013-12-07T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58932,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.377Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.943Z",
- "amount": 0.252,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 62,
- "date": "2013-12-07T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58933,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.468Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.951Z",
- "amount": 0.1232,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 62,
- "date": "2013-12-07T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58934,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.559Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.960Z",
- "amount": 0.1232,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 62,
- "date": "2013-12-08T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58935,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.651Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.968Z",
- "amount": 0.1512,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 62,
- "date": "2013-12-08T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58936,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.742Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.976Z",
- "amount": 0.336,
- "object": 94,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 62,
- "date": "2013-12-08T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58937,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.984Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.984Z",
- "amount": 0.196,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 2.8,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58938,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:47.993Z",
- "slice": 11,
- "created": "2013-12-13T22:19:47.993Z",
- "amount": 0.1904,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 2.72,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58939,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.001Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.001Z",
- "amount": 0.2464,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 3.52,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58940,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.009Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.009Z",
- "amount": 0.196,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 2.8,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58941,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.017Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.017Z",
- "amount": 0.1736,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 2.48,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58942,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.026Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.026Z",
- "amount": 0.1848,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 2.64,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58943,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.034Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.034Z",
- "amount": 0.1568,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 2.24,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58944,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.042Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.042Z",
- "amount": 0.1904,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 2.72,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58945,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.051Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.051Z",
- "amount": 0.3192,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 4.56,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58946,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.059Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.059Z",
- "amount": 0.1568,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 2.24,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58947,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.067Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.067Z",
- "amount": 0.2688,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 3.84,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58948,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.075Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.075Z",
- "amount": 0.2632,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 3.76,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58949,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.084Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.084Z",
- "amount": 0.2856,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 4.08,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58950,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.092Z",
- "slice": 11,
- "created": "2013-12-13T22:19:48.092Z",
- "amount": 0.336,
- "object": 94,
- "account": 13,
- "state": "pending",
- "coreHours": 4.8,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58951,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.440Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.115Z",
- "amount": 0.2296,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 59,
- "date": "2013-11-13T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58952,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.532Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.125Z",
- "amount": 0.2352,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 59,
- "date": "2013-11-14T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58953,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.623Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.133Z",
- "amount": 0.308,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 59,
- "date": "2013-11-14T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58954,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.714Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.142Z",
- "amount": 0.252,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 59,
- "date": "2013-11-14T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58955,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.805Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.150Z",
- "amount": 0.308,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 59,
- "date": "2013-11-15T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58956,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.896Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.158Z",
- "amount": 0.3024,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 59,
- "date": "2013-11-15T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58957,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.004Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.167Z",
- "amount": 0.1456,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 59,
- "date": "2013-11-15T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58958,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.096Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.175Z",
- "amount": 0.2912,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 59,
- "date": "2013-11-16T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58959,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.187Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.183Z",
- "amount": 0.1232,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 59,
- "date": "2013-11-16T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58960,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.278Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.191Z",
- "amount": 0.2184,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 59,
- "date": "2013-11-16T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58961,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.361Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.200Z",
- "amount": 0.2352,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 59,
- "date": "2013-11-17T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58962,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.452Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.208Z",
- "amount": 0.2016,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 59,
- "date": "2013-11-17T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58963,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.543Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.216Z",
- "amount": 0.1512,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 59,
- "date": "2013-11-17T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58964,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.642Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.224Z",
- "amount": 0.2296,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 60,
- "date": "2013-11-18T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58965,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.745Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.233Z",
- "amount": 0.308,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 60,
- "date": "2013-11-18T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58966,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.836Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.241Z",
- "amount": 0.2408,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 60,
- "date": "2013-11-18T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58967,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.927Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.249Z",
- "amount": 0.1512,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 60,
- "date": "2013-11-19T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58968,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.019Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.258Z",
- "amount": 0.2016,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 60,
- "date": "2013-11-19T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58969,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.110Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.266Z",
- "amount": 0.2744,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 60,
- "date": "2013-11-19T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58970,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.201Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.274Z",
- "amount": 0.2184,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 60,
- "date": "2013-11-20T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58971,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.292Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.283Z",
- "amount": 0.2016,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 60,
- "date": "2013-11-20T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58972,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.386Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.291Z",
- "amount": 0.1792,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 60,
- "date": "2013-11-20T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58973,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.477Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.299Z",
- "amount": 0.196,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 60,
- "date": "2013-11-21T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58974,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.568Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.308Z",
- "amount": 0.1288,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 60,
- "date": "2013-11-21T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58975,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.675Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.316Z",
- "amount": 0.224,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 60,
- "date": "2013-11-21T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58976,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.767Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.324Z",
- "amount": 0.1904,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 60,
- "date": "2013-11-22T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58977,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.858Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.332Z",
- "amount": 0.3304,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 60,
- "date": "2013-11-22T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58978,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.974Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.341Z",
- "amount": 0.2632,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 60,
- "date": "2013-11-22T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58979,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.065Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.349Z",
- "amount": 0.168,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.4,
- "invoice": 60,
- "date": "2013-11-23T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58980,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.156Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.357Z",
- "amount": 0.2464,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 60,
- "date": "2013-11-23T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58981,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.314Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.365Z",
- "amount": 0.196,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 60,
- "date": "2013-11-23T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58982,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.578Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.374Z",
- "amount": 0.2408,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 60,
- "date": "2013-11-24T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58983,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.786Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.382Z",
- "amount": 0.3192,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 60,
- "date": "2013-11-24T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58984,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.877Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.390Z",
- "amount": 0.1848,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.64,
- "invoice": 60,
- "date": "2013-11-24T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58985,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.976Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.399Z",
- "amount": 0.168,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.4,
- "invoice": 61,
- "date": "2013-11-25T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58986,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.067Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.407Z",
- "amount": 0.224,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 61,
- "date": "2013-11-25T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58987,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.158Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.415Z",
- "amount": 0.1736,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 61,
- "date": "2013-11-25T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58988,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.254Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.423Z",
- "amount": 0.308,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 61,
- "date": "2013-11-26T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58989,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.345Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.432Z",
- "amount": 0.1736,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 61,
- "date": "2013-11-26T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58990,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.436Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.440Z",
- "amount": 0.1176,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 61,
- "date": "2013-11-26T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58991,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.527Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.448Z",
- "amount": 0.2744,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 61,
- "date": "2013-11-27T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58992,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.619Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.457Z",
- "amount": 0.224,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 61,
- "date": "2013-11-27T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58993,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.710Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.465Z",
- "amount": 0.1176,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 61,
- "date": "2013-11-27T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58994,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.801Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.473Z",
- "amount": 0.2184,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 61,
- "date": "2013-11-28T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58995,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.892Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.481Z",
- "amount": 0.1904,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 61,
- "date": "2013-11-28T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58996,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.983Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.490Z",
- "amount": 0.196,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 61,
- "date": "2013-11-28T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58997,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.074Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.498Z",
- "amount": 0.2464,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 61,
- "date": "2013-11-29T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58998,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.165Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.506Z",
- "amount": 0.1232,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 61,
- "date": "2013-11-29T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 58999,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.256Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.514Z",
- "amount": 0.2016,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 61,
- "date": "2013-11-29T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59000,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.348Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.523Z",
- "amount": 0.2408,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 61,
- "date": "2013-11-30T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59001,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.440Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.531Z",
- "amount": 0.196,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 61,
- "date": "2013-11-30T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59002,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.531Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.539Z",
- "amount": 0.1848,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.64,
- "invoice": 61,
- "date": "2013-11-30T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59003,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.623Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.548Z",
- "amount": 0.252,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 61,
- "date": "2013-12-01T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59004,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.714Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.556Z",
- "amount": 0.14,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 61,
- "date": "2013-12-01T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59005,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.846Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.564Z",
- "amount": 0.1288,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 61,
- "date": "2013-12-01T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59006,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.946Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.572Z",
- "amount": 0.1456,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 62,
- "date": "2013-12-02T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59007,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.037Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.581Z",
- "amount": 0.308,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 62,
- "date": "2013-12-02T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59008,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.128Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.589Z",
- "amount": 0.1512,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 62,
- "date": "2013-12-02T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59009,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.219Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.597Z",
- "amount": 0.2912,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 62,
- "date": "2013-12-03T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59010,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.310Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.606Z",
- "amount": 0.1568,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 62,
- "date": "2013-12-03T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59011,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.401Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.614Z",
- "amount": 0.3192,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 62,
- "date": "2013-12-03T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59012,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.492Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.622Z",
- "amount": 0.1232,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 62,
- "date": "2013-12-04T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59013,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.584Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.630Z",
- "amount": 0.3248,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 62,
- "date": "2013-12-04T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59014,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.675Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.639Z",
- "amount": 0.1344,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 62,
- "date": "2013-12-04T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59015,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.766Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.647Z",
- "amount": 0.252,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 62,
- "date": "2013-12-05T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59016,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.857Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.655Z",
- "amount": 0.2856,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 62,
- "date": "2013-12-05T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59017,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.948Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.664Z",
- "amount": 0.196,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 62,
- "date": "2013-12-05T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59018,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.998Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.672Z",
- "amount": 0.196,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 62,
- "date": "2013-12-06T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59019,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.089Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.680Z",
- "amount": 0.1232,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 62,
- "date": "2013-12-06T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59020,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.187Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.688Z",
- "amount": 0.2464,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 62,
- "date": "2013-12-06T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59021,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.278Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.697Z",
- "amount": 0.2128,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 62,
- "date": "2013-12-07T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59022,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.369Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.705Z",
- "amount": 0.1288,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 62,
- "date": "2013-12-07T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59023,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.460Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.713Z",
- "amount": 0.1904,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 62,
- "date": "2013-12-07T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59024,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.551Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.722Z",
- "amount": 0.1792,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 62,
- "date": "2013-12-08T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59025,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.642Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.730Z",
- "amount": 0.252,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 62,
- "date": "2013-12-08T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59026,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.733Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.738Z",
- "amount": 0.2688,
- "object": 95,
- "account": 13,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 62,
- "date": "2013-12-08T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59027,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.746Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.746Z",
- "amount": 0.2576,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 3.68,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59028,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.755Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.755Z",
- "amount": 0.2968,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 4.24,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59029,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.763Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.763Z",
- "amount": 0.2968,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 4.24,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59030,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.771Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.771Z",
- "amount": 0.3192,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 4.56,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59031,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.780Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.780Z",
- "amount": 0.3024,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 4.32,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59032,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.788Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.788Z",
- "amount": 0.1176,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 1.68,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59033,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.796Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.796Z",
- "amount": 0.308,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 4.4,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59034,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.805Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.805Z",
- "amount": 0.2408,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 3.44,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59035,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.813Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.813Z",
- "amount": 0.1344,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 1.92,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59036,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.821Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.821Z",
- "amount": 0.112,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 1.6,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59037,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.829Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.829Z",
- "amount": 0.1792,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 2.56,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59038,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.838Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.838Z",
- "amount": 0.1792,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 2.56,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59039,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.846Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.846Z",
- "amount": 0.3192,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 4.56,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59040,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:48.854Z",
- "slice": 12,
- "created": "2013-12-13T22:19:48.854Z",
- "amount": 0.3192,
- "object": 95,
- "account": 13,
- "state": "pending",
- "coreHours": 4.56,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59041,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.076Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.886Z",
- "amount": 0.3136,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 54,
- "date": "2013-11-13T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59042,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.117Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.896Z",
- "amount": 0.2072,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 54,
- "date": "2013-11-14T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59043,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.158Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.904Z",
- "amount": 0.2408,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 54,
- "date": "2013-11-14T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59044,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.200Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.912Z",
- "amount": 0.2576,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 54,
- "date": "2013-11-14T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59045,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.241Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.921Z",
- "amount": 0.2632,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 54,
- "date": "2013-11-15T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59046,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.283Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.929Z",
- "amount": 0.2352,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 54,
- "date": "2013-11-15T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59047,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.324Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.937Z",
- "amount": 0.2072,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 54,
- "date": "2013-11-15T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59048,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.366Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.945Z",
- "amount": 0.2296,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 54,
- "date": "2013-11-16T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59049,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.407Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.954Z",
- "amount": 0.1792,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 54,
- "date": "2013-11-16T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59050,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.448Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.962Z",
- "amount": 0.2296,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 54,
- "date": "2013-11-16T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59051,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.490Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.970Z",
- "amount": 0.3192,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 54,
- "date": "2013-11-17T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59052,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.531Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.978Z",
- "amount": 0.2128,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 54,
- "date": "2013-11-17T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59053,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.584Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.987Z",
- "amount": 0.3024,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 54,
- "date": "2013-11-17T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59054,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.647Z",
- "slice": 14,
- "created": "2013-12-13T22:19:48.995Z",
- "amount": 0.2408,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 55,
- "date": "2013-11-18T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59055,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.689Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.003Z",
- "amount": 0.3024,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 55,
- "date": "2013-11-18T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59056,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.730Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.012Z",
- "amount": 0.224,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 55,
- "date": "2013-11-18T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59057,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.771Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.020Z",
- "amount": 0.2408,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 55,
- "date": "2013-11-19T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59058,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.813Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.028Z",
- "amount": 0.196,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 55,
- "date": "2013-11-19T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59059,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.854Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.036Z",
- "amount": 0.2968,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 55,
- "date": "2013-11-19T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59060,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.896Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.045Z",
- "amount": 0.2464,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 55,
- "date": "2013-11-20T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59061,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.937Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.053Z",
- "amount": 0.252,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 55,
- "date": "2013-11-20T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59062,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.979Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.061Z",
- "amount": 0.336,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 55,
- "date": "2013-11-20T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59063,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.020Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.070Z",
- "amount": 0.28,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 55,
- "date": "2013-11-21T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59064,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.061Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.078Z",
- "amount": 0.3192,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 55,
- "date": "2013-11-21T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59065,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.103Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.086Z",
- "amount": 0.1904,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 55,
- "date": "2013-11-21T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59066,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.144Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.094Z",
- "amount": 0.2016,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 55,
- "date": "2013-11-22T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59067,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.186Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.103Z",
- "amount": 0.1232,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 55,
- "date": "2013-11-22T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59068,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.227Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.111Z",
- "amount": 0.1176,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 55,
- "date": "2013-11-22T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59069,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.268Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.119Z",
- "amount": 0.308,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 55,
- "date": "2013-11-23T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59070,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.310Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.127Z",
- "amount": 0.2856,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 55,
- "date": "2013-11-23T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59071,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.351Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.136Z",
- "amount": 0.3248,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 55,
- "date": "2013-11-23T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59072,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.393Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.144Z",
- "amount": 0.2016,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 55,
- "date": "2013-11-24T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59073,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.434Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.152Z",
- "amount": 0.28,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 55,
- "date": "2013-11-24T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59074,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.476Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.161Z",
- "amount": 0.252,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 55,
- "date": "2013-11-24T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59075,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.525Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.169Z",
- "amount": 0.2352,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 56,
- "date": "2013-11-25T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59076,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.567Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.177Z",
- "amount": 0.1848,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.64,
- "invoice": 56,
- "date": "2013-11-25T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59077,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.608Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.186Z",
- "amount": 0.2632,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 56,
- "date": "2013-11-25T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59078,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.650Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.194Z",
- "amount": 0.1232,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 56,
- "date": "2013-11-26T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59079,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.693Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.202Z",
- "amount": 0.112,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 56,
- "date": "2013-11-26T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59080,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.734Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.210Z",
- "amount": 0.3304,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 56,
- "date": "2013-11-26T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59081,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.775Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.219Z",
- "amount": 0.2016,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 56,
- "date": "2013-11-27T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59082,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.817Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.227Z",
- "amount": 0.112,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 56,
- "date": "2013-11-27T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59083,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.858Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.235Z",
- "amount": 0.196,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 56,
- "date": "2013-11-27T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59084,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.900Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.243Z",
- "amount": 0.308,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 56,
- "date": "2013-11-28T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59085,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.941Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.252Z",
- "amount": 0.1848,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.64,
- "invoice": 56,
- "date": "2013-11-28T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59086,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.983Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.260Z",
- "amount": 0.2016,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 56,
- "date": "2013-11-28T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59087,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.024Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.268Z",
- "amount": 0.2128,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 56,
- "date": "2013-11-29T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59088,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.065Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.277Z",
- "amount": 0.2072,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 56,
- "date": "2013-11-29T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59089,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.107Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.285Z",
- "amount": 0.2408,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 56,
- "date": "2013-11-29T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59090,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.140Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.293Z",
- "amount": 0.2072,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 56,
- "date": "2013-11-30T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59091,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.181Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.302Z",
- "amount": 0.2632,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 56,
- "date": "2013-11-30T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59092,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.223Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.310Z",
- "amount": 0.2352,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 56,
- "date": "2013-11-30T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59093,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.264Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.318Z",
- "amount": 0.3024,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 56,
- "date": "2013-12-01T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59094,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.306Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.326Z",
- "amount": 0.2688,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 56,
- "date": "2013-12-01T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59095,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.347Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.335Z",
- "amount": 0.2744,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 56,
- "date": "2013-12-01T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59096,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.397Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.343Z",
- "amount": 0.1904,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 57,
- "date": "2013-12-02T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59097,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.438Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.351Z",
- "amount": 0.112,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 57,
- "date": "2013-12-02T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59098,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.479Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.360Z",
- "amount": 0.2576,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 57,
- "date": "2013-12-02T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59099,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.521Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.368Z",
- "amount": 0.1344,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 57,
- "date": "2013-12-03T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59100,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.562Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.376Z",
- "amount": 0.1568,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 57,
- "date": "2013-12-03T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59101,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.604Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.384Z",
- "amount": 0.196,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 57,
- "date": "2013-12-03T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59102,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.645Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.393Z",
- "amount": 0.28,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 57,
- "date": "2013-12-04T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59103,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.687Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.401Z",
- "amount": 0.2072,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 57,
- "date": "2013-12-04T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59104,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.728Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.409Z",
- "amount": 0.3136,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 57,
- "date": "2013-12-04T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59105,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.769Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.417Z",
- "amount": 0.1456,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 57,
- "date": "2013-12-05T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59106,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.811Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.426Z",
- "amount": 0.1736,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 57,
- "date": "2013-12-05T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59107,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.852Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.434Z",
- "amount": 0.1176,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 57,
- "date": "2013-12-05T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59108,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.894Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.442Z",
- "amount": 0.28,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 57,
- "date": "2013-12-06T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59109,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.935Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.451Z",
- "amount": 0.3192,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 57,
- "date": "2013-12-06T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59110,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.977Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.459Z",
- "amount": 0.3248,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 57,
- "date": "2013-12-06T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59111,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.018Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.467Z",
- "amount": 0.1288,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 57,
- "date": "2013-12-07T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59112,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.059Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.475Z",
- "amount": 0.308,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 57,
- "date": "2013-12-07T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59113,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.101Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.484Z",
- "amount": 0.1736,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 57,
- "date": "2013-12-07T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59114,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.142Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.492Z",
- "amount": 0.112,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 57,
- "date": "2013-12-08T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59115,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.184Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.500Z",
- "amount": 0.3304,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 57,
- "date": "2013-12-08T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59116,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.225Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.509Z",
- "amount": 0.2072,
- "object": 96,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 57,
- "date": "2013-12-08T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59117,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.517Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.517Z",
- "amount": 0.196,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 2.8,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59118,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.525Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.525Z",
- "amount": 0.2408,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 3.44,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59119,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.534Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.533Z",
- "amount": 0.1512,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 2.16,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59120,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.542Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.542Z",
- "amount": 0.2576,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 3.68,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59121,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.550Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.550Z",
- "amount": 0.2912,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 4.16,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59122,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.558Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.558Z",
- "amount": 0.2856,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 4.08,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59123,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.567Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.567Z",
- "amount": 0.3136,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 4.48,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59124,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.575Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.575Z",
- "amount": 0.1288,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 1.84,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59125,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.583Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.583Z",
- "amount": 0.2296,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 3.28,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59126,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.592Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.591Z",
- "amount": 0.1512,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 2.16,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59127,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.600Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.600Z",
- "amount": 0.2296,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 3.28,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59128,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.608Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.608Z",
- "amount": 0.252,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 3.6,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59129,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.616Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.616Z",
- "amount": 0.2016,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 2.88,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59130,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:49.625Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.624Z",
- "amount": 0.252,
- "object": 96,
- "account": 12,
- "state": "pending",
- "coreHours": 3.6,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59131,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.067Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.640Z",
- "amount": 0.3192,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 54,
- "date": "2013-11-13T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59132,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.109Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.649Z",
- "amount": 0.112,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 54,
- "date": "2013-11-14T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59133,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.150Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.658Z",
- "amount": 0.3136,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 54,
- "date": "2013-11-14T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59134,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.192Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.666Z",
- "amount": 0.2576,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 54,
- "date": "2013-11-14T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59135,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.233Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.674Z",
- "amount": 0.112,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 54,
- "date": "2013-11-15T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59136,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.274Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.683Z",
- "amount": 0.1848,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.64,
- "invoice": 54,
- "date": "2013-11-15T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59137,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.316Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.691Z",
- "amount": 0.2912,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 54,
- "date": "2013-11-15T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59138,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.357Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.699Z",
- "amount": 0.2464,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 54,
- "date": "2013-11-16T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59139,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.399Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.707Z",
- "amount": 0.2968,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 54,
- "date": "2013-11-16T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59140,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.440Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.716Z",
- "amount": 0.1288,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 54,
- "date": "2013-11-16T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59141,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.481Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.724Z",
- "amount": 0.2128,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 54,
- "date": "2013-11-17T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59142,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.523Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.732Z",
- "amount": 0.2464,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 54,
- "date": "2013-11-17T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59143,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.564Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.740Z",
- "amount": 0.1792,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 54,
- "date": "2013-11-17T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59144,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.639Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.749Z",
- "amount": 0.1904,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 55,
- "date": "2013-11-18T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59145,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.680Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.757Z",
- "amount": 0.2408,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 55,
- "date": "2013-11-18T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59146,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.722Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.765Z",
- "amount": 0.2408,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 55,
- "date": "2013-11-18T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59147,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.763Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.774Z",
- "amount": 0.196,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 55,
- "date": "2013-11-19T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59148,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.805Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.782Z",
- "amount": 0.14,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 55,
- "date": "2013-11-19T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59149,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.846Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.790Z",
- "amount": 0.308,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 55,
- "date": "2013-11-19T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59150,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.887Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.799Z",
- "amount": 0.2352,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 55,
- "date": "2013-11-20T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59151,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.929Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.807Z",
- "amount": 0.1456,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 55,
- "date": "2013-11-20T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59152,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.970Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.815Z",
- "amount": 0.1568,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 55,
- "date": "2013-11-20T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59153,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.012Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.823Z",
- "amount": 0.2968,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 55,
- "date": "2013-11-21T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59154,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.053Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.832Z",
- "amount": 0.2856,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 55,
- "date": "2013-11-21T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59155,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.095Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.840Z",
- "amount": 0.2408,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 55,
- "date": "2013-11-21T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59156,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.136Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.848Z",
- "amount": 0.1344,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 55,
- "date": "2013-11-22T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59157,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.177Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.857Z",
- "amount": 0.1736,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 55,
- "date": "2013-11-22T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59158,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.219Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.865Z",
- "amount": 0.3304,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 55,
- "date": "2013-11-22T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59159,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.260Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.873Z",
- "amount": 0.308,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 55,
- "date": "2013-11-23T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59160,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.302Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.881Z",
- "amount": 0.2856,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 55,
- "date": "2013-11-23T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59161,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.343Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.890Z",
- "amount": 0.3248,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 55,
- "date": "2013-11-23T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59162,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.385Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.898Z",
- "amount": 0.2464,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 55,
- "date": "2013-11-24T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59163,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.426Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.906Z",
- "amount": 0.2968,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 55,
- "date": "2013-11-24T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59164,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.467Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.915Z",
- "amount": 0.224,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 55,
- "date": "2013-11-24T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59165,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.517Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.923Z",
- "amount": 0.14,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 56,
- "date": "2013-11-25T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59166,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.558Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.931Z",
- "amount": 0.2744,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 56,
- "date": "2013-11-25T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59167,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.600Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.939Z",
- "amount": 0.2352,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 56,
- "date": "2013-11-25T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59168,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.641Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.948Z",
- "amount": 0.28,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 56,
- "date": "2013-11-26T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59169,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.684Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.956Z",
- "amount": 0.28,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 56,
- "date": "2013-11-26T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59170,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.726Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.964Z",
- "amount": 0.336,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 56,
- "date": "2013-11-26T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59171,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.767Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.973Z",
- "amount": 0.224,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 56,
- "date": "2013-11-27T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59172,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.809Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.981Z",
- "amount": 0.252,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 56,
- "date": "2013-11-27T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59173,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.850Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.989Z",
- "amount": 0.2688,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 56,
- "date": "2013-11-27T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59174,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.891Z",
- "slice": 14,
- "created": "2013-12-13T22:19:49.997Z",
- "amount": 0.2632,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 56,
- "date": "2013-11-28T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59175,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.933Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.006Z",
- "amount": 0.2912,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 56,
- "date": "2013-11-28T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59176,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.974Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.014Z",
- "amount": 0.1176,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 56,
- "date": "2013-11-28T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59177,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.016Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.022Z",
- "amount": 0.168,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.4,
- "invoice": 56,
- "date": "2013-11-29T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59178,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.057Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.030Z",
- "amount": 0.112,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 56,
- "date": "2013-11-29T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59179,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.098Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.039Z",
- "amount": 0.1848,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.64,
- "invoice": 56,
- "date": "2013-11-29T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59180,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.132Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.047Z",
- "amount": 0.2128,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 56,
- "date": "2013-11-30T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59181,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.173Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.055Z",
+ "updated": "2013-12-18T21:29:24.162Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.007Z",
"amount": 0.1624,
- "object": 97,
- "account": 12,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
"coreHours": 2.32,
- "invoice": 56,
- "date": "2013-11-30T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59182,
+ "pk": 60248,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.214Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.064Z",
- "amount": 0.3248,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:24.270Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.015Z",
+ "amount": 0.2184,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.64,
- "invoice": 56,
- "date": "2013-11-30T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.12,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59183,
+ "pk": 60249,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.256Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.072Z",
- "amount": 0.1512,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 56,
- "date": "2013-12-01T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59184,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.297Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.080Z",
+ "updated": "2013-12-18T21:29:24.377Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.023Z",
"amount": 0.1176,
- "object": 97,
- "account": 12,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
"coreHours": 1.68,
- "invoice": 56,
- "date": "2013-12-01T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59185,
+ "pk": 60250,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.339Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.088Z",
- "amount": 0.224,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:24.485Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.032Z",
+ "amount": 0.2632,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
- "coreHours": 3.2,
- "invoice": 56,
- "date": "2013-12-01T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.76,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59186,
+ "pk": 60251,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.388Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.097Z",
- "amount": 0.2464,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:24.601Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.040Z",
+ "amount": 0.1904,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
- "coreHours": 3.52,
- "invoice": 57,
- "date": "2013-12-02T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.72,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59187,
+ "pk": 60252,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.430Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.105Z",
- "amount": 0.1288,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:24.709Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.048Z",
+ "amount": 0.3024,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
- "coreHours": 1.84,
- "invoice": 57,
- "date": "2013-12-02T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.32,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59188,
+ "pk": 60253,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.471Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.113Z",
- "amount": 0.168,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.4,
- "invoice": 57,
- "date": "2013-12-02T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59189,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.513Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.122Z",
+ "updated": "2013-12-18T21:29:24.816Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.056Z",
"amount": 0.2856,
- "object": 97,
- "account": 12,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
"coreHours": 4.08,
- "invoice": 57,
- "date": "2013-12-03T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59190,
+ "pk": 60254,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.554Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.130Z",
- "amount": 0.2744,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 57,
- "date": "2013-12-03T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59191,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.596Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.138Z",
- "amount": 0.224,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 57,
- "date": "2013-12-03T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59192,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.637Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.146Z",
- "amount": 0.2072,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 57,
- "date": "2013-12-04T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59193,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.678Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.155Z",
- "amount": 0.2464,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 57,
- "date": "2013-12-04T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59194,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.720Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.163Z",
- "amount": 0.2464,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 57,
- "date": "2013-12-04T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59195,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.761Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.171Z",
- "amount": 0.224,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 57,
- "date": "2013-12-05T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59196,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.803Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.180Z",
- "amount": 0.2576,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 57,
- "date": "2013-12-05T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59197,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.844Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.188Z",
- "amount": 0.2296,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 57,
- "date": "2013-12-05T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59198,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.885Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.196Z",
- "amount": 0.1344,
- "object": 97,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 57,
- "date": "2013-12-06T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59199,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.927Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.204Z",
+ "updated": "2013-12-18T21:29:24.924Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.065Z",
"amount": 0.3304,
- "object": 97,
- "account": 12,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
"coreHours": 4.72,
- "invoice": 57,
- "date": "2013-12-06T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59200,
+ "pk": 60255,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.968Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.213Z",
- "amount": 0.1232,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:25.032Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.073Z",
+ "amount": 0.3248,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
- "coreHours": 1.76,
- "invoice": 57,
- "date": "2013-12-06T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.64,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59201,
+ "pk": 60256,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.010Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.221Z",
+ "updated": "2013-12-18T21:29:25.139Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.081Z",
+ "amount": 0.2968,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60257,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.247Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.090Z",
+ "amount": 0.308,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60258,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.355Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.098Z",
+ "amount": 0.3304,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60259,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.462Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.106Z",
+ "amount": 0.252,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60260,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.570Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.114Z",
+ "amount": 0.2744,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60261,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.678Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.123Z",
+ "amount": 0.2632,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60262,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.786Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.131Z",
+ "amount": 0.2016,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60263,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.893Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.140Z",
+ "amount": 0.2688,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60264,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.001Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.148Z",
+ "amount": 0.2856,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60265,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.109Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.156Z",
+ "amount": 0.1848,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60266,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.216Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.164Z",
+ "amount": 0.1176,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60267,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.324Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.173Z",
+ "amount": 0.2016,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60268,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.432Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.181Z",
"amount": 0.224,
- "object": 97,
- "account": 12,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
"coreHours": 3.2,
- "invoice": 57,
- "date": "2013-12-07T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59202,
+ "pk": 60269,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.051Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.229Z",
- "amount": 0.2352,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:26.539Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.189Z",
+ "amount": 0.168,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
- "coreHours": 3.36,
- "invoice": 57,
- "date": "2013-12-07T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.4,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59203,
+ "pk": 60270,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.093Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.238Z",
- "amount": 0.2464,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:26.647Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.197Z",
+ "amount": 0.2968,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
- "coreHours": 3.52,
- "invoice": 57,
- "date": "2013-12-07T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.24,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59204,
+ "pk": 60271,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.134Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.246Z",
- "amount": 0.2912,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:26.755Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.206Z",
+ "amount": 0.1568,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
- "coreHours": 4.16,
- "invoice": 57,
- "date": "2013-12-08T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.24,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59205,
+ "pk": 60272,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.175Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.254Z",
- "amount": 0.2408,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:26.871Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.214Z",
+ "amount": 0.2744,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
- "coreHours": 3.44,
- "invoice": 57,
- "date": "2013-12-08T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.92,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59206,
+ "pk": 60273,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.217Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.262Z",
+ "updated": "2013-12-18T21:29:26.978Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.222Z",
+ "amount": 0.3304,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60274,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.086Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.231Z",
+ "amount": 0.1512,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60275,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.194Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.253Z",
"amount": 0.1288,
- "object": 97,
- "account": 12,
+ "object": 109,
+ "account": 15,
"state": "invoiced",
"coreHours": 1.84,
- "invoice": 57,
- "date": "2013-12-08T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59207,
+ "pk": 60276,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.271Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.271Z",
+ "updated": "2013-12-18T21:29:27.301Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.331Z",
+ "amount": 0.252,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60277,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.409Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.346Z",
+ "amount": 0.196,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60278,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.517Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.355Z",
+ "amount": 0.1904,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60279,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.683Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.363Z",
"amount": 0.2408,
- "object": 97,
- "account": 12,
- "state": "pending",
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
"coreHours": 3.44,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59208,
+ "pk": 60280,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.279Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.279Z",
- "amount": 0.1568,
- "object": 97,
- "account": 12,
- "state": "pending",
- "coreHours": 2.24,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:27.790Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.371Z",
+ "amount": 0.3136,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59209,
+ "pk": 60281,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.287Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.287Z",
+ "updated": "2013-12-18T21:29:27.898Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.380Z",
+ "amount": 0.2408,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60282,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.006Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.388Z",
"amount": 0.1512,
- "object": 97,
- "account": 12,
- "state": "pending",
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
"coreHours": 2.16,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59210,
+ "pk": 60283,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.296Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.296Z",
+ "updated": "2013-12-18T21:29:28.113Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.396Z",
+ "amount": 0.28,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60284,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.221Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.404Z",
+ "amount": 0.2856,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60285,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.329Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.413Z",
+ "amount": 0.1456,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60286,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.436Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.421Z",
+ "amount": 0.3192,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60287,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.544Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.429Z",
+ "amount": 0.3248,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60288,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.652Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.438Z",
+ "amount": 0.2352,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60289,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.759Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.446Z",
+ "amount": 0.1288,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60290,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.867Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.454Z",
+ "amount": 0.28,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60291,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.975Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.462Z",
+ "amount": 0.2464,
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60292,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.083Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.471Z",
"amount": 0.3304,
- "object": 97,
- "account": 12,
- "state": "pending",
+ "object": 109,
+ "account": 15,
+ "state": "invoiced",
"coreHours": 4.72,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59211,
+ "pk": 60293,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.304Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.304Z",
- "amount": 0.1848,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:05.479Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.479Z",
+ "amount": 0.2632,
+ "object": 109,
+ "account": 15,
"state": "pending",
- "coreHours": 2.64,
+ "coreHours": 3.76,
"invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59212,
+ "pk": 60294,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.312Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.312Z",
- "amount": 0.1232,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:05.487Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.487Z",
+ "amount": 0.1736,
+ "object": 109,
+ "account": 15,
"state": "pending",
- "coreHours": 1.76,
+ "coreHours": 2.48,
"invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59213,
+ "pk": 60295,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.321Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.321Z",
- "amount": 0.2744,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:05.496Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.495Z",
+ "amount": 0.3248,
+ "object": 109,
+ "account": 15,
"state": "pending",
- "coreHours": 3.92,
+ "coreHours": 4.64,
"invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59214,
+ "pk": 60296,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.329Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.329Z",
+ "updated": "2013-12-18T21:29:05.504Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.504Z",
+ "amount": 0.1344,
+ "object": 109,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 1.92,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60297,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:05.512Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.512Z",
"amount": 0.1624,
- "object": 97,
- "account": 12,
+ "object": 109,
+ "account": 15,
"state": "pending",
"coreHours": 2.32,
"invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59215,
+ "pk": 60298,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.337Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.337Z",
- "amount": 0.196,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:05.520Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.520Z",
+ "amount": 0.2968,
+ "object": 109,
+ "account": 15,
"state": "pending",
- "coreHours": 2.8,
+ "coreHours": 4.24,
"invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59216,
+ "pk": 60299,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.345Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.345Z",
- "amount": 0.2688,
- "object": 97,
- "account": 12,
+ "updated": "2013-12-18T21:29:05.529Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.529Z",
+ "amount": 0.1232,
+ "object": 109,
+ "account": 15,
"state": "pending",
- "coreHours": 3.84,
+ "coreHours": 1.76,
"invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59217,
+ "pk": 60300,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.354Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.354Z",
+ "updated": "2013-12-18T21:29:05.537Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.537Z",
+ "amount": 0.2296,
+ "object": 109,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 3.28,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60301,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.244Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.552Z",
+ "amount": 0.2072,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60302,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.351Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.562Z",
+ "amount": 0.1512,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60303,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.459Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.570Z",
+ "amount": 0.1232,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60304,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.567Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.578Z",
+ "amount": 0.1176,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60305,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.674Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.587Z",
+ "amount": 0.2912,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60306,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.782Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.595Z",
+ "amount": 0.1456,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60307,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.890Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.603Z",
+ "amount": 0.3136,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60308,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.997Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.611Z",
+ "amount": 0.252,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60309,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.105Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.620Z",
+ "amount": 0.2968,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60310,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.213Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.630Z",
+ "amount": 0.2184,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60311,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.321Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.645Z",
+ "amount": 0.3248,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60312,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.428Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.655Z",
+ "amount": 0.1736,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60313,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.536Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.670Z",
+ "amount": 0.2968,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60314,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.644Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.680Z",
+ "amount": 0.1176,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60315,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.751Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.694Z",
+ "amount": 0.224,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60316,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.859Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.705Z",
+ "amount": 0.1624,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60317,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.967Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.719Z",
+ "amount": 0.3192,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60318,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.074Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.730Z",
+ "amount": 0.3304,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60319,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.182Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.738Z",
+ "amount": 0.1288,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60320,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.298Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.747Z",
+ "amount": 0.1736,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60321,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.406Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.755Z",
+ "amount": 0.3304,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60322,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.513Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.763Z",
+ "amount": 0.2296,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60323,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.663Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.771Z",
+ "amount": 0.2072,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60324,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.770Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.780Z",
+ "amount": 0.1456,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60325,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.878Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.788Z",
+ "amount": 0.2856,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60326,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.986Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.796Z",
+ "amount": 0.2352,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60327,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.093Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.804Z",
+ "amount": 0.2408,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60328,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.201Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.813Z",
+ "amount": 0.2128,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60329,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.309Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.821Z",
+ "amount": 0.2408,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60330,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.416Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.829Z",
+ "amount": 0.2296,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60331,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.524Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.838Z",
+ "amount": 0.2576,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60332,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.632Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.846Z",
+ "amount": 0.3304,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60333,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.739Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.854Z",
+ "amount": 0.1176,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60334,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.847Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.862Z",
+ "amount": 0.2072,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60335,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.955Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.871Z",
+ "amount": 0.2632,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60336,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.062Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.879Z",
+ "amount": 0.1736,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60337,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.170Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.887Z",
+ "amount": 0.2632,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60338,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.278Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.896Z",
+ "amount": 0.3136,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60339,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.385Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.904Z",
+ "amount": 0.2744,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60340,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.493Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.912Z",
+ "amount": 0.2856,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60341,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.609Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.921Z",
+ "amount": 0.168,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60342,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.717Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.929Z",
"amount": 0.14,
- "object": 97,
- "account": 12,
- "state": "pending",
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
"coreHours": 2.0,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59218,
+ "pk": 60343,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.362Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.362Z",
+ "updated": "2013-12-18T21:29:24.825Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.937Z",
+ "amount": 0.1288,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60344,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.932Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.945Z",
+ "amount": 0.2632,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60345,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.040Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.954Z",
+ "amount": 0.2912,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60346,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.148Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.962Z",
+ "amount": 0.3304,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60347,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.255Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.970Z",
+ "amount": 0.2688,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60348,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.363Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.978Z",
+ "amount": 0.308,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60349,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.471Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.987Z",
+ "amount": 0.1288,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60350,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.578Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:05.995Z",
+ "amount": 0.3248,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60351,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.686Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.003Z",
+ "amount": 0.2968,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60352,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.794Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.012Z",
+ "amount": 0.3024,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60353,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.902Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.020Z",
+ "amount": 0.224,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60354,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.009Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.028Z",
"amount": 0.1848,
- "object": 97,
- "account": 12,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60355,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.117Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.036Z",
+ "amount": 0.2576,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60356,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.225Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.045Z",
+ "amount": 0.2968,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60357,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.332Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.053Z",
+ "amount": 0.168,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60358,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.440Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.061Z",
+ "amount": 0.1848,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60359,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.548Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.070Z",
+ "amount": 0.2128,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60360,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.655Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.078Z",
+ "amount": 0.1568,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60361,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.763Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.086Z",
+ "amount": 0.2576,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60362,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.879Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.094Z",
+ "amount": 0.1792,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60363,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.987Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.103Z",
+ "amount": 0.2856,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60364,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.094Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.111Z",
+ "amount": 0.1848,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60365,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.202Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.119Z",
+ "amount": 0.1344,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60366,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.310Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.128Z",
+ "amount": 0.1792,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60367,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.418Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.136Z",
+ "amount": 0.196,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60368,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.525Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.144Z",
+ "amount": 0.1232,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60369,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.691Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.153Z",
+ "amount": 0.3192,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60370,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.798Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.161Z",
+ "amount": 0.2184,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60371,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.906Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.169Z",
+ "amount": 0.3192,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60372,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.014Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.177Z",
+ "amount": 0.3024,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60373,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.122Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.186Z",
+ "amount": 0.1288,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60374,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.229Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.194Z",
+ "amount": 0.1456,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60375,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.337Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.202Z",
+ "amount": 0.1288,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60376,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.445Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.210Z",
+ "amount": 0.2632,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60377,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.552Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.219Z",
+ "amount": 0.3192,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60378,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.660Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.227Z",
+ "amount": 0.224,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60379,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.768Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.235Z",
+ "amount": 0.2184,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60380,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.875Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.244Z",
+ "amount": 0.196,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60381,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.983Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.252Z",
+ "amount": 0.28,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60382,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.091Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.260Z",
+ "amount": 0.224,
+ "object": 110,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60383,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:06.269Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.268Z",
+ "amount": 0.3304,
+ "object": 110,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.72,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60384,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:06.277Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.277Z",
+ "amount": 0.1848,
+ "object": 110,
+ "account": 15,
"state": "pending",
"coreHours": 2.64,
"invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59219,
+ "pk": 60385,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:50.370Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.370Z",
- "amount": 0.2408,
- "object": 97,
- "account": 12,
- "state": "pending",
- "coreHours": 3.44,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59220,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:50.379Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.379Z",
- "amount": 0.2632,
- "object": 97,
- "account": 12,
- "state": "pending",
- "coreHours": 3.76,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59221,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.059Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.393Z",
- "amount": 0.1344,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 54,
- "date": "2013-11-13T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59222,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.100Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.403Z",
- "amount": 0.2408,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 54,
- "date": "2013-11-14T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59223,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.142Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.412Z",
+ "updated": "2013-12-18T21:29:06.285Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.285Z",
"amount": 0.28,
- "object": 98,
- "account": 12,
- "state": "invoiced",
+ "object": 110,
+ "account": 15,
+ "state": "pending",
"coreHours": 4.0,
- "invoice": 54,
- "date": "2013-11-14T14:00:00Z",
- "kind": "besteffort"
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59224,
+ "pk": 60386,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.183Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.420Z",
- "amount": 0.3248,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 54,
- "date": "2013-11-14T22:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:06.293Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.293Z",
+ "amount": 0.1176,
+ "object": 110,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 1.68,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59225,
+ "pk": 60387,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.225Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.428Z",
- "amount": 0.2464,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 54,
- "date": "2013-11-15T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59226,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.266Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.436Z",
- "amount": 0.224,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 54,
- "date": "2013-11-15T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59227,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.307Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.445Z",
- "amount": 0.2912,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 54,
- "date": "2013-11-15T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59228,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.349Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.453Z",
- "amount": 0.2912,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 54,
- "date": "2013-11-16T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59229,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.390Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.464Z",
+ "updated": "2013-12-18T21:29:06.302Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.302Z",
"amount": 0.2016,
- "object": 98,
- "account": 12,
- "state": "invoiced",
+ "object": 110,
+ "account": 15,
+ "state": "pending",
"coreHours": 2.88,
- "invoice": 54,
- "date": "2013-11-16T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59230,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.432Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.470Z",
- "amount": 0.196,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 54,
- "date": "2013-11-16T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59231,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.473Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.478Z",
- "amount": 0.2128,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 54,
- "date": "2013-11-17T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59232,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.515Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.486Z",
- "amount": 0.3304,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 54,
- "date": "2013-11-17T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59233,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.556Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.494Z",
- "amount": 0.3304,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 54,
- "date": "2013-11-17T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59234,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.631Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.503Z",
- "amount": 0.252,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 55,
- "date": "2013-11-18T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59235,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.672Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.511Z",
- "amount": 0.308,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 55,
- "date": "2013-11-18T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59236,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.713Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.519Z",
- "amount": 0.3136,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 55,
- "date": "2013-11-18T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59237,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.755Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.528Z",
- "amount": 0.2464,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 55,
- "date": "2013-11-19T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59238,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.796Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.536Z",
- "amount": 0.2352,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 55,
- "date": "2013-11-19T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59239,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.838Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.559Z",
- "amount": 0.2072,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 55,
- "date": "2013-11-19T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59240,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.879Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.577Z",
- "amount": 0.252,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 55,
- "date": "2013-11-20T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59241,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.921Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.586Z",
- "amount": 0.1904,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 55,
- "date": "2013-11-20T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59242,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.962Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.594Z",
- "amount": 0.3024,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 55,
- "date": "2013-11-20T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59243,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.003Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.602Z",
- "amount": 0.1176,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 55,
- "date": "2013-11-21T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59244,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.045Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.610Z",
- "amount": 0.2296,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 55,
- "date": "2013-11-21T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59245,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.086Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.619Z",
- "amount": 0.2688,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 55,
- "date": "2013-11-21T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59246,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.128Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.627Z",
- "amount": 0.308,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 55,
- "date": "2013-11-22T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59247,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.169Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.635Z",
- "amount": 0.196,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 55,
- "date": "2013-11-22T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59248,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.210Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.643Z",
- "amount": 0.2296,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 55,
- "date": "2013-11-22T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59249,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.252Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.652Z",
- "amount": 0.3192,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 55,
- "date": "2013-11-23T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59250,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.293Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.660Z",
- "amount": 0.2352,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 55,
- "date": "2013-11-23T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59251,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.335Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.668Z",
- "amount": 0.168,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.4,
- "invoice": 55,
- "date": "2013-11-23T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59252,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.376Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.677Z",
- "amount": 0.3024,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 55,
- "date": "2013-11-24T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59253,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.418Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.685Z",
- "amount": 0.2352,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 55,
- "date": "2013-11-24T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59254,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.459Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.693Z",
- "amount": 0.1568,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 55,
- "date": "2013-11-24T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59255,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.509Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.702Z",
- "amount": 0.3304,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 56,
- "date": "2013-11-25T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59256,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.550Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.710Z",
- "amount": 0.1736,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 56,
- "date": "2013-11-25T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59257,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.592Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.718Z",
- "amount": 0.168,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.4,
- "invoice": 56,
- "date": "2013-11-25T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59258,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.633Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.726Z",
- "amount": 0.14,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 56,
- "date": "2013-11-26T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59259,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.676Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.735Z",
- "amount": 0.1176,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 56,
- "date": "2013-11-26T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59260,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.717Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.743Z",
- "amount": 0.2688,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 56,
- "date": "2013-11-26T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59261,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.759Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.751Z",
- "amount": 0.308,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 56,
- "date": "2013-11-27T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59262,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.800Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.759Z",
- "amount": 0.196,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 56,
- "date": "2013-11-27T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59263,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.842Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.768Z",
- "amount": 0.196,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 56,
- "date": "2013-11-27T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59264,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.883Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.776Z",
- "amount": 0.2464,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 56,
- "date": "2013-11-28T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59265,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.925Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.784Z",
- "amount": 0.2968,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 56,
- "date": "2013-11-28T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59266,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.966Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.793Z",
- "amount": 0.1792,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 56,
- "date": "2013-11-28T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59267,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.007Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.801Z",
- "amount": 0.3248,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 56,
- "date": "2013-11-29T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59268,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.049Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.809Z",
- "amount": 0.3192,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 56,
- "date": "2013-11-29T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59269,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.090Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.818Z",
- "amount": 0.1568,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 56,
- "date": "2013-11-29T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59270,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.123Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.826Z",
- "amount": 0.2856,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 56,
- "date": "2013-11-30T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59271,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.165Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.834Z",
- "amount": 0.3136,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 56,
- "date": "2013-11-30T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59272,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.206Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.843Z",
- "amount": 0.1904,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 56,
- "date": "2013-11-30T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59273,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.248Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.851Z",
- "amount": 0.1624,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.32,
- "invoice": 56,
- "date": "2013-12-01T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59274,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.289Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.859Z",
- "amount": 0.224,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 56,
- "date": "2013-12-01T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59275,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.331Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.867Z",
- "amount": 0.14,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 56,
- "date": "2013-12-01T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59276,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.380Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.876Z",
- "amount": 0.1456,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 57,
- "date": "2013-12-02T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59277,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.422Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.884Z",
- "amount": 0.1736,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 57,
- "date": "2013-12-02T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59278,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.463Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.892Z",
- "amount": 0.2912,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 57,
- "date": "2013-12-02T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59279,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.504Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.901Z",
- "amount": 0.3192,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 57,
- "date": "2013-12-03T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59280,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.546Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.909Z",
- "amount": 0.1792,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 57,
- "date": "2013-12-03T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59281,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.587Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.917Z",
- "amount": 0.1792,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 57,
- "date": "2013-12-03T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59282,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.629Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.925Z",
- "amount": 0.2184,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 57,
- "date": "2013-12-04T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59283,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.670Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.934Z",
- "amount": 0.3024,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 57,
- "date": "2013-12-04T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59284,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.711Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.942Z",
- "amount": 0.112,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 57,
- "date": "2013-12-04T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59285,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.753Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.950Z",
- "amount": 0.14,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 57,
- "date": "2013-12-05T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59286,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.794Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.958Z",
- "amount": 0.2464,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 57,
- "date": "2013-12-05T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59287,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.836Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.967Z",
- "amount": 0.1344,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 57,
- "date": "2013-12-05T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59288,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.877Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.975Z",
- "amount": 0.112,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 57,
- "date": "2013-12-06T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59289,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.919Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.983Z",
- "amount": 0.2128,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 57,
- "date": "2013-12-06T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59290,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.960Z",
- "slice": 14,
- "created": "2013-12-13T22:19:50.991Z",
- "amount": 0.2744,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 57,
- "date": "2013-12-06T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59291,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.001Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.000Z",
- "amount": 0.2632,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 57,
- "date": "2013-12-07T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59292,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.043Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.008Z",
- "amount": 0.3136,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.48,
- "invoice": 57,
- "date": "2013-12-07T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59293,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.084Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.016Z",
- "amount": 0.1232,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 57,
- "date": "2013-12-07T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59294,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.126Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.025Z",
- "amount": 0.2744,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 57,
- "date": "2013-12-08T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59295,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.167Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.033Z",
- "amount": 0.2744,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 57,
- "date": "2013-12-08T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59296,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.209Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.041Z",
- "amount": 0.3192,
- "object": 98,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 57,
- "date": "2013-12-08T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59297,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.049Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.049Z",
- "amount": 0.28,
- "object": 98,
- "account": 12,
- "state": "pending",
- "coreHours": 4.0,
"invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59298,
+ "pk": 60388,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:51.058Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.058Z",
- "amount": 0.1232,
- "object": 98,
- "account": 12,
- "state": "pending",
- "coreHours": 1.76,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59299,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.066Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.066Z",
- "amount": 0.1904,
- "object": 98,
- "account": 12,
- "state": "pending",
- "coreHours": 2.72,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59300,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.074Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.074Z",
- "amount": 0.2408,
- "object": 98,
- "account": 12,
- "state": "pending",
- "coreHours": 3.44,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59301,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.083Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.083Z",
- "amount": 0.2352,
- "object": 98,
- "account": 12,
- "state": "pending",
- "coreHours": 3.36,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59302,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.091Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.091Z",
- "amount": 0.2968,
- "object": 98,
- "account": 12,
- "state": "pending",
- "coreHours": 4.24,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59303,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.099Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.099Z",
+ "updated": "2013-12-18T21:29:06.310Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.310Z",
"amount": 0.2576,
- "object": 98,
- "account": 12,
+ "object": 110,
+ "account": 15,
"state": "pending",
"coreHours": 3.68,
"invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59304,
+ "pk": 60389,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:51.107Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.107Z",
+ "updated": "2013-12-18T21:29:06.318Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.318Z",
+ "amount": 0.336,
+ "object": 110,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.8,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60390,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:06.326Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.326Z",
+ "amount": 0.3248,
+ "object": 110,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.64,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60391,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.252Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.341Z",
+ "amount": 0.3248,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60392,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.360Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.351Z",
+ "amount": 0.3248,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60393,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.467Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.360Z",
+ "amount": 0.2576,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60394,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.575Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.368Z",
+ "amount": 0.3136,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60395,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.683Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.376Z",
+ "amount": 0.112,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60396,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.790Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.384Z",
+ "amount": 0.28,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60397,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.898Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.393Z",
+ "amount": 0.1344,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60398,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.006Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.401Z",
+ "amount": 0.1176,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60399,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.113Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.409Z",
+ "amount": 0.1176,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60400,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.221Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.417Z",
+ "amount": 0.3024,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60401,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.329Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.426Z",
+ "amount": 0.1232,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60402,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.436Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.434Z",
+ "amount": 0.252,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60403,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.544Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.442Z",
+ "amount": 0.1624,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60404,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.652Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.451Z",
+ "amount": 0.2632,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60405,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.760Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.459Z",
+ "amount": 0.1848,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60406,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.867Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.467Z",
"amount": 0.2184,
- "object": 98,
- "account": 12,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60407,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.975Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.475Z",
+ "amount": 0.2408,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60408,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.083Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.484Z",
+ "amount": 0.2184,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60409,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.190Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.492Z",
+ "amount": 0.1288,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60410,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.306Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.500Z",
+ "amount": 0.2688,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60411,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.414Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.509Z",
+ "amount": 0.2072,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60412,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.522Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.517Z",
+ "amount": 0.1232,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60413,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.671Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.525Z",
+ "amount": 0.1792,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60414,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.779Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.534Z",
+ "amount": 0.3024,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60415,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.886Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.542Z",
+ "amount": 0.1568,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60416,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.994Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.550Z",
+ "amount": 0.1232,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60417,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.102Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.558Z",
+ "amount": 0.3248,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60418,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.209Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.567Z",
+ "amount": 0.14,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60419,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.317Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.575Z",
+ "amount": 0.2352,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60420,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.425Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.583Z",
+ "amount": 0.1568,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60421,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.532Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.591Z",
+ "amount": 0.1288,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60422,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.640Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.600Z",
+ "amount": 0.2912,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60423,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.748Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.608Z",
+ "amount": 0.14,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60424,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.855Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.616Z",
+ "amount": 0.1792,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60425,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.963Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.625Z",
+ "amount": 0.252,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60426,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.071Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.633Z",
+ "amount": 0.196,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60427,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.178Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.641Z",
+ "amount": 0.2744,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60428,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.286Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.650Z",
+ "amount": 0.168,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60429,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.394Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.658Z",
+ "amount": 0.3024,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60430,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.501Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.666Z",
+ "amount": 0.3192,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60431,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.617Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.674Z",
+ "amount": 0.3136,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60432,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.725Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.683Z",
+ "amount": 0.3024,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60433,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.833Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.691Z",
+ "amount": 0.1176,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60434,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.941Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.699Z",
+ "amount": 0.1232,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60435,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.048Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.708Z",
+ "amount": 0.2632,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60436,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.156Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.716Z",
+ "amount": 0.2128,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60437,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.264Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.724Z",
+ "amount": 0.2968,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60438,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.371Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.732Z",
+ "amount": 0.2912,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60439,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.479Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.741Z",
+ "amount": 0.1848,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60440,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.587Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.749Z",
+ "amount": 0.1568,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60441,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.694Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.757Z",
+ "amount": 0.2296,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60442,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.802Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.766Z",
+ "amount": 0.1848,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60443,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.910Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.774Z",
+ "amount": 0.112,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60444,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.017Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.782Z",
+ "amount": 0.2296,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60445,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.125Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.790Z",
+ "amount": 0.1232,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60446,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.233Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.799Z",
+ "amount": 0.1288,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60447,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.341Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.807Z",
+ "amount": 0.1456,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60448,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.448Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.815Z",
+ "amount": 0.252,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60449,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.556Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.823Z",
+ "amount": 0.3136,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60450,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.664Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.832Z",
+ "amount": 0.2408,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60451,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.771Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.840Z",
+ "amount": 0.2016,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60452,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.887Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.848Z",
+ "amount": 0.2464,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60453,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.995Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.857Z",
+ "amount": 0.2856,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60454,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.103Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.865Z",
+ "amount": 0.3192,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60455,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.210Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.873Z",
+ "amount": 0.2576,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60456,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.318Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.881Z",
+ "amount": 0.2072,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60457,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.426Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.890Z",
+ "amount": 0.2184,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60458,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.533Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.898Z",
+ "amount": 0.1344,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60459,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.699Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.906Z",
+ "amount": 0.28,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60460,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.807Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.915Z",
+ "amount": 0.1568,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60461,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.914Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.923Z",
+ "amount": 0.2744,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60462,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.022Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.931Z",
+ "amount": 0.1624,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60463,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.130Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.939Z",
+ "amount": 0.1456,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60464,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.238Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.948Z",
+ "amount": 0.14,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60465,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.345Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.956Z",
+ "amount": 0.224,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60466,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.453Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.964Z",
+ "amount": 0.2688,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60467,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.561Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.972Z",
+ "amount": 0.224,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60468,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.668Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.981Z",
+ "amount": 0.1176,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60469,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.776Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.989Z",
+ "amount": 0.2296,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60470,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.884Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:06.997Z",
+ "amount": 0.2072,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60471,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.991Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:07.006Z",
+ "amount": 0.1344,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60472,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.099Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:07.014Z",
+ "amount": 0.2352,
+ "object": 111,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60473,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.022Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:07.022Z",
+ "amount": 0.308,
+ "object": 111,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.4,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60474,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.031Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:07.031Z",
+ "amount": 0.14,
+ "object": 111,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 2.0,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60475,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.039Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:07.039Z",
+ "amount": 0.1344,
+ "object": 111,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 1.92,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60476,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.047Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:07.047Z",
+ "amount": 0.196,
+ "object": 111,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 2.8,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60477,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.055Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:07.055Z",
+ "amount": 0.336,
+ "object": 111,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.8,
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60478,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.064Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:07.064Z",
+ "amount": 0.3248,
+ "object": 111,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.64,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60479,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.072Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:07.072Z",
+ "amount": 0.2912,
+ "object": 111,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.16,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60480,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.080Z",
+ "slice": 6,
+ "created": "2013-12-18T21:29:07.080Z",
+ "amount": 0.28,
+ "object": 111,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 4.0,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60481,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.260Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.112Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60482,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.368Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.122Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60483,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.476Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.130Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60484,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.583Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.138Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60485,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.691Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.147Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60486,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.799Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.155Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60487,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.906Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.163Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60488,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.014Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.171Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60489,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.122Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.180Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60490,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.229Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.188Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60491,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.337Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.196Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60492,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.445Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.205Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60493,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.552Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.213Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60494,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.660Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.221Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60495,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.768Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.230Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60496,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.876Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.238Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60497,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.983Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.246Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60498,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.091Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.254Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60499,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.199Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.262Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60500,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.315Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.271Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60501,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.422Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.279Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60502,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.530Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.287Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60503,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.679Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.296Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60504,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.787Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.304Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60505,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.894Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.312Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60506,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.002Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.321Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60507,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.110Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.329Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60508,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.218Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.337Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60509,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.325Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.345Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60510,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.433Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.354Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60511,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.541Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.362Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60512,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.648Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.370Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60513,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.756Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.378Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60514,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.864Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.387Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60515,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.971Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.395Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60516,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.079Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.403Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60517,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.187Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.412Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60518,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.294Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.420Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60519,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.402Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.428Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60520,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.510Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.436Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60521,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.626Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.445Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60522,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.734Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.453Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60523,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.841Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.461Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60524,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.949Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.470Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60525,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.057Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.478Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60526,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.164Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.497Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60527,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.272Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.547Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60528,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.380Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.561Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60529,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.487Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.569Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60530,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.595Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.577Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60531,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.703Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.586Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60532,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.810Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.594Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60533,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.918Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.602Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60534,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.026Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.610Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60535,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.133Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.619Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60536,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.241Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.627Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60537,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.349Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.635Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60538,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.456Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.644Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60539,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.564Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.652Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60540,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.672Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.660Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60541,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.780Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.669Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60542,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.896Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.677Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60543,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.003Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.685Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60544,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.111Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.693Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60545,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.219Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.702Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60546,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.326Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.710Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60547,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.434Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.718Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60548,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.542Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.726Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60549,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.708Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.735Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60550,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.815Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.743Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60551,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.923Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.751Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60552,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.030Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.760Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60553,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.138Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.768Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60554,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.246Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.776Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60555,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.354Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.784Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60556,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.461Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.793Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60557,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.569Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.801Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60558,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.677Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.809Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60559,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.784Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.817Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60560,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.892Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.826Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60561,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.834Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60562,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.107Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.842Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60563,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.851Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.851Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60564,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.859Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.859Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60565,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.867Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.867Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60566,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.875Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.875Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60567,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.884Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.884Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60568,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.892Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.892Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60569,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.900Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.900Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60570,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:07.909Z",
+ "slice": 8,
+ "created": "2013-12-18T21:29:07.909Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60571,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.268Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:07.929Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60572,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.376Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:07.942Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60573,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.484Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:07.950Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60574,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.591Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:07.958Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60575,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.699Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:07.967Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60576,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.807Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:07.975Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60577,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.914Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:07.983Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60578,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.022Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:07.991Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60579,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.130Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60580,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.238Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.008Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60581,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.345Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.016Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60582,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.453Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.025Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60583,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.561Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.033Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60584,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.668Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.041Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60585,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.776Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.049Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60586,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.884Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.058Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60587,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.991Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.066Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60588,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.099Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.074Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60589,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.207Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.082Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60590,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.323Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.091Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60591,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.431Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.099Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60592,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.538Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.107Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60593,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.687Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.116Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60594,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.795Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.124Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60595,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.903Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.132Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60596,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.010Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.141Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60597,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.118Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.149Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60598,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.226Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.157Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60599,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.333Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.166Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60600,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.441Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.174Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60601,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.549Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.182Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60602,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.657Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.190Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60603,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.764Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.199Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60604,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.872Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.207Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60605,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.980Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.215Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60606,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.087Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.224Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60607,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.195Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.232Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60608,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.303Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.240Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60609,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.410Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.249Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60610,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.518Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.257Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60611,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.634Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.265Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60612,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.742Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.273Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60613,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.849Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.282Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60614,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.957Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.290Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60615,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.065Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.298Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60616,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.173Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.306Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60617,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.280Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.315Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60618,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.388Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.323Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60619,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.496Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.331Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60620,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.603Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.339Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60621,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.711Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.348Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60622,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.819Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.356Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60623,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.926Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.364Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60624,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.034Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.373Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60625,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.142Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.381Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60626,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.249Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.389Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60627,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.357Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.397Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60628,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.465Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.406Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60629,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.572Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.414Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60630,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.680Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.422Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60631,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.788Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.431Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60632,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.904Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.439Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60633,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.011Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.447Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60634,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.119Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.455Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60635,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.227Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.464Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60636,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.335Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.472Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60637,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.442Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.480Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60638,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.550Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.489Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60639,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.716Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.497Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60640,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.823Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.505Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60641,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.931Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.513Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60642,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.039Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.522Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60643,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.147Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.530Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60644,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.254Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.538Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60645,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.362Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.546Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60646,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.469Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.555Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60647,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.577Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.563Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60648,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.685Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.571Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60649,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.793Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.580Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60650,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.900Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.588Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60651,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.008Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.596Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60652,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.116Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.605Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60653,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:08.613Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.613Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60654,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:08.621Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.621Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60655,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:08.630Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.629Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60656,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:08.638Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.638Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60657,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:08.646Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.646Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60658,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:08.654Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.654Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60659,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:08.663Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.663Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60660,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:08.671Z",
+ "slice": 9,
+ "created": "2013-12-18T21:29:08.671Z",
+ "amount": 0.56,
+ "object": 112,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60661,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.215Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.698Z",
+ "amount": 0.1848,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 73,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60662,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.240Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.704Z",
+ "amount": 0.2072,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 74,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60663,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.256Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.712Z",
+ "amount": 0.3248,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 74,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60664,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.273Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.721Z",
+ "amount": 0.2352,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 74,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60665,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.290Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.729Z",
+ "amount": 0.3304,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 74,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60666,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.306Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.737Z",
+ "amount": 0.308,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 74,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60667,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.323Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.745Z",
+ "amount": 0.1232,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 74,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60668,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.339Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.754Z",
+ "amount": 0.1568,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 74,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60669,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.356Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.762Z",
+ "amount": 0.2744,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 74,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60670,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.372Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.770Z",
+ "amount": 0.2184,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 74,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60671,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.389Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.779Z",
+ "amount": 0.2184,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 74,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60672,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.406Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.787Z",
+ "amount": 0.14,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 74,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60673,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.424Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.795Z",
+ "amount": 0.2352,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 74,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60674,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.440Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.803Z",
+ "amount": 0.1232,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 74,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60675,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.457Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.812Z",
+ "amount": 0.2016,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 74,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60676,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.473Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.820Z",
+ "amount": 0.28,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 74,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60677,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.490Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.828Z",
+ "amount": 0.2408,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 74,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60678,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.507Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.837Z",
+ "amount": 0.2072,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 74,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60679,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.523Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.845Z",
+ "amount": 0.2296,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 74,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60680,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.548Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.853Z",
+ "amount": 0.28,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 75,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60681,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.565Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.861Z",
+ "amount": 0.3024,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 75,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60682,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.581Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.870Z",
+ "amount": 0.1512,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 75,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60683,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.598Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.878Z",
+ "amount": 0.196,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 75,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60684,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.614Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.886Z",
+ "amount": 0.112,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 75,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60685,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.631Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.894Z",
+ "amount": 0.2688,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 75,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60686,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.648Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.903Z",
+ "amount": 0.336,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 75,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60687,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.664Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.911Z",
+ "amount": 0.2296,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 75,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60688,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.681Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.919Z",
+ "amount": 0.2912,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 75,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60689,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.697Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.928Z",
+ "amount": 0.308,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 75,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60690,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.714Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.936Z",
+ "amount": 0.308,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 75,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60691,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.730Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.944Z",
+ "amount": 0.336,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 75,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60692,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.747Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.952Z",
+ "amount": 0.336,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 75,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60693,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.763Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.961Z",
+ "amount": 0.336,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 75,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60694,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.780Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.969Z",
+ "amount": 0.224,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 75,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60695,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.797Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.977Z",
+ "amount": 0.3304,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 75,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60696,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.813Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.986Z",
+ "amount": 0.3136,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 75,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60697,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.830Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:08.994Z",
+ "amount": 0.2856,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 75,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60698,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.846Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.002Z",
+ "amount": 0.336,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 75,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60699,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.863Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.010Z",
+ "amount": 0.2128,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 75,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60700,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.879Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.019Z",
+ "amount": 0.1456,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 75,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60701,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.904Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.027Z",
+ "amount": 0.2128,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 76,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60702,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.921Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.035Z",
+ "amount": 0.2576,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 76,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60703,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.937Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.044Z",
+ "amount": 0.2856,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 76,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60704,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.954Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.054Z",
+ "amount": 0.2464,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 76,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60705,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.971Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.060Z",
+ "amount": 0.1736,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 76,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60706,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.987Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.068Z",
+ "amount": 0.2464,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 76,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60707,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.004Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.077Z",
+ "amount": 0.2744,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 76,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60708,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.020Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.085Z",
+ "amount": 0.2016,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 76,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60709,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.037Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.093Z",
+ "amount": 0.308,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 76,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60710,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.053Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.102Z",
+ "amount": 0.1288,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 76,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60711,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.070Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.110Z",
+ "amount": 0.1232,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 76,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60712,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.087Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.118Z",
+ "amount": 0.2184,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 76,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60713,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.103Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.126Z",
+ "amount": 0.3192,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 76,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60714,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.120Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.135Z",
+ "amount": 0.3192,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 76,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60715,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.136Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.143Z",
+ "amount": 0.2744,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 76,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60716,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.153Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.151Z",
+ "amount": 0.1232,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 76,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60717,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.169Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.160Z",
+ "amount": 0.2912,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 76,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60718,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.186Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.168Z",
+ "amount": 0.3304,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 76,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60719,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.203Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.176Z",
+ "amount": 0.224,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 76,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60720,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.219Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.185Z",
+ "amount": 0.1456,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 76,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60721,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.236Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.193Z",
+ "amount": 0.3192,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 76,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60722,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.260Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.201Z",
+ "amount": 0.2576,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 77,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60723,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.277Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.209Z",
+ "amount": 0.168,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 77,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60724,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.294Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.218Z",
+ "amount": 0.2856,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 77,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60725,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.319Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.226Z",
+ "amount": 0.1232,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 77,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60726,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.335Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.234Z",
+ "amount": 0.168,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 77,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60727,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.352Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.243Z",
+ "amount": 0.1792,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 77,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60728,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.369Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.251Z",
+ "amount": 0.3192,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 77,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60729,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.385Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.259Z",
+ "amount": 0.1736,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 77,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60730,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.402Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.267Z",
+ "amount": 0.196,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 77,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60731,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.418Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.276Z",
+ "amount": 0.112,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 77,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60732,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.435Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.284Z",
+ "amount": 0.2856,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 77,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60733,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.451Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.292Z",
+ "amount": 0.1568,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 77,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60734,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.468Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.300Z",
+ "amount": 0.2408,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 77,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60735,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.485Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.309Z",
+ "amount": 0.2912,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 77,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60736,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.501Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.317Z",
+ "amount": 0.1512,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 77,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60737,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.518Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.325Z",
+ "amount": 0.2632,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 77,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60738,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.534Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.334Z",
+ "amount": 0.2744,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 77,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60739,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.551Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.342Z",
+ "amount": 0.1512,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 77,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60740,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.567Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.350Z",
+ "amount": 0.2856,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 77,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60741,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.584Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.358Z",
+ "amount": 0.2856,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 77,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60742,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.601Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.367Z",
+ "amount": 0.3136,
+ "object": 105,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 77,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60743,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:09.375Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.375Z",
+ "amount": 0.1176,
+ "object": 105,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 1.68,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60744,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:09.383Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.383Z",
+ "amount": 0.2128,
+ "object": 105,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 3.04,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60745,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:09.392Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.392Z",
+ "amount": 0.28,
+ "object": 105,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 4.0,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60746,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:09.400Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.400Z",
+ "amount": 0.224,
+ "object": 105,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 3.2,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60747,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:09.408Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.408Z",
+ "amount": 0.2184,
+ "object": 105,
+ "account": 16,
"state": "pending",
"coreHours": 3.12,
"invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59305,
+ "pk": 60748,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:51.116Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.116Z",
+ "updated": "2013-12-18T21:29:09.416Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.416Z",
+ "amount": 0.2464,
+ "object": 105,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 3.52,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60749,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:09.425Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.425Z",
+ "amount": 0.308,
+ "object": 105,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 4.4,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60750,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:09.433Z",
+ "slice": 11,
+ "created": "2013-12-18T21:29:09.433Z",
+ "amount": 0.3024,
+ "object": 105,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 4.32,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60751,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.232Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.456Z",
+ "amount": 0.2352,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 74,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60752,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.248Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.466Z",
+ "amount": 0.308,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 74,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60753,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.265Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.474Z",
+ "amount": 0.2576,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 74,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60754,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.281Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.483Z",
+ "amount": 0.3192,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 74,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60755,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.298Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.491Z",
+ "amount": 0.1904,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 74,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60756,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.314Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.499Z",
+ "amount": 0.3136,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 74,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60757,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.331Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.508Z",
+ "amount": 0.1176,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 74,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60758,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.347Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.516Z",
+ "amount": 0.28,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 74,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60759,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.364Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.524Z",
+ "amount": 0.1232,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 74,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60760,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.381Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.532Z",
+ "amount": 0.3136,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 74,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60761,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.397Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.541Z",
+ "amount": 0.1456,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 74,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60762,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.414Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.549Z",
+ "amount": 0.2576,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 74,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60763,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.432Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.557Z",
+ "amount": 0.2016,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 74,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60764,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.448Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.565Z",
+ "amount": 0.3024,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 74,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60765,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.465Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.574Z",
+ "amount": 0.3136,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 74,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60766,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.482Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.582Z",
+ "amount": 0.2128,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 74,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60767,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.498Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.590Z",
"amount": 0.1848,
- "object": 98,
- "account": 12,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 74,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60768,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.515Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.599Z",
+ "amount": 0.3136,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 74,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60769,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.531Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.607Z",
+ "amount": 0.1456,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 74,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60770,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.556Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.615Z",
+ "amount": 0.2576,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 75,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60771,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.573Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.623Z",
+ "amount": 0.2912,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 75,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60772,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.589Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.632Z",
+ "amount": 0.2744,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 75,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60773,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.606Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.640Z",
+ "amount": 0.2296,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 75,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60774,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.623Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.649Z",
+ "amount": 0.308,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 75,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60775,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.639Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.657Z",
+ "amount": 0.1736,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 75,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60776,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.656Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.665Z",
+ "amount": 0.1176,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 75,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60777,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.672Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.673Z",
+ "amount": 0.1736,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 75,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60778,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.689Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.682Z",
+ "amount": 0.2968,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 75,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60779,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.706Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.690Z",
+ "amount": 0.252,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 75,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60780,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.722Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.698Z",
+ "amount": 0.2632,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 75,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60781,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.739Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.706Z",
+ "amount": 0.1456,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 75,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60782,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.755Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.715Z",
+ "amount": 0.1512,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 75,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60783,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.772Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.723Z",
+ "amount": 0.2072,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 75,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60784,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.788Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.731Z",
+ "amount": 0.1624,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 75,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60785,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.805Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.740Z",
+ "amount": 0.1848,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 75,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60786,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.821Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.748Z",
+ "amount": 0.1176,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 75,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60787,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.838Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.756Z",
+ "amount": 0.196,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 75,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60788,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.855Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.764Z",
+ "amount": 0.1792,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 75,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60789,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.871Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.773Z",
+ "amount": 0.2408,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 75,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60790,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.888Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.781Z",
+ "amount": 0.14,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 75,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60791,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.913Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.789Z",
+ "amount": 0.112,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 76,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60792,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.929Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.798Z",
+ "amount": 0.3136,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 76,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60793,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.946Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.806Z",
+ "amount": 0.1456,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 76,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60794,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.962Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.814Z",
+ "amount": 0.2912,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 76,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60795,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.979Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.822Z",
+ "amount": 0.2128,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 76,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60796,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.995Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.831Z",
+ "amount": 0.1848,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 76,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60797,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.012Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.839Z",
+ "amount": 0.3304,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 76,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60798,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.029Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.847Z",
+ "amount": 0.28,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 76,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60799,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.045Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.855Z",
+ "amount": 0.308,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 76,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60800,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.062Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.864Z",
+ "amount": 0.3304,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 76,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60801,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.078Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.872Z",
+ "amount": 0.2464,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 76,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60802,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.095Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.880Z",
+ "amount": 0.3136,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 76,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60803,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.111Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.889Z",
+ "amount": 0.112,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 76,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60804,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.128Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.897Z",
+ "amount": 0.2744,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 76,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60805,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.145Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.905Z",
+ "amount": 0.1792,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 76,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60806,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.161Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.913Z",
+ "amount": 0.1568,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 76,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60807,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.178Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.922Z",
+ "amount": 0.2408,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 76,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60808,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.194Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.930Z",
+ "amount": 0.1176,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 76,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60809,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.211Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.938Z",
+ "amount": 0.1176,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 76,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60810,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.227Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.947Z",
+ "amount": 0.3304,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 76,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60811,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.244Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.955Z",
+ "amount": 0.196,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 76,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60812,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.269Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.963Z",
+ "amount": 0.2744,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 77,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60813,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.285Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.971Z",
+ "amount": 0.1792,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 77,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60814,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.302Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.980Z",
+ "amount": 0.112,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 77,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60815,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.327Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.988Z",
+ "amount": 0.2296,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 77,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60816,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.344Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:09.996Z",
+ "amount": 0.1232,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 77,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60817,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.360Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.005Z",
+ "amount": 0.1848,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 77,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60818,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.377Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.013Z",
+ "amount": 0.2296,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 77,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60819,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.393Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.021Z",
+ "amount": 0.2968,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 77,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60820,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.410Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.029Z",
+ "amount": 0.112,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 77,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60821,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.427Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.038Z",
+ "amount": 0.2576,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 77,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60822,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.443Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.046Z",
+ "amount": 0.2856,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 77,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60823,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.460Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.054Z",
+ "amount": 0.2576,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 77,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60824,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.476Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.063Z",
+ "amount": 0.2688,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 77,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60825,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.493Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.071Z",
+ "amount": 0.252,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 77,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60826,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.509Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.079Z",
+ "amount": 0.14,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 77,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60827,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.526Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.087Z",
+ "amount": 0.3304,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 77,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60828,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.543Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.096Z",
+ "amount": 0.3304,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 77,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60829,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.559Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.104Z",
+ "amount": 0.1848,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 77,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60830,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.576Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.112Z",
+ "amount": 0.2856,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 77,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60831,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.592Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.120Z",
+ "amount": 0.2912,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 77,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60832,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:30.609Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.129Z",
+ "amount": 0.252,
+ "object": 113,
+ "account": 16,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 77,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60833,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.137Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.137Z",
+ "amount": 0.14,
+ "object": 113,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 2.0,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60834,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.146Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.146Z",
+ "amount": 0.14,
+ "object": 113,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 2.0,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60835,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.154Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.154Z",
+ "amount": 0.2184,
+ "object": 113,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 3.12,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60836,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.162Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.162Z",
+ "amount": 0.1904,
+ "object": 113,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 2.72,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60837,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.170Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.170Z",
+ "amount": 0.1624,
+ "object": 113,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 2.32,
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60838,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.179Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.179Z",
+ "amount": 0.252,
+ "object": 113,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 3.6,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60839,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.187Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.187Z",
+ "amount": 0.1904,
+ "object": 113,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 2.72,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60840,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.195Z",
+ "slice": 12,
+ "created": "2013-12-18T21:29:10.195Z",
+ "amount": 0.224,
+ "object": 113,
+ "account": 16,
+ "state": "pending",
+ "coreHours": 3.2,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 60841,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.277Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.227Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60842,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.384Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.237Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60843,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.492Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.245Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60844,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.600Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.253Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60845,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.707Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.262Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60846,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.815Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.270Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60847,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.923Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.278Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60848,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.031Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.286Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60849,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.138Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.295Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60850,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.246Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.303Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60851,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.354Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.311Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60852,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.461Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.319Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60853,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.569Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.328Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60854,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.677Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.336Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60855,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.784Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.344Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60856,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.892Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.352Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60857,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.361Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60858,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.107Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.369Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60859,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.215Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.377Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60860,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.331Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.386Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60861,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.439Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.394Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60862,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.559Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.402Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60863,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.696Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.410Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60864,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.803Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.419Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60865,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.911Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.427Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60866,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.019Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.435Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60867,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.126Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.444Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60868,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.234Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.452Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60869,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.342Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.460Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60870,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.449Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.468Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60871,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.557Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.477Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60872,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.665Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.485Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60873,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.773Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.493Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60874,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.880Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.502Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60875,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.988Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.510Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60876,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.096Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.518Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60877,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.203Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.526Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60878,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.311Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.535Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60879,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.419Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.543Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60880,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.526Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.551Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60881,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.642Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.560Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60882,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.750Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.568Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60883,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.858Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.576Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60884,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.965Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.584Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60885,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.073Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.593Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60886,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.181Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.601Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60887,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.289Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.609Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60888,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.396Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.618Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60889,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.504Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.626Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60890,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.612Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.634Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60891,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.719Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.643Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60892,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.827Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.651Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60893,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.935Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.659Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60894,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.042Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.668Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60895,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.150Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.676Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60896,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.258Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.684Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60897,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.365Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.692Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60898,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.473Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.701Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60899,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.581Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.709Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60900,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.689Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.717Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60901,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.796Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.725Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60902,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.912Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.734Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60903,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.020Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.742Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60904,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.127Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.750Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60905,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.235Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.759Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60906,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.343Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.767Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60907,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.451Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.775Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60908,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.558Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.783Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60909,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.724Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.792Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60910,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.832Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.800Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60911,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.939Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.808Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60912,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.047Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.816Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60913,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.155Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.825Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60914,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.262Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.833Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60915,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.370Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.841Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60916,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.478Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.850Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60917,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.585Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.858Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60918,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.693Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.866Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60919,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.801Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.874Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60920,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.909Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.883Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60921,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.016Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.891Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60922,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.124Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.899Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60923,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.908Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.908Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60924,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.916Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.916Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60925,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.924Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.924Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60926,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.932Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.932Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60927,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.941Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.941Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60928,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.949Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.949Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60929,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.957Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.957Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60930,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:10.966Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.966Z",
+ "amount": 0.56,
+ "object": 114,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60931,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.285Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.981Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60932,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.393Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.990Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60933,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.500Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:10.999Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60934,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.608Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.007Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60935,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.716Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.015Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60936,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.823Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.024Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60937,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.931Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.032Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60938,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.039Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.040Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60939,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.147Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.048Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60940,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.254Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.057Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60941,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.362Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.065Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60942,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.470Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.073Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60943,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.577Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.081Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60944,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.685Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.090Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60945,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.793Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.098Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60946,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.900Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.106Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60947,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.008Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.115Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60948,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.116Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.123Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60949,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.223Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.131Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60950,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.339Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.140Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60951,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.447Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.148Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60952,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.596Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.156Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60953,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.704Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.164Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60954,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.812Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.173Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60955,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.919Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.181Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60956,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.027Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.189Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60957,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.135Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.197Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60958,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.242Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.206Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60959,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.350Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.214Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60960,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.458Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.222Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60961,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.565Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.231Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60962,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.673Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.239Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60963,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.781Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.247Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60964,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.889Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.255Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60965,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.996Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.264Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60966,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.104Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.272Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60967,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.212Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.280Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60968,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.319Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.289Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60969,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.427Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.297Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60970,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.535Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.305Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60971,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.651Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.313Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60972,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.758Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.322Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60973,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.866Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.330Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60974,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.974Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.338Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60975,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.081Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.346Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60976,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.189Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.355Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60977,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.297Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.363Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60978,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.404Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.371Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60979,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.512Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.380Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60980,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.620Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.388Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60981,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.728Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.396Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60982,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.835Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.404Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60983,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.943Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.413Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60984,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.051Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.421Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60985,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.158Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.429Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60986,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.266Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.438Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60987,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.374Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.446Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60988,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.481Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.454Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60989,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.589Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.463Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60990,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.697Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.471Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60991,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.804Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.479Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60992,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.920Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.487Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60993,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.028Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.496Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60994,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.136Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.504Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60995,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.244Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.512Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60996,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.351Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.521Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60997,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.459Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.529Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60998,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.584Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.537Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 60999,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.732Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.545Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61000,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.840Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.554Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61001,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.948Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.562Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61002,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.055Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.570Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61003,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.163Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.579Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61004,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.271Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.587Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61005,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.378Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.595Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61006,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.486Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.603Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61007,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.594Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.612Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61008,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.702Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.620Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61009,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.809Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.628Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61010,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.917Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.637Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61011,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.024Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.645Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61012,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.132Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.653Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61013,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:11.662Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.662Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61014,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:11.670Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.670Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61015,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:11.678Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.678Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61016,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:11.686Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.686Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61017,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:11.695Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.695Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61018,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:11.703Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.703Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61019,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:11.711Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.711Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61020,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:11.719Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.719Z",
+ "amount": 0.56,
+ "object": 115,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61021,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.293Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.734Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61022,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.401Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.744Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61023,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.509Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.753Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61024,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.616Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.761Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61025,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.724Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.769Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61026,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.832Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.777Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61027,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:20.939Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.786Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61028,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.047Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.794Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61029,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.155Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.802Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61030,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.262Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.810Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61031,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.370Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.819Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61032,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.478Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.827Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61033,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.586Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.835Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61034,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.693Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.844Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61035,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.801Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.852Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61036,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:21.909Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.860Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61037,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.016Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.868Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61038,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.124Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.877Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61039,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.232Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.885Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 69,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61040,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.348Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.893Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61041,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.455Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.902Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61042,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.604Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.910Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61043,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.712Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.918Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61044,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.820Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.927Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61045,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:22.928Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.935Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61046,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.035Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.943Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61047,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.143Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.951Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61048,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.251Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.960Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61049,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.358Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.968Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61050,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.466Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.976Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61051,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.574Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.984Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61052,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.681Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:11.993Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61053,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.789Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.001Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61054,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:23.897Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.009Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61055,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.004Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.018Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61056,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.112Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.026Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61057,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.220Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.034Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61058,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.328Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.042Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61059,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.435Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.051Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61060,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.543Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.059Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 70,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61061,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.659Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.067Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61062,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.767Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.076Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61063,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.874Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.084Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61064,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:24.982Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.092Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61065,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.090Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.100Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61066,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.197Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.109Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61067,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.305Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.117Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61068,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.413Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.125Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61069,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.520Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.134Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61070,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.628Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.142Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61071,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.736Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.150Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61072,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.844Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.159Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61073,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:25.951Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.167Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61074,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.059Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.175Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61075,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.167Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.183Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61076,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.274Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.192Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61077,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.382Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.200Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61078,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.490Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.208Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61079,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.597Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.217Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61080,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.705Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.225Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61081,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.813Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.233Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 71,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61082,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:26.929Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.242Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61083,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.036Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.250Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61084,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.144Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.258Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61085,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.252Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.266Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61086,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.359Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.275Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61087,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.467Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.283Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61088,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.628Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.291Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61089,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.741Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.299Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61090,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.848Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.308Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61091,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:27.956Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.316Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61092,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.064Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.324Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61093,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.171Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.333Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61094,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.279Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.341Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61095,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.387Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.349Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61096,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.494Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.357Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61097,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.602Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.366Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61098,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.710Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.374Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61099,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.817Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.382Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61100,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:28.925Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.391Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61101,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.033Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.399Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61102,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:29.141Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.407Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "invoiced",
+ "coreHours": 8.0,
+ "invoice": 72,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61103,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:12.415Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.415Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61104,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:12.424Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.424Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61105,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:12.432Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.432Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61106,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:12.440Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.440Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61107,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:12.449Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.448Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61108,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:12.457Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.457Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61109,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:12.465Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.465Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61110,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:12.473Z",
+ "slice": 13,
+ "created": "2013-12-18T21:29:12.473Z",
+ "amount": 0.56,
+ "object": 116,
+ "account": 15,
+ "state": "pending",
+ "coreHours": 8.0,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "reservation",
+ "enacted": null
+ }
+},
+{
+ "pk": 61111,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.468Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.505Z",
+ "amount": 0.2856,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 64,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61112,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.510Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.565Z",
+ "amount": 0.3136,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 64,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61113,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.551Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.573Z",
+ "amount": 0.308,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 64,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61114,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.593Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.581Z",
+ "amount": 0.2072,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 64,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61115,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.634Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.589Z",
+ "amount": 0.2072,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 64,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61116,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.675Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.598Z",
+ "amount": 0.252,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 64,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61117,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.717Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.606Z",
+ "amount": 0.2688,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 64,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61118,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.758Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.614Z",
+ "amount": 0.3136,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 64,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61119,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.800Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.622Z",
+ "amount": 0.3248,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 64,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61120,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.841Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.631Z",
+ "amount": 0.2072,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 64,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61121,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.883Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.639Z",
+ "amount": 0.2576,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 64,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61122,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.924Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.647Z",
+ "amount": 0.14,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 64,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61123,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.966Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.656Z",
+ "amount": 0.1512,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 64,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61124,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.007Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.664Z",
+ "amount": 0.28,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 64,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61125,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.048Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.672Z",
+ "amount": 0.2408,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 64,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61126,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.090Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.680Z",
+ "amount": 0.308,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 64,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61127,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.131Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.689Z",
+ "amount": 0.2856,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 64,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61128,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.173Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.697Z",
+ "amount": 0.1232,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 64,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61129,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.220Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.705Z",
+ "amount": 0.1848,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 64,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61130,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.289Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.714Z",
+ "amount": 0.2016,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 65,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61131,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.344Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.722Z",
+ "amount": 0.2296,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 65,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61132,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.385Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.730Z",
+ "amount": 0.2968,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 65,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61133,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.427Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.739Z",
+ "amount": 0.1736,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 65,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61134,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.468Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.747Z",
+ "amount": 0.336,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 65,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61135,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.510Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.755Z",
+ "amount": 0.308,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 65,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61136,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.626Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.763Z",
+ "amount": 0.2744,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 65,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61137,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.667Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.772Z",
+ "amount": 0.2016,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 65,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61138,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.709Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.780Z",
+ "amount": 0.1512,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 65,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61139,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.750Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.788Z",
+ "amount": 0.2912,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 65,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61140,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.791Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.797Z",
+ "amount": 0.3248,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 65,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61141,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.833Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.805Z",
+ "amount": 0.3192,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 65,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61142,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.874Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.813Z",
+ "amount": 0.1736,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 65,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61143,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.916Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.821Z",
+ "amount": 0.2632,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 65,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61144,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.957Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.830Z",
+ "amount": 0.2464,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 65,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61145,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.999Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.838Z",
+ "amount": 0.3192,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 65,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61146,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.040Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.846Z",
+ "amount": 0.28,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 65,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61147,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.081Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.854Z",
+ "amount": 0.1288,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 65,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61148,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.123Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.863Z",
+ "amount": 0.1568,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 65,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61149,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.164Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.871Z",
+ "amount": 0.1904,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 65,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61150,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.206Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.879Z",
+ "amount": 0.3136,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 65,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61151,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.255Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.888Z",
+ "amount": 0.1456,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 66,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61152,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.297Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.896Z",
+ "amount": 0.2464,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 66,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61153,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.338Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.904Z",
+ "amount": 0.2464,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 66,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61154,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.379Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.913Z",
+ "amount": 0.2016,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 66,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61155,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.421Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.921Z",
+ "amount": 0.1736,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 66,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61156,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.462Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.929Z",
+ "amount": 0.2408,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 66,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61157,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.504Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.937Z",
+ "amount": 0.2912,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 66,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61158,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.545Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.946Z",
+ "amount": 0.1288,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 66,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61159,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.587Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.954Z",
+ "amount": 0.2632,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 66,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61160,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.628Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.962Z",
+ "amount": 0.3024,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 66,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61161,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.670Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.970Z",
+ "amount": 0.2296,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 66,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61162,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.711Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.979Z",
+ "amount": 0.3304,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 66,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61163,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.752Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.987Z",
+ "amount": 0.1176,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 66,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61164,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.794Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:12.995Z",
+ "amount": 0.28,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 66,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61165,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.835Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.004Z",
+ "amount": 0.224,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 66,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61166,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.877Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.012Z",
+ "amount": 0.2688,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 66,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61167,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.918Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.020Z",
+ "amount": 0.1568,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 66,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61168,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.959Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.028Z",
+ "amount": 0.1624,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 66,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61169,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.001Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.037Z",
+ "amount": 0.2688,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 66,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61170,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.042Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.045Z",
+ "amount": 0.2912,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 66,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61171,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.084Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.053Z",
+ "amount": 0.1344,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 66,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61172,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.133Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.062Z",
+ "amount": 0.196,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 67,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61173,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.175Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.070Z",
+ "amount": 0.2184,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 67,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61174,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.216Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.078Z",
+ "amount": 0.3304,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 67,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61175,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.258Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.086Z",
+ "amount": 0.2184,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 67,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61176,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.299Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.095Z",
+ "amount": 0.1176,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 67,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61177,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.341Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.103Z",
+ "amount": 0.1624,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 67,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61178,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.382Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.111Z",
+ "amount": 0.2968,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 67,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61179,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.423Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.120Z",
+ "amount": 0.1344,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 67,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61180,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.465Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.128Z",
+ "amount": 0.3136,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 67,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61181,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.506Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.136Z",
+ "amount": 0.1344,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 67,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61182,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.548Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.153Z",
+ "amount": 0.112,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 67,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61183,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.589Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.161Z",
+ "amount": 0.1176,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 67,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61184,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.630Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.170Z",
+ "amount": 0.1456,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 67,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61185,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.672Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.178Z",
+ "amount": 0.308,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 67,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61186,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.713Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.186Z",
+ "amount": 0.28,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 67,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61187,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.755Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.195Z",
+ "amount": 0.336,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 67,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61188,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.796Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.203Z",
+ "amount": 0.1344,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 67,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61189,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.804Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.220Z",
+ "amount": 0.3136,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 67,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61190,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.846Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.228Z",
+ "amount": 0.3024,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 67,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61191,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.887Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.236Z",
+ "amount": 0.112,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 67,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61192,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.929Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.245Z",
+ "amount": 0.2856,
+ "object": 117,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 67,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61193,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:13.253Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.253Z",
+ "amount": 0.1288,
+ "object": 117,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 1.84,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61194,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:13.261Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.261Z",
+ "amount": 0.336,
+ "object": 117,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 4.8,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61195,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:13.278Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.278Z",
+ "amount": 0.1624,
+ "object": 117,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 2.32,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61196,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:13.286Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.286Z",
+ "amount": 0.1904,
+ "object": 117,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 2.72,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61197,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:13.294Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.294Z",
+ "amount": 0.3192,
+ "object": 117,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 4.56,
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61198,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:13.303Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.303Z",
+ "amount": 0.14,
+ "object": 117,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 2.0,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61199,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:13.311Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.311Z",
+ "amount": 0.1288,
+ "object": 117,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 1.84,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61200,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:13.319Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.319Z",
+ "amount": 0.2632,
+ "object": 117,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 3.76,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61201,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.427Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.334Z",
+ "amount": 0.2968,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 63,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61202,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.477Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.344Z",
+ "amount": 0.2072,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 64,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61203,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.518Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.352Z",
+ "amount": 0.2968,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 64,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61204,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.560Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.361Z",
+ "amount": 0.2296,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 64,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61205,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.601Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.369Z",
+ "amount": 0.14,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 64,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61206,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.642Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.377Z",
+ "amount": 0.2968,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 64,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61207,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.684Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.385Z",
+ "amount": 0.1512,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 64,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61208,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.725Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.394Z",
+ "amount": 0.336,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 64,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61209,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.767Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.402Z",
+ "amount": 0.2688,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 64,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61210,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.808Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.410Z",
+ "amount": 0.308,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 64,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61211,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.850Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.418Z",
+ "amount": 0.1792,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 64,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61212,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.891Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.427Z",
+ "amount": 0.3304,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 64,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61213,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.932Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.435Z",
+ "amount": 0.1288,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 64,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61214,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.974Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.443Z",
+ "amount": 0.2352,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 64,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61215,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.015Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.452Z",
+ "amount": 0.3304,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 64,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61216,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.057Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.460Z",
+ "amount": 0.2912,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 64,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61217,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.098Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.468Z",
+ "amount": 0.1512,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 64,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61218,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.140Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.476Z",
+ "amount": 0.112,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 64,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61219,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.181Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.485Z",
+ "amount": 0.3136,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 64,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61220,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.239Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.493Z",
+ "amount": 0.1512,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 65,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61221,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.303Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.501Z",
+ "amount": 0.2016,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 65,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61222,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.352Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.510Z",
+ "amount": 0.2968,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 65,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61223,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.394Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.518Z",
+ "amount": 0.1736,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 65,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61224,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.435Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.526Z",
+ "amount": 0.3304,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 65,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61225,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.477Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.534Z",
+ "amount": 0.3248,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 65,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61226,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.531Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.543Z",
+ "amount": 0.1344,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 65,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61227,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.634Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.551Z",
+ "amount": 0.1904,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 65,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61228,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.676Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.559Z",
+ "amount": 0.2576,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 65,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61229,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.717Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.567Z",
+ "amount": 0.3024,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 65,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61230,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.758Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.576Z",
+ "amount": 0.336,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 65,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61231,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.800Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.584Z",
+ "amount": 0.2016,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 65,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61232,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.841Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.592Z",
+ "amount": 0.14,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 65,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61233,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.882Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.601Z",
+ "amount": 0.14,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 65,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61234,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.924Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.609Z",
+ "amount": 0.1232,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 65,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61235,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.965Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.617Z",
+ "amount": 0.3136,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 65,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61236,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.007Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.626Z",
+ "amount": 0.3024,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 65,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61237,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.048Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.634Z",
+ "amount": 0.2968,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 65,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61238,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.090Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.642Z",
+ "amount": 0.3192,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 65,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61239,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.131Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.651Z",
+ "amount": 0.196,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 65,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61240,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.172Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.659Z",
+ "amount": 0.1344,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 65,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61241,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.222Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.667Z",
+ "amount": 0.1512,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 66,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61242,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.264Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.675Z",
+ "amount": 0.3304,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 66,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61243,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.305Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.684Z",
+ "amount": 0.1904,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 66,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61244,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.346Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.692Z",
+ "amount": 0.2912,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 66,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61245,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.388Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.700Z",
+ "amount": 0.3136,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 66,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61246,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.429Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.709Z",
+ "amount": 0.28,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 66,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61247,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.471Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.717Z",
+ "amount": 0.2856,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 66,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61248,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.512Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.725Z",
+ "amount": 0.1176,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 66,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61249,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.553Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.733Z",
+ "amount": 0.1736,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 66,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61250,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.595Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.742Z",
+ "amount": 0.2184,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 66,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61251,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.637Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.750Z",
+ "amount": 0.1624,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 66,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61252,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.678Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.758Z",
+ "amount": 0.3192,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 66,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61253,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.719Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.767Z",
+ "amount": 0.2856,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 66,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61254,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.761Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.775Z",
+ "amount": 0.112,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 66,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61255,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.802Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.783Z",
+ "amount": 0.2688,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 66,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61256,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.843Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.791Z",
+ "amount": 0.1176,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 66,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61257,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.885Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.800Z",
+ "amount": 0.2688,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 66,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61258,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.926Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.808Z",
+ "amount": 0.2296,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 66,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61259,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.968Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.816Z",
+ "amount": 0.224,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 66,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61260,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.009Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.824Z",
+ "amount": 0.2856,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 66,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61261,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.051Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.833Z",
+ "amount": 0.224,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 66,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61262,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.100Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.841Z",
+ "amount": 0.2576,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 67,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61263,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.142Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.849Z",
+ "amount": 0.2296,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 67,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61264,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.183Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.858Z",
+ "amount": 0.2632,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 67,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61265,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.224Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.866Z",
+ "amount": 0.2856,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 67,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61266,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.266Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.874Z",
+ "amount": 0.336,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 67,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61267,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.307Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.882Z",
+ "amount": 0.3136,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 67,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61268,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.349Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.891Z",
+ "amount": 0.2968,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 67,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61269,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.390Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.899Z",
+ "amount": 0.1904,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 67,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61270,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.432Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.907Z",
+ "amount": 0.2184,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 67,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61271,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.473Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.916Z",
+ "amount": 0.2352,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 67,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61272,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.514Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.924Z",
+ "amount": 0.1176,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 67,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61273,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.556Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.932Z",
+ "amount": 0.2464,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 67,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61274,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.597Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.940Z",
+ "amount": 0.3136,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 67,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61275,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.639Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.949Z",
+ "amount": 0.196,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 67,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61276,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.680Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.957Z",
+ "amount": 0.1624,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 67,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61277,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.722Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.965Z",
+ "amount": 0.1232,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 67,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61278,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.763Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.974Z",
+ "amount": 0.2296,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 67,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61279,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.813Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.982Z",
+ "amount": 0.28,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 67,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61280,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.854Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.990Z",
+ "amount": 0.2016,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 67,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61281,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.895Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:13.998Z",
+ "amount": 0.1624,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 67,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61282,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.937Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.007Z",
+ "amount": 0.2912,
+ "object": 118,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 67,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61283,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:14.015Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.015Z",
+ "amount": 0.1344,
+ "object": 118,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 1.92,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61284,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:14.023Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.023Z",
+ "amount": 0.1848,
+ "object": 118,
+ "account": 14,
"state": "pending",
"coreHours": 2.64,
"invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59306,
+ "pk": 61285,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:51.124Z",
+ "updated": "2013-12-18T21:29:14.032Z",
"slice": 14,
- "created": "2013-12-13T22:19:51.124Z",
+ "created": "2013-12-18T21:29:14.031Z",
+ "amount": 0.2128,
+ "object": 118,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 3.04,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61286,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:14.040Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.040Z",
"amount": 0.2464,
- "object": 98,
- "account": 12,
+ "object": 118,
+ "account": 14,
"state": "pending",
"coreHours": 3.52,
"invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59307,
+ "pk": 61287,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:51.132Z",
+ "updated": "2013-12-18T21:29:14.048Z",
"slice": 14,
- "created": "2013-12-13T22:19:51.132Z",
- "amount": 0.112,
- "object": 98,
- "account": 12,
+ "created": "2013-12-18T21:29:14.048Z",
+ "amount": 0.2352,
+ "object": 118,
+ "account": 14,
"state": "pending",
- "coreHours": 1.6,
+ "coreHours": 3.36,
"invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59308,
+ "pk": 61288,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:51.141Z",
+ "updated": "2013-12-18T21:29:14.056Z",
"slice": 14,
- "created": "2013-12-13T22:19:51.141Z",
- "amount": 0.2632,
- "object": 98,
- "account": 12,
+ "created": "2013-12-18T21:29:14.056Z",
+ "amount": 0.2128,
+ "object": 118,
+ "account": 14,
"state": "pending",
- "coreHours": 3.76,
+ "coreHours": 3.04,
"invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59309,
+ "pk": 61289,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:51.149Z",
+ "updated": "2013-12-18T21:29:14.065Z",
"slice": 14,
- "created": "2013-12-13T22:19:51.149Z",
- "amount": 0.3248,
- "object": 98,
- "account": 12,
- "state": "pending",
- "coreHours": 4.64,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59310,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.157Z",
- "slice": 14,
- "created": "2013-12-13T22:19:51.157Z",
- "amount": 0.1288,
- "object": 98,
- "account": 12,
- "state": "pending",
- "coreHours": 1.84,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59311,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.432Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.189Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-13T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59312,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.523Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.199Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59313,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.614Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.207Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59314,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.706Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.215Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59315,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.797Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.223Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59316,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.888Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.232Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59317,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.996Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.240Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59318,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.087Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.248Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59319,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.178Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.257Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59320,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.270Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.265Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59321,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.352Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.273Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59322,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.444Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.281Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59323,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.535Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.290Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59324,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.634Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.298Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59325,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.737Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.306Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59326,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.828Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.315Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59327,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.919Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.323Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59328,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.010Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.331Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59329,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.101Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.340Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59330,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.192Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.348Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59331,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.284Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.356Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59332,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.377Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.364Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59333,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.468Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.373Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59334,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.560Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.381Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59335,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.667Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.389Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59336,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.758Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.398Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59337,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.850Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.406Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59338,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.965Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.414Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59339,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.057Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.422Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59340,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.148Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.431Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59341,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.273Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.439Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59342,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.537Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.447Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59343,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.777Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.455Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59344,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.868Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.464Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59345,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.968Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.472Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59346,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.059Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.480Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59347,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.150Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.489Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59348,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.246Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.497Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59349,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.337Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.505Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59350,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.428Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.513Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59351,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.519Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.522Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59352,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.610Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.530Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59353,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.701Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.538Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59354,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.793Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.546Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59355,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.884Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.555Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59356,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.975Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.563Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59357,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.066Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.571Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59358,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.157Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.580Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59359,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.248Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.588Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59360,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.339Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.596Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59361,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.432Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.604Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59362,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.523Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.613Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59363,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.614Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.621Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59364,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.705Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.629Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59365,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.797Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.638Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59366,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.896Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.646Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59367,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.987Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.654Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59368,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.078Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.662Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59369,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.169Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.671Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59370,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.260Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.679Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59371,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.352Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.687Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59372,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.443Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.696Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59373,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.534Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.704Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59374,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.625Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.712Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59375,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.716Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.720Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59376,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.807Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.729Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59377,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.898Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.737Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59378,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.989Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.745Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59379,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.081Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.754Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59380,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.178Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.762Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59381,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.269Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.770Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59382,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.361Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.778Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59383,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.452Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.787Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59384,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.543Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.795Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59385,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.634Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.803Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59386,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.725Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.812Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59387,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.820Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.820Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59388,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.828Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.828Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59389,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.837Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.837Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59390,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.845Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.845Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59391,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.853Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.853Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59392,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.861Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.861Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59393,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.870Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.870Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59394,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.878Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.878Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59395,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.886Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.886Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59396,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.895Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.895Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59397,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.903Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.903Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59398,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.911Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.911Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59399,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.919Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.919Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59400,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:51.928Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.928Z",
- "amount": 0.56,
- "object": 99,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59401,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.424Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.943Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-13T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59402,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.515Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.952Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59403,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.606Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.961Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59404,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.697Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.969Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59405,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.788Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.977Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59406,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.880Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.986Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59407,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.988Z",
- "slice": 13,
- "created": "2013-12-13T22:19:51.994Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59408,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.079Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.002Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59409,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.170Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.010Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59410,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.261Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.019Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59411,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.344Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.027Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59412,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.435Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.035Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59413,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.526Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.044Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59414,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.626Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.052Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59415,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.729Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.060Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59416,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.820Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.068Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59417,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.911Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.077Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59418,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.002Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.085Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59419,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.093Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.093Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59420,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.184Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.102Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59421,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.275Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.110Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59422,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.367Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.118Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59423,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.460Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.126Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59424,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.551Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.135Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59425,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.659Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.143Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59426,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.750Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.151Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59427,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.841Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.159Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59428,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.957Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.168Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59429,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.048Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.176Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59430,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.139Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.184Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59431,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.230Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.193Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59432,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.512Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.201Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59433,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.769Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.209Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59434,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.860Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.217Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59435,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.959Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.226Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59436,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.050Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.234Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59437,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.141Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.242Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59438,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.238Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.251Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59439,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.329Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.259Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59440,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.420Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.267Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59441,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.511Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.276Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59442,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.602Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.284Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59443,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.693Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.292Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59444,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.784Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.300Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59445,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.875Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.309Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59446,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.966Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.317Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59447,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.058Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.325Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59448,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.149Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.334Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59449,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.240Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.342Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59450,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.331Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.350Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59451,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.424Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.358Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59452,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.515Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.367Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59453,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.606Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.375Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59454,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.697Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.383Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59455,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.788Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.392Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59456,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.888Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.400Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59457,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.979Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.408Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59458,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.070Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.416Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59459,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.161Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.425Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59460,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.252Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.433Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59461,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.343Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.441Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59462,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.434Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.450Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59463,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.526Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.458Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59464,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.617Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.466Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59465,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.708Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.474Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59466,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.799Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.483Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59467,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.890Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.491Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59468,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.981Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.499Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59469,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.072Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.507Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59470,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.170Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.516Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59471,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.261Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.524Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59472,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.352Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.532Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59473,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.443Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.541Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59474,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.535Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.549Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59475,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.626Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.557Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59476,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.717Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.565Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59477,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.574Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.574Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59478,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.582Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.582Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59479,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.590Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.590Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59480,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.599Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.599Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59481,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.607Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.607Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59482,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.615Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.615Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59483,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.623Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.623Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59484,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.632Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.632Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59485,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.640Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.640Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59486,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.648Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.648Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59487,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.657Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.657Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59488,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.665Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.665Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59489,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.673Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.673Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59490,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:52.682Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.681Z",
- "amount": 0.56,
- "object": 100,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59491,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.407Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.696Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 58,
- "date": "2013-11-13T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59492,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.507Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.706Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59493,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.598Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.715Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59494,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.689Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.723Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-14T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59495,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.780Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.731Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59496,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.871Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.739Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59497,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.980Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.748Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-15T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59498,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.071Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.756Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59499,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.162Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.764Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59500,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.253Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.773Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-16T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59501,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.377Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.781Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59502,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.468Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.789Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59503,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.559Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.798Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 59,
- "date": "2013-11-17T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59504,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.659Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.806Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59505,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.762Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.814Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59506,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.853Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.822Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-18T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59507,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:59.944Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.831Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59508,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.035Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.839Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59509,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.126Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.847Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-19T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59510,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.217Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.856Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59511,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.309Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.864Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59512,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.402Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.872Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-20T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59513,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.493Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.880Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59514,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.584Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.889Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59515,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.692Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.897Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-21T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59516,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.783Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.905Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59517,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.874Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.913Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59518,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:00.990Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.922Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-22T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59519,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.081Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.930Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59520,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.172Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.938Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59521,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.338Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.947Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-23T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59522,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.678Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.955Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59523,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.802Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.963Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59524,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.893Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.971Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 60,
- "date": "2013-11-24T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59525,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:01.992Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.980Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59526,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.084Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.988Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59527,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.175Z",
- "slice": 13,
- "created": "2013-12-13T22:19:52.996Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-25T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59528,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.271Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.005Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59529,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.362Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.013Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59530,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.453Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.021Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-26T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59531,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.544Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.029Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59532,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.635Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.038Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59533,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.726Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.046Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-27T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59534,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.817Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.054Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59535,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:02.909Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.063Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59536,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.000Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.071Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-28T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59537,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.099Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.079Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59538,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.190Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.087Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59539,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.281Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.096Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-29T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59540,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.373Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.104Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59541,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.465Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.112Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59542,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.556Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.120Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-11-30T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59543,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.647Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.129Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59544,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.739Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.137Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59545,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.821Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.145Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 61,
- "date": "2013-12-01T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59546,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:03.921Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.154Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59547,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.012Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.162Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59548,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.103Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.170Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-02T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59549,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.194Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.178Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59550,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.285Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.187Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59551,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.376Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.195Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-03T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59552,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.467Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.203Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59553,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.559Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.212Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59554,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.650Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.220Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-04T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59555,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.741Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.228Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59556,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.832Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.237Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59557,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:04.923Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.245Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-05T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59558,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.023Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.253Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59559,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.120Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.261Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59560,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.212Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.270Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-06T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59561,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.303Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.278Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59562,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.394Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.286Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59563,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.485Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.295Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-07T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59564,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.576Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.303Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59565,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.667Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.311Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59566,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:20:05.758Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.319Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "invoiced",
- "coreHours": 8.0,
- "invoice": 62,
- "date": "2013-12-08T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59567,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.328Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.328Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59568,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.336Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.336Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59569,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.344Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.344Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59570,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.353Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.352Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59571,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.361Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.361Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59572,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.369Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.369Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59573,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.377Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.377Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59574,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.386Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.386Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59575,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.394Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.394Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59576,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.402Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.402Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59577,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.411Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.410Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59578,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.419Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.419Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59579,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.427Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.427Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59580,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:53.435Z",
- "slice": 13,
- "created": "2013-12-13T22:19:53.435Z",
- "amount": 0.56,
- "object": 101,
- "account": 13,
- "state": "pending",
- "coreHours": 8.0,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "reservation"
- }
-},
-{
- "pk": 59581,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.051Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.467Z",
+ "created": "2013-12-18T21:29:14.065Z",
"amount": 0.14,
- "object": 102,
- "account": 12,
+ "object": 118,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 2.0,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61290,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:14.073Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.073Z",
+ "amount": 0.1792,
+ "object": 118,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 2.56,
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61291,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.444Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.088Z",
+ "amount": 0.1232,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 64,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61292,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.485Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.098Z",
+ "amount": 0.1288,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 64,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61293,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.527Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.106Z",
+ "amount": 0.2856,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 64,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61294,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.568Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.114Z",
+ "amount": 0.14,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 2.0,
- "invoice": 54,
- "date": "2013-11-13T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59582,
+ "pk": 61295,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.092Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.477Z",
- "amount": 0.3024,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:16.609Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.123Z",
+ "amount": 0.3136,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 4.32,
- "invoice": 54,
- "date": "2013-11-14T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.48,
+ "invoice": 64,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59583,
+ "pk": 61296,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.134Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.485Z",
- "amount": 0.1512,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 54,
- "date": "2013-11-14T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59584,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.175Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.493Z",
- "amount": 0.2464,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 54,
- "date": "2013-11-14T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59585,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.216Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.502Z",
- "amount": 0.224,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 54,
- "date": "2013-11-15T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59586,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.258Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.510Z",
- "amount": 0.2464,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 54,
- "date": "2013-11-15T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59587,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.299Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.518Z",
- "amount": 0.336,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 54,
- "date": "2013-11-15T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59588,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.341Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.527Z",
- "amount": 0.308,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 54,
- "date": "2013-11-16T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59589,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.382Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.535Z",
- "amount": 0.2184,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 54,
- "date": "2013-11-16T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59590,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.423Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.543Z",
- "amount": 0.2352,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 54,
- "date": "2013-11-16T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59591,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.465Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.551Z",
- "amount": 0.2072,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 54,
- "date": "2013-11-17T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59592,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.506Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.560Z",
- "amount": 0.2128,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 54,
- "date": "2013-11-17T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59593,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.548Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.568Z",
- "amount": 0.252,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 54,
- "date": "2013-11-17T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59594,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.622Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.576Z",
+ "updated": "2013-12-18T21:29:16.651Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.131Z",
"amount": 0.1792,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 2.56,
- "invoice": 55,
- "date": "2013-11-18T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59595,
+ "pk": 61297,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.664Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.584Z",
- "amount": 0.196,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:16.692Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.139Z",
+ "amount": 0.252,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 2.8,
- "invoice": 55,
- "date": "2013-11-18T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.6,
+ "invoice": 64,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59596,
+ "pk": 61298,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.705Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.593Z",
- "amount": 0.2632,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 55,
- "date": "2013-11-18T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59597,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.747Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.601Z",
- "amount": 0.1344,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 55,
- "date": "2013-11-19T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59598,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.788Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.609Z",
- "amount": 0.3192,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 55,
- "date": "2013-11-19T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59599,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.830Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.618Z",
- "amount": 0.1176,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 55,
- "date": "2013-11-19T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59600,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.871Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.626Z",
+ "updated": "2013-12-18T21:29:16.734Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.148Z",
"amount": 0.2464,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 3.52,
- "invoice": 55,
- "date": "2013-11-20T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59601,
+ "pk": 61299,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.912Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.634Z",
- "amount": 0.336,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 55,
- "date": "2013-11-20T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59602,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.954Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.642Z",
- "amount": 0.3248,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 55,
- "date": "2013-11-20T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59603,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.995Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.651Z",
- "amount": 0.2856,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 55,
- "date": "2013-11-21T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59604,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.036Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.659Z",
- "amount": 0.2296,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.28,
- "invoice": 55,
- "date": "2013-11-21T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59605,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.078Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.667Z",
- "amount": 0.2128,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 55,
- "date": "2013-11-21T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59606,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.119Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.676Z",
- "amount": 0.252,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 55,
- "date": "2013-11-22T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59607,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.161Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.684Z",
- "amount": 0.1904,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 55,
- "date": "2013-11-22T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59608,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.202Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.692Z",
- "amount": 0.1736,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 55,
- "date": "2013-11-22T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59609,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.244Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.700Z",
- "amount": 0.2912,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 55,
- "date": "2013-11-23T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59610,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.285Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.709Z",
- "amount": 0.14,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 55,
- "date": "2013-11-23T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59611,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.327Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.717Z",
- "amount": 0.3304,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 55,
- "date": "2013-11-23T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59612,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.368Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.725Z",
- "amount": 0.1344,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.92,
- "invoice": 55,
- "date": "2013-11-24T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59613,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.409Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.734Z",
- "amount": 0.2352,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 55,
- "date": "2013-11-24T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59614,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.451Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.742Z",
- "amount": 0.2352,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 55,
- "date": "2013-11-24T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59615,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.500Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.750Z",
- "amount": 0.2856,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 56,
- "date": "2013-11-25T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59616,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.542Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.758Z",
- "amount": 0.1176,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 56,
- "date": "2013-11-25T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59617,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.583Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.767Z",
- "amount": 0.3304,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 56,
- "date": "2013-11-25T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59618,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.625Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.775Z",
- "amount": 0.1288,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 56,
- "date": "2013-11-26T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59619,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.668Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.783Z",
- "amount": 0.1904,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.72,
- "invoice": 56,
- "date": "2013-11-26T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59620,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.709Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.792Z",
+ "updated": "2013-12-18T21:29:16.775Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.156Z",
"amount": 0.2184,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 3.12,
- "invoice": 56,
- "date": "2013-11-26T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59621,
+ "pk": 61300,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:56.751Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.800Z",
- "amount": 0.2016,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 56,
- "date": "2013-11-27T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59622,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.792Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.808Z",
- "amount": 0.2856,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 56,
- "date": "2013-11-27T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59623,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.833Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.816Z",
- "amount": 0.3024,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 56,
- "date": "2013-11-27T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59624,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.875Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.825Z",
- "amount": 0.1232,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.76,
- "invoice": 56,
- "date": "2013-11-28T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59625,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.916Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.833Z",
+ "updated": "2013-12-18T21:29:16.816Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.164Z",
"amount": 0.252,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 3.6,
- "invoice": 56,
- "date": "2013-11-28T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59626,
+ "pk": 61301,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:56.958Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.841Z",
- "amount": 0.224,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:16.858Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.172Z",
+ "amount": 0.1624,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 3.2,
- "invoice": 56,
- "date": "2013-11-28T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.32,
+ "invoice": 64,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59627,
+ "pk": 61302,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:56.999Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.850Z",
- "amount": 0.336,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 56,
- "date": "2013-11-29T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59628,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.041Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.858Z",
- "amount": 0.336,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 56,
- "date": "2013-11-29T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59629,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.082Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.866Z",
- "amount": 0.1512,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 56,
- "date": "2013-11-29T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59630,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.115Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.874Z",
- "amount": 0.112,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 56,
- "date": "2013-11-30T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59631,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.156Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.883Z",
- "amount": 0.3304,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.72,
- "invoice": 56,
- "date": "2013-11-30T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59632,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.198Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.891Z",
- "amount": 0.112,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 56,
- "date": "2013-11-30T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59633,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.239Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.899Z",
- "amount": 0.14,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 56,
- "date": "2013-12-01T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59634,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.281Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.908Z",
- "amount": 0.2912,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 56,
- "date": "2013-12-01T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59635,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.322Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.916Z",
+ "updated": "2013-12-18T21:29:16.899Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.181Z",
"amount": 0.2072,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 2.96,
- "invoice": 56,
- "date": "2013-12-01T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59636,
+ "pk": 61303,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.372Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.924Z",
+ "updated": "2013-12-18T21:29:16.941Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.189Z",
+ "amount": 0.1904,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 64,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61304,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.982Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.197Z",
+ "amount": 0.2856,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 64,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61305,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.024Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.206Z",
+ "amount": 0.2016,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 64,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61306,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.065Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.214Z",
+ "amount": 0.2184,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 64,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61307,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.106Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.222Z",
+ "amount": 0.14,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 64,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61308,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.148Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.230Z",
+ "amount": 0.1288,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 64,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61309,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.189Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.239Z",
+ "amount": 0.2632,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 64,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61310,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.253Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.247Z",
+ "amount": 0.2856,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 65,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61311,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.314Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.255Z",
+ "amount": 0.1568,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 65,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61312,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.361Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.264Z",
+ "amount": 0.2352,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 65,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61313,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.402Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.272Z",
+ "amount": 0.2352,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 65,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61314,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.443Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.280Z",
+ "amount": 0.3304,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 65,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61315,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.485Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.288Z",
+ "amount": 0.2408,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 65,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61316,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.601Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.297Z",
+ "amount": 0.2912,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 65,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61317,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.642Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.305Z",
"amount": 0.2688,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 3.84,
- "invoice": 57,
- "date": "2013-12-02T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 65,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59637,
+ "pk": 61318,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.413Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.932Z",
- "amount": 0.196,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:17.684Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.313Z",
+ "amount": 0.168,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 2.8,
- "invoice": 57,
- "date": "2013-12-02T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.4,
+ "invoice": 65,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59638,
+ "pk": 61319,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.455Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.941Z",
- "amount": 0.1232,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:17.725Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.322Z",
+ "amount": 0.1792,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 1.76,
- "invoice": 57,
- "date": "2013-12-02T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.56,
+ "invoice": 65,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59639,
+ "pk": 61320,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.496Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.949Z",
- "amount": 0.308,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:17.767Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.330Z",
+ "amount": 0.2184,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 4.4,
- "invoice": 57,
- "date": "2013-12-03T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.12,
+ "invoice": 65,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59640,
+ "pk": 61321,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.538Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.957Z",
- "amount": 0.2688,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:17.808Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.338Z",
+ "amount": 0.1848,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 3.84,
- "invoice": 57,
- "date": "2013-12-03T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.64,
+ "invoice": 65,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59641,
+ "pk": 61322,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.579Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.966Z",
+ "updated": "2013-12-18T21:29:17.849Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.346Z",
+ "amount": 0.1792,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 65,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61323,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.891Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.355Z",
"amount": 0.112,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 1.6,
- "invoice": 57,
- "date": "2013-12-03T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 65,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59642,
+ "pk": 61324,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.620Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.974Z",
+ "updated": "2013-12-18T21:29:17.932Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.363Z",
+ "amount": 0.3136,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 65,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61325,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.974Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.371Z",
+ "amount": 0.1568,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 65,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61326,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.015Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.380Z",
+ "amount": 0.3024,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 65,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61327,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.057Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.388Z",
+ "amount": 0.336,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 65,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61328,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.098Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.396Z",
"amount": 0.28,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 4.0,
- "invoice": 57,
- "date": "2013-12-04T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 65,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59643,
+ "pk": 61329,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.662Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.982Z",
+ "updated": "2013-12-18T21:29:18.139Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.404Z",
+ "amount": 0.3136,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 65,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61330,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.181Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.413Z",
+ "amount": 0.1176,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 65,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61331,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.231Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.421Z",
+ "amount": 0.3248,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 66,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61332,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.272Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.429Z",
+ "amount": 0.1288,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 66,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61333,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.313Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.437Z",
+ "amount": 0.1848,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 66,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61334,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.355Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.446Z",
+ "amount": 0.168,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 66,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61335,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.396Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.454Z",
+ "amount": 0.1624,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 66,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61336,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.438Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.462Z",
+ "amount": 0.112,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 66,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61337,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.479Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.471Z",
+ "amount": 0.2184,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 66,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61338,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.520Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.479Z",
+ "amount": 0.2576,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 66,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61339,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.562Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.487Z",
+ "amount": 0.2072,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 66,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61340,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.603Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.495Z",
+ "amount": 0.1232,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.76,
+ "invoice": 66,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61341,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.645Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.504Z",
+ "amount": 0.2632,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.76,
+ "invoice": 66,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61342,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.686Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.512Z",
+ "amount": 0.14,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 66,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61343,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.728Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.520Z",
+ "amount": 0.196,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 66,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61344,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.769Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.529Z",
+ "amount": 0.2576,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 66,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61345,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.810Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.537Z",
+ "amount": 0.168,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 66,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61346,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.852Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.545Z",
+ "amount": 0.2464,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 66,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61347,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.893Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.553Z",
+ "amount": 0.336,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 66,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61348,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.935Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.562Z",
+ "amount": 0.2464,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 66,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61349,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.976Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.570Z",
+ "amount": 0.2576,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 66,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61350,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.017Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.578Z",
+ "amount": 0.1736,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 66,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61351,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.059Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.587Z",
"amount": 0.3024,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 4.32,
- "invoice": 57,
- "date": "2013-12-04T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 66,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59644,
+ "pk": 61352,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.703Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.990Z",
- "amount": 0.1512,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:19.109Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.595Z",
+ "amount": 0.1848,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 2.16,
- "invoice": 57,
- "date": "2013-12-04T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.64,
+ "invoice": 67,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59645,
+ "pk": 61353,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.745Z",
- "slice": 15,
- "created": "2013-12-13T22:19:53.999Z",
- "amount": 0.14,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:19.150Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.603Z",
+ "amount": 0.3024,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 2.0,
- "invoice": 57,
- "date": "2013-12-05T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.32,
+ "invoice": 67,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59646,
+ "pk": 61354,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.786Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.007Z",
- "amount": 0.14,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 57,
- "date": "2013-12-05T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59647,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.828Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.015Z",
- "amount": 0.14,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.0,
- "invoice": 57,
- "date": "2013-12-05T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59648,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.869Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.024Z",
- "amount": 0.2632,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 57,
- "date": "2013-12-06T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59649,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.910Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.032Z",
- "amount": 0.2632,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.76,
- "invoice": 57,
- "date": "2013-12-06T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59650,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.952Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.040Z",
+ "updated": "2013-12-18T21:29:19.191Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.611Z",
"amount": 0.2856,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 4.08,
- "invoice": 57,
- "date": "2013-12-06T22:00:00Z",
- "kind": "besteffort"
+ "invoice": 67,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59651,
+ "pk": 61355,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.993Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.048Z",
- "amount": 0.2744,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:19.233Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.620Z",
+ "amount": 0.3136,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 3.92,
- "invoice": 57,
- "date": "2013-12-07T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.48,
+ "invoice": 67,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59652,
+ "pk": 61356,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.035Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.057Z",
+ "updated": "2013-12-18T21:29:19.274Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.628Z",
+ "amount": 0.1176,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 67,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61357,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.316Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.636Z",
+ "amount": 0.2072,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 67,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61358,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.357Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.645Z",
"amount": 0.2632,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
"coreHours": 3.76,
- "invoice": 57,
- "date": "2013-12-07T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 67,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59653,
+ "pk": 61359,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.076Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.065Z",
- "amount": 0.1176,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:19.398Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.653Z",
+ "amount": 0.2408,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 1.68,
- "invoice": 57,
- "date": "2013-12-07T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.44,
+ "invoice": 67,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59654,
+ "pk": 61360,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.117Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.073Z",
- "amount": 0.1792,
- "object": 102,
- "account": 12,
+ "updated": "2013-12-18T21:29:19.440Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.661Z",
+ "amount": 0.2744,
+ "object": 119,
+ "account": 14,
"state": "invoiced",
- "coreHours": 2.56,
- "invoice": 57,
- "date": "2013-12-08T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.92,
+ "invoice": 67,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59655,
+ "pk": 61361,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.159Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.081Z",
- "amount": 0.1456,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 57,
- "date": "2013-12-08T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59656,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.200Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.090Z",
- "amount": 0.1176,
- "object": 102,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 57,
- "date": "2013-12-08T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59657,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:54.098Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.098Z",
- "amount": 0.2464,
- "object": 102,
- "account": 12,
- "state": "pending",
- "coreHours": 3.52,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59658,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:54.106Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.106Z",
- "amount": 0.252,
- "object": 102,
- "account": 12,
- "state": "pending",
- "coreHours": 3.6,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59659,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:54.115Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.115Z",
- "amount": 0.2016,
- "object": 102,
- "account": 12,
- "state": "pending",
- "coreHours": 2.88,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59660,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:54.123Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.123Z",
+ "updated": "2013-12-18T21:29:19.481Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.669Z",
"amount": 0.3024,
- "object": 102,
- "account": 12,
- "state": "pending",
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
"coreHours": 4.32,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 67,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59661,
+ "pk": 61362,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.131Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.131Z",
- "amount": 0.3192,
- "object": 102,
- "account": 12,
- "state": "pending",
- "coreHours": 4.56,
- "invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:19.523Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.678Z",
+ "amount": 0.1848,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 67,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59662,
+ "pk": 61363,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.140Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.139Z",
- "amount": 0.336,
- "object": 102,
- "account": 12,
- "state": "pending",
- "coreHours": 4.8,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:19.564Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.686Z",
+ "amount": 0.168,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 67,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59663,
+ "pk": 61364,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.148Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.148Z",
+ "updated": "2013-12-18T21:29:19.606Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.694Z",
+ "amount": 0.2576,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 67,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61365,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.647Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.702Z",
"amount": 0.3024,
- "object": 102,
- "account": 12,
- "state": "pending",
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
"coreHours": 4.32,
- "invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 67,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59664,
+ "pk": 61366,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.156Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.156Z",
- "amount": 0.2128,
- "object": 102,
- "account": 12,
- "state": "pending",
- "coreHours": 3.04,
- "invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:19.688Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.711Z",
+ "amount": 0.28,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 67,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59665,
+ "pk": 61367,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.164Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.164Z",
- "amount": 0.2296,
- "object": 102,
- "account": 12,
- "state": "pending",
- "coreHours": 3.28,
- "invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:19.730Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.719Z",
+ "amount": 0.224,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 67,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59666,
+ "pk": 61368,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.173Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.173Z",
+ "updated": "2013-12-18T21:29:19.771Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.727Z",
+ "amount": 0.1736,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 67,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61369,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.821Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.736Z",
+ "amount": 0.3136,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 67,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61370,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.862Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.744Z",
+ "amount": 0.2352,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 67,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61371,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.904Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.752Z",
+ "amount": 0.28,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 67,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61372,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.945Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.761Z",
+ "amount": 0.2184,
+ "object": 119,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 67,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61373,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:14.769Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.769Z",
"amount": 0.1288,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "pending",
"coreHours": 1.84,
"invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59667,
+ "pk": 61374,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.181Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.181Z",
- "amount": 0.2912,
- "object": 102,
- "account": 12,
- "state": "pending",
- "coreHours": 4.16,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59668,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:54.189Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.189Z",
- "amount": 0.224,
- "object": 102,
- "account": 12,
- "state": "pending",
- "coreHours": 3.2,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59669,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:54.197Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.197Z",
- "amount": 0.168,
- "object": 102,
- "account": 12,
- "state": "pending",
- "coreHours": 2.4,
- "invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59670,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:54.206Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.206Z",
+ "updated": "2013-12-18T21:29:14.777Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.777Z",
"amount": 0.3136,
- "object": 102,
- "account": 12,
+ "object": 119,
+ "account": 14,
"state": "pending",
"coreHours": 4.48,
"invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59671,
+ "pk": 61375,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.034Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.221Z",
- "amount": 0.1176,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.68,
- "invoice": 53,
- "date": "2013-11-13T22:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:14.785Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.785Z",
+ "amount": 0.1456,
+ "object": 119,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 2.08,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59672,
+ "pk": 61376,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.084Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.231Z",
- "amount": 0.2968,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 54,
- "date": "2013-11-14T06:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:14.794Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.794Z",
+ "amount": 0.3192,
+ "object": 119,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 4.56,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59673,
+ "pk": 61377,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.125Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.239Z",
- "amount": 0.2016,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 54,
- "date": "2013-11-14T14:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:14.802Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.802Z",
+ "amount": 0.1456,
+ "object": 119,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 2.08,
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59674,
+ "pk": 61378,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.167Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.247Z",
- "amount": 0.224,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 54,
- "date": "2013-11-14T22:00:00Z",
- "kind": "besteffort"
+ "updated": "2013-12-18T21:29:14.810Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.810Z",
+ "amount": 0.3304,
+ "object": 119,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 4.72,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59675,
+ "pk": 61379,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.208Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.255Z",
- "amount": 0.308,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.4,
- "invoice": 54,
- "date": "2013-11-15T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59676,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.250Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.264Z",
- "amount": 0.1288,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.84,
- "invoice": 54,
- "date": "2013-11-15T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59677,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.291Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.272Z",
- "amount": 0.112,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 54,
- "date": "2013-11-15T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59678,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.332Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.280Z",
- "amount": 0.1568,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.24,
- "invoice": 54,
- "date": "2013-11-16T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59679,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.374Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.289Z",
- "amount": 0.1848,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.64,
- "invoice": 54,
- "date": "2013-11-16T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59680,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.415Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.297Z",
- "amount": 0.2912,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 54,
- "date": "2013-11-16T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59681,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.457Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.305Z",
- "amount": 0.2128,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 54,
- "date": "2013-11-17T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59682,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.498Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.314Z",
- "amount": 0.1624,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.32,
- "invoice": 54,
- "date": "2013-11-17T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59683,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.539Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.322Z",
- "amount": 0.2352,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 54,
- "date": "2013-11-17T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59684,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.614Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.330Z",
- "amount": 0.1512,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.16,
- "invoice": 55,
- "date": "2013-11-18T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59685,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.655Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.339Z",
- "amount": 0.112,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 55,
- "date": "2013-11-18T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59686,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.697Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.347Z",
- "amount": 0.3024,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.32,
- "invoice": 55,
- "date": "2013-11-18T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59687,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.738Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.355Z",
- "amount": 0.2744,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 55,
- "date": "2013-11-19T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59688,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.780Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.363Z",
- "amount": 0.196,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.8,
- "invoice": 55,
- "date": "2013-11-19T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59689,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.821Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.371Z",
- "amount": 0.2856,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.08,
- "invoice": 55,
- "date": "2013-11-19T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59690,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.863Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.380Z",
+ "updated": "2013-12-18T21:29:14.818Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.818Z",
"amount": 0.28,
- "object": 103,
- "account": 12,
- "state": "invoiced",
+ "object": 119,
+ "account": 14,
+ "state": "pending",
"coreHours": 4.0,
- "invoice": 55,
- "date": "2013-11-20T06:00:00Z",
- "kind": "besteffort"
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59691,
+ "pk": 61380,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:55.904Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.388Z",
- "amount": 0.2576,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.68,
- "invoice": 55,
- "date": "2013-11-20T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59692,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.945Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.396Z",
- "amount": 0.112,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 55,
- "date": "2013-11-20T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59693,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:55.987Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.405Z",
- "amount": 0.3248,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 55,
- "date": "2013-11-21T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59694,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.028Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.413Z",
+ "updated": "2013-12-18T21:29:14.827Z",
+ "slice": 14,
+ "created": "2013-12-18T21:29:14.827Z",
"amount": 0.2352,
- "object": 103,
- "account": 12,
- "state": "invoiced",
+ "object": 119,
+ "account": 14,
+ "state": "pending",
"coreHours": 3.36,
- "invoice": 55,
- "date": "2013-11-21T14:00:00Z",
- "kind": "besteffort"
+ "invoice": null,
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59695,
+ "pk": 61381,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:56.070Z",
+ "updated": "2013-12-18T21:29:16.452Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.421Z",
- "amount": 0.1904,
- "object": 103,
- "account": 12,
+ "created": "2013-12-18T21:29:14.858Z",
+ "amount": 0.252,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
- "coreHours": 2.72,
- "invoice": 55,
- "date": "2013-11-21T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.6,
+ "invoice": 64,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59696,
+ "pk": 61382,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:56.111Z",
+ "updated": "2013-12-18T21:29:16.494Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.429Z",
- "amount": 0.2408,
- "object": 103,
- "account": 12,
+ "created": "2013-12-18T21:29:14.868Z",
+ "amount": 0.2688,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
- "coreHours": 3.44,
- "invoice": 55,
- "date": "2013-11-22T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.84,
+ "invoice": 64,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59697,
+ "pk": 61383,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:56.153Z",
+ "updated": "2013-12-18T21:29:16.535Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.438Z",
- "amount": 0.1288,
- "object": 103,
- "account": 12,
+ "created": "2013-12-18T21:29:14.876Z",
+ "amount": 0.1736,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
- "coreHours": 1.84,
- "invoice": 55,
- "date": "2013-11-22T14:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.48,
+ "invoice": 64,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59698,
+ "pk": 61384,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:56.194Z",
+ "updated": "2013-12-18T21:29:16.576Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.446Z",
- "amount": 0.2968,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 55,
- "date": "2013-11-22T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59699,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.235Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.454Z",
+ "created": "2013-12-18T21:29:14.885Z",
"amount": 0.2464,
- "object": 103,
- "account": 12,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
"coreHours": 3.52,
- "invoice": 55,
- "date": "2013-11-23T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59700,
+ "pk": 61385,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:56.277Z",
+ "updated": "2013-12-18T21:29:16.618Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.463Z",
+ "created": "2013-12-18T21:29:14.893Z",
"amount": 0.196,
- "object": 103,
- "account": 12,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
"coreHours": 2.8,
- "invoice": 55,
- "date": "2013-11-23T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59701,
+ "pk": 61386,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:56.318Z",
+ "updated": "2013-12-18T21:29:16.659Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.471Z",
- "amount": 0.28,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 55,
- "date": "2013-11-23T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59702,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.360Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.479Z",
- "amount": 0.2016,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 55,
- "date": "2013-11-24T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59703,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.401Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.487Z",
- "amount": 0.1792,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 55,
- "date": "2013-11-24T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59704,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.442Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.496Z",
- "amount": 0.2128,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 55,
- "date": "2013-11-24T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59705,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.492Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.504Z",
- "amount": 0.2016,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.88,
- "invoice": 56,
- "date": "2013-11-25T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59706,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.534Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.512Z",
- "amount": 0.1456,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 56,
- "date": "2013-11-25T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59707,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.575Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.521Z",
- "amount": 0.2688,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 56,
- "date": "2013-11-25T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59708,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.616Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.529Z",
- "amount": 0.336,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.8,
- "invoice": 56,
- "date": "2013-11-26T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59709,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.659Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.537Z",
- "amount": 0.112,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 56,
- "date": "2013-11-26T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59710,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.701Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.545Z",
- "amount": 0.2968,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.24,
- "invoice": 56,
- "date": "2013-11-26T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59711,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.742Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.554Z",
+ "created": "2013-12-18T21:29:14.901Z",
"amount": 0.1232,
- "object": 103,
- "account": 12,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
"coreHours": 1.76,
- "invoice": 56,
- "date": "2013-11-27T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59712,
+ "pk": 61387,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:56.784Z",
+ "updated": "2013-12-18T21:29:16.700Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.562Z",
- "amount": 0.3192,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 56,
- "date": "2013-11-27T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59713,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.825Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.570Z",
- "amount": 0.2072,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 56,
- "date": "2013-11-27T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59714,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.867Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.579Z",
- "amount": 0.1624,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.32,
- "invoice": 56,
- "date": "2013-11-28T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59715,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.908Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.587Z",
- "amount": 0.1456,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.08,
- "invoice": 56,
- "date": "2013-11-28T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59716,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.949Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.595Z",
- "amount": 0.112,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 1.6,
- "invoice": 56,
- "date": "2013-11-28T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59717,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:56.991Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.603Z",
- "amount": 0.2688,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.84,
- "invoice": 56,
- "date": "2013-11-29T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59718,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.032Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.612Z",
+ "created": "2013-12-18T21:29:14.910Z",
"amount": 0.14,
- "object": 103,
- "account": 12,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
"coreHours": 2.0,
- "invoice": 56,
- "date": "2013-11-29T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59719,
+ "pk": 61388,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.074Z",
+ "updated": "2013-12-18T21:29:16.742Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.620Z",
- "amount": 0.1288,
- "object": 103,
- "account": 12,
+ "created": "2013-12-18T21:29:14.918Z",
+ "amount": 0.1624,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
- "coreHours": 1.84,
- "invoice": 56,
- "date": "2013-11-29T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 2.32,
+ "invoice": 64,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59720,
+ "pk": 61389,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:57.148Z",
+ "updated": "2013-12-18T21:29:16.783Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.628Z",
- "amount": 0.1736,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.48,
- "invoice": 56,
- "date": "2013-11-30T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59721,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.190Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.637Z",
- "amount": 0.2464,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.52,
- "invoice": 56,
- "date": "2013-11-30T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59722,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.231Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.645Z",
- "amount": 0.2184,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.12,
- "invoice": 56,
- "date": "2013-11-30T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59723,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.272Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.653Z",
- "amount": 0.2744,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 56,
- "date": "2013-12-01T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59724,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.314Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.661Z",
- "amount": 0.2744,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 56,
- "date": "2013-12-01T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59725,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.355Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.670Z",
- "amount": 0.2352,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 56,
- "date": "2013-12-01T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59726,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.405Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.678Z",
- "amount": 0.2744,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.92,
- "invoice": 57,
- "date": "2013-12-02T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59727,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.446Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.686Z",
- "amount": 0.3192,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.56,
- "invoice": 57,
- "date": "2013-12-02T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59728,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.488Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.695Z",
- "amount": 0.28,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.0,
- "invoice": 57,
- "date": "2013-12-02T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59729,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.529Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.703Z",
- "amount": 0.2912,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.16,
- "invoice": 57,
- "date": "2013-12-03T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59730,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.571Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.711Z",
- "amount": 0.252,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 57,
- "date": "2013-12-03T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59731,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.612Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.719Z",
- "amount": 0.1792,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.56,
- "invoice": 57,
- "date": "2013-12-03T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59732,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.653Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.728Z",
- "amount": 0.2408,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 57,
- "date": "2013-12-04T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59733,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.695Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.736Z",
- "amount": 0.2352,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.36,
- "invoice": 57,
- "date": "2013-12-04T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59734,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.736Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.744Z",
- "amount": 0.3248,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 4.64,
- "invoice": 57,
- "date": "2013-12-04T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59735,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.778Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.753Z",
- "amount": 0.2408,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.44,
- "invoice": 57,
- "date": "2013-12-05T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59736,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.819Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.761Z",
- "amount": 0.224,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 57,
- "date": "2013-12-05T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59737,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.861Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.769Z",
- "amount": 0.2128,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.04,
- "invoice": 57,
- "date": "2013-12-05T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59738,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.902Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.777Z",
- "amount": 0.2072,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 2.96,
- "invoice": 57,
- "date": "2013-12-06T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59739,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.943Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.786Z",
- "amount": 0.252,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.6,
- "invoice": 57,
- "date": "2013-12-06T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59740,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:57.985Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.794Z",
- "amount": 0.224,
- "object": 103,
- "account": 12,
- "state": "invoiced",
- "coreHours": 3.2,
- "invoice": 57,
- "date": "2013-12-06T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59741,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:58.026Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.802Z",
+ "created": "2013-12-18T21:29:14.926Z",
"amount": 0.196,
- "object": 103,
- "account": 12,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
"coreHours": 2.8,
- "invoice": 57,
- "date": "2013-12-07T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59742,
+ "pk": 61390,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.068Z",
+ "updated": "2013-12-18T21:29:16.825Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.811Z",
+ "created": "2013-12-18T21:29:14.934Z",
+ "amount": 0.196,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 64,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61391,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.866Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:14.943Z",
+ "amount": 0.1792,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 64,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61392,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.908Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:14.951Z",
+ "amount": 0.168,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 64,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61393,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.949Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:14.959Z",
+ "amount": 0.1624,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 64,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61394,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.990Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:14.968Z",
+ "amount": 0.2968,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 64,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61395,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.032Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:14.976Z",
+ "amount": 0.3136,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 64,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61396,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.073Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:14.984Z",
+ "amount": 0.2576,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 64,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61397,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.115Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:14.992Z",
+ "amount": 0.196,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 64,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61398,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.156Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.001Z",
+ "amount": 0.2912,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 64,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61399,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.198Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.009Z",
"amount": 0.2352,
- "object": 103,
- "account": 12,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
"coreHours": 3.36,
- "invoice": 57,
- "date": "2013-12-07T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 64,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59743,
+ "pk": 61400,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.109Z",
+ "updated": "2013-12-18T21:29:17.264Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.819Z",
- "amount": 0.2408,
- "object": 103,
- "account": 12,
+ "created": "2013-12-18T21:29:15.017Z",
+ "amount": 0.1176,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
- "coreHours": 3.44,
- "invoice": 57,
- "date": "2013-12-07T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 1.68,
+ "invoice": 65,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59744,
+ "pk": 61401,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.151Z",
+ "updated": "2013-12-18T21:29:17.328Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.827Z",
- "amount": 0.3304,
- "object": 103,
- "account": 12,
+ "created": "2013-12-18T21:29:15.025Z",
+ "amount": 0.3024,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
- "coreHours": 4.72,
- "invoice": 57,
- "date": "2013-12-08T06:00:00Z",
- "kind": "besteffort"
+ "coreHours": 4.32,
+ "invoice": 65,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59745,
+ "pk": 61402,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.192Z",
+ "updated": "2013-12-18T21:29:17.369Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.835Z",
+ "created": "2013-12-18T21:29:15.034Z",
+ "amount": 0.3136,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 65,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61403,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.410Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.042Z",
+ "amount": 0.2744,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 65,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61404,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.452Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.050Z",
"amount": 0.336,
- "object": 103,
- "account": 12,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
"coreHours": 4.8,
- "invoice": 57,
- "date": "2013-12-08T14:00:00Z",
- "kind": "besteffort"
+ "invoice": 65,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59746,
+ "pk": 61405,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:58.233Z",
+ "updated": "2013-12-18T21:29:17.493Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.844Z",
- "amount": 0.2464,
- "object": 103,
- "account": 12,
+ "created": "2013-12-18T21:29:15.059Z",
+ "amount": 0.2184,
+ "object": 120,
+ "account": 14,
"state": "invoiced",
- "coreHours": 3.52,
- "invoice": 57,
- "date": "2013-12-08T22:00:00Z",
- "kind": "besteffort"
+ "coreHours": 3.12,
+ "invoice": 65,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59747,
+ "pk": 61406,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.852Z",
+ "updated": "2013-12-18T21:29:17.609Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.852Z",
- "amount": 0.252,
- "object": 103,
- "account": 12,
- "state": "pending",
- "coreHours": 3.6,
- "invoice": null,
- "date": "2013-12-09T06:00:00Z",
- "kind": "besteffort"
+ "created": "2013-12-18T21:29:15.067Z",
+ "amount": 0.1176,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 65,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59748,
+ "pk": 61407,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.860Z",
+ "updated": "2013-12-18T21:29:17.651Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.860Z",
- "amount": 0.3304,
- "object": 103,
- "account": 12,
- "state": "pending",
- "coreHours": 4.72,
- "invoice": null,
- "date": "2013-12-09T14:00:00Z",
- "kind": "besteffort"
+ "created": "2013-12-18T21:29:15.075Z",
+ "amount": 0.196,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 65,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59749,
+ "pk": 61408,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.869Z",
+ "updated": "2013-12-18T21:29:17.692Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.869Z",
- "amount": 0.1344,
- "object": 103,
- "account": 12,
- "state": "pending",
- "coreHours": 1.92,
- "invoice": null,
- "date": "2013-12-09T22:00:00Z",
- "kind": "besteffort"
+ "created": "2013-12-18T21:29:15.084Z",
+ "amount": 0.1512,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.16,
+ "invoice": 65,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59750,
+ "pk": 61409,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.877Z",
+ "updated": "2013-12-18T21:29:17.733Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.877Z",
+ "created": "2013-12-18T21:29:15.092Z",
+ "amount": 0.196,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 65,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61410,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.775Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.100Z",
+ "amount": 0.2128,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 65,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61411,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.816Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.108Z",
+ "amount": 0.3192,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.56,
+ "invoice": 65,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61412,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.858Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.117Z",
"amount": 0.224,
- "object": 103,
- "account": 12,
- "state": "pending",
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
"coreHours": 3.2,
- "invoice": null,
- "date": "2013-12-10T06:00:00Z",
- "kind": "besteffort"
+ "invoice": 65,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59751,
+ "pk": 61413,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.885Z",
+ "updated": "2013-12-18T21:29:17.899Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.885Z",
+ "created": "2013-12-18T21:29:15.125Z",
+ "amount": 0.1624,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 65,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61414,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.940Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.133Z",
+ "amount": 0.336,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 65,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61415,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.982Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.142Z",
+ "amount": 0.1288,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 65,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61416,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.023Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.150Z",
+ "amount": 0.2016,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 65,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61417,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.065Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.158Z",
+ "amount": 0.2296,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 65,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61418,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.106Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.166Z",
+ "amount": 0.1568,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 65,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61419,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.148Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.175Z",
+ "amount": 0.2912,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 65,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61420,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.189Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.183Z",
+ "amount": 0.1176,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 65,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61421,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.239Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.191Z",
+ "amount": 0.14,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 66,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61422,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.280Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.200Z",
+ "amount": 0.1456,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 66,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61423,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.321Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.208Z",
+ "amount": 0.1848,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 66,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61424,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.363Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.216Z",
+ "amount": 0.2688,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 66,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61425,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.404Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.224Z",
+ "amount": 0.252,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 66,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61426,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.446Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.233Z",
+ "amount": 0.3304,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 66,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61427,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.487Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.241Z",
+ "amount": 0.2968,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 66,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61428,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.529Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.249Z",
+ "amount": 0.2072,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 66,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61429,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.570Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.258Z",
+ "amount": 0.2408,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 66,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61430,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.611Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.266Z",
+ "amount": 0.196,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 66,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61431,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.653Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.274Z",
+ "amount": 0.1568,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 66,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61432,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.694Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.282Z",
+ "amount": 0.1792,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 66,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61433,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.736Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.291Z",
+ "amount": 0.14,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 66,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61434,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.777Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.299Z",
+ "amount": 0.1904,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 66,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61435,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.819Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.307Z",
+ "amount": 0.1568,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 66,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61436,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.860Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.315Z",
+ "amount": 0.196,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 66,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61437,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.901Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.324Z",
+ "amount": 0.1624,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 66,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61438,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.943Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.332Z",
+ "amount": 0.2912,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 66,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61439,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.984Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.340Z",
+ "amount": 0.2352,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 66,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61440,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.026Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.348Z",
+ "amount": 0.1736,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 66,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61441,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.067Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.357Z",
+ "amount": 0.336,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 66,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61442,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.117Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.365Z",
+ "amount": 0.3136,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 67,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61443,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.158Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.373Z",
+ "amount": 0.2744,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 67,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61444,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.200Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.382Z",
+ "amount": 0.1176,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 67,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61445,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.241Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.390Z",
+ "amount": 0.1456,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 67,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61446,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.283Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.398Z",
+ "amount": 0.1344,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 67,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61447,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.324Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.407Z",
+ "amount": 0.1456,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 67,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61448,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.365Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.415Z",
+ "amount": 0.112,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 67,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61449,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.407Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.423Z",
+ "amount": 0.14,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 67,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61450,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.448Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.431Z",
+ "amount": 0.2744,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 67,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61451,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.490Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.440Z",
+ "amount": 0.2408,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 67,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61452,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.531Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.448Z",
+ "amount": 0.1848,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 67,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61453,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.572Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.456Z",
+ "amount": 0.308,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 67,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61454,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.614Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.464Z",
+ "amount": 0.1568,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 67,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61455,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.655Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.473Z",
+ "amount": 0.14,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 67,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61456,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.697Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.481Z",
+ "amount": 0.1568,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 67,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61457,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.738Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.489Z",
+ "amount": 0.336,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 67,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61458,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.779Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.498Z",
+ "amount": 0.2072,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 67,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61459,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.829Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.506Z",
+ "amount": 0.2688,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 67,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61460,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.871Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.516Z",
+ "amount": 0.3248,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 67,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61461,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.912Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.524Z",
+ "amount": 0.1624,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 67,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61462,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.953Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.533Z",
+ "amount": 0.1176,
+ "object": 120,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.68,
+ "invoice": 67,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61463,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:15.541Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.541Z",
+ "amount": 0.3192,
+ "object": 120,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 4.56,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61464,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:15.549Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.549Z",
+ "amount": 0.3136,
+ "object": 120,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 4.48,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61465,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:15.557Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.557Z",
+ "amount": 0.1456,
+ "object": 120,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 2.08,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61466,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:15.566Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.566Z",
+ "amount": 0.28,
+ "object": 120,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 4.0,
+ "invoice": null,
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61467,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:15.574Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.574Z",
+ "amount": 0.2072,
+ "object": 120,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 2.96,
+ "invoice": null,
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61468,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:15.582Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.582Z",
+ "amount": 0.2352,
+ "object": 120,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 3.36,
+ "invoice": null,
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61469,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:15.591Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.590Z",
+ "amount": 0.336,
+ "object": 120,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 4.8,
+ "invoice": null,
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61470,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:15.599Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.599Z",
"amount": 0.1232,
- "object": 103,
- "account": 12,
+ "object": 120,
+ "account": 14,
"state": "pending",
"coreHours": 1.76,
"invoice": null,
- "date": "2013-12-10T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59752,
+ "pk": 61471,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.894Z",
+ "updated": "2013-12-18T21:29:16.460Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.893Z",
- "amount": 0.3304,
- "object": 103,
- "account": 12,
- "state": "pending",
- "coreHours": 4.72,
- "invoice": null,
- "date": "2013-12-10T22:00:00Z",
- "kind": "besteffort"
+ "created": "2013-12-18T21:29:15.614Z",
+ "amount": 0.1848,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 64,
+ "date": "2013-11-18T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59753,
+ "pk": 61472,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.902Z",
+ "updated": "2013-12-18T21:29:16.502Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.902Z",
+ "created": "2013-12-18T21:29:15.624Z",
+ "amount": 0.2464,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 64,
+ "date": "2013-11-19T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61473,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.543Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.632Z",
+ "amount": 0.1456,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 64,
+ "date": "2013-11-19T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61474,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.585Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.640Z",
+ "amount": 0.2184,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 64,
+ "date": "2013-11-19T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61475,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.626Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.649Z",
+ "amount": 0.252,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 64,
+ "date": "2013-11-20T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61476,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.667Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.657Z",
+ "amount": 0.2352,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.36,
+ "invoice": 64,
+ "date": "2013-11-20T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61477,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.709Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.665Z",
+ "amount": 0.2408,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 64,
+ "date": "2013-11-20T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61478,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.750Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.673Z",
+ "amount": 0.168,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 64,
+ "date": "2013-11-21T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61479,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.792Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.682Z",
+ "amount": 0.1904,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 64,
+ "date": "2013-11-21T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61480,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.833Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.690Z",
+ "amount": 0.14,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.0,
+ "invoice": 64,
+ "date": "2013-11-21T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61481,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.874Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.698Z",
+ "amount": 0.3248,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 64,
+ "date": "2013-11-22T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61482,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.916Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.707Z",
+ "amount": 0.2072,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 64,
+ "date": "2013-11-22T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61483,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.957Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.715Z",
"amount": 0.1736,
- "object": 103,
- "account": 12,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 64,
+ "date": "2013-11-22T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61484,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.999Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.723Z",
+ "amount": 0.1904,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.72,
+ "invoice": 64,
+ "date": "2013-11-23T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61485,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.040Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.731Z",
+ "amount": 0.2744,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 64,
+ "date": "2013-11-23T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61486,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.081Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.740Z",
+ "amount": 0.2184,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 64,
+ "date": "2013-11-23T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61487,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.123Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.748Z",
+ "amount": 0.2912,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 64,
+ "date": "2013-11-24T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61488,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.164Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.756Z",
+ "amount": 0.3136,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 64,
+ "date": "2013-11-24T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61489,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.206Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.765Z",
+ "amount": 0.168,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.4,
+ "invoice": 64,
+ "date": "2013-11-24T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61490,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.278Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.773Z",
+ "amount": 0.224,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 65,
+ "date": "2013-11-25T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61491,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.336Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.781Z",
+ "amount": 0.2856,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 65,
+ "date": "2013-11-25T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61492,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.377Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.789Z",
+ "amount": 0.336,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.8,
+ "invoice": 65,
+ "date": "2013-11-25T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61493,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.419Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.798Z",
+ "amount": 0.1736,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.48,
+ "invoice": 65,
+ "date": "2013-11-26T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61494,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.460Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.806Z",
+ "amount": 0.1792,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 65,
+ "date": "2013-11-26T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61495,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.501Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.814Z",
+ "amount": 0.1288,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 65,
+ "date": "2013-11-26T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61496,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.618Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.822Z",
+ "amount": 0.2744,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.92,
+ "invoice": 65,
+ "date": "2013-11-27T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61497,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.659Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.831Z",
+ "amount": 0.196,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 65,
+ "date": "2013-11-27T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61498,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.700Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.839Z",
+ "amount": 0.2296,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 65,
+ "date": "2013-11-27T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61499,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.742Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.847Z",
+ "amount": 0.1288,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.84,
+ "invoice": 65,
+ "date": "2013-11-28T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61500,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.783Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.856Z",
+ "amount": 0.2912,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 65,
+ "date": "2013-11-28T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61501,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.824Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.864Z",
+ "amount": 0.2464,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 65,
+ "date": "2013-11-28T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61502,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.866Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.872Z",
+ "amount": 0.224,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 65,
+ "date": "2013-11-29T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61503,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.907Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.880Z",
+ "amount": 0.2408,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 65,
+ "date": "2013-11-29T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61504,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.949Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.889Z",
+ "amount": 0.1456,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 65,
+ "date": "2013-11-29T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61505,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:17.990Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.897Z",
+ "amount": 0.1848,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 65,
+ "date": "2013-11-30T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61506,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.032Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.905Z",
+ "amount": 0.2576,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.68,
+ "invoice": 65,
+ "date": "2013-11-30T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61507,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.073Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.914Z",
+ "amount": 0.2128,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.04,
+ "invoice": 65,
+ "date": "2013-11-30T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61508,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.114Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.922Z",
+ "amount": 0.3248,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 65,
+ "date": "2013-12-01T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61509,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.156Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.930Z",
+ "amount": 0.224,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 65,
+ "date": "2013-12-01T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61510,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.197Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.938Z",
+ "amount": 0.3136,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 65,
+ "date": "2013-12-01T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61511,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.247Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.947Z",
+ "amount": 0.2912,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.16,
+ "invoice": 66,
+ "date": "2013-12-02T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61512,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.288Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.955Z",
+ "amount": 0.252,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 66,
+ "date": "2013-12-02T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61513,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.330Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.963Z",
+ "amount": 0.2968,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 66,
+ "date": "2013-12-02T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61514,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.371Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.972Z",
+ "amount": 0.1568,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 66,
+ "date": "2013-12-03T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61515,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.413Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.980Z",
+ "amount": 0.3024,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 66,
+ "date": "2013-12-03T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61516,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.454Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.988Z",
+ "amount": 0.196,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.8,
+ "invoice": 66,
+ "date": "2013-12-03T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61517,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.496Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:15.997Z",
+ "amount": 0.2968,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.24,
+ "invoice": 66,
+ "date": "2013-12-04T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61518,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.537Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.005Z",
+ "amount": 0.3304,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 66,
+ "date": "2013-12-04T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61519,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.578Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.013Z",
+ "amount": 0.1848,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 66,
+ "date": "2013-12-04T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61520,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.620Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.021Z",
+ "amount": 0.2408,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.44,
+ "invoice": 66,
+ "date": "2013-12-05T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61521,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.661Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.030Z",
+ "amount": 0.2464,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.52,
+ "invoice": 66,
+ "date": "2013-12-05T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61522,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.703Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.038Z",
+ "amount": 0.28,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 66,
+ "date": "2013-12-05T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61523,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.744Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.046Z",
+ "amount": 0.1848,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.64,
+ "invoice": 66,
+ "date": "2013-12-06T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61524,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.785Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.054Z",
+ "amount": 0.308,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 66,
+ "date": "2013-12-06T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61525,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.827Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.063Z",
+ "amount": 0.3248,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.64,
+ "invoice": 66,
+ "date": "2013-12-06T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61526,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.868Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.071Z",
+ "amount": 0.112,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.6,
+ "invoice": 66,
+ "date": "2013-12-07T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61527,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.910Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.079Z",
+ "amount": 0.252,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 66,
+ "date": "2013-12-07T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61528,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.951Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.088Z",
+ "amount": 0.308,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 66,
+ "date": "2013-12-07T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61529,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:18.993Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.096Z",
+ "amount": 0.3304,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 66,
+ "date": "2013-12-08T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61530,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.034Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.104Z",
+ "amount": 0.2296,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 66,
+ "date": "2013-12-08T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61531,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.075Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.112Z",
+ "amount": 0.3024,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.32,
+ "invoice": 66,
+ "date": "2013-12-08T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61532,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.125Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.121Z",
+ "amount": 0.1456,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 67,
+ "date": "2013-12-09T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61533,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.167Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.129Z",
+ "amount": 0.1456,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 67,
+ "date": "2013-12-09T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61534,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.208Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.137Z",
+ "amount": 0.2184,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 67,
+ "date": "2013-12-09T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61535,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.249Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.146Z",
+ "amount": 0.2184,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.12,
+ "invoice": 67,
+ "date": "2013-12-10T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61536,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.291Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.154Z",
+ "amount": 0.1624,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.32,
+ "invoice": 67,
+ "date": "2013-12-10T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61537,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.332Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.162Z",
+ "amount": 0.308,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.4,
+ "invoice": 67,
+ "date": "2013-12-10T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61538,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.374Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.170Z",
+ "amount": 0.1568,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.24,
+ "invoice": 67,
+ "date": "2013-12-11T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61539,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.415Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.179Z",
+ "amount": 0.2856,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.08,
+ "invoice": 67,
+ "date": "2013-12-11T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61540,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.457Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.187Z",
+ "amount": 0.3136,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.48,
+ "invoice": 67,
+ "date": "2013-12-11T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61541,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.498Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.195Z",
+ "amount": 0.224,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 67,
+ "date": "2013-12-12T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61542,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.539Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.204Z",
+ "amount": 0.2688,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.84,
+ "invoice": 67,
+ "date": "2013-12-12T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61543,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.581Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.212Z",
+ "amount": 0.224,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.2,
+ "invoice": 67,
+ "date": "2013-12-12T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61544,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.622Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.220Z",
+ "amount": 0.28,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.0,
+ "invoice": 67,
+ "date": "2013-12-13T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61545,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.664Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.228Z",
+ "amount": 0.1792,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.56,
+ "invoice": 67,
+ "date": "2013-12-13T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61546,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.705Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.237Z",
+ "amount": 0.1344,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 1.92,
+ "invoice": 67,
+ "date": "2013-12-13T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61547,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.746Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.245Z",
+ "amount": 0.2072,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.96,
+ "invoice": 67,
+ "date": "2013-12-14T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61548,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.788Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.253Z",
+ "amount": 0.252,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.6,
+ "invoice": 67,
+ "date": "2013-12-14T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61549,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.837Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.262Z",
+ "amount": 0.2296,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 3.28,
+ "invoice": 67,
+ "date": "2013-12-14T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61550,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.879Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.270Z",
+ "amount": 0.1456,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.08,
+ "invoice": 67,
+ "date": "2013-12-15T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61551,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.920Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.278Z",
+ "amount": 0.3304,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 4.72,
+ "invoice": 67,
+ "date": "2013-12-15T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61552,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:19.962Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.286Z",
+ "amount": 0.2016,
+ "object": 121,
+ "account": 14,
+ "state": "invoiced",
+ "coreHours": 2.88,
+ "invoice": 67,
+ "date": "2013-12-15T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61553,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.295Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.295Z",
+ "amount": 0.2128,
+ "object": 121,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 3.04,
+ "invoice": null,
+ "date": "2013-12-16T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61554,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.303Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.303Z",
+ "amount": 0.3192,
+ "object": 121,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 4.56,
+ "invoice": null,
+ "date": "2013-12-16T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61555,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.311Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.311Z",
+ "amount": 0.1232,
+ "object": 121,
+ "account": 14,
+ "state": "pending",
+ "coreHours": 1.76,
+ "invoice": null,
+ "date": "2013-12-16T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
+ }
+},
+{
+ "pk": 61556,
+ "model": "core.charge",
+ "fields": {
+ "updated": "2013-12-18T21:29:16.320Z",
+ "slice": 15,
+ "created": "2013-12-18T21:29:16.320Z",
+ "amount": 0.1736,
+ "object": 121,
+ "account": 14,
"state": "pending",
"coreHours": 2.48,
"invoice": null,
- "date": "2013-12-11T06:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59754,
+ "pk": 61557,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.910Z",
+ "updated": "2013-12-18T21:29:16.328Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.910Z",
- "amount": 0.28,
- "object": 103,
- "account": 12,
+ "created": "2013-12-18T21:29:16.328Z",
+ "amount": 0.1792,
+ "object": 121,
+ "account": 14,
"state": "pending",
- "coreHours": 4.0,
+ "coreHours": 2.56,
"invoice": null,
- "date": "2013-12-11T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59755,
+ "pk": 61558,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.918Z",
+ "updated": "2013-12-18T21:29:16.336Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.918Z",
- "amount": 0.2464,
- "object": 103,
- "account": 12,
+ "created": "2013-12-18T21:29:16.336Z",
+ "amount": 0.112,
+ "object": 121,
+ "account": 14,
"state": "pending",
- "coreHours": 3.52,
+ "coreHours": 1.6,
"invoice": null,
- "date": "2013-12-11T22:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-17T21:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59756,
+ "pk": 61559,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.927Z",
+ "updated": "2013-12-18T21:29:16.344Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.927Z",
- "amount": 0.1288,
- "object": 103,
- "account": 12,
+ "created": "2013-12-18T21:29:16.344Z",
+ "amount": 0.196,
+ "object": 121,
+ "account": 14,
"state": "pending",
- "coreHours": 1.84,
+ "coreHours": 2.8,
"invoice": null,
- "date": "2013-12-12T06:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-18T05:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
- "pk": 59757,
+ "pk": 61560,
"model": "core.charge",
"fields": {
- "updated": "2013-12-13T22:19:54.935Z",
+ "updated": "2013-12-18T21:29:16.353Z",
"slice": 15,
- "created": "2013-12-13T22:19:54.935Z",
- "amount": 0.168,
- "object": 103,
- "account": 12,
- "state": "pending",
- "coreHours": 2.4,
- "invoice": null,
- "date": "2013-12-12T14:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59758,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:54.943Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.943Z",
- "amount": 0.1512,
- "object": 103,
- "account": 12,
- "state": "pending",
- "coreHours": 2.16,
- "invoice": null,
- "date": "2013-12-12T22:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59759,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:54.951Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.951Z",
+ "created": "2013-12-18T21:29:16.353Z",
"amount": 0.252,
- "object": 103,
- "account": 12,
+ "object": 121,
+ "account": 14,
"state": "pending",
"coreHours": 3.6,
"invoice": null,
- "date": "2013-12-13T06:00:00Z",
- "kind": "besteffort"
- }
-},
-{
- "pk": 59760,
- "model": "core.charge",
- "fields": {
- "updated": "2013-12-13T22:19:54.960Z",
- "slice": 15,
- "created": "2013-12-13T22:19:54.960Z",
- "amount": 0.336,
- "object": 103,
- "account": 12,
- "state": "pending",
- "coreHours": 4.8,
- "invoice": null,
- "date": "2013-12-13T14:00:00Z",
- "kind": "besteffort"
+ "date": "2013-12-18T13:00:00Z",
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -31469,9 +44291,11 @@
"fields": {
"updated": "2013-12-11T18:11:43.757Z",
"description": "",
+ "created": "2013-12-11T18:11:43.757Z",
"enabled": true,
+ "service_provider_id": null,
"name": "internet2",
- "created": "2013-12-11T18:11:43.757Z"
+ "enacted": null
}
},
{
@@ -31480,9 +44304,11 @@
"fields": {
"updated": "2013-12-11T18:13:38.024Z",
"description": "",
+ "created": "2013-12-11T18:11:52.622Z",
"enabled": true,
+ "service_provider_id": null,
"name": "Syndicate",
- "created": "2013-12-11T18:11:52.622Z"
+ "enacted": null
}
},
{
@@ -31490,12 +44316,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:17.472Z",
- "description": "Peer-to-peer content sharing for Syndicate distributed filesystem",
+ "name": "Syndicate",
"created": "2013-12-11T23:57:17.472Z",
+ "content_provider_id": null,
"serviceProvider": 2,
+ "description": "Peer-to-peer content sharing for Syndicate distributed filesystem",
"enabled": true,
"users": [],
- "name": "Syndicate"
+ "enacted": null
}
},
{
@@ -31503,12 +44331,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.586Z",
- "description": "Content Provider for Georgia Tech",
+ "name": "Georgia Tech",
"created": "2013-12-11T23:57:20.586Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Content Provider for Georgia Tech",
"enabled": true,
"users": [],
- "name": "Georgia Tech"
+ "enacted": null
}
},
{
@@ -31516,12 +44346,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.611Z",
- "description": "Content Provider for Stanford University",
+ "name": "Stanford University",
"created": "2013-12-11T23:57:20.611Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Content Provider for Stanford University",
"enabled": true,
"users": [],
- "name": "Stanford University"
+ "enacted": null
}
},
{
@@ -31529,12 +44361,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.636Z",
- "description": "Content Provider for University of Washington",
+ "name": "University of Washington",
"created": "2013-12-11T23:57:20.636Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Content Provider for University of Washington",
"enabled": true,
"users": [],
- "name": "University of Washington"
+ "enacted": null
}
},
{
@@ -31542,12 +44376,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.660Z",
- "description": "Content Provider for Max Planck Institute",
+ "name": "Max Planck Institute",
"created": "2013-12-11T23:57:20.660Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Content Provider for Max Planck Institute",
"enabled": true,
"users": [],
- "name": "Max Planck Institute"
+ "enacted": null
}
},
{
@@ -31555,12 +44391,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.685Z",
- "description": "Content Provider for Princeton University",
+ "name": "Princeton University",
"created": "2013-12-11T23:57:20.685Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Content Provider for Princeton University",
"enabled": true,
"users": [],
- "name": "Princeton University"
+ "enacted": null
}
},
{
@@ -31568,12 +44406,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.710Z",
- "description": "Open Networking Lab",
+ "name": "ON.LAB",
"created": "2013-12-11T23:57:20.710Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Open Networking Lab",
"enabled": true,
"users": [],
- "name": "ON.LAB"
+ "enacted": null
}
},
{
@@ -31581,14 +44421,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.496Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.496Z",
"url": "node70.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31596,14 +44438,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.503Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.503Z",
"url": "node69.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31611,14 +44455,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.512Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.512Z",
"url": "node68.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31626,14 +44472,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.520Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.520Z",
"url": "node67.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31641,14 +44489,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.528Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.528Z",
"url": "node66.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31656,14 +44506,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.537Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.537Z",
"url": "node65.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31671,14 +44523,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.545Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.545Z",
"url": "node64.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31686,14 +44540,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.553Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.553Z",
"url": "node63.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31701,14 +44557,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.561Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.561Z",
"url": "node62.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31716,14 +44574,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.570Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.570Z",
"url": "node61.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31731,14 +44591,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.578Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.578Z",
"url": "node60.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31746,14 +44608,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.586Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.586Z",
"url": "node59.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31761,14 +44625,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.595Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.595Z",
"url": "node58.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31776,14 +44642,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.603Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.603Z",
"url": "node57.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31791,14 +44659,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.611Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.611Z",
"url": "node56.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31806,14 +44676,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.619Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.619Z",
"url": "node55.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31821,14 +44693,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.628Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.628Z",
"url": "node54.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31836,14 +44710,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.636Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.636Z",
"url": "node53.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31851,14 +44727,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.644Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.644Z",
"url": "node52.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31866,14 +44744,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.653Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.653Z",
"url": "node51.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31881,14 +44761,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.661Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.661Z",
"url": "node50.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31896,14 +44778,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.669Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.669Z",
"url": "node49.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31911,14 +44795,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.677Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.677Z",
"url": "node48.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31926,14 +44812,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.686Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.686Z",
"url": "node47.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31941,14 +44829,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.694Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.694Z",
"url": "node46.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31956,14 +44846,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.702Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.702Z",
"url": "node45.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31971,14 +44863,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.711Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.711Z",
"url": "node44.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -31986,14 +44880,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.719Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.719Z",
"url": "node43.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32001,14 +44897,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.727Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.727Z",
"url": "node42.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32016,14 +44914,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.735Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.735Z",
"url": "node41.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32031,14 +44931,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.744Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.744Z",
"url": "node40.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32046,14 +44948,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.752Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.752Z",
"url": "node39.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32061,14 +44965,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.760Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.760Z",
"url": "node38.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32076,14 +44982,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.768Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.768Z",
"url": "node37.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32091,14 +44999,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.777Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.777Z",
"url": "node36.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32106,14 +45016,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.785Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.785Z",
"url": "node35.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32121,14 +45033,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.793Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.793Z",
"url": "node34.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32136,14 +45050,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.802Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.802Z",
"url": "node33.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32151,14 +45067,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.810Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.810Z",
"url": "node32.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32166,14 +45084,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.818Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.818Z",
"url": "node31.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32181,14 +45101,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.826Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.826Z",
"url": "node30.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32196,14 +45118,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.835Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.835Z",
"url": "node29.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32211,14 +45135,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.843Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.843Z",
"url": "node28.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32226,14 +45152,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.851Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.851Z",
"url": "node27.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32241,14 +45169,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.860Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.860Z",
"url": "node26.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32256,14 +45186,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.868Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.868Z",
"url": "node25.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32271,14 +45203,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.876Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.876Z",
"url": "node24.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32286,14 +45220,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.884Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.884Z",
"url": "node23.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32301,14 +45237,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.893Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.893Z",
"url": "node22.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32316,14 +45254,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.901Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.901Z",
"url": "node21.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32331,14 +45271,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.909Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.909Z",
"url": "node20.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32346,14 +45288,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.918Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.918Z",
"url": "node19.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32361,14 +45305,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.926Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.926Z",
"url": "node18.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32376,14 +45322,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.934Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.934Z",
"url": "node17.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32391,14 +45339,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.942Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.942Z",
"url": "node16.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32406,14 +45356,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.951Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.951Z",
"url": "node15.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32421,14 +45373,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.959Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.959Z",
"url": "node14.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32436,14 +45390,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.967Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.967Z",
"url": "node13.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32451,14 +45407,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.975Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.975Z",
"url": "node12.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32466,14 +45424,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.984Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.984Z",
"url": "node11.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32481,14 +45441,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.992Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.992Z",
"url": "node10.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32496,14 +45458,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18Z",
"url": "node9.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32511,14 +45475,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.009Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.009Z",
"url": "node8.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32526,14 +45492,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.017Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.017Z",
"url": "node7.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32541,14 +45509,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.025Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.025Z",
"url": "node6.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32556,14 +45526,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.034Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.034Z",
"url": "node5.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32571,14 +45543,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.042Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.042Z",
"url": "node4.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32586,14 +45560,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.050Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.050Z",
"url": "node3.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32601,14 +45577,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.058Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.058Z",
"url": "node2.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32616,14 +45594,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.067Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.067Z",
"url": "node1.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32631,14 +45611,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.084Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.084Z",
"url": "node70.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32646,14 +45628,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.092Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.092Z",
"url": "node69.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32661,14 +45645,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.100Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.100Z",
"url": "node68.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32676,14 +45662,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.108Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.108Z",
"url": "node67.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32691,14 +45679,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.116Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.116Z",
"url": "node66.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32706,14 +45696,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.125Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.125Z",
"url": "node65.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32721,14 +45713,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.133Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.133Z",
"url": "node64.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32736,14 +45730,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.141Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.141Z",
"url": "node63.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32751,14 +45747,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.149Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.149Z",
"url": "node62.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32766,14 +45764,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.158Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.158Z",
"url": "node61.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32781,14 +45781,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.166Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.166Z",
"url": "node60.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32796,14 +45798,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.174Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.174Z",
"url": "node59.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32811,14 +45815,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.183Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.183Z",
"url": "node58.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32826,14 +45832,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.191Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.191Z",
"url": "node57.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32841,14 +45849,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.199Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.199Z",
"url": "node56.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32856,14 +45866,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.208Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.207Z",
"url": "node55.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32871,14 +45883,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.216Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.216Z",
"url": "node54.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32886,14 +45900,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.224Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.224Z",
"url": "node53.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32901,14 +45917,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.238Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.238Z",
"url": "node52.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32916,14 +45934,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.286Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.286Z",
"url": "node51.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32931,14 +45951,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.299Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.298Z",
"url": "node50.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32946,14 +45968,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.307Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.307Z",
"url": "node49.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32961,14 +45985,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.315Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.315Z",
"url": "node48.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32976,14 +46002,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.323Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.323Z",
"url": "node47.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -32991,14 +46019,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.332Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.332Z",
"url": "node46.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33006,14 +46036,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.340Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.340Z",
"url": "node45.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33021,14 +46053,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.348Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.348Z",
"url": "node44.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33036,14 +46070,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.357Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.356Z",
"url": "node43.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33051,14 +46087,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.365Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.365Z",
"url": "node42.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33066,14 +46104,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.373Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.373Z",
"url": "node41.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33081,14 +46121,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.381Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.381Z",
"url": "node40.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33096,14 +46138,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.390Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.390Z",
"url": "node39.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33111,14 +46155,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.398Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.398Z",
"url": "node38.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33126,14 +46172,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.406Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.406Z",
"url": "node37.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33141,14 +46189,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.414Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.414Z",
"url": "node36.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33156,14 +46206,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.423Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.423Z",
"url": "node35.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33171,14 +46223,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.431Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.431Z",
"url": "node34.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33186,14 +46240,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.439Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.439Z",
"url": "node33.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33201,14 +46257,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.448Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.448Z",
"url": "node32.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33216,14 +46274,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.456Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.456Z",
"url": "node31.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33231,14 +46291,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.464Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.464Z",
"url": "node30.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33246,14 +46308,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.472Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.472Z",
"url": "node29.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33261,14 +46325,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.481Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.481Z",
"url": "node28.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33276,14 +46342,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.489Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.489Z",
"url": "node27.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33291,14 +46359,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.497Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.497Z",
"url": "node26.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33306,14 +46376,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.506Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.505Z",
"url": "node25.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33321,14 +46393,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.514Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.514Z",
"url": "node24.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33336,14 +46410,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.522Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.522Z",
"url": "node23.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33351,14 +46427,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.530Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.530Z",
"url": "node22.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33366,14 +46444,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.539Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.539Z",
"url": "node21.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33381,14 +46461,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.547Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.547Z",
"url": "node20.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33396,14 +46478,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.555Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.555Z",
"url": "node19.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33411,14 +46495,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.564Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.563Z",
"url": "node18.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33426,14 +46512,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.572Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.572Z",
"url": "node17.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33441,14 +46529,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.580Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.580Z",
"url": "node16.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33456,14 +46546,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.588Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.588Z",
"url": "node15.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33471,14 +46563,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.597Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.597Z",
"url": "node14.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33486,14 +46580,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.605Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.605Z",
"url": "node13.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33501,14 +46597,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.613Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.613Z",
"url": "node12.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33516,14 +46614,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.622Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.622Z",
"url": "node11.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33531,14 +46631,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.630Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.630Z",
"url": "node10.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33546,14 +46648,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.638Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.638Z",
"url": "node9.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33561,14 +46665,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.646Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.646Z",
"url": "node8.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33576,14 +46682,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.655Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.655Z",
"url": "node7.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33591,14 +46699,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.663Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.663Z",
"url": "node6.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33606,14 +46716,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.671Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.671Z",
"url": "node5.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33621,14 +46733,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.680Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.680Z",
"url": "node4.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33636,14 +46750,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.688Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.688Z",
"url": "node3.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33651,14 +46767,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.696Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.696Z",
"url": "node2.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33666,14 +46784,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.704Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.704Z",
"url": "node1.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33681,14 +46801,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.722Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.722Z",
"url": "node70.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33696,14 +46818,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.729Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.729Z",
"url": "node69.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33711,14 +46835,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.738Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.737Z",
"url": "node68.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33726,14 +46852,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.746Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.746Z",
"url": "node67.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33741,14 +46869,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.754Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.754Z",
"url": "node66.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33756,14 +46886,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.762Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.762Z",
"url": "node65.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33771,14 +46903,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.771Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.771Z",
"url": "node64.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33786,14 +46920,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.779Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.779Z",
"url": "node63.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33801,14 +46937,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.787Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.787Z",
"url": "node62.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33816,14 +46954,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.795Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.795Z",
"url": "node61.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33831,14 +46971,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.804Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.804Z",
"url": "node60.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33846,14 +46988,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.812Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.812Z",
"url": "node59.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33861,14 +47005,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.820Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.820Z",
"url": "node58.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33876,14 +47022,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.829Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.829Z",
"url": "node57.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33891,14 +47039,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.837Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.837Z",
"url": "node56.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33906,14 +47056,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.845Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.845Z",
"url": "node55.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33921,14 +47073,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.853Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.853Z",
"url": "node54.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33936,14 +47090,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.862Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.862Z",
"url": "node53.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33951,14 +47107,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.870Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.870Z",
"url": "node52.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33966,14 +47124,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.878Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.878Z",
"url": "node51.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33981,14 +47141,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.887Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.887Z",
"url": "node50.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -33996,14 +47158,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.895Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.895Z",
"url": "node49.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34011,14 +47175,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.903Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.903Z",
"url": "node48.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34026,14 +47192,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.911Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.911Z",
"url": "node47.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34041,14 +47209,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.920Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.920Z",
"url": "node46.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34056,14 +47226,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.928Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.928Z",
"url": "node45.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34071,14 +47243,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.936Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.936Z",
"url": "node44.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34086,14 +47260,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.944Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.944Z",
"url": "node43.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34101,14 +47277,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.953Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.953Z",
"url": "node42.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34116,14 +47294,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.961Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.961Z",
"url": "node41.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34131,14 +47311,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.969Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.969Z",
"url": "node40.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34146,14 +47328,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.978Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.978Z",
"url": "node39.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34161,14 +47345,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.986Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.986Z",
"url": "node38.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34176,14 +47362,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.994Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.994Z",
"url": "node37.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34191,14 +47379,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.002Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.002Z",
"url": "node36.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34206,14 +47396,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.011Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.011Z",
"url": "node35.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34221,14 +47413,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.019Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.019Z",
"url": "node34.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34236,14 +47430,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.027Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.027Z",
"url": "node33.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34251,14 +47447,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.036Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.036Z",
"url": "node32.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34266,14 +47464,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.044Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.044Z",
"url": "node31.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34281,14 +47481,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.052Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.052Z",
"url": "node30.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34296,14 +47498,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.060Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.060Z",
"url": "node29.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34311,14 +47515,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.069Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.069Z",
"url": "node28.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34326,14 +47532,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.077Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.077Z",
"url": "node27.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34341,14 +47549,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.086Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.085Z",
"url": "node26.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34356,14 +47566,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.094Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.094Z",
"url": "node25.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34371,14 +47583,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.102Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.102Z",
"url": "node24.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34386,14 +47600,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.110Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.110Z",
"url": "node23.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34401,14 +47617,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.118Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.118Z",
"url": "node22.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34416,14 +47634,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.127Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.127Z",
"url": "node21.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34431,14 +47651,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.135Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.135Z",
"url": "node20.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34446,14 +47668,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.143Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.143Z",
"url": "node19.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34461,14 +47685,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.152Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.152Z",
"url": "node18.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34476,14 +47702,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.160Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.160Z",
"url": "node17.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34491,14 +47719,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.168Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.168Z",
"url": "node16.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34506,14 +47736,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.176Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.176Z",
"url": "node15.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34521,14 +47753,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.185Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.185Z",
"url": "node14.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34536,14 +47770,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.193Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.193Z",
"url": "node13.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34551,14 +47787,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.201Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.201Z",
"url": "node12.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34566,14 +47804,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.210Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.210Z",
"url": "node11.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34581,14 +47821,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.218Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.218Z",
"url": "node10.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34596,14 +47838,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.226Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.226Z",
"url": "node9.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34611,14 +47855,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.234Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.234Z",
"url": "node8.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34626,14 +47872,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.243Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.243Z",
"url": "node7.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34641,14 +47889,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.251Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.251Z",
"url": "node6.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34656,14 +47906,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.259Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.259Z",
"url": "node5.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34671,14 +47923,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.268Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.268Z",
"url": "node4.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34686,14 +47940,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.276Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.276Z",
"url": "node3.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34701,14 +47957,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.284Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.284Z",
"url": "node2.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34716,14 +47974,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.292Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.292Z",
"url": "node1.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34731,14 +47991,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.310Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.310Z",
"url": "node70.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34746,14 +48008,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.317Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.317Z",
"url": "node69.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34761,14 +48025,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.325Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.325Z",
"url": "node68.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34776,14 +48042,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.334Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.334Z",
"url": "node67.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34791,14 +48059,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.342Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.342Z",
"url": "node66.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34806,14 +48076,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.350Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.350Z",
"url": "node65.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34821,14 +48093,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.359Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.359Z",
"url": "node64.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34836,14 +48110,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.367Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.367Z",
"url": "node63.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34851,14 +48127,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.375Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.375Z",
"url": "node62.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34866,14 +48144,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.383Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.383Z",
"url": "node61.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34881,14 +48161,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.392Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.392Z",
"url": "node60.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34896,14 +48178,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.400Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.400Z",
"url": "node59.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34911,14 +48195,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.408Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.408Z",
"url": "node58.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34926,14 +48212,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.417Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.416Z",
"url": "node57.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34941,14 +48229,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.425Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.425Z",
"url": "node56.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34956,14 +48246,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.433Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.433Z",
"url": "node55.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34971,14 +48263,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.441Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.441Z",
"url": "node54.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -34986,14 +48280,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.450Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.450Z",
"url": "node53.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35001,14 +48297,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.458Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.458Z",
"url": "node52.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35016,14 +48314,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.466Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.466Z",
"url": "node51.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35031,14 +48331,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.475Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.475Z",
"url": "node50.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35046,14 +48348,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.483Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.483Z",
"url": "node49.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35061,14 +48365,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.491Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.491Z",
"url": "node48.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35076,14 +48382,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.499Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.499Z",
"url": "node47.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35091,14 +48399,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.508Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.508Z",
"url": "node46.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35106,14 +48416,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.516Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.516Z",
"url": "node45.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35121,14 +48433,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.524Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.524Z",
"url": "node44.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35136,14 +48450,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.533Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.532Z",
"url": "node43.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35151,14 +48467,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.541Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.541Z",
"url": "node42.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35166,14 +48484,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.549Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.549Z",
"url": "node41.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35181,14 +48501,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.557Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.557Z",
"url": "node40.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35196,14 +48518,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.566Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.566Z",
"url": "node39.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35211,14 +48535,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.574Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.574Z",
"url": "node38.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35226,14 +48552,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.582Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.582Z",
"url": "node37.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35241,14 +48569,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.591Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.590Z",
"url": "node36.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35256,14 +48586,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.599Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.599Z",
"url": "node35.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35271,14 +48603,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.607Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.607Z",
"url": "node34.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35286,14 +48620,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.615Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.615Z",
"url": "node33.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35301,14 +48637,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.624Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.624Z",
"url": "node32.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35316,14 +48654,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.632Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.632Z",
"url": "node31.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35331,14 +48671,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.640Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.640Z",
"url": "node30.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35346,14 +48688,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.649Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.648Z",
"url": "node29.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35361,14 +48705,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.657Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.657Z",
"url": "node28.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35376,14 +48722,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.665Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.665Z",
"url": "node27.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35391,14 +48739,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.673Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.673Z",
"url": "node26.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35406,14 +48756,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.682Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.682Z",
"url": "node25.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35421,14 +48773,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.690Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.690Z",
"url": "node24.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35436,14 +48790,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.698Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.698Z",
"url": "node23.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35451,14 +48807,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.706Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.706Z",
"url": "node22.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35466,14 +48824,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.715Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.715Z",
"url": "node21.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35481,14 +48841,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.723Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.723Z",
"url": "node20.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35496,14 +48858,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.731Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.731Z",
"url": "node19.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35511,14 +48875,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.740Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.740Z",
"url": "node18.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35526,14 +48892,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.748Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.748Z",
"url": "node17.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35541,14 +48909,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.756Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.756Z",
"url": "node16.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35556,14 +48926,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.764Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.764Z",
"url": "node15.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35571,14 +48943,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.773Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.773Z",
"url": "node14.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35586,14 +48960,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.781Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.781Z",
"url": "node13.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35601,14 +48977,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.789Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.789Z",
"url": "node12.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35616,14 +48994,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.798Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.798Z",
"url": "node11.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35631,14 +49011,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.806Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.806Z",
"url": "node10.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35646,14 +49028,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.814Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.814Z",
"url": "node9.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35661,14 +49045,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.822Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.822Z",
"url": "node8.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35676,14 +49062,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.831Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.831Z",
"url": "node7.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35691,14 +49079,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.839Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.839Z",
"url": "node6.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35706,14 +49096,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.847Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.847Z",
"url": "node5.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35721,14 +49113,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.856Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.855Z",
"url": "node4.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35736,14 +49130,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.864Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.864Z",
"url": "node3.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35751,14 +49147,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.872Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.872Z",
"url": "node2.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35766,14 +49164,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.880Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.880Z",
"url": "node1.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35781,14 +49181,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.898Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.898Z",
"url": "node70.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35796,14 +49198,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.905Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.905Z",
"url": "node69.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35811,14 +49215,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.913Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.913Z",
"url": "node68.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35826,14 +49232,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.922Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.922Z",
"url": "node67.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35841,14 +49249,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.930Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.930Z",
"url": "node66.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35856,14 +49266,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.938Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.938Z",
"url": "node65.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35871,14 +49283,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.947Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.947Z",
"url": "node64.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35886,14 +49300,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.955Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.955Z",
"url": "node63.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35901,14 +49317,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.963Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.963Z",
"url": "node62.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35916,14 +49334,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.971Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.971Z",
"url": "node61.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35931,14 +49351,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.980Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.980Z",
"url": "node60.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35946,14 +49368,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.988Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.988Z",
"url": "node59.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35961,14 +49385,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.996Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.996Z",
"url": "node58.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35976,14 +49402,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.005Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.005Z",
"url": "node57.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -35991,14 +49419,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.013Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.013Z",
"url": "node56.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36006,14 +49436,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.021Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.021Z",
"url": "node55.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36021,14 +49453,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.029Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.029Z",
"url": "node54.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36036,14 +49470,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.038Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.038Z",
"url": "node53.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36051,14 +49487,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.046Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.046Z",
"url": "node52.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36066,14 +49504,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.054Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.054Z",
"url": "node51.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36081,14 +49521,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.063Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.062Z",
"url": "node50.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36096,14 +49538,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.071Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.071Z",
"url": "node49.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36111,14 +49555,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.079Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.079Z",
"url": "node48.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36126,14 +49572,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.087Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.087Z",
"url": "node47.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36141,14 +49589,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.096Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.096Z",
"url": "node46.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36156,14 +49606,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.104Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.104Z",
"url": "node45.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36171,14 +49623,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.112Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.112Z",
"url": "node44.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36186,14 +49640,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.121Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.121Z",
"url": "node43.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36201,14 +49657,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.129Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.129Z",
"url": "node42.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36216,14 +49674,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.137Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.137Z",
"url": "node41.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36231,14 +49691,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.146Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.145Z",
"url": "node40.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36246,14 +49708,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.154Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.154Z",
"url": "node39.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36261,14 +49725,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.162Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.162Z",
"url": "node38.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36276,14 +49742,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.170Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.170Z",
"url": "node37.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36291,14 +49759,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.179Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.179Z",
"url": "node36.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36306,14 +49776,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.187Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.187Z",
"url": "node35.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36321,14 +49793,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.195Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.195Z",
"url": "node34.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36336,14 +49810,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.203Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.203Z",
"url": "node33.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36351,14 +49827,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.212Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.212Z",
"url": "node32.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36366,14 +49844,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.220Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.220Z",
"url": "node31.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36381,14 +49861,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.228Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.228Z",
"url": "node30.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36396,14 +49878,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.237Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.236Z",
"url": "node29.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36411,14 +49895,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.245Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.245Z",
"url": "node28.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36426,14 +49912,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.253Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.253Z",
"url": "node27.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36441,14 +49929,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.261Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.261Z",
"url": "node26.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36456,14 +49946,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.270Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.270Z",
"url": "node25.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36471,14 +49963,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.278Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.278Z",
"url": "node24.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36486,14 +49980,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.286Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.286Z",
"url": "node23.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36501,14 +49997,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.294Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.294Z",
"url": "node22.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36516,14 +50014,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.303Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.303Z",
"url": "node21.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36531,14 +50031,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.311Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.311Z",
"url": "node20.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36546,14 +50048,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.319Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.319Z",
"url": "node19.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36561,14 +50065,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.328Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.328Z",
"url": "node18.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36576,14 +50082,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.336Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.336Z",
"url": "node17.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36591,14 +50099,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.344Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.344Z",
"url": "node16.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36606,14 +50116,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.352Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.352Z",
"url": "node15.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36621,14 +50133,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.361Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.361Z",
"url": "node14.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36636,14 +50150,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.369Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.369Z",
"url": "node13.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36651,14 +50167,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.377Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.377Z",
"url": "node12.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36666,14 +50184,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.386Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.386Z",
"url": "node11.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36681,14 +50201,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.394Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.394Z",
"url": "node10.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36696,14 +50218,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.402Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.402Z",
"url": "node9.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36711,14 +50235,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.410Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.410Z",
"url": "node8.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36726,14 +50252,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.419Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.419Z",
"url": "node7.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36741,14 +50269,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.427Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.427Z",
"url": "node6.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36756,14 +50286,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.435Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.435Z",
"url": "node5.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36771,14 +50303,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.443Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.443Z",
"url": "node4.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36786,14 +50320,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.452Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.452Z",
"url": "node3.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36801,14 +50337,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.460Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.460Z",
"url": "node2.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36816,14 +50354,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.468Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.468Z",
"url": "node1.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36831,14 +50371,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.594Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "Content from www.cs.gatech.edu",
"created": "2013-12-11T23:57:20.594Z",
"url": "www.cs.gatech.edu",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 30
+ "authenticated": false,
+ "contentProvider": 30,
+ "enacted": null
}
},
{
@@ -36846,14 +50388,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.619Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "Content from www.cs.stanford.edu",
"created": "2013-12-11T23:57:20.619Z",
"url": "www.cs.stanford.edu",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 31
+ "authenticated": false,
+ "contentProvider": 31,
+ "enacted": null
}
},
{
@@ -36861,14 +50405,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.644Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "Content from www.cs.washington.edu",
"created": "2013-12-11T23:57:20.644Z",
"url": "www.cs.washington.edu",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 32
+ "authenticated": false,
+ "contentProvider": 32,
+ "enacted": null
}
},
{
@@ -36876,14 +50422,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.669Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "Content from www.mpg.de",
"created": "2013-12-11T23:57:20.669Z",
"url": "www.mpg.de",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 33
+ "authenticated": false,
+ "contentProvider": 33,
+ "enacted": null
}
},
{
@@ -36891,14 +50439,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.694Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "Content from www.cs.princeton.edu",
"created": "2013-12-11T23:57:20.694Z",
"url": "www.cs.princeton.edu",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 34
+ "authenticated": false,
+ "contentProvider": 34,
+ "enacted": null
}
},
{
@@ -36906,14 +50456,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.719Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "onlab virtual machine images",
"created": "2013-12-11T23:57:20.719Z",
"url": "images.onlab.org",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 35
+ "authenticated": false,
+ "contentProvider": 35,
+ "enacted": null
}
},
{
@@ -36924,9 +50476,11 @@
"description": "CDN Prefix for the Syndicate distributed filesystem",
"created": "2013-12-11T23:57:20.479Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "cdn.syndicatedrive.com",
"defaultOriginServer": 3876,
- "contentProvider": 29
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -36937,9 +50491,11 @@
"description": "CDN Prefix for Georgia Tech",
"created": "2013-12-11T23:57:20.602Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "gt.opencdn.internet2.edu",
"defaultOriginServer": 3877,
- "contentProvider": 30
+ "contentProvider": 30,
+ "enacted": null
}
},
{
@@ -36950,9 +50506,11 @@
"description": "CDN Prefix for Stanford University",
"created": "2013-12-11T23:57:20.627Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "stanford.opencdn.internet2.edu",
"defaultOriginServer": 3878,
- "contentProvider": 31
+ "contentProvider": 31,
+ "enacted": null
}
},
{
@@ -36963,9 +50521,11 @@
"description": "CDN Prefix for University of Washington",
"created": "2013-12-11T23:57:20.652Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "washington.opencdn.internet2.edu",
"defaultOriginServer": 3879,
- "contentProvider": 32
+ "contentProvider": 32,
+ "enacted": null
}
},
{
@@ -36976,9 +50536,11 @@
"description": "CDN Prefix for Max Planck Institute",
"created": "2013-12-11T23:57:20.677Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "mp.opencdn.internet2.edu",
"defaultOriginServer": 3880,
- "contentProvider": 33
+ "contentProvider": 33,
+ "enacted": null
}
},
{
@@ -36989,9 +50551,11 @@
"description": "CDN Prefix for Princeton University",
"created": "2013-12-11T23:57:20.702Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "princeton.opencdn.internet2.edu",
"defaultOriginServer": 3881,
- "contentProvider": 34
+ "contentProvider": 34,
+ "enacted": null
}
},
{
@@ -37002,20 +50566,170 @@
"description": "CDN Prefix for ON.LAB",
"created": "2013-12-11T23:57:20.727Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "onlab.vicci.org",
"defaultOriginServer": 3882,
- "contentProvider": 35
+ "contentProvider": 35,
+ "enacted": null
}
},
{
+ "pk": 5,
+ "model": "syndicate.syndicateservice",
+ "fields": {}
+},
+{
+ "pk": 1,
+ "model": "syndicate.volume",
+ "fields": {
+ "updated": "2013-12-11T23:57:20.727Z",
+ "description": "GenBank dataset snapshot from Nov. 2013",
+ "created": "2013-12-11T23:57:20.727Z",
+ "blocksize": 61440,
+ "default_gateway_caps": "3",
+ "private": false,
+ "name": "GenBank-11-2013",
+ "enacted": null,
+ "archive": true,
+ "owner_id": 1
+ }
+},
+{
+ "pk": 2,
+ "model": "syndicate.volume",
+ "fields": {
+ "updated": "2013-12-11T23:57:20.727Z",
+ "description": "Volume associated with princeton_syndicate",
+ "created": "2013-12-11T23:57:20.727Z",
+ "blocksize": 102400,
+ "default_gateway_caps": "31",
+ "private": true,
+ "name": "princeton_syndicate-Volume",
+ "enacted": null,
+ "archive": false,
+ "owner_id": 1
+ }
+},
+{
+ "pk": 3,
+ "model": "syndicate.volume",
+ "fields": {
+ "updated": "2014-05-23T18:52:00.782Z",
+ "description": "LSST dataset",
+ "created": "2014-05-23T18:52:00.782Z",
+ "blocksize": 61440,
+ "default_gateway_caps": "3",
+ "private": false,
+ "name": "LSST",
+ "enacted": null,
+ "archive": true,
+ "owner_id": 1
+ }
+},
+{
+ "pk": 4,
+ "model": "syndicate.volume",
+ "fields": {
+ "updated": "2014-05-23T18:52:53.617Z",
+ "description": "LHC dataset",
+ "created": "2014-05-23T18:52:53.617Z",
+ "blocksize": 61440,
+ "default_gateway_caps": "3",
+ "private": false,
+ "name": "LHC",
+ "enacted": null,
+ "archive": true,
+ "owner_id": 1
+ }
+},
+{
+ "pk": 5,
+ "model": "syndicate.volume",
+ "fields": {
+ "updated": "2014-05-23T18:53:20.349Z",
+ "description": "NOAA dataset",
+ "created": "2014-05-23T18:53:20.349Z",
+ "blocksize": 61440,
+ "default_gateway_caps": "3",
+ "private": false,
+ "name": "NOAA",
+ "enacted": null,
+ "archive": true,
+ "owner_id": 1
+ }
+},
+{
+ "pk": 6,
+ "model": "syndicate.volume",
+ "fields": {
+ "updated": "2014-05-23T18:53:56.495Z",
+ "description": "Measurement Lab dataset",
+ "created": "2014-05-23T18:53:56.495Z",
+ "blocksize": 61440,
+ "default_gateway_caps": "3",
+ "private": false,
+ "name": "Measurement Lab",
+ "enacted": null,
+ "archive": true,
+ "owner_id": 1
+ }
+},
+{
+ "pk": 7,
+ "model": "syndicate.volume",
+ "fields": {
+ "updated": "2014-05-23T18:54:35.691Z",
+ "description": "Common Crawl dataset",
+ "created": "2014-05-23T18:54:35.691Z",
+ "blocksize": 61440,
+ "default_gateway_caps": "3",
+ "private": false,
+ "name": "Common Crawl",
+ "enacted": null,
+ "archive": true,
+ "owner_id": 1
+ }
+},
+{
+ "pk": 1,
+ "model": "syndicate.volumeaccessright",
+ "fields": {
+ "updated": "2013-12-11T23:57:20.727Z",
+ "created": "2013-12-11T23:57:20.727Z",
+ "volume": 1,
+ "gateway_caps": "3",
+ "owner_id": 1,
+ "enacted": null
+ }
+},
+{
+ "pk": 11,
+ "model": "cassandra.cassandraservice",
+ "fields": {
+ "clusterSize": 1,
+ "replicationFactor": 1
+ }
+},
+{
+ "pk": 13,
+ "model": "nagios.nagiosservice",
+ "fields": {}
+},
+{
+ "pk": 12,
+ "model": "kairos.kairosdbservice",
+ "fields": {}
+},
+{
"pk": 1,
"model": "core.siteprivilege",
"fields": {
- "site": 24,
"updated": "2013-12-17T18:08:58.293Z",
+ "created": "2013-12-17T18:08:58.293Z",
+ "site": 24,
"role": 1,
"user": 15,
- "created": "2013-12-17T18:08:58.293Z"
+ "enacted": null
}
}
]
diff --git a/planetstack/core/fixtures/initial_data.json b/planetstack/core/fixtures/initial_data.json
index 6650547..60e2890 100644
--- a/planetstack/core/fixtures/initial_data.json
+++ b/planetstack/core/fixtures/initial_data.json
@@ -1,5 +1,82 @@
[
{
+ "pk": 1,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:developer",
+ "updated": "2014-05-19T22:11:11.408Z",
+ "enacted": null,
+ "name": "Developer",
+ "created": "2014-05-19T22:11:11.408Z"
+ }
+},
+{
+ "pk": 2,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:cdnoperations",
+ "updated": "2014-05-19T22:11:32.782Z",
+ "enacted": null,
+ "name": "CDN Operations",
+ "created": "2014-05-19T22:11:32.781Z"
+ }
+},
+{
+ "pk": 3,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:tenant",
+ "updated": "2014-05-19T22:11:46.731Z",
+ "enacted": null,
+ "name": "Tenant",
+ "created": "2014-05-19T22:11:46.731Z"
+ }
+},
+{
+ "pk": 4,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:hpc_historical",
+ "updated": "2014-05-19T22:11:59.956Z",
+ "enacted": null,
+ "name": "Historical",
+ "created": "2014-05-19T22:11:59.956Z"
+ }
+},
+{
+ "pk": 5,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:customize",
+ "updated": "2014-05-20T00:32:44.462Z",
+ "enacted": null,
+ "name": "Customize",
+ "created": "2014-05-20T00:32:44.462Z"
+ }
+},
+{
+ "pk": 6,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "template:slice_interactions",
+ "updated": "2014-05-20T00:33:32.454Z",
+ "enacted": null,
+ "name": "Slice Interactions",
+ "created": "2014-05-20T00:33:32.454Z"
+ }
+},
+{
+ "pk": 7,
+ "model": "core.dashboardview",
+ "fields": {
+ "url": "cdn_nodes",
+ "updated": "2014-05-20T00:33:52.101Z",
+ "enacted": null,
+ "name": "template:CDN Nodes",
+ "created": "2014-05-20T00:33:52.101Z"
+ }
+},
+{
"pk": 3,
"model": "core.service",
"fields": {
@@ -7,9 +84,10 @@
"description": "Used to help accelerate delivery of content through the CDN.",
"created": "2013-11-26T12:45:24.212Z",
"enabled": true,
+ "name": "HPC Service",
"versionNumber": "1.0",
"published": true,
- "name": "HPC Service"
+ "enacted": null
}
},
{
@@ -20,9 +98,10 @@
"description": "Service to help load balance and direct traffic flow to content within the CDN",
"created": "2013-11-26T12:45:59.003Z",
"enabled": true,
+ "name": "Request Router Service",
"versionNumber": "1.0",
"published": true,
- "name": "Request Router Service"
+ "enacted": null
}
},
{
@@ -33,9 +112,10 @@
"description": "Syndicate Shared Filesystem.",
"created": "2013-12-04T22:51:07.137Z",
"enabled": true,
+ "name": "Syndicate",
"versionNumber": "",
"published": true,
- "name": "Syndicate"
+ "enacted": null
}
},
{
@@ -46,9 +126,10 @@
"description": "A provisioning service for long-term experiments.",
"created": "2013-12-13T21:48:58.304Z",
"enabled": true,
+ "name": "Raven",
"versionNumber": "1.0",
"published": true,
- "name": "Raven"
+ "enacted": null
}
},
{
@@ -58,7 +139,6 @@
"updated": "2013-12-17T18:00:47.910Z",
"name": "Stanford",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.stanford.edu/",
@@ -66,10 +146,8 @@
"location": "37.4294,-122.17200000000003",
"latitude": null,
"is_public": true,
- "deployments": [
- 5
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -79,7 +157,6 @@
"updated": "2013-12-17T18:00:38.431Z",
"name": "Washington",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "https://www.washington.edu/",
@@ -87,10 +164,8 @@
"location": "47.6531,-122.31299999999999",
"latitude": null,
"is_public": true,
- "deployments": [
- 6
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -100,7 +175,6 @@
"updated": "2013-12-17T18:00:28.495Z",
"name": "Princeton",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://princeton.edu/",
@@ -108,10 +182,8 @@
"location": "40.3502,-74.6524",
"latitude": null,
"is_public": true,
- "deployments": [
- 7
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -121,7 +193,6 @@
"updated": "2013-12-17T18:00:18.964Z",
"name": "GeorgiaTech",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.gatech.edu/",
@@ -129,10 +200,8 @@
"location": "33.7772,-84.39760000000001",
"latitude": null,
"is_public": true,
- "deployments": [
- 8
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -142,7 +211,6 @@
"updated": "2013-12-17T18:00:07.704Z",
"name": "MaxPlanck",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.mpi-sws.mpg.de/",
@@ -150,10 +218,8 @@
"location": "49.14,6.588999999999942",
"latitude": null,
"is_public": true,
- "deployments": [
- 9
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -163,7 +229,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Atlanta",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -171,10 +236,8 @@
"location": "33.0075,-84.0038",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -184,7 +247,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Chicago",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -192,10 +254,8 @@
"location": "41.0085,-87.0065",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -205,7 +265,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Houston",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -213,10 +272,8 @@
"location": "29.0077,-95.0037",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -226,7 +283,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Kansas City",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -234,10 +290,8 @@
"location": "39.0012,-94.0063",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -247,7 +301,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Los Angeles",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -255,10 +308,8 @@
"location": "33.2505,-117.503",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -268,7 +319,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 New York",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -276,10 +326,8 @@
"location": "40.72,-73.99",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -289,7 +337,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Salt Lake City",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -297,10 +344,8 @@
"location": "40.7659,-111.844",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -310,7 +355,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Seattle",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -318,10 +362,8 @@
"location": "47.6531,-122.313",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -331,7 +373,6 @@
"updated": "2013-06-21T21:17:13.982Z",
"name": "I2 Washington DC",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu",
@@ -339,10 +380,8 @@
"location": "38.009,-77.0003",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -352,7 +391,6 @@
"updated": "2013-12-17T17:30:14.491Z",
"name": "ON.Lab",
"created": "2013-04-03T23:14:11.072Z",
- "tenant_id": "",
"enabled": true,
"longitude": null,
"site_url": "http://www.onlab.us/",
@@ -360,15 +398,8 @@
"location": "37.452955,-122.18176599999998",
"latitude": null,
"is_public": true,
- "deployments": [
- 5,
- 6,
- 7,
- 8,
- 9,
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -378,7 +409,6 @@
"updated": "2013-12-17T18:21:43.870Z",
"name": "I2 Singapore",
"created": "2013-12-17T17:08:49.669Z",
- "tenant_id": null,
"enabled": true,
"longitude": null,
"site_url": "http://www.internet2.edu/",
@@ -386,10 +416,8 @@
"location": "1.33544,103.88999999999999",
"latitude": null,
"is_public": true,
- "deployments": [
- 10
- ],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -399,7 +427,6 @@
"updated": "2013-12-17T18:08:01.373Z",
"name": "Arizona",
"created": "2013-12-17T18:07:14.190Z",
- "tenant_id": null,
"enabled": true,
"longitude": null,
"site_url": "http://www.cs.arizona.edu/",
@@ -407,8 +434,8 @@
"location": "32.2333,-110.94799999999998",
"latitude": null,
"is_public": true,
- "deployments": [],
- "abbreviated_name": ""
+ "abbreviated_name": "",
+ "enacted": null
}
},
{
@@ -416,15 +443,47 @@
"model": "core.siterole",
"fields": {
"updated": "2013-12-17T18:08:54.842Z",
+ "enacted": null,
"role": "pi",
"created": "2013-12-17T18:08:54.842Z"
}
},
{
+ "pk": 2,
+ "model": "core.siterole",
+ "fields": {
+ "updated": "2014-04-22T11:34:09.655Z",
+ "enacted": null,
+ "role": "admin",
+ "created": "2014-04-22T11:34:09.655Z"
+ }
+},
+{
+ "pk": 3,
+ "model": "core.siterole",
+ "fields": {
+ "updated": "2014-04-22T11:34:27.403Z",
+ "enacted": null,
+ "role": "tech",
+ "created": "2014-04-22T11:34:27.403Z"
+ }
+},
+{
+ "pk": 4,
+ "model": "core.siterole",
+ "fields": {
+ "updated": "2014-04-22T11:34:39.770Z",
+ "enacted": null,
+ "role": "billing",
+ "created": "2014-04-22T11:34:39.770Z"
+ }
+},
+{
"pk": 5,
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "US-Stanford",
"created": "2013-04-03T22:57:23.015Z"
}
@@ -434,6 +493,7 @@
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "US-Washington",
"created": "2013-04-03T22:57:23.015Z"
}
@@ -443,6 +503,7 @@
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "US-Princeton",
"created": "2013-04-03T22:57:23.015Z"
}
@@ -452,6 +513,7 @@
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "US-GeorgiaTech",
"created": "2013-04-03T22:57:23.015Z"
}
@@ -461,6 +523,7 @@
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "EU-MaxPlanck",
"created": "2013-04-03T22:57:23.015Z"
}
@@ -470,12 +533,265 @@
"model": "core.deployment",
"fields": {
"updated": "2013-04-03T22:57:23.015Z",
+ "enacted": null,
"name": "Internet2",
"created": "2013-04-03T22:57:23.015Z"
}
},
{
"pk": 1,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.453Z",
+ "created": "2014-05-07T23:52:01.453Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 2,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.455Z",
+ "created": "2014-05-07T23:52:01.455Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 3,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.456Z",
+ "created": "2014-05-07T23:52:01.456Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 4,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.457Z",
+ "created": "2014-05-07T23:52:01.456Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 5,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.457Z",
+ "created": "2014-05-07T23:52:01.457Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 6,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-07T23:52:01.458Z",
+ "created": "2014-05-07T23:52:01.458Z",
+ "tenant_id": null,
+ "site": 22,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 7,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:00:37.305Z",
+ "created": "2014-05-08T00:00:37.305Z",
+ "tenant_id": null,
+ "site": 23,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 8,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:01:18.181Z",
+ "created": "2014-05-08T00:01:18.181Z",
+ "tenant_id": null,
+ "site": 21,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 9,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:01:29.768Z",
+ "created": "2014-05-08T00:01:29.768Z",
+ "tenant_id": null,
+ "site": 20,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 10,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:01:52.173Z",
+ "created": "2014-05-08T00:01:52.173Z",
+ "tenant_id": null,
+ "site": 19,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 11,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:02:03.435Z",
+ "created": "2014-05-08T00:02:03.435Z",
+ "tenant_id": null,
+ "site": 18,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 12,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:02:16.038Z",
+ "created": "2014-05-08T00:02:16.038Z",
+ "tenant_id": null,
+ "site": 17,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 13,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:02:33.626Z",
+ "created": "2014-05-08T00:02:33.626Z",
+ "tenant_id": null,
+ "site": 16,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 14,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:02:46.549Z",
+ "created": "2014-05-08T00:02:46.549Z",
+ "tenant_id": null,
+ "site": 15,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 15,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:03:01.445Z",
+ "created": "2014-05-08T00:03:01.445Z",
+ "tenant_id": null,
+ "site": 14,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 16,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:03:18.238Z",
+ "created": "2014-05-08T00:03:18.238Z",
+ "tenant_id": null,
+ "site": 13,
+ "deployment": 10,
+ "enacted": null
+ }
+},
+{
+ "pk": 17,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:03:32.156Z",
+ "created": "2014-05-08T00:03:32.156Z",
+ "tenant_id": null,
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
+ }
+},
+{
+ "pk": 18,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:03:45.449Z",
+ "created": "2014-05-08T00:03:45.448Z",
+ "tenant_id": null,
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
+ }
+},
+{
+ "pk": 19,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:03:59.510Z",
+ "created": "2014-05-08T00:03:59.510Z",
+ "tenant_id": null,
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
+ }
+},
+{
+ "pk": 20,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:04:12.516Z",
+ "created": "2014-05-08T00:04:12.516Z",
+ "tenant_id": null,
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
+ }
+},
+{
+ "pk": 21,
+ "model": "core.sitedeployments",
+ "fields": {
+ "updated": "2014-05-08T00:04:25.576Z",
+ "created": "2014-05-08T00:04:25.576Z",
+ "tenant_id": null,
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
+ }
+},
+{
+ "pk": 1,
"model": "core.user",
"fields": {
"username": "padmin@vicci.org",
@@ -489,9 +805,8 @@
"is_active": true,
"site": null,
"phone": null,
- "kuser_id": null,
"is_staff": true,
- "last_login": "2013-12-18T18:31:06.731Z",
+ "last_login": "2014-04-22T11:32:36.356Z",
"timezone": "America/New_York",
"is_admin": true,
"password": "pbkdf2_sha256$10000$v5qKhIyhSQ2N$V8vh2mkqYdjQib6d2jBkpwV57eMBfhd/9eiXqaDLUWg=",
@@ -514,7 +829,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-12-14T03:21:24.872Z",
"timezone": "America/New_York",
@@ -539,7 +853,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-12-04T20:46:15.904Z",
"timezone": "America/New_York",
@@ -564,7 +877,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-12-18T21:47:08.698Z",
"timezone": "America/New_York",
@@ -589,7 +901,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-12-17T16:21:46.493Z",
"timezone": "America/New_York",
@@ -614,7 +925,6 @@
"is_active": true,
"site": 10,
"phone": "",
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-09-22T21:48:01.047Z",
"timezone": "America/New_York",
@@ -639,7 +949,6 @@
"is_active": true,
"site": 22,
"phone": "",
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-12-18T21:41:10.802Z",
"timezone": "America/New_York",
@@ -664,7 +973,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-12-19T01:32:31.049Z",
"timezone": "America/New_York",
@@ -689,7 +997,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-09-22T21:48:01.047Z",
"timezone": "America/New_York",
@@ -714,7 +1021,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-09-22T21:48:01.047Z",
"timezone": "America/New_York",
@@ -739,7 +1045,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-09-22T21:48:01.047Z",
"timezone": "America/New_York",
@@ -764,7 +1069,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-09-22T21:48:01.047Z",
"timezone": "America/New_York",
@@ -789,7 +1093,6 @@
"is_active": true,
"site": 22,
"phone": null,
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-09-22T21:48:01.047Z",
"timezone": "America/New_York",
@@ -814,7 +1117,6 @@
"is_active": true,
"site": 22,
"phone": "",
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-12-19T00:59:55.668Z",
"timezone": "America/New_York",
@@ -839,7 +1141,6 @@
"is_active": true,
"site": 24,
"phone": "",
- "kuser_id": null,
"is_staff": true,
"last_login": "2013-12-17T18:08:01.356Z",
"timezone": "America/New_York",
@@ -855,6 +1156,7 @@
"fields": {
"updated": "2013-05-10T23:30:52.931Z",
"membershipFee": 0,
+ "description": "Best Effort",
"membershipFeeMonths": 0,
"created": "2013-05-10T23:30:52.931Z",
"upgradeFrom": [
@@ -864,7 +1166,7 @@
"commitment": 0,
"name": "Best Effort",
"upgradeRequiresApproval": false,
- "description": "Best Effort"
+ "enacted": null
}
},
{
@@ -873,6 +1175,7 @@
"fields": {
"updated": "2013-05-10T23:35:51.694Z",
"membershipFee": 100,
+ "description": "Silver",
"membershipFeeMonths": 1,
"created": "2013-05-10T23:33:24.930Z",
"upgradeFrom": [
@@ -882,7 +1185,7 @@
"commitment": 365,
"name": "Silver",
"upgradeRequiresApproval": false,
- "description": "Silver"
+ "enacted": null
}
},
{
@@ -891,6 +1194,7 @@
"fields": {
"updated": "2013-05-10T23:34:01.320Z",
"membershipFee": 18000,
+ "description": "Gold",
"membershipFeeMonths": 12,
"created": "2013-05-10T23:34:01.320Z",
"upgradeFrom": [
@@ -900,217 +1204,187 @@
"commitment": 365,
"name": "Gold",
"upgradeRequiresApproval": false,
- "description": "Gold"
+ "enacted": null
}
},
{
"pk": 4,
"model": "core.slice",
"fields": {
- "router_id": null,
"updated": "2013-12-18T22:24:44.850Z",
"name": "HyperCache",
"service": 3,
"created": "2013-04-03T23:14:11.072Z",
- "network_id": null,
- "tenant_id": "",
+ "description": "HyperCache slice for HyperCache service.",
"serviceClass": 1,
"enabled": true,
"site": 22,
"omf_friendly": false,
- "subnet_id": null,
"slice_url": "",
"creator": 1,
- "description": "HyperCache slice for HyperCache service."
+ "enacted": null
}
},
{
"pk": 6,
"model": "core.slice",
"fields": {
- "router_id": null,
"updated": "2013-12-19T00:14:36.783Z",
"name": "Syndicate",
"service": 5,
"created": "2013-04-03T23:14:11.072Z",
- "network_id": null,
- "tenant_id": "",
+ "description": "",
"serviceClass": 1,
"enabled": true,
"site": 22,
"omf_friendly": false,
- "subnet_id": null,
"slice_url": "",
"creator": 1,
- "description": ""
+ "enacted": null
}
},
{
"pk": 8,
"model": "core.slice",
"fields": {
- "router_id": null,
"updated": "2013-12-19T00:15:11.298Z",
"name": "DnsRedir",
"service": 4,
"created": "2013-12-04T22:48:35.584Z",
- "network_id": null,
- "tenant_id": "",
+ "description": "DNS Redirection slice for RequestRouter service.",
"serviceClass": 2,
"enabled": true,
"site": 22,
"omf_friendly": false,
- "subnet_id": null,
"slice_url": "",
"creator": 8,
- "description": "DNS Redirection slice for RequestRouter service."
+ "enacted": null
}
},
{
"pk": 9,
"model": "core.slice",
"fields": {
- "router_id": null,
"updated": "2013-12-18T23:32:07.617Z",
"name": "DnsDemux",
"service": 4,
"created": "2013-12-04T22:49:23.051Z",
- "network_id": null,
- "tenant_id": "",
+ "description": "DNS Demultiplexing slice for RequestRouter service. ",
"serviceClass": 2,
"enabled": true,
"site": 22,
"omf_friendly": false,
- "subnet_id": null,
"slice_url": "",
"creator": 8,
- "description": "DNS Demultiplexing slice for RequestRouter service. "
+ "enacted": null
}
},
{
"pk": 10,
"model": "core.slice",
"fields": {
- "router_id": null,
"updated": "2013-12-18T22:06:00.330Z",
"name": "Infrastructure",
"service": null,
"created": "2013-12-09T14:13:15.392Z",
- "network_id": null,
- "tenant_id": "",
+ "description": "",
"serviceClass": 1,
"enabled": true,
"site": 22,
"omf_friendly": false,
- "subnet_id": null,
"slice_url": "",
"creator": null,
- "description": ""
+ "enacted": null
}
},
{
"pk": 11,
"model": "core.slice",
"fields": {
- "router_id": null,
"updated": "2013-12-17T18:09:29.065Z",
"name": "Stork",
"service": 8,
"created": "2013-12-13T21:49:59.476Z",
- "network_id": null,
- "tenant_id": "",
+ "description": "The Stork Package Management Service",
"serviceClass": 1,
"enabled": true,
"site": 24,
"omf_friendly": false,
- "subnet_id": null,
"slice_url": "",
"creator": null,
- "description": "The Stork Package Management Service"
+ "enacted": null
}
},
{
"pk": 12,
"model": "core.slice",
"fields": {
- "router_id": null,
"updated": "2013-12-17T18:09:20.587Z",
"name": "Owl",
"service": 8,
"created": "2013-12-13T21:52:15.590Z",
- "network_id": null,
- "tenant_id": "",
+ "description": "The Owl Data Collection service",
"serviceClass": 1,
"enabled": true,
"site": 24,
"omf_friendly": false,
- "subnet_id": null,
"slice_url": "",
"creator": null,
- "description": "The Owl Data Collection service"
+ "enacted": null
}
},
{
"pk": 13,
"model": "core.slice",
"fields": {
- "router_id": null,
"updated": "2013-12-18T23:34:55.351Z",
"name": "Hadoop",
"service": null,
"created": "2013-12-13T21:54:20.895Z",
- "network_id": null,
- "tenant_id": "",
+ "description": "Hadoop map-reduce service",
"serviceClass": 2,
"enabled": true,
"site": 22,
"omf_friendly": false,
- "subnet_id": null,
"slice_url": "",
"creator": null,
- "description": "Hadoop map-reduce service"
+ "enacted": null
}
},
{
"pk": 14,
"model": "core.slice",
"fields": {
- "router_id": null,
"updated": "2013-12-18T22:21:36.462Z",
"name": "test",
"service": null,
"created": "2013-12-13T21:56:57.299Z",
- "network_id": null,
- "tenant_id": "",
+ "description": "Test slice number one.",
"serviceClass": 1,
"enabled": true,
"site": 10,
"omf_friendly": false,
- "subnet_id": null,
"slice_url": "",
"creator": null,
- "description": "Test slice number one."
+ "enacted": null
}
},
{
"pk": 15,
"model": "core.slice",
"fields": {
- "router_id": null,
"updated": "2013-12-18T22:22:04.676Z",
"name": "test2",
"service": null,
"created": "2013-12-13T22:00:03.049Z",
- "network_id": null,
- "tenant_id": "",
+ "description": "test slice number two.",
"serviceClass": 1,
"enabled": true,
"site": 10,
"omf_friendly": false,
- "subnet_id": null,
"slice_url": "",
"creator": null,
- "description": "test slice number two."
+ "enacted": null
}
},
{
@@ -1118,6 +1392,7 @@
"model": "core.slicerole",
"fields": {
"updated": "2013-12-18T21:09:27.717Z",
+ "enacted": null,
"role": "admin",
"created": "2013-12-18T21:09:27.717Z"
}
@@ -1127,6 +1402,7 @@
"model": "core.slicerole",
"fields": {
"updated": "2013-12-18T21:09:35.074Z",
+ "enacted": null,
"role": "default",
"created": "2013-12-18T21:09:35.074Z"
}
@@ -1137,9 +1413,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.713Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.713Z",
"role": 1,
"user": 2,
- "created": "2013-12-18T21:21:37.713Z"
+ "enacted": null
}
},
{
@@ -1148,9 +1425,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.729Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.729Z",
"role": 1,
"user": 3,
- "created": "2013-12-18T21:21:37.729Z"
+ "enacted": null
}
},
{
@@ -1159,9 +1437,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.739Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.739Z",
"role": 1,
"user": 4,
- "created": "2013-12-18T21:21:37.739Z"
+ "enacted": null
}
},
{
@@ -1170,9 +1449,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.752Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.752Z",
"role": 1,
"user": 5,
- "created": "2013-12-18T21:21:37.752Z"
+ "enacted": null
}
},
{
@@ -1181,9 +1461,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.771Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.771Z",
"role": 1,
"user": 6,
- "created": "2013-12-18T21:21:37.771Z"
+ "enacted": null
}
},
{
@@ -1192,9 +1473,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.790Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.789Z",
"role": 1,
"user": 7,
- "created": "2013-12-18T21:21:37.789Z"
+ "enacted": null
}
},
{
@@ -1203,9 +1485,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.808Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.808Z",
"role": 1,
"user": 9,
- "created": "2013-12-18T21:21:37.808Z"
+ "enacted": null
}
},
{
@@ -1214,9 +1497,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.835Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.835Z",
"role": 1,
"user": 10,
- "created": "2013-12-18T21:21:37.835Z"
+ "enacted": null
}
},
{
@@ -1225,9 +1509,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.862Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.862Z",
"role": 1,
"user": 11,
- "created": "2013-12-18T21:21:37.862Z"
+ "enacted": null
}
},
{
@@ -1236,9 +1521,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.890Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.890Z",
"role": 1,
"user": 12,
- "created": "2013-12-18T21:21:37.890Z"
+ "enacted": null
}
},
{
@@ -1247,9 +1533,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.925Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.925Z",
"role": 1,
"user": 13,
- "created": "2013-12-18T21:21:37.925Z"
+ "enacted": null
}
},
{
@@ -1258,9 +1545,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.960Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.960Z",
"role": 1,
"user": 14,
- "created": "2013-12-18T21:21:37.960Z"
+ "enacted": null
}
},
{
@@ -1269,9 +1557,10 @@
"fields": {
"updated": "2013-12-18T21:21:37.996Z",
"slice": 4,
+ "created": "2013-12-18T21:21:37.996Z",
"role": 1,
"user": 15,
- "created": "2013-12-18T21:21:37.996Z"
+ "enacted": null
}
},
{
@@ -1280,9 +1569,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.038Z",
"slice": 4,
+ "created": "2013-12-18T21:21:38.038Z",
"role": 1,
"user": 1,
- "created": "2013-12-18T21:21:38.038Z"
+ "enacted": null
}
},
{
@@ -1291,9 +1581,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.092Z",
"slice": 4,
+ "created": "2013-12-18T21:21:38.091Z",
"role": 1,
"user": 8,
- "created": "2013-12-18T21:21:38.091Z"
+ "enacted": null
}
},
{
@@ -1302,9 +1593,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.103Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.103Z",
"role": 1,
"user": 2,
- "created": "2013-12-18T21:21:38.103Z"
+ "enacted": null
}
},
{
@@ -1313,9 +1605,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.111Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.111Z",
"role": 1,
"user": 3,
- "created": "2013-12-18T21:21:38.111Z"
+ "enacted": null
}
},
{
@@ -1324,9 +1617,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.122Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.122Z",
"role": 1,
"user": 4,
- "created": "2013-12-18T21:21:38.122Z"
+ "enacted": null
}
},
{
@@ -1335,9 +1629,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.141Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.141Z",
"role": 1,
"user": 5,
- "created": "2013-12-18T21:21:38.141Z"
+ "enacted": null
}
},
{
@@ -1346,9 +1641,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.160Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.160Z",
"role": 1,
"user": 6,
- "created": "2013-12-18T21:21:38.160Z"
+ "enacted": null
}
},
{
@@ -1357,9 +1653,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.179Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.179Z",
"role": 1,
"user": 7,
- "created": "2013-12-18T21:21:38.179Z"
+ "enacted": null
}
},
{
@@ -1368,9 +1665,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.206Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.206Z",
"role": 1,
"user": 9,
- "created": "2013-12-18T21:21:38.206Z"
+ "enacted": null
}
},
{
@@ -1379,9 +1677,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.233Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.233Z",
"role": 1,
"user": 10,
- "created": "2013-12-18T21:21:38.233Z"
+ "enacted": null
}
},
{
@@ -1390,9 +1689,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.260Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.260Z",
"role": 1,
"user": 11,
- "created": "2013-12-18T21:21:38.260Z"
+ "enacted": null
}
},
{
@@ -1401,9 +1701,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.287Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.287Z",
"role": 1,
"user": 12,
- "created": "2013-12-18T21:21:38.287Z"
+ "enacted": null
}
},
{
@@ -1412,9 +1713,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.322Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.322Z",
"role": 1,
"user": 13,
- "created": "2013-12-18T21:21:38.322Z"
+ "enacted": null
}
},
{
@@ -1423,9 +1725,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.358Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.358Z",
"role": 1,
"user": 14,
- "created": "2013-12-18T21:21:38.358Z"
+ "enacted": null
}
},
{
@@ -1434,9 +1737,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.393Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.393Z",
"role": 1,
"user": 15,
- "created": "2013-12-18T21:21:38.393Z"
+ "enacted": null
}
},
{
@@ -1445,9 +1749,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.428Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.428Z",
"role": 1,
"user": 1,
- "created": "2013-12-18T21:21:38.428Z"
+ "enacted": null
}
},
{
@@ -1456,9 +1761,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.472Z",
"slice": 6,
+ "created": "2013-12-18T21:21:38.472Z",
"role": 1,
"user": 8,
- "created": "2013-12-18T21:21:38.472Z"
+ "enacted": null
}
},
{
@@ -1467,9 +1773,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.484Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.484Z",
"role": 1,
"user": 2,
- "created": "2013-12-18T21:21:38.484Z"
+ "enacted": null
}
},
{
@@ -1478,9 +1785,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.492Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.492Z",
"role": 1,
"user": 3,
- "created": "2013-12-18T21:21:38.492Z"
+ "enacted": null
}
},
{
@@ -1489,9 +1797,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.503Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.503Z",
"role": 1,
"user": 4,
- "created": "2013-12-18T21:21:38.503Z"
+ "enacted": null
}
},
{
@@ -1500,9 +1809,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.522Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.522Z",
"role": 1,
"user": 5,
- "created": "2013-12-18T21:21:38.522Z"
+ "enacted": null
}
},
{
@@ -1511,9 +1821,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.540Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.540Z",
"role": 1,
"user": 6,
- "created": "2013-12-18T21:21:38.540Z"
+ "enacted": null
}
},
{
@@ -1522,9 +1833,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.559Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.559Z",
"role": 1,
"user": 7,
- "created": "2013-12-18T21:21:38.559Z"
+ "enacted": null
}
},
{
@@ -1533,9 +1845,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.578Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.578Z",
"role": 1,
"user": 9,
- "created": "2013-12-18T21:21:38.578Z"
+ "enacted": null
}
},
{
@@ -1544,9 +1857,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.605Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.605Z",
"role": 1,
"user": 10,
- "created": "2013-12-18T21:21:38.605Z"
+ "enacted": null
}
},
{
@@ -1555,9 +1869,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.632Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.632Z",
"role": 1,
"user": 11,
- "created": "2013-12-18T21:21:38.632Z"
+ "enacted": null
}
},
{
@@ -1566,9 +1881,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.660Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.660Z",
"role": 1,
"user": 12,
- "created": "2013-12-18T21:21:38.660Z"
+ "enacted": null
}
},
{
@@ -1577,9 +1893,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.695Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.695Z",
"role": 1,
"user": 13,
- "created": "2013-12-18T21:21:38.695Z"
+ "enacted": null
}
},
{
@@ -1588,9 +1905,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.731Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.731Z",
"role": 1,
"user": 14,
- "created": "2013-12-18T21:21:38.731Z"
+ "enacted": null
}
},
{
@@ -1599,9 +1917,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.766Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.766Z",
"role": 1,
"user": 15,
- "created": "2013-12-18T21:21:38.766Z"
+ "enacted": null
}
},
{
@@ -1610,9 +1929,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.801Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.801Z",
"role": 1,
"user": 1,
- "created": "2013-12-18T21:21:38.801Z"
+ "enacted": null
}
},
{
@@ -1621,9 +1941,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.845Z",
"slice": 8,
+ "created": "2013-12-18T21:21:38.845Z",
"role": 1,
"user": 8,
- "created": "2013-12-18T21:21:38.845Z"
+ "enacted": null
}
},
{
@@ -1632,9 +1953,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.857Z",
"slice": 9,
+ "created": "2013-12-18T21:21:38.857Z",
"role": 1,
"user": 2,
- "created": "2013-12-18T21:21:38.857Z"
+ "enacted": null
}
},
{
@@ -1643,9 +1965,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.865Z",
"slice": 9,
+ "created": "2013-12-18T21:21:38.864Z",
"role": 1,
"user": 3,
- "created": "2013-12-18T21:21:38.864Z"
+ "enacted": null
}
},
{
@@ -1654,9 +1977,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.875Z",
"slice": 9,
+ "created": "2013-12-18T21:21:38.875Z",
"role": 1,
"user": 4,
- "created": "2013-12-18T21:21:38.875Z"
+ "enacted": null
}
},
{
@@ -1665,9 +1989,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.894Z",
"slice": 9,
+ "created": "2013-12-18T21:21:38.894Z",
"role": 1,
"user": 5,
- "created": "2013-12-18T21:21:38.894Z"
+ "enacted": null
}
},
{
@@ -1676,9 +2001,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.913Z",
"slice": 9,
+ "created": "2013-12-18T21:21:38.913Z",
"role": 1,
"user": 6,
- "created": "2013-12-18T21:21:38.913Z"
+ "enacted": null
}
},
{
@@ -1687,9 +2013,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.932Z",
"slice": 9,
+ "created": "2013-12-18T21:21:38.932Z",
"role": 1,
"user": 7,
- "created": "2013-12-18T21:21:38.932Z"
+ "enacted": null
}
},
{
@@ -1698,9 +2025,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.951Z",
"slice": 9,
+ "created": "2013-12-18T21:21:38.951Z",
"role": 1,
"user": 9,
- "created": "2013-12-18T21:21:38.951Z"
+ "enacted": null
}
},
{
@@ -1709,9 +2037,10 @@
"fields": {
"updated": "2013-12-18T21:21:38.978Z",
"slice": 9,
+ "created": "2013-12-18T21:21:38.978Z",
"role": 1,
"user": 10,
- "created": "2013-12-18T21:21:38.978Z"
+ "enacted": null
}
},
{
@@ -1720,9 +2049,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.005Z",
"slice": 9,
+ "created": "2013-12-18T21:21:39.005Z",
"role": 1,
"user": 11,
- "created": "2013-12-18T21:21:39.005Z"
+ "enacted": null
}
},
{
@@ -1731,9 +2061,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.032Z",
"slice": 9,
+ "created": "2013-12-18T21:21:39.032Z",
"role": 1,
"user": 12,
- "created": "2013-12-18T21:21:39.032Z"
+ "enacted": null
}
},
{
@@ -1742,9 +2073,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.068Z",
"slice": 9,
+ "created": "2013-12-18T21:21:39.067Z",
"role": 1,
"user": 13,
- "created": "2013-12-18T21:21:39.067Z"
+ "enacted": null
}
},
{
@@ -1753,9 +2085,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.103Z",
"slice": 9,
+ "created": "2013-12-18T21:21:39.103Z",
"role": 1,
"user": 14,
- "created": "2013-12-18T21:21:39.103Z"
+ "enacted": null
}
},
{
@@ -1764,9 +2097,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.139Z",
"slice": 9,
+ "created": "2013-12-18T21:21:39.139Z",
"role": 1,
"user": 15,
- "created": "2013-12-18T21:21:39.139Z"
+ "enacted": null
}
},
{
@@ -1775,9 +2109,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.175Z",
"slice": 9,
+ "created": "2013-12-18T21:21:39.175Z",
"role": 1,
"user": 1,
- "created": "2013-12-18T21:21:39.175Z"
+ "enacted": null
}
},
{
@@ -1786,9 +2121,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.219Z",
"slice": 9,
+ "created": "2013-12-18T21:21:39.219Z",
"role": 1,
"user": 8,
- "created": "2013-12-18T21:21:39.219Z"
+ "enacted": null
}
},
{
@@ -1797,9 +2133,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.229Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.229Z",
"role": 1,
"user": 2,
- "created": "2013-12-18T21:21:39.229Z"
+ "enacted": null
}
},
{
@@ -1808,9 +2145,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.238Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.238Z",
"role": 1,
"user": 3,
- "created": "2013-12-18T21:21:39.238Z"
+ "enacted": null
}
},
{
@@ -1819,9 +2157,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.248Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.248Z",
"role": 1,
"user": 4,
- "created": "2013-12-18T21:21:39.248Z"
+ "enacted": null
}
},
{
@@ -1830,9 +2169,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.267Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.267Z",
"role": 1,
"user": 5,
- "created": "2013-12-18T21:21:39.267Z"
+ "enacted": null
}
},
{
@@ -1841,9 +2181,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.286Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.286Z",
"role": 1,
"user": 6,
- "created": "2013-12-18T21:21:39.286Z"
+ "enacted": null
}
},
{
@@ -1852,9 +2193,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.304Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.304Z",
"role": 1,
"user": 7,
- "created": "2013-12-18T21:21:39.304Z"
+ "enacted": null
}
},
{
@@ -1863,9 +2205,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.324Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.324Z",
"role": 1,
"user": 9,
- "created": "2013-12-18T21:21:39.324Z"
+ "enacted": null
}
},
{
@@ -1874,9 +2217,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.351Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.351Z",
"role": 1,
"user": 10,
- "created": "2013-12-18T21:21:39.351Z"
+ "enacted": null
}
},
{
@@ -1885,9 +2229,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.378Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.378Z",
"role": 1,
"user": 11,
- "created": "2013-12-18T21:21:39.378Z"
+ "enacted": null
}
},
{
@@ -1896,9 +2241,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.405Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.405Z",
"role": 1,
"user": 12,
- "created": "2013-12-18T21:21:39.405Z"
+ "enacted": null
}
},
{
@@ -1907,9 +2253,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.440Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.440Z",
"role": 1,
"user": 13,
- "created": "2013-12-18T21:21:39.440Z"
+ "enacted": null
}
},
{
@@ -1918,9 +2265,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.476Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.476Z",
"role": 1,
"user": 14,
- "created": "2013-12-18T21:21:39.476Z"
+ "enacted": null
}
},
{
@@ -1929,9 +2277,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.511Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.511Z",
"role": 1,
"user": 15,
- "created": "2013-12-18T21:21:39.511Z"
+ "enacted": null
}
},
{
@@ -1940,9 +2289,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.547Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.547Z",
"role": 1,
"user": 1,
- "created": "2013-12-18T21:21:39.547Z"
+ "enacted": null
}
},
{
@@ -1951,9 +2301,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.590Z",
"slice": 10,
+ "created": "2013-12-18T21:21:39.590Z",
"role": 1,
"user": 8,
- "created": "2013-12-18T21:21:39.590Z"
+ "enacted": null
}
},
{
@@ -1962,9 +2313,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.602Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.602Z",
"role": 1,
"user": 2,
- "created": "2013-12-18T21:21:39.602Z"
+ "enacted": null
}
},
{
@@ -1973,9 +2325,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.610Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.610Z",
"role": 1,
"user": 3,
- "created": "2013-12-18T21:21:39.610Z"
+ "enacted": null
}
},
{
@@ -1984,9 +2337,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.621Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.621Z",
"role": 1,
"user": 4,
- "created": "2013-12-18T21:21:39.621Z"
+ "enacted": null
}
},
{
@@ -1995,9 +2349,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.640Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.640Z",
"role": 1,
"user": 5,
- "created": "2013-12-18T21:21:39.640Z"
+ "enacted": null
}
},
{
@@ -2006,9 +2361,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.659Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.659Z",
"role": 1,
"user": 6,
- "created": "2013-12-18T21:21:39.659Z"
+ "enacted": null
}
},
{
@@ -2017,9 +2373,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.678Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.678Z",
"role": 1,
"user": 7,
- "created": "2013-12-18T21:21:39.678Z"
+ "enacted": null
}
},
{
@@ -2028,9 +2385,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.705Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.705Z",
"role": 1,
"user": 9,
- "created": "2013-12-18T21:21:39.705Z"
+ "enacted": null
}
},
{
@@ -2039,9 +2397,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.732Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.732Z",
"role": 1,
"user": 10,
- "created": "2013-12-18T21:21:39.732Z"
+ "enacted": null
}
},
{
@@ -2050,9 +2409,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.759Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.759Z",
"role": 1,
"user": 11,
- "created": "2013-12-18T21:21:39.759Z"
+ "enacted": null
}
},
{
@@ -2061,9 +2421,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.786Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.786Z",
"role": 1,
"user": 12,
- "created": "2013-12-18T21:21:39.786Z"
+ "enacted": null
}
},
{
@@ -2072,9 +2433,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.821Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.821Z",
"role": 1,
"user": 13,
- "created": "2013-12-18T21:21:39.821Z"
+ "enacted": null
}
},
{
@@ -2083,9 +2445,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.857Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.857Z",
"role": 1,
"user": 14,
- "created": "2013-12-18T21:21:39.857Z"
+ "enacted": null
}
},
{
@@ -2094,9 +2457,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.891Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.891Z",
"role": 1,
"user": 15,
- "created": "2013-12-18T21:21:39.891Z"
+ "enacted": null
}
},
{
@@ -2105,9 +2469,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.927Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.927Z",
"role": 1,
"user": 1,
- "created": "2013-12-18T21:21:39.927Z"
+ "enacted": null
}
},
{
@@ -2116,9 +2481,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.971Z",
"slice": 11,
+ "created": "2013-12-18T21:21:39.971Z",
"role": 1,
"user": 8,
- "created": "2013-12-18T21:21:39.971Z"
+ "enacted": null
}
},
{
@@ -2127,9 +2493,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.983Z",
"slice": 12,
+ "created": "2013-12-18T21:21:39.983Z",
"role": 1,
"user": 2,
- "created": "2013-12-18T21:21:39.983Z"
+ "enacted": null
}
},
{
@@ -2138,9 +2505,10 @@
"fields": {
"updated": "2013-12-18T21:21:39.991Z",
"slice": 12,
+ "created": "2013-12-18T21:21:39.991Z",
"role": 1,
"user": 3,
- "created": "2013-12-18T21:21:39.991Z"
+ "enacted": null
}
},
{
@@ -2149,9 +2517,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.002Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.002Z",
"role": 1,
"user": 4,
- "created": "2013-12-18T21:21:40.002Z"
+ "enacted": null
}
},
{
@@ -2160,9 +2529,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.020Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.020Z",
"role": 1,
"user": 5,
- "created": "2013-12-18T21:21:40.020Z"
+ "enacted": null
}
},
{
@@ -2171,9 +2541,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.039Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.039Z",
"role": 1,
"user": 6,
- "created": "2013-12-18T21:21:40.039Z"
+ "enacted": null
}
},
{
@@ -2182,9 +2553,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.058Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.058Z",
"role": 1,
"user": 7,
- "created": "2013-12-18T21:21:40.058Z"
+ "enacted": null
}
},
{
@@ -2193,9 +2565,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.077Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.077Z",
"role": 1,
"user": 9,
- "created": "2013-12-18T21:21:40.077Z"
+ "enacted": null
}
},
{
@@ -2204,9 +2577,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.104Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.104Z",
"role": 1,
"user": 10,
- "created": "2013-12-18T21:21:40.104Z"
+ "enacted": null
}
},
{
@@ -2215,9 +2589,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.131Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.131Z",
"role": 1,
"user": 11,
- "created": "2013-12-18T21:21:40.131Z"
+ "enacted": null
}
},
{
@@ -2226,9 +2601,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.159Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.159Z",
"role": 1,
"user": 12,
- "created": "2013-12-18T21:21:40.159Z"
+ "enacted": null
}
},
{
@@ -2237,9 +2613,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.194Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.194Z",
"role": 1,
"user": 13,
- "created": "2013-12-18T21:21:40.194Z"
+ "enacted": null
}
},
{
@@ -2248,9 +2625,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.230Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.230Z",
"role": 1,
"user": 14,
- "created": "2013-12-18T21:21:40.230Z"
+ "enacted": null
}
},
{
@@ -2259,9 +2637,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.265Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.265Z",
"role": 1,
"user": 15,
- "created": "2013-12-18T21:21:40.265Z"
+ "enacted": null
}
},
{
@@ -2270,9 +2649,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.300Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.300Z",
"role": 1,
"user": 1,
- "created": "2013-12-18T21:21:40.300Z"
+ "enacted": null
}
},
{
@@ -2281,9 +2661,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.344Z",
"slice": 12,
+ "created": "2013-12-18T21:21:40.344Z",
"role": 1,
"user": 8,
- "created": "2013-12-18T21:21:40.344Z"
+ "enacted": null
}
},
{
@@ -2292,9 +2673,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.356Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.355Z",
"role": 1,
"user": 2,
- "created": "2013-12-18T21:21:40.355Z"
+ "enacted": null
}
},
{
@@ -2303,9 +2685,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.364Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.364Z",
"role": 1,
"user": 3,
- "created": "2013-12-18T21:21:40.364Z"
+ "enacted": null
}
},
{
@@ -2314,9 +2697,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.374Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.374Z",
"role": 1,
"user": 4,
- "created": "2013-12-18T21:21:40.374Z"
+ "enacted": null
}
},
{
@@ -2325,9 +2709,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.393Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.393Z",
"role": 1,
"user": 5,
- "created": "2013-12-18T21:21:40.393Z"
+ "enacted": null
}
},
{
@@ -2336,9 +2721,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.412Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.412Z",
"role": 1,
"user": 6,
- "created": "2013-12-18T21:21:40.412Z"
+ "enacted": null
}
},
{
@@ -2347,9 +2733,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.431Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.431Z",
"role": 1,
"user": 7,
- "created": "2013-12-18T21:21:40.431Z"
+ "enacted": null
}
},
{
@@ -2358,9 +2745,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.450Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.450Z",
"role": 1,
"user": 9,
- "created": "2013-12-18T21:21:40.450Z"
+ "enacted": null
}
},
{
@@ -2369,9 +2757,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.477Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.477Z",
"role": 1,
"user": 10,
- "created": "2013-12-18T21:21:40.477Z"
+ "enacted": null
}
},
{
@@ -2380,9 +2769,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.504Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.504Z",
"role": 1,
"user": 11,
- "created": "2013-12-18T21:21:40.504Z"
+ "enacted": null
}
},
{
@@ -2391,9 +2781,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.531Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.531Z",
"role": 1,
"user": 12,
- "created": "2013-12-18T21:21:40.531Z"
+ "enacted": null
}
},
{
@@ -2402,9 +2793,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.566Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.566Z",
"role": 1,
"user": 13,
- "created": "2013-12-18T21:21:40.566Z"
+ "enacted": null
}
},
{
@@ -2413,9 +2805,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.602Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.602Z",
"role": 1,
"user": 14,
- "created": "2013-12-18T21:21:40.602Z"
+ "enacted": null
}
},
{
@@ -2424,9 +2817,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.637Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.637Z",
"role": 1,
"user": 15,
- "created": "2013-12-18T21:21:40.637Z"
+ "enacted": null
}
},
{
@@ -2435,9 +2829,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.673Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.673Z",
"role": 1,
"user": 1,
- "created": "2013-12-18T21:21:40.673Z"
+ "enacted": null
}
},
{
@@ -2446,9 +2841,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.717Z",
"slice": 13,
+ "created": "2013-12-18T21:21:40.717Z",
"role": 1,
"user": 8,
- "created": "2013-12-18T21:21:40.717Z"
+ "enacted": null
}
},
{
@@ -2457,9 +2853,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.728Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.728Z",
"role": 1,
"user": 2,
- "created": "2013-12-18T21:21:40.728Z"
+ "enacted": null
}
},
{
@@ -2468,9 +2865,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.736Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.736Z",
"role": 1,
"user": 3,
- "created": "2013-12-18T21:21:40.736Z"
+ "enacted": null
}
},
{
@@ -2479,9 +2877,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.747Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.747Z",
"role": 1,
"user": 4,
- "created": "2013-12-18T21:21:40.747Z"
+ "enacted": null
}
},
{
@@ -2490,9 +2889,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.766Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.766Z",
"role": 1,
"user": 5,
- "created": "2013-12-18T21:21:40.766Z"
+ "enacted": null
}
},
{
@@ -2501,9 +2901,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.784Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.784Z",
"role": 1,
"user": 6,
- "created": "2013-12-18T21:21:40.784Z"
+ "enacted": null
}
},
{
@@ -2512,9 +2913,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.803Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.803Z",
"role": 1,
"user": 7,
- "created": "2013-12-18T21:21:40.803Z"
+ "enacted": null
}
},
{
@@ -2523,9 +2925,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.822Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.822Z",
"role": 1,
"user": 9,
- "created": "2013-12-18T21:21:40.822Z"
+ "enacted": null
}
},
{
@@ -2534,9 +2937,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.849Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.849Z",
"role": 1,
"user": 10,
- "created": "2013-12-18T21:21:40.849Z"
+ "enacted": null
}
},
{
@@ -2545,9 +2949,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.877Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.877Z",
"role": 1,
"user": 11,
- "created": "2013-12-18T21:21:40.877Z"
+ "enacted": null
}
},
{
@@ -2556,9 +2961,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.903Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.903Z",
"role": 1,
"user": 12,
- "created": "2013-12-18T21:21:40.903Z"
+ "enacted": null
}
},
{
@@ -2567,9 +2973,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.939Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.939Z",
"role": 1,
"user": 13,
- "created": "2013-12-18T21:21:40.939Z"
+ "enacted": null
}
},
{
@@ -2578,9 +2985,10 @@
"fields": {
"updated": "2013-12-18T21:21:40.975Z",
"slice": 14,
+ "created": "2013-12-18T21:21:40.975Z",
"role": 1,
"user": 14,
- "created": "2013-12-18T21:21:40.975Z"
+ "enacted": null
}
},
{
@@ -2589,9 +2997,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.010Z",
"slice": 14,
+ "created": "2013-12-18T21:21:41.010Z",
"role": 1,
"user": 15,
- "created": "2013-12-18T21:21:41.010Z"
+ "enacted": null
}
},
{
@@ -2600,9 +3009,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.045Z",
"slice": 14,
+ "created": "2013-12-18T21:21:41.045Z",
"role": 1,
"user": 1,
- "created": "2013-12-18T21:21:41.045Z"
+ "enacted": null
}
},
{
@@ -2611,9 +3021,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.089Z",
"slice": 14,
+ "created": "2013-12-18T21:21:41.089Z",
"role": 1,
"user": 8,
- "created": "2013-12-18T21:21:41.089Z"
+ "enacted": null
}
},
{
@@ -2622,9 +3033,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.101Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.101Z",
"role": 1,
"user": 2,
- "created": "2013-12-18T21:21:41.101Z"
+ "enacted": null
}
},
{
@@ -2633,9 +3045,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.109Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.109Z",
"role": 1,
"user": 3,
- "created": "2013-12-18T21:21:41.109Z"
+ "enacted": null
}
},
{
@@ -2644,9 +3057,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.119Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.119Z",
"role": 1,
"user": 4,
- "created": "2013-12-18T21:21:41.119Z"
+ "enacted": null
}
},
{
@@ -2655,9 +3069,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.138Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.138Z",
"role": 1,
"user": 5,
- "created": "2013-12-18T21:21:41.138Z"
+ "enacted": null
}
},
{
@@ -2666,9 +3081,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.157Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.157Z",
"role": 1,
"user": 6,
- "created": "2013-12-18T21:21:41.157Z"
+ "enacted": null
}
},
{
@@ -2677,9 +3093,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.176Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.176Z",
"role": 1,
"user": 7,
- "created": "2013-12-18T21:21:41.176Z"
+ "enacted": null
}
},
{
@@ -2688,9 +3105,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.204Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.203Z",
"role": 1,
"user": 9,
- "created": "2013-12-18T21:21:41.203Z"
+ "enacted": null
}
},
{
@@ -2699,9 +3117,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.231Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.231Z",
"role": 1,
"user": 10,
- "created": "2013-12-18T21:21:41.231Z"
+ "enacted": null
}
},
{
@@ -2710,9 +3129,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.258Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.258Z",
"role": 1,
"user": 11,
- "created": "2013-12-18T21:21:41.258Z"
+ "enacted": null
}
},
{
@@ -2721,9 +3141,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.285Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.285Z",
"role": 1,
"user": 12,
- "created": "2013-12-18T21:21:41.285Z"
+ "enacted": null
}
},
{
@@ -2732,9 +3153,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.320Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.320Z",
"role": 1,
"user": 13,
- "created": "2013-12-18T21:21:41.320Z"
+ "enacted": null
}
},
{
@@ -2743,9 +3165,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.356Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.356Z",
"role": 1,
"user": 14,
- "created": "2013-12-18T21:21:41.356Z"
+ "enacted": null
}
},
{
@@ -2754,9 +3177,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.391Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.391Z",
"role": 1,
"user": 15,
- "created": "2013-12-18T21:21:41.391Z"
+ "enacted": null
}
},
{
@@ -2765,9 +3189,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.426Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.426Z",
"role": 1,
"user": 1,
- "created": "2013-12-18T21:21:41.426Z"
+ "enacted": null
}
},
{
@@ -2776,9 +3201,10 @@
"fields": {
"updated": "2013-12-18T21:21:41.470Z",
"slice": 15,
+ "created": "2013-12-18T21:21:41.470Z",
"role": 1,
"user": 8,
- "created": "2013-12-18T21:21:41.470Z"
+ "enacted": null
}
},
{
@@ -2790,4099 +3216,4471 @@
"created": "2013-12-09T14:26:56.787Z",
"container_format": "bare",
"disk_format": "raw",
- "image_id": "d4bdbba2-6883-4232-863a-202fd4c56c21"
+ "enacted": null
}
},
{
"pk": 384,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node1.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 385,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node2.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 386,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node3.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 387,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node4.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 388,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node5.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 389,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node6.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 390,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node7.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 391,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node8.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 392,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node9.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 393,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node10.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 394,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node11.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 395,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node12.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 396,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node13.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 397,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node14.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 398,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node15.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 399,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node16.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 400,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node17.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 401,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node18.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 402,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node19.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 403,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node20.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 404,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node21.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 405,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node22.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 406,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node23.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 407,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node24.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 408,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node25.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 409,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node26.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 410,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node27.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 411,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node28.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 412,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node29.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 413,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node30.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 414,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node31.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 415,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node32.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 416,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node33.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 417,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node34.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 418,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node35.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 419,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node36.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 420,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node37.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 421,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node38.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 422,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node39.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 423,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node40.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 424,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node41.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 425,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node42.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 426,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node43.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 427,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node44.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 428,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node45.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 429,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node46.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 430,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node47.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 431,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node48.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 432,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node49.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 433,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node50.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 434,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node51.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 435,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node52.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 436,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node53.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 437,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node54.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 438,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node55.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 439,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node56.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 440,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node57.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 441,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node58.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 442,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node59.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 443,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node60.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 444,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node61.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 445,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node62.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 446,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node63.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 447,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node64.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 448,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node65.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 449,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node66.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 450,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node67.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 451,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node68.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 452,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node69.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 453,
"model": "core.node",
"fields": {
- "site": 8,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 5,
"name": "node70.stanford.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 8,
+ "deployment": 5,
+ "enacted": null
}
},
{
"pk": 454,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node1.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 455,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node2.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 456,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node3.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 457,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node4.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 458,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node5.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 459,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node6.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 460,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node7.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 461,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node8.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 462,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node9.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 463,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node10.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 464,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node11.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 465,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node12.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 466,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node13.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 467,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node14.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 468,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node15.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 469,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node16.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 470,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node17.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 471,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node18.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 472,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node19.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 473,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node20.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 474,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node21.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 475,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node22.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 476,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node23.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 477,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node24.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 478,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node25.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 479,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node26.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 480,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node27.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 481,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node28.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 482,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node29.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 483,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node30.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 484,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node31.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 485,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node32.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 486,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node33.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 487,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node34.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 488,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node35.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 489,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node36.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 490,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node37.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 491,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node38.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 492,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node39.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 493,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node40.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 494,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node41.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 495,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node42.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 496,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node43.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 497,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node44.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 498,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node45.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 499,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node46.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 500,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node47.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 501,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node48.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 502,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node49.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 503,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node50.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 504,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node51.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 505,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node52.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 506,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node53.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 507,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node54.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 508,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node55.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 509,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node56.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 510,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node57.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 511,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node58.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 512,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node59.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 513,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node60.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 514,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node61.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 515,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node62.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 516,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node63.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 517,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node64.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 518,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node65.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 519,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node66.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 520,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node67.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 521,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node68.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 522,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node69.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 523,
"model": "core.node",
"fields": {
- "site": 9,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 6,
"name": "node70.washington.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 9,
+ "deployment": 6,
+ "enacted": null
}
},
{
"pk": 524,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node1.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 525,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node2.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 526,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node3.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 527,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node4.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 528,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node5.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 529,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node6.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 530,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node7.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 531,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node8.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 532,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node9.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 533,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node10.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 534,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node11.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 535,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node12.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 536,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node13.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 537,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node14.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 538,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node15.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 539,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node16.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 540,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node17.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 541,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node18.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 542,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node19.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 543,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node20.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 544,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node21.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 545,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node22.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 546,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node23.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 547,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node24.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 548,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node25.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 549,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node26.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 550,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node27.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 551,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node28.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 552,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node29.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 553,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node30.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 554,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node31.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 555,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node32.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 556,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node33.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 557,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node34.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 558,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node35.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 559,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node36.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 560,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node37.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 561,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node38.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 562,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node39.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 563,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node40.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 564,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node41.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 565,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node42.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 566,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node43.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 567,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node44.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 568,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node45.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 569,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node46.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 570,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node47.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 571,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node48.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 572,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node49.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 573,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node50.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 574,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node51.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 575,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node52.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 576,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node53.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 577,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node54.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 578,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node55.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 579,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node56.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 580,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node57.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 581,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node58.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 582,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node59.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 583,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node60.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 584,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node61.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 585,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node62.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 586,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node63.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 587,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node64.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 588,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node65.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 589,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node66.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 590,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node67.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 591,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node68.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 592,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node69.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 593,
"model": "core.node",
"fields": {
- "site": 10,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 7,
"name": "node70.princeton.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 10,
+ "deployment": 7,
+ "enacted": null
}
},
{
"pk": 594,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node1.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 595,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node2.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 596,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node3.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 597,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node4.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 598,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node5.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 599,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node6.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 600,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node7.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 601,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node8.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 602,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node9.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 603,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node10.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 604,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node11.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 605,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node12.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 606,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node13.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 607,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node14.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 608,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node15.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 609,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node16.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 610,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node17.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 611,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node18.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 612,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node19.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 613,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node20.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 614,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node21.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 615,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node22.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 616,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node23.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 617,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node24.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 618,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node25.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 619,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node26.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 620,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node27.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 621,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node28.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 622,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node29.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 623,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node30.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 624,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node31.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 625,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node32.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 626,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node33.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 627,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node34.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 628,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node35.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 629,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node36.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 630,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node37.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 631,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node38.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 632,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node39.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 633,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node40.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 634,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node41.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 635,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node42.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 636,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node43.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 637,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node44.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 638,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node45.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 639,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node46.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 640,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node47.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 641,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node48.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 642,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node49.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 643,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node50.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 644,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node51.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 645,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node52.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 646,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node53.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 647,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node54.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 648,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node55.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 649,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node56.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 650,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node57.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 651,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node58.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 652,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node59.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 653,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node60.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 654,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node61.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 655,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node62.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 656,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node63.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 657,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node64.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 658,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node65.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 659,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node66.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 660,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node67.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 661,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node68.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 662,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node69.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 663,
"model": "core.node",
"fields": {
- "site": 11,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 8,
"name": "node70.gt.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 11,
+ "deployment": 8,
+ "enacted": null
}
},
{
"pk": 664,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node1.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 665,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node2.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 666,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node3.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 667,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node4.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 668,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node5.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 669,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node6.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 670,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node7.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 671,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node8.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 672,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node9.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 673,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node10.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 674,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node11.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 675,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node12.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 676,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node13.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 677,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node14.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 678,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node15.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 679,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node16.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 680,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node17.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 681,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node18.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 682,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node19.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 683,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node20.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 684,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node21.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 685,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node22.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 686,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node23.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 687,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node24.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 688,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node25.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 689,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node26.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 690,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node27.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 691,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node28.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 692,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node29.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 693,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node30.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 694,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node31.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 695,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node32.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 696,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node33.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 697,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node34.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 698,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node35.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 699,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node36.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 700,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node37.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 701,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node38.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 702,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node39.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 703,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node40.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 704,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node41.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 705,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node42.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 706,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node43.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 707,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node44.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 708,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node45.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 709,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node46.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 710,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node47.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 711,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node48.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 712,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node49.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 713,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node50.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 714,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node51.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 715,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node52.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 716,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node53.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 717,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node54.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 718,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node55.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 719,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node56.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 720,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node57.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 721,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node58.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 722,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node59.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 723,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node60.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 724,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node61.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 725,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node62.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 726,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node63.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 727,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node64.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 728,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node65.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 729,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node66.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 730,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node67.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 731,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node68.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 732,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node69.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 733,
"model": "core.node",
"fields": {
- "site": 12,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 9,
"name": "node70.mpisws.vicci.org",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 12,
+ "deployment": 9,
+ "enacted": null
}
},
{
"pk": 734,
"model": "core.node",
"fields": {
- "site": 13,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.atla.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 13,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 735,
"model": "core.node",
"fields": {
- "site": 13,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.atla.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 13,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 736,
"model": "core.node",
"fields": {
- "site": 14,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.chic.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 14,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 737,
"model": "core.node",
"fields": {
- "site": 14,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.chic.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 14,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 738,
"model": "core.node",
"fields": {
- "site": 15,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.hous.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 15,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 739,
"model": "core.node",
"fields": {
- "site": 15,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.hous.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 15,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 740,
"model": "core.node",
"fields": {
- "site": 16,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.kans.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 16,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 741,
"model": "core.node",
"fields": {
- "site": 16,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.kans.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 16,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 742,
"model": "core.node",
"fields": {
- "site": 17,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.losa.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 17,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 743,
"model": "core.node",
"fields": {
- "site": 17,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.losa.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 17,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 744,
"model": "core.node",
"fields": {
- "site": 18,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.newy.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 18,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 745,
"model": "core.node",
"fields": {
- "site": 18,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.newy.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 18,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 746,
"model": "core.node",
"fields": {
- "site": 19,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.salt.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 19,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 747,
"model": "core.node",
"fields": {
- "site": 19,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.salt.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 19,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 748,
"model": "core.node",
"fields": {
- "site": 20,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.seat.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 20,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 749,
"model": "core.node",
"fields": {
- "site": 20,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.seat.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 20,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 750,
"model": "core.node",
"fields": {
- "site": 21,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node1.wash.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 21,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 751,
"model": "core.node",
"fields": {
- "site": 21,
"updated": "2013-06-21T21:17:13.982Z",
- "deployment": 10,
"name": "node2.wash.internet2.vini-veritas.net",
- "created": "2013-04-03T23:14:11.072Z"
+ "created": "2013-04-03T23:14:11.072Z",
+ "site": 21,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 752,
"model": "core.node",
"fields": {
- "site": 23,
"updated": "2013-12-17T17:10:48.740Z",
- "deployment": 10,
"name": "opencloud0.sing.internet2.edu",
- "created": "2013-12-17T17:10:48.740Z"
+ "created": "2013-12-17T17:10:48.740Z",
+ "site": 23,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 753,
"model": "core.node",
"fields": {
- "site": 23,
"updated": "2013-12-17T17:10:48.742Z",
- "deployment": 10,
"name": "opencloud1.sing.internet2.edu",
- "created": "2013-12-17T17:10:48.741Z"
+ "created": "2013-12-17T17:10:48.741Z",
+ "site": 23,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 754,
"model": "core.node",
"fields": {
- "site": 23,
"updated": "2013-12-17T17:10:48.742Z",
- "deployment": 10,
"name": "opencloud2.sing.internet2.edu",
- "created": "2013-12-17T17:10:48.742Z"
+ "created": "2013-12-17T17:10:48.742Z",
+ "site": 23,
+ "deployment": 10,
+ "enacted": null
}
},
{
"pk": 755,
"model": "core.node",
"fields": {
- "site": 23,
"updated": "2013-12-17T17:10:48.743Z",
- "deployment": 10,
"name": "opencloud3.sing.internet2.edu",
- "created": "2013-12-17T17:10:48.743Z"
+ "created": "2013-12-17T17:10:48.743Z",
+ "site": 23,
+ "deployment": 10,
+ "enacted": null
}
},
{
@@ -6895,11 +7693,12 @@
"created": "2013-12-11T22:18:00.040Z",
"serviceClass": 1,
"maxUnitsDeployment": 0,
+ "calendarReservable": false,
"bucketInRate": 0,
"cost": 7,
- "calendarReservable": false,
+ "maxUnitsNode": 0,
"maxDuration": 0,
- "maxUnitsNode": 0
+ "enacted": null
}
},
{
@@ -6912,11 +7711,12 @@
"created": "2013-12-11T22:18:00.045Z",
"serviceClass": 2,
"maxUnitsDeployment": 0,
+ "calendarReservable": false,
"bucketInRate": 0,
"cost": 7,
- "calendarReservable": false,
+ "maxUnitsNode": 0,
"maxDuration": 0,
- "maxUnitsNode": 0
+ "enacted": null
}
},
{
@@ -6929,11 +7729,12 @@
"created": "2013-12-11T22:18:00.053Z",
"serviceClass": 3,
"maxUnitsDeployment": 0,
+ "calendarReservable": false,
"bucketInRate": 0,
"cost": 7,
- "calendarReservable": false,
+ "maxUnitsNode": 0,
"maxDuration": 0,
- "maxUnitsNode": 0
+ "enacted": null
}
},
{
@@ -6946,11 +7747,12 @@
"created": "2013-12-11T22:18:00.064Z",
"serviceClass": 3,
"maxUnitsDeployment": 210,
+ "calendarReservable": true,
"bucketInRate": 0,
"cost": 0,
- "calendarReservable": true,
+ "maxUnitsNode": 6,
"maxDuration": 8760,
- "maxUnitsNode": 6
+ "enacted": null
}
},
{
@@ -6963,11 +7765,12 @@
"created": "2013-12-11T22:18:00.072Z",
"serviceClass": 2,
"maxUnitsDeployment": 210,
+ "calendarReservable": true,
"bucketInRate": 10,
"cost": 7,
- "calendarReservable": true,
+ "maxUnitsNode": 6,
"maxDuration": 168,
- "maxUnitsNode": 6
+ "enacted": null
}
},
{
@@ -6985,7 +7788,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7003,7 +7807,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7021,7 +7826,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7039,7 +7845,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7057,7 +7864,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7075,7 +7883,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7093,7 +7902,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7111,7 +7921,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7129,7 +7940,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7147,7 +7959,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7165,7 +7978,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7183,7 +7997,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7201,7 +8016,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7219,7 +8035,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7237,7 +8054,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7255,7 +8073,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7273,7 +8092,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7291,7 +8111,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7309,7 +8130,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7327,7 +8149,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7345,7 +8168,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7363,7 +8187,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7381,7 +8206,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7399,7 +8225,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7417,7 +8244,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7435,7 +8263,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7453,7 +8282,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7471,7 +8301,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7489,7 +8320,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7507,7 +8339,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7525,7 +8358,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7543,7 +8377,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7561,7 +8396,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7579,7 +8415,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7597,7 +8434,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7615,7 +8453,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7633,7 +8472,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7651,7 +8491,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7669,7 +8510,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7687,7 +8529,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7705,7 +8548,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7723,7 +8567,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7741,7 +8586,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7759,7 +8605,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7777,7 +8624,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7795,7 +8643,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7813,7 +8662,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7831,7 +8681,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7849,7 +8700,8 @@
"image": 1,
"creator": 8,
"numberCores": 0,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7867,7 +8719,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7885,7 +8738,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7903,7 +8757,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7921,7 +8776,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7939,7 +8795,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7957,7 +8814,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7975,7 +8833,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -7993,7 +8852,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8011,7 +8871,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8029,7 +8890,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8047,7 +8909,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8065,7 +8928,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8083,7 +8947,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8101,7 +8966,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8119,7 +8985,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8137,7 +9004,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8155,7 +9023,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8173,7 +9042,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8191,7 +9061,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8209,7 +9080,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8227,7 +9099,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8245,7 +9118,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8263,7 +9137,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8281,7 +9156,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8299,7 +9175,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8317,7 +9194,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8335,7 +9213,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8353,7 +9232,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8371,7 +9251,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8389,7 +9270,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8407,7 +9289,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8425,7 +9308,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8443,7 +9327,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8461,7 +9346,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8479,7 +9365,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8497,7 +9384,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8515,7 +9403,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8533,7 +9422,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8551,7 +9441,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8569,7 +9460,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8587,7 +9479,8 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
@@ -8605,51 +9498,56 @@
"image": 1,
"creator": 8,
"numberCores": 1,
- "instance_id": null
+ "instance_id": null,
+ "enacted": null
}
},
{
"pk": 1,
"model": "core.reservation",
"fields": {
- "duration": 48,
"updated": "2013-12-18T23:32:41.619Z",
"slice": 9,
+ "created": "2013-12-18T23:32:07.665Z",
"startTime": "2013-12-20T20:31:42Z",
- "created": "2013-12-18T23:32:07.665Z"
+ "duration": 48,
+ "enacted": null
}
},
{
"pk": 2,
"model": "core.reservation",
"fields": {
- "duration": 48,
"updated": "2013-12-18T23:34:02.148Z",
"slice": 8,
+ "created": "2013-12-18T23:33:27.591Z",
"startTime": "2013-12-20T20:33:23Z",
- "created": "2013-12-18T23:33:27.591Z"
+ "duration": 48,
+ "enacted": null
}
},
{
"pk": 3,
"model": "core.reservation",
"fields": {
- "duration": 24,
"updated": "2013-12-18T23:35:45.483Z",
"slice": 13,
+ "created": "2013-12-18T23:34:55.406Z",
"startTime": "2013-12-20T20:34:32Z",
- "created": "2013-12-18T23:34:55.406Z"
+ "duration": 24,
+ "enacted": null
}
},
{
"pk": 4,
"model": "core.reservation",
"fields": {
- "duration": 24,
"updated": "2013-12-18T23:35:25.727Z",
"slice": 13,
+ "created": "2013-12-18T23:34:55.407Z",
"startTime": "2013-12-23T20:34:49Z",
- "created": "2013-12-18T23:34:55.407Z"
+ "duration": 24,
+ "enacted": null
}
},
{
@@ -8657,11 +9555,12 @@
"model": "core.reservedresource",
"fields": {
"updated": "2013-12-18T23:32:41.622Z",
- "reservationSet": 1,
- "created": "2013-12-18T23:32:41.622Z",
"resource": 8,
"quantity": 5,
- "sliver": 78
+ "created": "2013-12-18T23:32:41.622Z",
+ "reservationSet": 1,
+ "sliver": 78,
+ "enacted": null
}
},
{
@@ -8669,11 +9568,12 @@
"model": "core.reservedresource",
"fields": {
"updated": "2013-12-18T23:34:02.152Z",
- "reservationSet": 2,
- "created": "2013-12-18T23:34:02.152Z",
"resource": 8,
"quantity": 5,
- "sliver": 77
+ "created": "2013-12-18T23:34:02.152Z",
+ "reservationSet": 2,
+ "sliver": 77,
+ "enacted": null
}
},
{
@@ -8681,11 +9581,12 @@
"model": "core.reservedresource",
"fields": {
"updated": "2013-12-18T23:35:25.731Z",
- "reservationSet": 4,
- "created": "2013-12-18T23:35:25.731Z",
"resource": 8,
"quantity": 1,
- "sliver": 84
+ "created": "2013-12-18T23:35:25.731Z",
+ "reservationSet": 4,
+ "sliver": 84,
+ "enacted": null
}
},
{
@@ -8693,11 +9594,12 @@
"model": "core.reservedresource",
"fields": {
"updated": "2013-12-18T23:35:25.732Z",
- "reservationSet": 4,
- "created": "2013-12-18T23:35:25.732Z",
"resource": 8,
"quantity": 1,
- "sliver": 85
+ "created": "2013-12-18T23:35:25.732Z",
+ "reservationSet": 4,
+ "sliver": 85,
+ "enacted": null
}
},
{
@@ -8705,11 +9607,12 @@
"model": "core.reservedresource",
"fields": {
"updated": "2013-12-18T23:35:25.733Z",
- "reservationSet": 4,
- "created": "2013-12-18T23:35:25.733Z",
"resource": 8,
"quantity": 1,
- "sliver": 86
+ "created": "2013-12-18T23:35:25.733Z",
+ "reservationSet": 4,
+ "sliver": 86,
+ "enacted": null
}
},
{
@@ -8717,11 +9620,12 @@
"model": "core.reservedresource",
"fields": {
"updated": "2013-12-18T23:35:45.486Z",
- "reservationSet": 3,
- "created": "2013-12-18T23:35:45.486Z",
"resource": 8,
"quantity": 1,
- "sliver": 84
+ "created": "2013-12-18T23:35:45.486Z",
+ "reservationSet": 3,
+ "sliver": 84,
+ "enacted": null
}
},
{
@@ -8729,11 +9633,12 @@
"model": "core.reservedresource",
"fields": {
"updated": "2013-12-18T23:35:45.488Z",
- "reservationSet": 3,
- "created": "2013-12-18T23:35:45.487Z",
"resource": 8,
"quantity": 1,
- "sliver": 85
+ "created": "2013-12-18T23:35:45.487Z",
+ "reservationSet": 3,
+ "sliver": 85,
+ "enacted": null
}
},
{
@@ -8741,11 +9646,12 @@
"model": "core.reservedresource",
"fields": {
"updated": "2013-12-18T23:35:45.488Z",
- "reservationSet": 3,
- "created": "2013-12-18T23:35:45.488Z",
"resource": 8,
"quantity": 1,
- "sliver": 86
+ "created": "2013-12-18T23:35:45.488Z",
+ "reservationSet": 3,
+ "sliver": 86,
+ "enacted": null
}
},
{
@@ -8753,29 +9659,15 @@
"model": "core.networktemplate",
"fields": {
"guaranteedBandwidth": 0,
- "description": "Connect a sliver to the public network using dedicated public IPv4 address",
+ "description": "Connect a sliver to the public network using a dedicated public IPv4 address",
"created": "2013-12-09T14:15:16.899Z",
- "sharedNetworkName": "",
+ "sharedNetworkName": "ext-net",
"updated": "2013-12-09T14:15:16.899Z",
"visibility": "private",
+ "name": "Public dedicated IPv4",
"translation": "none",
"sharedNetworkId": "",
- "name": "dedicated-public-IPv4"
- }
-},
-{
- "pk": 2,
- "model": "core.networktemplate",
- "fields": {
- "guaranteedBandwidth": 0,
- "description": "For PlanetLab compatibility: connect to the public network by sharing the node's public IP address.",
- "created": "2013-12-09T14:16:12.358Z",
- "sharedNetworkName": "",
- "updated": "2013-12-09T14:16:12.358Z",
- "visibility": "public",
- "translation": "none",
- "sharedNetworkId": "",
- "name": "planetlab-legacy"
+ "enacted": null
}
},
{
@@ -8783,14 +9675,15 @@
"model": "core.networktemplate",
"fields": {
"guaranteedBandwidth": 0,
- "description": "Connect a sliver to the public network via NAT",
+ "description": "Connect a sliver to the public network via NAT, with port forwarding",
"created": "2013-12-09T14:17:29.551Z",
"sharedNetworkName": "nat-net",
"updated": "2013-12-09T14:17:29.551Z",
"visibility": "private",
+ "name": "Public shared IPv4",
"translation": "NAT",
- "sharedNetworkId": "51d641ba-9e1e-46f5-8069-bf4a929f851f",
- "name": "private-IPv4-plus-NAT"
+ "sharedNetworkId": "",
+ "enacted": null
}
},
{
@@ -8803,9 +9696,10 @@
"sharedNetworkName": "",
"updated": "2013-12-09T14:18:02.336Z",
"visibility": "private",
+ "name": "Private",
"translation": "none",
"sharedNetworkId": "",
- "name": "private-virtual"
+ "enacted": null
}
},
{
@@ -8825,7 +9719,8 @@
"network_id": "7cb4291d-f8d3-4797-83b0-8deefd85bdf5",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -8845,7 +9740,8 @@
"network_id": "810b4cb8-9d8e-4eee-becc-676785a07725",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -8865,7 +9761,8 @@
"network_id": "4b37f048-11de-4ddd-acaf-2fc5e8716f0e",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -8885,7 +9782,8 @@
"network_id": "684386d7-1286-4e58-acda-8ff45deac99e",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -8905,7 +9803,8 @@
"network_id": "fa090174-ec59-4b7a-812b-9206d911fb61",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -8925,7 +9824,8 @@
"network_id": "017a3914-5eaf-4bcb-8609-6d17ebcdf075",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -8945,7 +9845,8 @@
"network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -8965,7 +9866,8 @@
"network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -8985,7 +9887,8 @@
"network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9005,7 +9908,8 @@
"network_id": "ecdbaf66-b659-4d59-b0b7-1bf6d232ccba",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9025,7 +9929,8 @@
"network_id": "ae4d42e8-a97c-440d-9533-4bcbd62dfb00",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9045,7 +9950,8 @@
"network_id": "",
"template": 4,
"owner": 11,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9065,7 +9971,8 @@
"network_id": "",
"template": 4,
"owner": 12,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9085,7 +9992,8 @@
"network_id": "",
"template": 4,
"owner": 13,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9105,7 +10013,8 @@
"network_id": "",
"template": 1,
"owner": 14,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9125,7 +10034,8 @@
"network_id": "",
"template": 3,
"owner": 15,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9145,7 +10055,8 @@
"network_id": "",
"template": 4,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9165,7 +10076,8 @@
"network_id": "",
"template": 1,
"owner": 10,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9185,7 +10097,8 @@
"network_id": "",
"template": 4,
"owner": 9,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9205,7 +10118,8 @@
"network_id": "",
"template": 1,
"owner": 9,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9225,7 +10139,8 @@
"network_id": "",
"template": 4,
"owner": 8,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9245,7 +10160,8 @@
"network_id": "",
"template": 1,
"owner": 8,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9268,7 +10184,8 @@
"network_id": "",
"template": 4,
"owner": 4,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9288,7 +10205,8 @@
"network_id": "",
"template": 1,
"owner": 4,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9308,7 +10226,8 @@
"network_id": "",
"template": 4,
"owner": 6,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
@@ -9328,15 +10247,17 @@
"network_id": "",
"template": 1,
"owner": 6,
- "ports": ""
+ "ports": "",
+ "enacted": null
}
},
{
"pk": 1,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:51:09.711Z",
"slice": 11,
+ "updated": "2013-12-13T21:51:09.711Z",
+ "enacted": null,
"network": 12,
"created": "2013-12-13T21:51:09.711Z"
}
@@ -9345,8 +10266,9 @@
"pk": 2,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:53:15.909Z",
"slice": 12,
+ "updated": "2013-12-13T21:53:15.909Z",
+ "enacted": null,
"network": 13,
"created": "2013-12-13T21:53:15.909Z"
}
@@ -9355,8 +10277,9 @@
"pk": 3,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:53:15.914Z",
"slice": 12,
+ "updated": "2013-12-13T21:53:15.914Z",
+ "enacted": null,
"network": 12,
"created": "2013-12-13T21:53:15.914Z"
}
@@ -9365,8 +10288,9 @@
"pk": 4,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:56:04.235Z",
"slice": 13,
+ "updated": "2013-12-13T21:56:04.235Z",
+ "enacted": null,
"network": 14,
"created": "2013-12-13T21:56:04.235Z"
}
@@ -9375,8 +10299,9 @@
"pk": 5,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:56:04.241Z",
"slice": 13,
+ "updated": "2013-12-13T21:56:04.241Z",
+ "enacted": null,
"network": 12,
"created": "2013-12-13T21:56:04.241Z"
}
@@ -9385,8 +10310,9 @@
"pk": 6,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:56:04.246Z",
"slice": 13,
+ "updated": "2013-12-13T21:56:04.246Z",
+ "enacted": null,
"network": 13,
"created": "2013-12-13T21:56:04.246Z"
}
@@ -9395,8 +10321,9 @@
"pk": 7,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:57:56.826Z",
"slice": 14,
+ "updated": "2013-12-13T21:57:56.826Z",
+ "enacted": null,
"network": 15,
"created": "2013-12-13T21:57:56.826Z"
}
@@ -9405,8 +10332,9 @@
"pk": 8,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:57:56.831Z",
"slice": 14,
+ "updated": "2013-12-13T21:57:56.831Z",
+ "enacted": null,
"network": 13,
"created": "2013-12-13T21:57:56.831Z"
}
@@ -9415,8 +10343,9 @@
"pk": 9,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T21:57:56.836Z",
"slice": 14,
+ "updated": "2013-12-13T21:57:56.836Z",
+ "enacted": null,
"network": 12,
"created": "2013-12-13T21:57:56.836Z"
}
@@ -9425,8 +10354,9 @@
"pk": 10,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T22:01:14.038Z",
"slice": 15,
+ "updated": "2013-12-13T22:01:14.038Z",
+ "enacted": null,
"network": 16,
"created": "2013-12-13T22:01:14.038Z"
}
@@ -9435,8 +10365,9 @@
"pk": 11,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-13T22:01:14.043Z",
"slice": 15,
+ "updated": "2013-12-13T22:01:14.043Z",
+ "enacted": null,
"network": 14,
"created": "2013-12-13T22:01:14.043Z"
}
@@ -9445,8 +10376,9 @@
"pk": 12,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-18T22:06:00.381Z",
"slice": 10,
+ "updated": "2013-12-18T22:06:00.381Z",
+ "enacted": null,
"network": 17,
"created": "2013-12-18T22:06:00.381Z"
}
@@ -9455,8 +10387,9 @@
"pk": 13,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-18T22:06:00.386Z",
"slice": 10,
+ "updated": "2013-12-18T22:06:00.386Z",
+ "enacted": null,
"network": 18,
"created": "2013-12-18T22:06:00.386Z"
}
@@ -9465,8 +10398,9 @@
"pk": 14,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-18T22:13:42.177Z",
"slice": 9,
+ "updated": "2013-12-18T22:13:42.177Z",
+ "enacted": null,
"network": 19,
"created": "2013-12-18T22:13:42.177Z"
}
@@ -9475,8 +10409,9 @@
"pk": 15,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-18T22:13:42.183Z",
"slice": 9,
+ "updated": "2013-12-18T22:13:42.183Z",
+ "enacted": null,
"network": 20,
"created": "2013-12-18T22:13:42.183Z"
}
@@ -9485,8 +10420,9 @@
"pk": 16,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-18T22:16:41.007Z",
"slice": 8,
+ "updated": "2013-12-18T22:16:41.007Z",
+ "enacted": null,
"network": 21,
"created": "2013-12-18T22:16:41.007Z"
}
@@ -9495,8 +10431,9 @@
"pk": 17,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-18T22:16:41.013Z",
"slice": 8,
+ "updated": "2013-12-18T22:16:41.013Z",
+ "enacted": null,
"network": 22,
"created": "2013-12-18T22:16:41.013Z"
}
@@ -9505,8 +10442,9 @@
"pk": 18,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-18T22:24:44.997Z",
"slice": 4,
+ "updated": "2013-12-18T22:24:44.997Z",
+ "enacted": null,
"network": 23,
"created": "2013-12-18T22:24:44.997Z"
}
@@ -9515,8 +10453,9 @@
"pk": 19,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-18T22:24:45.003Z",
"slice": 4,
+ "updated": "2013-12-18T22:24:45.003Z",
+ "enacted": null,
"network": 24,
"created": "2013-12-18T22:24:45.003Z"
}
@@ -9525,8 +10464,9 @@
"pk": 20,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-18T22:27:16.953Z",
"slice": 6,
+ "updated": "2013-12-18T22:27:16.953Z",
+ "enacted": null,
"network": 25,
"created": "2013-12-18T22:27:16.953Z"
}
@@ -9535,8 +10475,9 @@
"pk": 21,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-18T22:27:16.959Z",
"slice": 6,
+ "updated": "2013-12-18T22:27:16.959Z",
+ "enacted": null,
"network": 26,
"created": "2013-12-18T22:27:16.959Z"
}
@@ -9545,8 +10486,9 @@
"pk": 22,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-19T00:14:36.949Z",
"slice": 6,
+ "updated": "2013-12-19T00:14:36.949Z",
+ "enacted": null,
"network": 23,
"created": "2013-12-19T00:14:36.949Z"
}
@@ -9555,8 +10497,9 @@
"pk": 23,
"model": "core.networkslice",
"fields": {
- "updated": "2013-12-19T00:15:11.362Z",
"slice": 8,
+ "updated": "2013-12-19T00:15:11.362Z",
+ "enacted": null,
"network": 23,
"created": "2013-12-19T00:15:11.362Z"
}
@@ -9565,8 +10508,9 @@
"pk": 1,
"model": "core.networkparametertype",
"fields": {
- "updated": "2013-12-09T14:43:25.664Z",
"description": "End of IPv4 address allocation pool",
+ "updated": "2013-12-09T14:43:25.664Z",
+ "enacted": null,
"name": "allocation-pool-end",
"created": "2013-12-09T14:43:25.664Z"
}
@@ -9575,8 +10519,9 @@
"pk": 2,
"model": "core.networkparametertype",
"fields": {
- "updated": "2013-12-09T14:43:45.564Z",
"description": "Start of IPv4 address allocation pool",
+ "updated": "2013-12-09T14:43:45.564Z",
+ "enacted": null,
"name": "allocation-pool-start",
"created": "2013-12-09T14:43:45.564Z"
}
@@ -9585,8 +10530,9 @@
"pk": 3,
"model": "core.networkparametertype",
"fields": {
- "updated": "2013-12-09T14:44:05.513Z",
"description": "CIDR block for network",
+ "updated": "2013-12-09T14:44:05.513Z",
+ "enacted": null,
"name": "cidr",
"created": "2013-12-09T14:44:05.513Z"
}
@@ -9596,6 +10542,7 @@
"model": "core.account",
"fields": {
"updated": "2013-12-18T21:29:00.470Z",
+ "enacted": null,
"site": 10,
"created": "2013-12-18T21:29:00.470Z"
}
@@ -9605,6 +10552,7 @@
"model": "core.account",
"fields": {
"updated": "2013-12-18T21:29:00.495Z",
+ "enacted": null,
"site": 22,
"created": "2013-12-18T21:29:00.495Z"
}
@@ -9614,6 +10562,7 @@
"model": "core.account",
"fields": {
"updated": "2013-12-18T21:29:00.502Z",
+ "enacted": null,
"site": 24,
"created": "2013-12-18T21:29:00.502Z"
}
@@ -9624,6 +10573,7 @@
"fields": {
"date": "2013-11-18T21:00:00Z",
"updated": "2013-12-18T21:29:16.421Z",
+ "enacted": null,
"account": 14,
"created": "2013-12-18T21:29:16.421Z"
}
@@ -9634,6 +10584,7 @@
"fields": {
"date": "2013-11-24T21:00:00Z",
"updated": "2013-12-18T21:29:16.434Z",
+ "enacted": null,
"account": 14,
"created": "2013-12-18T21:29:16.434Z"
}
@@ -9644,6 +10595,7 @@
"fields": {
"date": "2013-12-01T21:00:00Z",
"updated": "2013-12-18T21:29:17.229Z",
+ "enacted": null,
"account": 14,
"created": "2013-12-18T21:29:17.229Z"
}
@@ -9654,6 +10606,7 @@
"fields": {
"date": "2013-12-08T21:00:00Z",
"updated": "2013-12-18T21:29:18.213Z",
+ "enacted": null,
"account": 14,
"created": "2013-12-18T21:29:18.212Z"
}
@@ -9664,6 +10617,7 @@
"fields": {
"date": "2013-12-15T21:00:00Z",
"updated": "2013-12-18T21:29:19.091Z",
+ "enacted": null,
"account": 14,
"created": "2013-12-18T21:29:19.091Z"
}
@@ -9674,6 +10628,7 @@
"fields": {
"date": "2013-11-18T21:00:00Z",
"updated": "2013-12-18T21:29:20.175Z",
+ "enacted": null,
"account": 15,
"created": "2013-12-18T21:29:20.175Z"
}
@@ -9684,6 +10639,7 @@
"fields": {
"date": "2013-11-24T21:00:00Z",
"updated": "2013-12-18T21:29:20.193Z",
+ "enacted": null,
"account": 15,
"created": "2013-12-18T21:29:20.193Z"
}
@@ -9694,6 +10650,7 @@
"fields": {
"date": "2013-12-01T21:00:00Z",
"updated": "2013-12-18T21:29:22.239Z",
+ "enacted": null,
"account": 15,
"created": "2013-12-18T21:29:22.239Z"
}
@@ -9704,6 +10661,7 @@
"fields": {
"date": "2013-12-08T21:00:00Z",
"updated": "2013-12-18T21:29:24.550Z",
+ "enacted": null,
"account": 15,
"created": "2013-12-18T21:29:24.550Z"
}
@@ -9714,6 +10672,7 @@
"fields": {
"date": "2013-12-15T21:00:00Z",
"updated": "2013-12-18T21:29:26.820Z",
+ "enacted": null,
"account": 15,
"created": "2013-12-18T21:29:26.820Z"
}
@@ -9724,6 +10683,7 @@
"fields": {
"date": "2013-11-18T21:00:00Z",
"updated": "2013-12-18T21:29:29.206Z",
+ "enacted": null,
"account": 16,
"created": "2013-12-18T21:29:29.206Z"
}
@@ -9734,6 +10694,7 @@
"fields": {
"date": "2013-11-24T21:00:00Z",
"updated": "2013-12-18T21:29:29.222Z",
+ "enacted": null,
"account": 16,
"created": "2013-12-18T21:29:29.222Z"
}
@@ -9744,6 +10705,7 @@
"fields": {
"date": "2013-12-01T21:00:00Z",
"updated": "2013-12-18T21:29:29.538Z",
+ "enacted": null,
"account": 16,
"created": "2013-12-18T21:29:29.538Z"
}
@@ -9754,6 +10716,7 @@
"fields": {
"date": "2013-12-08T21:00:00Z",
"updated": "2013-12-18T21:29:29.894Z",
+ "enacted": null,
"account": 16,
"created": "2013-12-18T21:29:29.894Z"
}
@@ -9764,6 +10727,7 @@
"fields": {
"date": "2013-12-15T21:00:00Z",
"updated": "2013-12-18T21:29:30.251Z",
+ "enacted": null,
"account": 16,
"created": "2013-12-18T21:29:30.251Z"
}
@@ -9773,6 +10737,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:00.529Z",
+ "enacted": null,
"name": "node17.washington.vicci.org",
"created": "2013-12-18T21:29:00.529Z"
}
@@ -9782,6 +10747,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:01.289Z",
+ "enacted": null,
"name": "node16.washington.vicci.org",
"created": "2013-12-18T21:29:01.289Z"
}
@@ -9791,6 +10757,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:02.189Z",
+ "enacted": null,
"name": "node15.washington.vicci.org",
"created": "2013-12-18T21:29:02.189Z"
}
@@ -9800,6 +10767,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:03.178Z",
+ "enacted": null,
"name": "node14.washington.vicci.org",
"created": "2013-12-18T21:29:03.178Z"
}
@@ -9809,6 +10777,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:03.942Z",
+ "enacted": null,
"name": "node70.princeton.vicci.org",
"created": "2013-12-18T21:29:03.942Z"
}
@@ -9818,6 +10787,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:04.702Z",
+ "enacted": null,
"name": "node69.princeton.vicci.org",
"created": "2013-12-18T21:29:04.702Z"
}
@@ -9827,6 +10797,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:05.547Z",
+ "enacted": null,
"name": "node68.princeton.vicci.org",
"created": "2013-12-18T21:29:05.547Z"
}
@@ -9836,6 +10807,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:06.336Z",
+ "enacted": null,
"name": "node67.princeton.vicci.org",
"created": "2013-12-18T21:29:06.336Z"
}
@@ -9845,6 +10817,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:07.101Z",
+ "enacted": null,
"name": "node30.princeton.vicci.org",
"created": "2013-12-18T21:29:07.101Z"
}
@@ -9854,6 +10827,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:09.453Z",
+ "enacted": null,
"name": "node55.stanford.vicci.org",
"created": "2013-12-18T21:29:09.453Z"
}
@@ -9863,6 +10837,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:10.216Z",
+ "enacted": null,
"name": "node12.princeton.vicci.org",
"created": "2013-12-18T21:29:10.216Z"
}
@@ -9872,6 +10847,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:10.975Z",
+ "enacted": null,
"name": "node20.washington.vicci.org",
"created": "2013-12-18T21:29:10.975Z"
}
@@ -9881,6 +10857,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:11.729Z",
+ "enacted": null,
"name": "node1.stanford.vicci.org",
"created": "2013-12-18T21:29:11.729Z"
}
@@ -9890,6 +10867,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:12.494Z",
+ "enacted": null,
"name": "node33.princeton.vicci.org",
"created": "2013-12-18T21:29:12.494Z"
}
@@ -9899,6 +10877,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:13.329Z",
+ "enacted": null,
"name": "node15.princeton.vicci.org",
"created": "2013-12-18T21:29:13.329Z"
}
@@ -9908,6 +10887,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:14.083Z",
+ "enacted": null,
"name": "node23.princeton.vicci.org",
"created": "2013-12-18T21:29:14.083Z"
}
@@ -9917,6 +10897,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:14.847Z",
+ "enacted": null,
"name": "node10.princeton.vicci.org",
"created": "2013-12-18T21:29:14.847Z"
}
@@ -9926,6 +10907,7 @@
"model": "core.usableobject",
"fields": {
"updated": "2013-12-18T21:29:15.609Z",
+ "enacted": null,
"name": "node13.princeton.vicci.org",
"created": "2013-12-18T21:29:15.609Z"
}
@@ -9934,99 +10916,108 @@
"pk": 37,
"model": "core.payment",
"fields": {
- "date": "2013-12-03T02:00:00Z",
- "amount": 0.2968,
"updated": "2013-12-18T21:29:19.973Z",
+ "created": "2013-12-18T21:29:19.973Z",
"account": 14,
- "created": "2013-12-18T21:29:19.973Z"
+ "amount": 0.2968,
+ "date": "2013-12-03T02:00:00Z",
+ "enacted": null
}
},
{
"pk": 38,
"model": "core.payment",
"fields": {
- "date": "2013-12-09T02:00:00Z",
- "amount": 21.14,
"updated": "2013-12-18T21:29:19.979Z",
+ "created": "2013-12-18T21:29:19.979Z",
"account": 14,
- "created": "2013-12-18T21:29:19.979Z"
+ "amount": 21.14,
+ "date": "2013-12-09T02:00:00Z",
+ "enacted": null
}
},
{
"pk": 39,
"model": "core.payment",
"fields": {
- "date": "2013-12-16T02:00:00Z",
- "amount": 24.3768,
"updated": "2013-12-18T21:29:19.987Z",
+ "created": "2013-12-18T21:29:19.987Z",
"account": 14,
- "created": "2013-12-18T21:29:19.987Z"
+ "amount": 24.3768,
+ "date": "2013-12-16T02:00:00Z",
+ "enacted": null
}
},
{
"pk": 40,
"model": "core.payment",
"fields": {
- "date": "2013-12-03T02:00:00Z",
- "amount": 0.3024,
"updated": "2013-12-18T21:29:29.154Z",
+ "created": "2013-12-18T21:29:29.153Z",
"account": 15,
- "created": "2013-12-18T21:29:29.153Z"
+ "amount": 0.3024,
+ "date": "2013-12-03T02:00:00Z",
+ "enacted": null
}
},
{
"pk": 41,
"model": "core.payment",
"fields": {
- "date": "2013-12-09T02:00:00Z",
- "amount": 86.5536,
"updated": "2013-12-18T21:29:29.166Z",
+ "created": "2013-12-18T21:29:29.166Z",
"account": 15,
- "created": "2013-12-18T21:29:29.166Z"
+ "amount": 86.5536,
+ "date": "2013-12-09T02:00:00Z",
+ "enacted": null
}
},
{
"pk": 42,
"model": "core.payment",
"fields": {
- "date": "2013-12-16T02:00:00Z",
- "amount": 96.404,
"updated": "2013-12-18T21:29:29.174Z",
+ "created": "2013-12-18T21:29:29.174Z",
"account": 15,
- "created": "2013-12-18T21:29:29.174Z"
+ "amount": 96.404,
+ "date": "2013-12-16T02:00:00Z",
+ "enacted": null
}
},
{
"pk": 43,
"model": "core.payment",
"fields": {
- "date": "2013-12-03T02:00:00Z",
- "amount": 0.1848,
"updated": "2013-12-18T21:29:30.620Z",
+ "created": "2013-12-18T21:29:30.620Z",
"account": 16,
- "created": "2013-12-18T21:29:30.620Z"
+ "amount": 0.1848,
+ "date": "2013-12-03T02:00:00Z",
+ "enacted": null
}
},
{
"pk": 44,
"model": "core.payment",
"fields": {
- "date": "2013-12-09T02:00:00Z",
- "amount": 8.5904,
"updated": "2013-12-18T21:29:30.626Z",
+ "created": "2013-12-18T21:29:30.626Z",
"account": 16,
- "created": "2013-12-18T21:29:30.626Z"
+ "amount": 8.5904,
+ "date": "2013-12-09T02:00:00Z",
+ "enacted": null
}
},
{
"pk": 45,
"model": "core.payment",
"fields": {
- "date": "2013-12-16T02:00:00Z",
- "amount": 10.0016,
"updated": "2013-12-18T21:29:30.634Z",
+ "created": "2013-12-18T21:29:30.634Z",
"account": 16,
- "created": "2013-12-18T21:29:30.634Z"
+ "amount": 10.0016,
+ "date": "2013-12-16T02:00:00Z",
+ "enacted": null
}
},
{
@@ -10043,7 +11034,8 @@
"coreHours": 4.32,
"invoice": 68,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10060,7 +11052,8 @@
"coreHours": 1.68,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10077,7 +11070,8 @@
"coreHours": 2.88,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10094,7 +11088,8 @@
"coreHours": 4.32,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10111,7 +11106,8 @@
"coreHours": 2.64,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10128,7 +11124,8 @@
"coreHours": 4.56,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10145,7 +11142,8 @@
"coreHours": 2.16,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10162,7 +11160,8 @@
"coreHours": 3.92,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10179,7 +11178,8 @@
"coreHours": 4.64,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10196,7 +11196,8 @@
"coreHours": 2.0,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10213,7 +11214,8 @@
"coreHours": 1.84,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10230,7 +11232,8 @@
"coreHours": 4.8,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10247,7 +11250,8 @@
"coreHours": 4.56,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10264,7 +11268,8 @@
"coreHours": 3.12,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10281,7 +11286,8 @@
"coreHours": 3.6,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10298,7 +11304,8 @@
"coreHours": 1.76,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10315,7 +11322,8 @@
"coreHours": 2.32,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10332,7 +11340,8 @@
"coreHours": 2.72,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10349,7 +11358,8 @@
"coreHours": 2.32,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10366,7 +11376,8 @@
"coreHours": 4.16,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10383,7 +11394,8 @@
"coreHours": 2.96,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10400,7 +11412,8 @@
"coreHours": 2.08,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10417,7 +11430,8 @@
"coreHours": 3.44,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10434,7 +11448,8 @@
"coreHours": 4.32,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10451,7 +11466,8 @@
"coreHours": 2.56,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10468,7 +11484,8 @@
"coreHours": 2.48,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10485,7 +11502,8 @@
"coreHours": 2.16,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10502,7 +11520,8 @@
"coreHours": 1.84,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10519,7 +11538,8 @@
"coreHours": 3.44,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10536,7 +11556,8 @@
"coreHours": 1.92,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10553,7 +11574,8 @@
"coreHours": 3.12,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10570,7 +11592,8 @@
"coreHours": 4.4,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10587,7 +11610,8 @@
"coreHours": 4.24,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10604,7 +11628,8 @@
"coreHours": 3.36,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10621,7 +11646,8 @@
"coreHours": 2.72,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10638,7 +11664,8 @@
"coreHours": 4.8,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10655,7 +11682,8 @@
"coreHours": 1.68,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10672,7 +11700,8 @@
"coreHours": 4.24,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10689,7 +11718,8 @@
"coreHours": 1.84,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10706,7 +11736,8 @@
"coreHours": 2.88,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10723,7 +11754,8 @@
"coreHours": 1.84,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10740,7 +11772,8 @@
"coreHours": 3.92,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10757,7 +11790,8 @@
"coreHours": 4.16,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10774,7 +11808,8 @@
"coreHours": 2.4,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10791,7 +11826,8 @@
"coreHours": 4.72,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10808,7 +11844,8 @@
"coreHours": 4.48,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10825,7 +11862,8 @@
"coreHours": 2.4,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10842,7 +11880,8 @@
"coreHours": 1.68,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10859,7 +11898,8 @@
"coreHours": 3.68,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10876,7 +11916,8 @@
"coreHours": 2.0,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10893,7 +11934,8 @@
"coreHours": 3.68,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10910,7 +11952,8 @@
"coreHours": 3.04,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10927,7 +11970,8 @@
"coreHours": 3.68,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10944,7 +11988,8 @@
"coreHours": 3.92,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10961,7 +12006,8 @@
"coreHours": 3.92,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10978,7 +12024,8 @@
"coreHours": 4.16,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -10995,7 +12042,8 @@
"coreHours": 2.0,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11012,7 +12060,8 @@
"coreHours": 1.68,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11029,7 +12078,8 @@
"coreHours": 3.92,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11046,7 +12096,8 @@
"coreHours": 4.72,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11063,7 +12114,8 @@
"coreHours": 4.8,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11080,7 +12132,8 @@
"coreHours": 4.16,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11097,7 +12150,8 @@
"coreHours": 3.04,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11114,7 +12168,8 @@
"coreHours": 2.64,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11131,7 +12186,8 @@
"coreHours": 3.76,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11148,7 +12204,8 @@
"coreHours": 1.84,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11165,7 +12222,8 @@
"coreHours": 3.92,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11182,7 +12240,8 @@
"coreHours": 2.64,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11199,7 +12258,8 @@
"coreHours": 2.08,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11216,7 +12276,8 @@
"coreHours": 3.28,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11233,7 +12294,8 @@
"coreHours": 4.32,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11250,7 +12312,8 @@
"coreHours": 4.16,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11267,7 +12330,8 @@
"coreHours": 4.08,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11284,7 +12348,8 @@
"coreHours": 4.4,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11301,7 +12366,8 @@
"coreHours": 2.64,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11318,7 +12384,8 @@
"coreHours": 3.84,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11335,7 +12402,8 @@
"coreHours": 1.92,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11352,7 +12420,8 @@
"coreHours": 4.08,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11369,7 +12438,8 @@
"coreHours": 4.32,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11386,7 +12456,8 @@
"coreHours": 4.4,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11403,7 +12474,8 @@
"coreHours": 4.4,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11420,7 +12492,8 @@
"coreHours": 3.68,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11437,7 +12510,8 @@
"coreHours": 2.8,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11454,7 +12528,8 @@
"coreHours": 2.4,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11471,7 +12546,8 @@
"coreHours": 3.68,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11488,7 +12564,8 @@
"coreHours": 2.4,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11505,7 +12582,8 @@
"coreHours": 4.64,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11522,7 +12600,8 @@
"coreHours": 4.0,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11539,7 +12618,8 @@
"coreHours": 4.0,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11556,7 +12636,8 @@
"coreHours": 4.72,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11573,7 +12654,8 @@
"coreHours": 2.08,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11590,7 +12672,8 @@
"coreHours": 3.36,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11607,7 +12690,8 @@
"coreHours": 4.56,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11624,7 +12708,8 @@
"coreHours": 3.52,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11641,7 +12726,8 @@
"coreHours": 3.12,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11658,7 +12744,8 @@
"coreHours": 2.4,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11675,7 +12762,8 @@
"coreHours": 2.56,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11692,7 +12780,8 @@
"coreHours": 4.16,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11709,7 +12798,8 @@
"coreHours": 3.12,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11726,7 +12816,8 @@
"coreHours": 2.0,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11743,7 +12834,8 @@
"coreHours": 4.64,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11760,7 +12852,8 @@
"coreHours": 2.72,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11777,7 +12870,8 @@
"coreHours": 3.76,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11794,7 +12888,8 @@
"coreHours": 4.8,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11811,7 +12906,8 @@
"coreHours": 3.84,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11828,7 +12924,8 @@
"coreHours": 3.36,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11845,7 +12942,8 @@
"coreHours": 3.04,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11862,7 +12960,8 @@
"coreHours": 2.8,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11879,7 +12978,8 @@
"coreHours": 2.56,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11896,7 +12996,8 @@
"coreHours": 1.84,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11913,7 +13014,8 @@
"coreHours": 2.48,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11930,7 +13032,8 @@
"coreHours": 1.6,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11947,7 +13050,8 @@
"coreHours": 3.04,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11964,7 +13068,8 @@
"coreHours": 4.4,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11981,7 +13086,8 @@
"coreHours": 2.16,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -11998,7 +13104,8 @@
"coreHours": 1.6,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12015,7 +13122,8 @@
"coreHours": 4.4,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12032,7 +13140,8 @@
"coreHours": 2.96,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12049,7 +13158,8 @@
"coreHours": 4.0,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12066,7 +13176,8 @@
"coreHours": 2.56,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12083,7 +13194,8 @@
"coreHours": 3.2,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12100,7 +13212,8 @@
"coreHours": 2.24,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12117,7 +13230,8 @@
"coreHours": 4.24,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12134,7 +13248,8 @@
"coreHours": 1.76,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12151,7 +13266,8 @@
"coreHours": 3.36,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12168,7 +13284,8 @@
"coreHours": 2.48,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12185,7 +13302,8 @@
"coreHours": 2.8,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12202,7 +13320,8 @@
"coreHours": 1.92,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12219,7 +13338,8 @@
"coreHours": 2.72,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12236,7 +13356,8 @@
"coreHours": 3.36,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12253,7 +13374,8 @@
"coreHours": 2.96,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12270,7 +13392,8 @@
"coreHours": 4.24,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12287,7 +13410,8 @@
"coreHours": 4.48,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12304,7 +13428,8 @@
"coreHours": 1.84,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12321,7 +13446,8 @@
"coreHours": 2.24,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12338,7 +13464,8 @@
"coreHours": 2.56,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12355,7 +13482,8 @@
"coreHours": 4.32,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12372,7 +13500,8 @@
"coreHours": 4.08,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12389,7 +13518,8 @@
"coreHours": 4.16,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12406,7 +13536,8 @@
"coreHours": 1.84,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12423,7 +13554,8 @@
"coreHours": 4.48,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12440,7 +13572,8 @@
"coreHours": 4.64,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12457,7 +13590,8 @@
"coreHours": 4.32,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12474,7 +13608,8 @@
"coreHours": 2.0,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12491,7 +13626,8 @@
"coreHours": 4.72,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12508,7 +13644,8 @@
"coreHours": 3.92,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12525,7 +13662,8 @@
"coreHours": 3.76,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12542,7 +13680,8 @@
"coreHours": 3.44,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12559,7 +13698,8 @@
"coreHours": 2.32,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12576,7 +13716,8 @@
"coreHours": 4.24,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12593,7 +13734,8 @@
"coreHours": 2.88,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12610,7 +13752,8 @@
"coreHours": 3.28,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12627,7 +13770,8 @@
"coreHours": 3.04,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12644,7 +13788,8 @@
"coreHours": 1.6,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12661,7 +13806,8 @@
"coreHours": 2.4,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12678,7 +13824,8 @@
"coreHours": 2.4,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12695,7 +13842,8 @@
"coreHours": 2.8,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12712,7 +13860,8 @@
"coreHours": 3.52,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12729,7 +13878,8 @@
"coreHours": 1.6,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12746,7 +13896,8 @@
"coreHours": 2.56,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12763,7 +13914,8 @@
"coreHours": 4.4,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12780,7 +13932,8 @@
"coreHours": 1.68,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12797,7 +13950,8 @@
"coreHours": 2.88,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12814,7 +13968,8 @@
"coreHours": 2.16,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12831,7 +13986,8 @@
"coreHours": 3.36,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12848,7 +14004,8 @@
"coreHours": 4.4,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12865,7 +14022,8 @@
"coreHours": 4.08,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12882,7 +14040,8 @@
"coreHours": 2.56,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12899,7 +14058,8 @@
"coreHours": 4.08,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12916,7 +14076,8 @@
"coreHours": 2.08,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12933,7 +14094,8 @@
"coreHours": 4.48,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12950,7 +14112,8 @@
"coreHours": 1.76,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12967,7 +14130,8 @@
"coreHours": 2.96,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -12984,7 +14148,8 @@
"coreHours": 3.44,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13001,7 +14166,8 @@
"coreHours": 3.36,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13018,7 +14184,8 @@
"coreHours": 3.68,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13035,7 +14202,8 @@
"coreHours": 3.92,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13052,7 +14220,8 @@
"coreHours": 2.0,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13069,7 +14238,8 @@
"coreHours": 3.84,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13086,7 +14256,8 @@
"coreHours": 4.56,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13103,7 +14274,8 @@
"coreHours": 2.32,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13120,7 +14292,8 @@
"coreHours": 2.8,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13137,7 +14310,8 @@
"coreHours": 4.48,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13154,7 +14328,8 @@
"coreHours": 1.84,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13171,7 +14346,8 @@
"coreHours": 4.0,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13188,7 +14364,8 @@
"coreHours": 3.84,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13205,7 +14382,8 @@
"coreHours": 2.56,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13222,7 +14400,8 @@
"coreHours": 2.48,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13239,7 +14418,8 @@
"coreHours": 1.68,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13256,7 +14436,8 @@
"coreHours": 3.68,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13273,7 +14454,8 @@
"coreHours": 2.72,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13290,7 +14472,8 @@
"coreHours": 4.48,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13307,7 +14490,8 @@
"coreHours": 4.56,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13324,7 +14508,8 @@
"coreHours": 4.64,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13341,7 +14526,8 @@
"coreHours": 4.72,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13358,7 +14544,8 @@
"coreHours": 3.92,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13375,7 +14562,8 @@
"coreHours": 2.4,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13392,7 +14580,8 @@
"coreHours": 4.0,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13409,7 +14598,8 @@
"coreHours": 2.0,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13426,7 +14616,8 @@
"coreHours": 4.64,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13443,7 +14634,8 @@
"coreHours": 3.52,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13460,7 +14652,8 @@
"coreHours": 1.76,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13477,7 +14670,8 @@
"coreHours": 2.56,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13494,7 +14688,8 @@
"coreHours": 4.8,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13511,7 +14706,8 @@
"coreHours": 3.76,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13528,7 +14724,8 @@
"coreHours": 2.4,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13545,7 +14742,8 @@
"coreHours": 4.56,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13562,7 +14760,8 @@
"coreHours": 4.72,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13579,7 +14778,8 @@
"coreHours": 3.92,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13596,7 +14796,8 @@
"coreHours": 2.88,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13613,7 +14814,8 @@
"coreHours": 2.8,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13630,7 +14832,8 @@
"coreHours": 4.48,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13647,7 +14850,8 @@
"coreHours": 4.56,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13664,7 +14868,8 @@
"coreHours": 4.56,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13681,7 +14886,8 @@
"coreHours": 3.52,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13698,7 +14904,8 @@
"coreHours": 4.16,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13715,7 +14922,8 @@
"coreHours": 2.88,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13732,7 +14940,8 @@
"coreHours": 3.04,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13749,7 +14958,8 @@
"coreHours": 1.84,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13766,7 +14976,8 @@
"coreHours": 3.44,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13783,7 +14994,8 @@
"coreHours": 4.08,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13800,7 +15012,8 @@
"coreHours": 3.84,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13817,7 +15030,8 @@
"coreHours": 2.96,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13834,7 +15048,8 @@
"coreHours": 3.2,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13851,7 +15066,8 @@
"coreHours": 4.72,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13868,7 +15084,8 @@
"coreHours": 3.2,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13885,7 +15102,8 @@
"coreHours": 3.68,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13902,7 +15120,8 @@
"coreHours": 3.36,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13919,7 +15138,8 @@
"coreHours": 4.4,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13936,7 +15156,8 @@
"coreHours": 4.48,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13953,7 +15174,8 @@
"coreHours": 3.2,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13970,7 +15192,8 @@
"coreHours": 4.4,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -13987,7 +15210,8 @@
"coreHours": 3.84,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14004,7 +15228,8 @@
"coreHours": 3.52,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14021,7 +15246,8 @@
"coreHours": 4.32,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14038,7 +15264,8 @@
"coreHours": 2.08,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14055,7 +15282,8 @@
"coreHours": 4.24,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14072,7 +15300,8 @@
"coreHours": 1.92,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14089,7 +15318,8 @@
"coreHours": 4.56,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14106,7 +15336,8 @@
"coreHours": 1.84,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14123,7 +15354,8 @@
"coreHours": 4.24,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14140,7 +15372,8 @@
"coreHours": 2.64,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14157,7 +15390,8 @@
"coreHours": 2.24,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14174,7 +15408,8 @@
"coreHours": 2.48,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14191,7 +15426,8 @@
"coreHours": 4.32,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14208,7 +15444,8 @@
"coreHours": 3.04,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14225,7 +15462,8 @@
"coreHours": 2.4,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14242,7 +15480,8 @@
"coreHours": 4.24,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14259,7 +15498,8 @@
"coreHours": 2.0,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14276,7 +15516,8 @@
"coreHours": 3.6,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14293,7 +15534,8 @@
"coreHours": 3.92,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14310,7 +15552,8 @@
"coreHours": 2.8,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14327,7 +15570,8 @@
"coreHours": 2.4,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14344,7 +15588,8 @@
"coreHours": 1.68,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14361,7 +15606,8 @@
"coreHours": 4.64,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14378,7 +15624,8 @@
"coreHours": 2.56,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14395,7 +15642,8 @@
"coreHours": 1.76,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14412,7 +15660,8 @@
"coreHours": 2.16,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14429,7 +15678,8 @@
"coreHours": 4.32,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14446,7 +15696,8 @@
"coreHours": 2.56,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14463,7 +15714,8 @@
"coreHours": 2.16,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14480,7 +15732,8 @@
"coreHours": 2.88,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14497,7 +15750,8 @@
"coreHours": 3.44,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14514,7 +15768,8 @@
"coreHours": 3.12,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14531,7 +15786,8 @@
"coreHours": 2.72,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14548,7 +15804,8 @@
"coreHours": 3.52,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14565,7 +15822,8 @@
"coreHours": 3.44,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14582,7 +15840,8 @@
"coreHours": 2.8,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14599,7 +15858,8 @@
"coreHours": 3.76,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14616,7 +15876,8 @@
"coreHours": 1.68,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14633,7 +15894,8 @@
"coreHours": 1.6,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14650,7 +15912,8 @@
"coreHours": 2.4,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14667,7 +15930,8 @@
"coreHours": 4.64,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14684,7 +15948,8 @@
"coreHours": 3.28,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14701,7 +15966,8 @@
"coreHours": 4.16,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14718,7 +15984,8 @@
"coreHours": 2.88,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14735,7 +16002,8 @@
"coreHours": 2.48,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14752,7 +16020,8 @@
"coreHours": 2.08,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14769,7 +16038,8 @@
"coreHours": 2.24,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14786,7 +16056,8 @@
"coreHours": 3.2,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14803,7 +16074,8 @@
"coreHours": 1.68,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14820,7 +16092,8 @@
"coreHours": 4.08,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14837,7 +16110,8 @@
"coreHours": 4.56,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14854,7 +16128,8 @@
"coreHours": 2.48,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14871,7 +16146,8 @@
"coreHours": 3.36,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14888,7 +16164,8 @@
"coreHours": 2.48,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14905,7 +16182,8 @@
"coreHours": 3.04,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14922,7 +16200,8 @@
"coreHours": 4.24,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14939,7 +16218,8 @@
"coreHours": 1.68,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14956,7 +16236,8 @@
"coreHours": 2.56,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14973,7 +16254,8 @@
"coreHours": 4.72,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -14990,7 +16272,8 @@
"coreHours": 4.16,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15007,7 +16290,8 @@
"coreHours": 3.6,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15024,7 +16308,8 @@
"coreHours": 4.32,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15041,7 +16326,8 @@
"coreHours": 2.4,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15058,7 +16344,8 @@
"coreHours": 4.4,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15075,7 +16362,8 @@
"coreHours": 2.8,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15092,7 +16380,8 @@
"coreHours": 1.76,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15109,7 +16398,8 @@
"coreHours": 4.32,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15126,7 +16416,8 @@
"coreHours": 4.16,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15143,7 +16434,8 @@
"coreHours": 2.72,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15160,7 +16452,8 @@
"coreHours": 1.68,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15177,7 +16470,8 @@
"coreHours": 2.08,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15194,7 +16488,8 @@
"coreHours": 4.48,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15211,7 +16506,8 @@
"coreHours": 4.4,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15228,7 +16524,8 @@
"coreHours": 3.6,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15245,7 +16542,8 @@
"coreHours": 4.08,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15262,7 +16560,8 @@
"coreHours": 2.32,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15279,7 +16578,8 @@
"coreHours": 4.72,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15296,7 +16596,8 @@
"coreHours": 2.4,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15313,7 +16614,8 @@
"coreHours": 2.4,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15330,7 +16632,8 @@
"coreHours": 4.0,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15347,7 +16650,8 @@
"coreHours": 4.08,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15364,7 +16668,8 @@
"coreHours": 4.32,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15381,7 +16686,8 @@
"coreHours": 3.28,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15398,7 +16704,8 @@
"coreHours": 4.72,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15415,7 +16722,8 @@
"coreHours": 2.56,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15432,7 +16740,8 @@
"coreHours": 4.16,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15449,7 +16758,8 @@
"coreHours": 3.04,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15466,7 +16776,8 @@
"coreHours": 2.08,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15483,7 +16794,8 @@
"coreHours": 1.6,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15500,7 +16812,8 @@
"coreHours": 4.0,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15517,7 +16830,8 @@
"coreHours": 1.6,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15534,7 +16848,8 @@
"coreHours": 3.2,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15551,7 +16866,8 @@
"coreHours": 1.92,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15568,7 +16884,8 @@
"coreHours": 4.24,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15585,7 +16902,8 @@
"coreHours": 4.72,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15602,7 +16920,8 @@
"coreHours": 4.56,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15619,7 +16938,8 @@
"coreHours": 4.8,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15636,7 +16956,8 @@
"coreHours": 4.4,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15653,7 +16974,8 @@
"coreHours": 1.84,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15670,7 +16992,8 @@
"coreHours": 3.76,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15687,7 +17010,8 @@
"coreHours": 3.12,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15704,7 +17028,8 @@
"coreHours": 2.72,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15721,7 +17046,8 @@
"coreHours": 2.4,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15738,7 +17064,8 @@
"coreHours": 3.52,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15755,7 +17082,8 @@
"coreHours": 3.12,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15772,7 +17100,8 @@
"coreHours": 2.48,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15789,7 +17118,8 @@
"coreHours": 2.08,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15806,7 +17136,8 @@
"coreHours": 2.16,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15823,7 +17154,8 @@
"coreHours": 4.72,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15840,7 +17172,8 @@
"coreHours": 2.4,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15857,7 +17190,8 @@
"coreHours": 4.32,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15874,7 +17208,8 @@
"coreHours": 4.08,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15891,7 +17226,8 @@
"coreHours": 4.08,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15908,7 +17244,8 @@
"coreHours": 1.76,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15925,7 +17262,8 @@
"coreHours": 3.76,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15942,7 +17280,8 @@
"coreHours": 2.8,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15959,7 +17298,8 @@
"coreHours": 1.92,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15976,7 +17316,8 @@
"coreHours": 3.36,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -15993,7 +17334,8 @@
"coreHours": 3.76,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16010,7 +17352,8 @@
"coreHours": 3.04,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16027,7 +17370,8 @@
"coreHours": 2.0,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16044,7 +17388,8 @@
"coreHours": 3.6,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16061,7 +17406,8 @@
"coreHours": 4.0,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16078,7 +17424,8 @@
"coreHours": 2.32,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16095,7 +17442,8 @@
"coreHours": 3.92,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16112,7 +17460,8 @@
"coreHours": 4.0,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16129,7 +17478,8 @@
"coreHours": 3.44,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16146,7 +17496,8 @@
"coreHours": 4.4,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16163,7 +17514,8 @@
"coreHours": 4.24,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16180,7 +17532,8 @@
"coreHours": 2.8,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16197,7 +17550,8 @@
"coreHours": 1.76,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16214,7 +17568,8 @@
"coreHours": 4.4,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16231,7 +17586,8 @@
"coreHours": 3.52,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16248,7 +17604,8 @@
"coreHours": 2.8,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16265,7 +17622,8 @@
"coreHours": 3.52,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16282,7 +17640,8 @@
"coreHours": 2.48,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16299,7 +17658,8 @@
"coreHours": 4.24,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16316,7 +17676,8 @@
"coreHours": 2.24,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16333,7 +17694,8 @@
"coreHours": 4.48,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16350,7 +17712,8 @@
"coreHours": 2.08,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16367,7 +17730,8 @@
"coreHours": 1.84,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16384,7 +17748,8 @@
"coreHours": 2.08,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16401,7 +17766,8 @@
"coreHours": 3.04,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16418,7 +17784,8 @@
"coreHours": 4.08,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16435,7 +17802,8 @@
"coreHours": 3.52,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16452,7 +17820,8 @@
"coreHours": 3.92,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16469,7 +17838,8 @@
"coreHours": 4.16,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16486,7 +17856,8 @@
"coreHours": 3.52,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16503,7 +17874,8 @@
"coreHours": 3.52,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16520,7 +17892,8 @@
"coreHours": 2.48,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16537,7 +17910,8 @@
"coreHours": 2.08,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16554,7 +17928,8 @@
"coreHours": 2.24,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16571,7 +17946,8 @@
"coreHours": 2.48,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16588,7 +17964,8 @@
"coreHours": 3.6,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16605,7 +17982,8 @@
"coreHours": 2.88,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16622,7 +18000,8 @@
"coreHours": 4.56,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16639,7 +18018,8 @@
"coreHours": 3.52,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16656,7 +18036,8 @@
"coreHours": 1.6,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16673,7 +18054,8 @@
"coreHours": 2.24,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16690,7 +18072,8 @@
"coreHours": 4.0,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16707,7 +18090,8 @@
"coreHours": 2.88,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16724,7 +18108,8 @@
"coreHours": 2.96,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16741,7 +18126,8 @@
"coreHours": 4.08,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16758,7 +18144,8 @@
"coreHours": 3.52,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16775,7 +18162,8 @@
"coreHours": 4.56,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16792,7 +18180,8 @@
"coreHours": 4.16,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16809,7 +18198,8 @@
"coreHours": 2.96,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16826,7 +18216,8 @@
"coreHours": 4.16,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16843,7 +18234,8 @@
"coreHours": 2.0,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16860,7 +18252,8 @@
"coreHours": 2.64,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16877,7 +18270,8 @@
"coreHours": 3.68,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16894,7 +18288,8 @@
"coreHours": 2.96,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16911,7 +18306,8 @@
"coreHours": 2.64,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16928,7 +18324,8 @@
"coreHours": 2.24,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16945,7 +18342,8 @@
"coreHours": 3.04,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16962,7 +18360,8 @@
"coreHours": 2.4,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16979,7 +18378,8 @@
"coreHours": 4.0,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -16996,7 +18396,8 @@
"coreHours": 3.28,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17013,7 +18414,8 @@
"coreHours": 2.72,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17030,7 +18432,8 @@
"coreHours": 2.32,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17047,7 +18450,8 @@
"coreHours": 3.6,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17064,7 +18468,8 @@
"coreHours": 1.6,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17081,7 +18486,8 @@
"coreHours": 3.68,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17098,7 +18504,8 @@
"coreHours": 4.56,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17115,7 +18522,8 @@
"coreHours": 3.76,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17132,7 +18540,8 @@
"coreHours": 2.56,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17149,7 +18558,8 @@
"coreHours": 2.8,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17166,7 +18576,8 @@
"coreHours": 1.68,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17183,7 +18594,8 @@
"coreHours": 3.44,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17200,7 +18612,8 @@
"coreHours": 3.68,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17217,7 +18630,8 @@
"coreHours": 3.92,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17234,7 +18648,8 @@
"coreHours": 4.32,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17251,7 +18666,8 @@
"coreHours": 4.56,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17268,7 +18684,8 @@
"coreHours": 4.72,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17285,7 +18702,8 @@
"coreHours": 4.56,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17302,7 +18720,8 @@
"coreHours": 2.4,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17319,7 +18738,8 @@
"coreHours": 4.48,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17336,7 +18756,8 @@
"coreHours": 2.56,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17353,7 +18774,8 @@
"coreHours": 3.68,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17370,7 +18792,8 @@
"coreHours": 3.52,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17387,7 +18810,8 @@
"coreHours": 4.24,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17404,7 +18828,8 @@
"coreHours": 4.0,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17421,7 +18846,8 @@
"coreHours": 1.92,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17438,7 +18864,8 @@
"coreHours": 3.04,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17455,7 +18882,8 @@
"coreHours": 2.8,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17472,7 +18900,8 @@
"coreHours": 4.16,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17489,7 +18918,8 @@
"coreHours": 3.76,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17506,7 +18936,8 @@
"coreHours": 4.32,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17523,7 +18954,8 @@
"coreHours": 2.24,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17540,7 +18972,8 @@
"coreHours": 3.36,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17557,7 +18990,8 @@
"coreHours": 3.84,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17574,7 +19008,8 @@
"coreHours": 2.0,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17591,7 +19026,8 @@
"coreHours": 4.0,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17608,7 +19044,8 @@
"coreHours": 3.36,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17625,7 +19062,8 @@
"coreHours": 2.64,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17642,7 +19080,8 @@
"coreHours": 3.84,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17659,7 +19098,8 @@
"coreHours": 3.12,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17676,7 +19116,8 @@
"coreHours": 1.68,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17693,7 +19134,8 @@
"coreHours": 4.48,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17710,7 +19152,8 @@
"coreHours": 2.8,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17727,7 +19170,8 @@
"coreHours": 1.68,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17744,7 +19188,8 @@
"coreHours": 4.0,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17761,7 +19206,8 @@
"coreHours": 2.56,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17778,7 +19224,8 @@
"coreHours": 2.0,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17795,7 +19242,8 @@
"coreHours": 3.68,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17812,7 +19260,8 @@
"coreHours": 2.48,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17829,7 +19278,8 @@
"coreHours": 4.8,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17846,7 +19296,8 @@
"coreHours": 2.96,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17863,7 +19314,8 @@
"coreHours": 3.12,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17880,7 +19332,8 @@
"coreHours": 2.8,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17897,7 +19350,8 @@
"coreHours": 4.56,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17914,7 +19368,8 @@
"coreHours": 2.08,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17931,7 +19386,8 @@
"coreHours": 3.28,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17948,7 +19404,8 @@
"coreHours": 2.88,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17965,7 +19422,8 @@
"coreHours": 3.36,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17982,7 +19440,8 @@
"coreHours": 2.08,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -17999,7 +19458,8 @@
"coreHours": 3.6,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18016,7 +19476,8 @@
"coreHours": 3.28,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18033,7 +19494,8 @@
"coreHours": 2.56,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18050,7 +19512,8 @@
"coreHours": 2.64,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18067,7 +19530,8 @@
"coreHours": 3.04,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18084,7 +19548,8 @@
"coreHours": 3.6,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18101,7 +19566,8 @@
"coreHours": 4.16,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18118,7 +19584,8 @@
"coreHours": 2.24,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18135,7 +19602,8 @@
"coreHours": 1.84,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18152,7 +19620,8 @@
"coreHours": 2.88,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18169,7 +19638,8 @@
"coreHours": 3.12,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18186,7 +19656,8 @@
"coreHours": 2.08,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18203,7 +19674,8 @@
"coreHours": 2.08,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18220,7 +19692,8 @@
"coreHours": 4.72,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18237,7 +19710,8 @@
"coreHours": 3.44,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18254,7 +19728,8 @@
"coreHours": 3.84,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18271,7 +19746,8 @@
"coreHours": 4.72,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18288,7 +19764,8 @@
"coreHours": 2.32,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18305,7 +19782,8 @@
"coreHours": 2.32,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18322,7 +19800,8 @@
"coreHours": 3.12,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18339,7 +19818,8 @@
"coreHours": 1.68,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18356,7 +19836,8 @@
"coreHours": 3.76,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18373,7 +19854,8 @@
"coreHours": 2.72,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18390,7 +19872,8 @@
"coreHours": 4.32,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18407,7 +19890,8 @@
"coreHours": 4.08,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18424,7 +19908,8 @@
"coreHours": 4.72,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18441,7 +19926,8 @@
"coreHours": 4.64,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18458,7 +19944,8 @@
"coreHours": 4.24,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18475,7 +19962,8 @@
"coreHours": 4.4,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18492,7 +19980,8 @@
"coreHours": 4.72,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18509,7 +19998,8 @@
"coreHours": 3.6,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18526,7 +20016,8 @@
"coreHours": 3.92,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18543,7 +20034,8 @@
"coreHours": 3.76,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18560,7 +20052,8 @@
"coreHours": 2.88,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18577,7 +20070,8 @@
"coreHours": 3.84,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18594,7 +20088,8 @@
"coreHours": 4.08,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18611,7 +20106,8 @@
"coreHours": 2.64,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18628,7 +20124,8 @@
"coreHours": 1.68,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18645,7 +20142,8 @@
"coreHours": 2.88,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18662,7 +20160,8 @@
"coreHours": 3.2,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18679,7 +20178,8 @@
"coreHours": 2.4,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18696,7 +20196,8 @@
"coreHours": 4.24,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18713,7 +20214,8 @@
"coreHours": 2.24,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18730,7 +20232,8 @@
"coreHours": 3.92,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18747,7 +20250,8 @@
"coreHours": 4.72,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18764,7 +20268,8 @@
"coreHours": 2.16,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18781,7 +20286,8 @@
"coreHours": 1.84,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18798,7 +20304,8 @@
"coreHours": 3.6,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18815,7 +20322,8 @@
"coreHours": 2.8,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18832,7 +20340,8 @@
"coreHours": 2.72,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18849,7 +20358,8 @@
"coreHours": 3.44,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18866,7 +20376,8 @@
"coreHours": 4.48,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18883,7 +20394,8 @@
"coreHours": 3.44,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18900,7 +20412,8 @@
"coreHours": 2.16,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18917,7 +20430,8 @@
"coreHours": 4.0,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18934,7 +20448,8 @@
"coreHours": 4.08,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18951,7 +20466,8 @@
"coreHours": 2.08,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18968,7 +20484,8 @@
"coreHours": 4.56,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -18985,7 +20502,8 @@
"coreHours": 4.64,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19002,7 +20520,8 @@
"coreHours": 3.36,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19019,7 +20538,8 @@
"coreHours": 1.84,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19036,7 +20556,8 @@
"coreHours": 4.0,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19053,7 +20574,8 @@
"coreHours": 3.52,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19070,7 +20592,8 @@
"coreHours": 4.72,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19087,7 +20610,8 @@
"coreHours": 3.76,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19104,7 +20628,8 @@
"coreHours": 2.48,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19121,7 +20646,8 @@
"coreHours": 4.64,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19138,7 +20664,8 @@
"coreHours": 1.92,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19155,7 +20682,8 @@
"coreHours": 2.32,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19172,7 +20700,8 @@
"coreHours": 4.24,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19189,7 +20718,8 @@
"coreHours": 1.76,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19206,7 +20736,8 @@
"coreHours": 3.28,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19223,7 +20754,8 @@
"coreHours": 2.96,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19240,7 +20772,8 @@
"coreHours": 2.16,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19257,7 +20790,8 @@
"coreHours": 1.76,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19274,7 +20808,8 @@
"coreHours": 1.68,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19291,7 +20826,8 @@
"coreHours": 4.16,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19308,7 +20844,8 @@
"coreHours": 2.08,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19325,7 +20862,8 @@
"coreHours": 4.48,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19342,7 +20880,8 @@
"coreHours": 3.6,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19359,7 +20898,8 @@
"coreHours": 4.24,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19376,7 +20916,8 @@
"coreHours": 3.12,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19393,7 +20934,8 @@
"coreHours": 4.64,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19410,7 +20952,8 @@
"coreHours": 2.48,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19427,7 +20970,8 @@
"coreHours": 4.24,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19444,7 +20988,8 @@
"coreHours": 1.68,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19461,7 +21006,8 @@
"coreHours": 3.2,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19478,7 +21024,8 @@
"coreHours": 2.32,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19495,7 +21042,8 @@
"coreHours": 4.56,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19512,7 +21060,8 @@
"coreHours": 4.72,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19529,7 +21078,8 @@
"coreHours": 1.84,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19546,7 +21096,8 @@
"coreHours": 2.48,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19563,7 +21114,8 @@
"coreHours": 4.72,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19580,7 +21132,8 @@
"coreHours": 3.28,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19597,7 +21150,8 @@
"coreHours": 2.96,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19614,7 +21168,8 @@
"coreHours": 2.08,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19631,7 +21186,8 @@
"coreHours": 4.08,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19648,7 +21204,8 @@
"coreHours": 3.36,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19665,7 +21222,8 @@
"coreHours": 3.44,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19682,7 +21240,8 @@
"coreHours": 3.04,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19699,7 +21258,8 @@
"coreHours": 3.44,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19716,7 +21276,8 @@
"coreHours": 3.28,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19733,7 +21294,8 @@
"coreHours": 3.68,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19750,7 +21312,8 @@
"coreHours": 4.72,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19767,7 +21330,8 @@
"coreHours": 1.68,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19784,7 +21348,8 @@
"coreHours": 2.96,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19801,7 +21366,8 @@
"coreHours": 3.76,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19818,7 +21384,8 @@
"coreHours": 2.48,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19835,7 +21402,8 @@
"coreHours": 3.76,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19852,7 +21420,8 @@
"coreHours": 4.48,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19869,7 +21438,8 @@
"coreHours": 3.92,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19886,7 +21456,8 @@
"coreHours": 4.08,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19903,7 +21474,8 @@
"coreHours": 2.4,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19920,7 +21492,8 @@
"coreHours": 2.0,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19937,7 +21510,8 @@
"coreHours": 1.84,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19954,7 +21528,8 @@
"coreHours": 3.76,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19971,7 +21546,8 @@
"coreHours": 4.16,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -19988,7 +21564,8 @@
"coreHours": 4.72,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20005,7 +21582,8 @@
"coreHours": 3.84,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20022,7 +21600,8 @@
"coreHours": 4.4,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20039,7 +21618,8 @@
"coreHours": 1.84,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20056,7 +21636,8 @@
"coreHours": 4.64,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20073,7 +21654,8 @@
"coreHours": 4.24,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20090,7 +21672,8 @@
"coreHours": 4.32,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20107,7 +21690,8 @@
"coreHours": 3.2,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20124,7 +21708,8 @@
"coreHours": 2.64,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20141,7 +21726,8 @@
"coreHours": 3.68,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20158,7 +21744,8 @@
"coreHours": 4.24,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20175,7 +21762,8 @@
"coreHours": 2.4,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20192,7 +21780,8 @@
"coreHours": 2.64,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20209,7 +21798,8 @@
"coreHours": 3.04,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20226,7 +21816,8 @@
"coreHours": 2.24,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20243,7 +21834,8 @@
"coreHours": 3.68,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20260,7 +21852,8 @@
"coreHours": 2.56,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20277,7 +21870,8 @@
"coreHours": 4.08,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20294,7 +21888,8 @@
"coreHours": 2.64,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20311,7 +21906,8 @@
"coreHours": 1.92,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20328,7 +21924,8 @@
"coreHours": 2.56,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20345,7 +21942,8 @@
"coreHours": 2.8,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20362,7 +21960,8 @@
"coreHours": 1.76,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20379,7 +21978,8 @@
"coreHours": 4.56,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20396,7 +21996,8 @@
"coreHours": 3.12,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20413,7 +22014,8 @@
"coreHours": 4.56,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20430,7 +22032,8 @@
"coreHours": 4.32,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20447,7 +22050,8 @@
"coreHours": 1.84,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20464,7 +22068,8 @@
"coreHours": 2.08,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20481,7 +22086,8 @@
"coreHours": 1.84,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20498,7 +22104,8 @@
"coreHours": 3.76,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20515,7 +22122,8 @@
"coreHours": 4.56,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20532,7 +22140,8 @@
"coreHours": 3.2,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20549,7 +22158,8 @@
"coreHours": 3.12,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20566,7 +22176,8 @@
"coreHours": 2.8,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20583,7 +22194,8 @@
"coreHours": 4.0,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20600,7 +22212,8 @@
"coreHours": 3.2,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20617,7 +22230,8 @@
"coreHours": 4.72,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20634,7 +22248,8 @@
"coreHours": 2.64,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20651,7 +22266,8 @@
"coreHours": 4.0,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20668,7 +22284,8 @@
"coreHours": 1.68,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20685,7 +22302,8 @@
"coreHours": 2.88,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20702,7 +22320,8 @@
"coreHours": 3.68,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20719,7 +22338,8 @@
"coreHours": 4.8,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20736,7 +22356,8 @@
"coreHours": 4.64,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20753,7 +22374,8 @@
"coreHours": 4.64,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20770,7 +22392,8 @@
"coreHours": 4.64,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20787,7 +22410,8 @@
"coreHours": 3.68,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20804,7 +22428,8 @@
"coreHours": 4.48,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20821,7 +22446,8 @@
"coreHours": 1.6,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20838,7 +22464,8 @@
"coreHours": 4.0,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20855,7 +22482,8 @@
"coreHours": 1.92,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20872,7 +22500,8 @@
"coreHours": 1.68,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20889,7 +22518,8 @@
"coreHours": 1.68,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20906,7 +22536,8 @@
"coreHours": 4.32,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20923,7 +22554,8 @@
"coreHours": 1.76,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20940,7 +22572,8 @@
"coreHours": 3.6,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20957,7 +22590,8 @@
"coreHours": 2.32,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20974,7 +22608,8 @@
"coreHours": 3.76,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -20991,7 +22626,8 @@
"coreHours": 2.64,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21008,7 +22644,8 @@
"coreHours": 3.12,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21025,7 +22662,8 @@
"coreHours": 3.44,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21042,7 +22680,8 @@
"coreHours": 3.12,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21059,7 +22698,8 @@
"coreHours": 1.84,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21076,7 +22716,8 @@
"coreHours": 3.84,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21093,7 +22734,8 @@
"coreHours": 2.96,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21110,7 +22752,8 @@
"coreHours": 1.76,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21127,7 +22770,8 @@
"coreHours": 2.56,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21144,7 +22788,8 @@
"coreHours": 4.32,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21161,7 +22806,8 @@
"coreHours": 2.24,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21178,7 +22824,8 @@
"coreHours": 1.76,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21195,7 +22842,8 @@
"coreHours": 4.64,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21212,7 +22860,8 @@
"coreHours": 2.0,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21229,7 +22878,8 @@
"coreHours": 3.36,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21246,7 +22896,8 @@
"coreHours": 2.24,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21263,7 +22914,8 @@
"coreHours": 1.84,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21280,7 +22932,8 @@
"coreHours": 4.16,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21297,7 +22950,8 @@
"coreHours": 2.0,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21314,7 +22968,8 @@
"coreHours": 2.56,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21331,7 +22986,8 @@
"coreHours": 3.6,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21348,7 +23004,8 @@
"coreHours": 2.8,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21365,7 +23022,8 @@
"coreHours": 3.92,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21382,7 +23040,8 @@
"coreHours": 2.4,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21399,7 +23058,8 @@
"coreHours": 4.32,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21416,7 +23076,8 @@
"coreHours": 4.56,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21433,7 +23094,8 @@
"coreHours": 4.48,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21450,7 +23112,8 @@
"coreHours": 4.32,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21467,7 +23130,8 @@
"coreHours": 1.68,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21484,7 +23148,8 @@
"coreHours": 1.76,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21501,7 +23166,8 @@
"coreHours": 3.76,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21518,7 +23184,8 @@
"coreHours": 3.04,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21535,7 +23202,8 @@
"coreHours": 4.24,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21552,7 +23220,8 @@
"coreHours": 4.16,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21569,7 +23238,8 @@
"coreHours": 2.64,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21586,7 +23256,8 @@
"coreHours": 2.24,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21603,7 +23274,8 @@
"coreHours": 3.28,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21620,7 +23292,8 @@
"coreHours": 2.64,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21637,7 +23310,8 @@
"coreHours": 1.6,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21654,7 +23328,8 @@
"coreHours": 3.28,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21671,7 +23346,8 @@
"coreHours": 1.76,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21688,7 +23364,8 @@
"coreHours": 1.84,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21705,7 +23382,8 @@
"coreHours": 2.08,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21722,7 +23400,8 @@
"coreHours": 3.6,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21739,7 +23418,8 @@
"coreHours": 4.48,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21756,7 +23436,8 @@
"coreHours": 3.44,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21773,7 +23454,8 @@
"coreHours": 2.88,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21790,7 +23472,8 @@
"coreHours": 3.52,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21807,7 +23490,8 @@
"coreHours": 4.08,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21824,7 +23508,8 @@
"coreHours": 4.56,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21841,7 +23526,8 @@
"coreHours": 3.68,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21858,7 +23544,8 @@
"coreHours": 2.96,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21875,7 +23562,8 @@
"coreHours": 3.12,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21892,7 +23580,8 @@
"coreHours": 1.92,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21909,7 +23598,8 @@
"coreHours": 4.0,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21926,7 +23616,8 @@
"coreHours": 2.24,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21943,7 +23634,8 @@
"coreHours": 3.92,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21960,7 +23652,8 @@
"coreHours": 2.32,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21977,7 +23670,8 @@
"coreHours": 2.08,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -21994,7 +23688,8 @@
"coreHours": 2.0,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22011,7 +23706,8 @@
"coreHours": 3.2,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22028,7 +23724,8 @@
"coreHours": 3.84,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22045,7 +23742,8 @@
"coreHours": 3.2,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22062,7 +23760,8 @@
"coreHours": 1.68,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22079,7 +23778,8 @@
"coreHours": 3.28,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22096,7 +23796,8 @@
"coreHours": 2.96,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22113,7 +23814,8 @@
"coreHours": 1.92,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22130,7 +23832,8 @@
"coreHours": 3.36,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22147,7 +23850,8 @@
"coreHours": 4.4,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22164,7 +23868,8 @@
"coreHours": 2.0,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22181,7 +23886,8 @@
"coreHours": 1.92,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22198,7 +23904,8 @@
"coreHours": 2.8,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22215,7 +23922,8 @@
"coreHours": 4.8,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22232,7 +23940,8 @@
"coreHours": 4.64,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22249,7 +23958,8 @@
"coreHours": 4.16,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22266,7 +23976,8 @@
"coreHours": 4.0,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -22283,7 +23994,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22300,7 +24012,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22317,7 +24030,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22334,7 +24048,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22351,7 +24066,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22368,7 +24084,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22385,7 +24102,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22402,7 +24120,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22419,7 +24138,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22436,7 +24156,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22453,7 +24174,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22470,7 +24192,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22487,7 +24210,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22504,7 +24228,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22521,7 +24246,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22538,7 +24264,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22555,7 +24282,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22572,7 +24300,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22589,7 +24318,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22606,7 +24336,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22623,7 +24354,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22640,7 +24372,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22657,7 +24390,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22674,7 +24408,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22691,7 +24426,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22708,7 +24444,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22725,7 +24462,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22742,7 +24480,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22759,7 +24498,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22776,7 +24516,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22793,7 +24534,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22810,7 +24552,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22827,7 +24570,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22844,7 +24588,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22861,7 +24606,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22878,7 +24624,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22895,7 +24642,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22912,7 +24660,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22929,7 +24678,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22946,7 +24696,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22963,7 +24714,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22980,7 +24732,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -22997,7 +24750,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23014,7 +24768,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23031,7 +24786,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23048,7 +24804,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23065,7 +24822,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23082,7 +24840,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23099,7 +24858,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23116,7 +24876,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23133,7 +24894,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23150,7 +24912,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23167,7 +24930,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23184,7 +24948,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23201,7 +24966,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23218,7 +24984,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23235,7 +25002,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23252,7 +25020,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23269,7 +25038,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23286,7 +25056,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23303,7 +25074,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23320,7 +25092,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23337,7 +25110,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23354,7 +25128,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23371,7 +25146,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23388,7 +25164,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23405,7 +25182,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23422,7 +25200,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23439,7 +25218,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23456,7 +25236,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23473,7 +25254,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23490,7 +25272,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23507,7 +25290,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23524,7 +25308,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23541,7 +25326,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23558,7 +25344,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23575,7 +25362,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23592,7 +25380,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23609,7 +25398,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23626,14 +25416,15 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
"pk": 60561,
"model": "core.charge",
"fields": {
- "updated": "2013-12-18T21:29:29.000Z",
+ "updated": "2013-12-18T21:29:29Z",
"slice": 8,
"created": "2013-12-18T21:29:07.834Z",
"amount": 0.56,
@@ -23643,7 +25434,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23660,7 +25452,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23677,7 +25470,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23694,7 +25488,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23711,7 +25506,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23728,7 +25524,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23745,7 +25542,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23762,7 +25560,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23779,7 +25578,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23796,7 +25596,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23813,7 +25614,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23830,7 +25632,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23847,7 +25650,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23864,7 +25668,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23881,7 +25686,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23898,7 +25704,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23915,7 +25722,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23932,7 +25740,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23941,7 +25750,7 @@
"fields": {
"updated": "2013-12-18T21:29:21.130Z",
"slice": 9,
- "created": "2013-12-18T21:29:08.000Z",
+ "created": "2013-12-18T21:29:08Z",
"amount": 0.56,
"object": 112,
"account": 15,
@@ -23949,7 +25758,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23966,7 +25776,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -23983,7 +25794,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24000,7 +25812,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24017,7 +25830,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24034,7 +25848,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24051,7 +25866,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24068,7 +25884,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24085,7 +25902,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24102,7 +25920,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24119,7 +25938,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24136,7 +25956,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24153,7 +25974,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24170,7 +25992,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24187,7 +26010,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24204,7 +26028,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24221,7 +26046,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24238,7 +26064,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24255,7 +26082,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24272,7 +26100,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24289,7 +26118,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24306,7 +26136,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24323,7 +26154,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24340,7 +26172,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24357,7 +26190,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24374,7 +26208,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24391,7 +26226,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24408,7 +26244,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24425,7 +26262,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24442,7 +26280,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24459,7 +26298,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24476,7 +26316,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24493,7 +26334,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24510,7 +26352,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24527,7 +26370,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24544,7 +26388,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24561,7 +26406,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24578,7 +26424,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24595,7 +26442,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24612,7 +26460,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24629,7 +26478,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24646,7 +26496,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24663,7 +26514,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24680,7 +26532,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24697,7 +26550,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24714,7 +26568,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24731,7 +26586,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24748,7 +26604,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24765,7 +26622,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24782,7 +26640,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24799,7 +26658,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24816,7 +26676,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24833,7 +26694,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24850,7 +26712,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24867,7 +26730,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24884,7 +26748,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24901,7 +26766,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24918,7 +26784,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24935,7 +26802,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24952,7 +26820,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24969,7 +26838,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -24986,7 +26856,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25003,7 +26874,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25020,7 +26892,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25037,7 +26910,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25054,7 +26928,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25071,7 +26946,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25088,7 +26964,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25105,7 +26982,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25122,7 +27000,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25139,7 +27018,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25156,7 +27036,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25173,7 +27054,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25190,7 +27072,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25207,7 +27090,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25224,7 +27108,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25241,7 +27126,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25258,7 +27144,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25275,7 +27162,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25292,7 +27180,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25309,7 +27198,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25326,7 +27216,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -25343,7 +27234,8 @@
"coreHours": 2.64,
"invoice": 73,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25360,7 +27252,8 @@
"coreHours": 2.96,
"invoice": 74,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25377,7 +27270,8 @@
"coreHours": 4.64,
"invoice": 74,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25394,7 +27288,8 @@
"coreHours": 3.36,
"invoice": 74,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25411,7 +27306,8 @@
"coreHours": 4.72,
"invoice": 74,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25428,7 +27324,8 @@
"coreHours": 4.4,
"invoice": 74,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25445,7 +27342,8 @@
"coreHours": 1.76,
"invoice": 74,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25462,7 +27360,8 @@
"coreHours": 2.24,
"invoice": 74,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25479,7 +27378,8 @@
"coreHours": 3.92,
"invoice": 74,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25496,7 +27396,8 @@
"coreHours": 3.12,
"invoice": 74,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25513,7 +27414,8 @@
"coreHours": 3.12,
"invoice": 74,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25530,7 +27432,8 @@
"coreHours": 2.0,
"invoice": 74,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25547,7 +27450,8 @@
"coreHours": 3.36,
"invoice": 74,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25564,7 +27468,8 @@
"coreHours": 1.76,
"invoice": 74,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25581,7 +27486,8 @@
"coreHours": 2.88,
"invoice": 74,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25598,7 +27504,8 @@
"coreHours": 4.0,
"invoice": 74,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25615,7 +27522,8 @@
"coreHours": 3.44,
"invoice": 74,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25632,7 +27540,8 @@
"coreHours": 2.96,
"invoice": 74,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25649,7 +27558,8 @@
"coreHours": 3.28,
"invoice": 74,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25666,7 +27576,8 @@
"coreHours": 4.0,
"invoice": 75,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25683,7 +27594,8 @@
"coreHours": 4.32,
"invoice": 75,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25700,7 +27612,8 @@
"coreHours": 2.16,
"invoice": 75,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25717,7 +27630,8 @@
"coreHours": 2.8,
"invoice": 75,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25734,7 +27648,8 @@
"coreHours": 1.6,
"invoice": 75,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25751,7 +27666,8 @@
"coreHours": 3.84,
"invoice": 75,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25768,7 +27684,8 @@
"coreHours": 4.8,
"invoice": 75,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25785,7 +27702,8 @@
"coreHours": 3.28,
"invoice": 75,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25802,7 +27720,8 @@
"coreHours": 4.16,
"invoice": 75,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25819,7 +27738,8 @@
"coreHours": 4.4,
"invoice": 75,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25836,7 +27756,8 @@
"coreHours": 4.4,
"invoice": 75,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25853,7 +27774,8 @@
"coreHours": 4.8,
"invoice": 75,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25870,7 +27792,8 @@
"coreHours": 4.8,
"invoice": 75,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25887,7 +27810,8 @@
"coreHours": 4.8,
"invoice": 75,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25904,7 +27828,8 @@
"coreHours": 3.2,
"invoice": 75,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25921,7 +27846,8 @@
"coreHours": 4.72,
"invoice": 75,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25938,7 +27864,8 @@
"coreHours": 4.48,
"invoice": 75,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25955,7 +27882,8 @@
"coreHours": 4.08,
"invoice": 75,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25972,7 +27900,8 @@
"coreHours": 4.8,
"invoice": 75,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -25989,7 +27918,8 @@
"coreHours": 3.04,
"invoice": 75,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26006,7 +27936,8 @@
"coreHours": 2.08,
"invoice": 75,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26023,7 +27954,8 @@
"coreHours": 3.04,
"invoice": 76,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26040,7 +27972,8 @@
"coreHours": 3.68,
"invoice": 76,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26057,7 +27990,8 @@
"coreHours": 4.08,
"invoice": 76,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26074,7 +28008,8 @@
"coreHours": 3.52,
"invoice": 76,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26091,7 +28026,8 @@
"coreHours": 2.48,
"invoice": 76,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26108,7 +28044,8 @@
"coreHours": 3.52,
"invoice": 76,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26125,7 +28062,8 @@
"coreHours": 3.92,
"invoice": 76,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26142,7 +28080,8 @@
"coreHours": 2.88,
"invoice": 76,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26159,7 +28098,8 @@
"coreHours": 4.4,
"invoice": 76,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26176,7 +28116,8 @@
"coreHours": 1.84,
"invoice": 76,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26193,7 +28134,8 @@
"coreHours": 1.76,
"invoice": 76,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26210,7 +28152,8 @@
"coreHours": 3.12,
"invoice": 76,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26227,7 +28170,8 @@
"coreHours": 4.56,
"invoice": 76,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26244,7 +28188,8 @@
"coreHours": 4.56,
"invoice": 76,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26261,7 +28206,8 @@
"coreHours": 3.92,
"invoice": 76,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26278,7 +28224,8 @@
"coreHours": 1.76,
"invoice": 76,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26295,7 +28242,8 @@
"coreHours": 4.16,
"invoice": 76,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26312,7 +28260,8 @@
"coreHours": 4.72,
"invoice": 76,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26329,7 +28278,8 @@
"coreHours": 3.2,
"invoice": 76,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26346,7 +28296,8 @@
"coreHours": 2.08,
"invoice": 76,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26363,7 +28314,8 @@
"coreHours": 4.56,
"invoice": 76,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26380,7 +28332,8 @@
"coreHours": 3.68,
"invoice": 77,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26397,7 +28350,8 @@
"coreHours": 2.4,
"invoice": 77,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26414,7 +28368,8 @@
"coreHours": 4.08,
"invoice": 77,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26431,7 +28386,8 @@
"coreHours": 1.76,
"invoice": 77,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26448,7 +28404,8 @@
"coreHours": 2.4,
"invoice": 77,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26465,7 +28422,8 @@
"coreHours": 2.56,
"invoice": 77,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26482,7 +28440,8 @@
"coreHours": 4.56,
"invoice": 77,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26499,7 +28458,8 @@
"coreHours": 2.48,
"invoice": 77,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26516,7 +28476,8 @@
"coreHours": 2.8,
"invoice": 77,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26533,7 +28494,8 @@
"coreHours": 1.6,
"invoice": 77,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26550,7 +28512,8 @@
"coreHours": 4.08,
"invoice": 77,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26567,7 +28530,8 @@
"coreHours": 2.24,
"invoice": 77,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26584,7 +28548,8 @@
"coreHours": 3.44,
"invoice": 77,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26601,7 +28566,8 @@
"coreHours": 4.16,
"invoice": 77,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26618,7 +28584,8 @@
"coreHours": 2.16,
"invoice": 77,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26635,7 +28602,8 @@
"coreHours": 3.76,
"invoice": 77,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26652,7 +28620,8 @@
"coreHours": 3.92,
"invoice": 77,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26669,7 +28638,8 @@
"coreHours": 2.16,
"invoice": 77,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26686,7 +28656,8 @@
"coreHours": 4.08,
"invoice": 77,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26703,7 +28674,8 @@
"coreHours": 4.08,
"invoice": 77,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26720,7 +28692,8 @@
"coreHours": 4.48,
"invoice": 77,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26737,7 +28710,8 @@
"coreHours": 1.68,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26754,7 +28728,8 @@
"coreHours": 3.04,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26771,7 +28746,8 @@
"coreHours": 4.0,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26788,7 +28764,8 @@
"coreHours": 3.2,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26805,7 +28782,8 @@
"coreHours": 3.12,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26822,7 +28800,8 @@
"coreHours": 3.52,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26839,7 +28818,8 @@
"coreHours": 4.4,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26856,7 +28836,8 @@
"coreHours": 4.32,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26873,7 +28854,8 @@
"coreHours": 3.36,
"invoice": 74,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26890,7 +28872,8 @@
"coreHours": 4.4,
"invoice": 74,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26907,7 +28890,8 @@
"coreHours": 3.68,
"invoice": 74,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26924,7 +28908,8 @@
"coreHours": 4.56,
"invoice": 74,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26941,7 +28926,8 @@
"coreHours": 2.72,
"invoice": 74,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26958,7 +28944,8 @@
"coreHours": 4.48,
"invoice": 74,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26975,7 +28962,8 @@
"coreHours": 1.68,
"invoice": 74,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -26992,7 +28980,8 @@
"coreHours": 4.0,
"invoice": 74,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27009,7 +28998,8 @@
"coreHours": 1.76,
"invoice": 74,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27026,7 +29016,8 @@
"coreHours": 4.48,
"invoice": 74,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27043,7 +29034,8 @@
"coreHours": 2.08,
"invoice": 74,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27060,7 +29052,8 @@
"coreHours": 3.68,
"invoice": 74,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27077,7 +29070,8 @@
"coreHours": 2.88,
"invoice": 74,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27094,7 +29088,8 @@
"coreHours": 4.32,
"invoice": 74,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27111,7 +29106,8 @@
"coreHours": 4.48,
"invoice": 74,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27128,7 +29124,8 @@
"coreHours": 3.04,
"invoice": 74,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27145,7 +29142,8 @@
"coreHours": 2.64,
"invoice": 74,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27162,7 +29160,8 @@
"coreHours": 4.48,
"invoice": 74,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27179,7 +29178,8 @@
"coreHours": 2.08,
"invoice": 74,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27196,7 +29196,8 @@
"coreHours": 3.68,
"invoice": 75,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27213,7 +29214,8 @@
"coreHours": 4.16,
"invoice": 75,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27230,7 +29232,8 @@
"coreHours": 3.92,
"invoice": 75,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27247,7 +29250,8 @@
"coreHours": 3.28,
"invoice": 75,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27264,7 +29268,8 @@
"coreHours": 4.4,
"invoice": 75,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27281,7 +29286,8 @@
"coreHours": 2.48,
"invoice": 75,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27298,7 +29304,8 @@
"coreHours": 1.68,
"invoice": 75,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27315,7 +29322,8 @@
"coreHours": 2.48,
"invoice": 75,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27332,7 +29340,8 @@
"coreHours": 4.24,
"invoice": 75,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27349,7 +29358,8 @@
"coreHours": 3.6,
"invoice": 75,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27366,7 +29376,8 @@
"coreHours": 3.76,
"invoice": 75,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27383,7 +29394,8 @@
"coreHours": 2.08,
"invoice": 75,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27400,7 +29412,8 @@
"coreHours": 2.16,
"invoice": 75,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27417,7 +29430,8 @@
"coreHours": 2.96,
"invoice": 75,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27434,7 +29448,8 @@
"coreHours": 2.32,
"invoice": 75,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27451,7 +29466,8 @@
"coreHours": 2.64,
"invoice": 75,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27468,7 +29484,8 @@
"coreHours": 1.68,
"invoice": 75,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27485,7 +29502,8 @@
"coreHours": 2.8,
"invoice": 75,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27502,7 +29520,8 @@
"coreHours": 2.56,
"invoice": 75,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27519,7 +29538,8 @@
"coreHours": 3.44,
"invoice": 75,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27536,7 +29556,8 @@
"coreHours": 2.0,
"invoice": 75,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27553,7 +29574,8 @@
"coreHours": 1.6,
"invoice": 76,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27570,7 +29592,8 @@
"coreHours": 4.48,
"invoice": 76,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27587,7 +29610,8 @@
"coreHours": 2.08,
"invoice": 76,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27604,7 +29628,8 @@
"coreHours": 4.16,
"invoice": 76,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27621,7 +29646,8 @@
"coreHours": 3.04,
"invoice": 76,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27638,7 +29664,8 @@
"coreHours": 2.64,
"invoice": 76,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27655,7 +29682,8 @@
"coreHours": 4.72,
"invoice": 76,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27672,7 +29700,8 @@
"coreHours": 4.0,
"invoice": 76,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27689,7 +29718,8 @@
"coreHours": 4.4,
"invoice": 76,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27706,7 +29736,8 @@
"coreHours": 4.72,
"invoice": 76,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27723,7 +29754,8 @@
"coreHours": 3.52,
"invoice": 76,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27740,7 +29772,8 @@
"coreHours": 4.48,
"invoice": 76,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27757,7 +29790,8 @@
"coreHours": 1.6,
"invoice": 76,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27774,7 +29808,8 @@
"coreHours": 3.92,
"invoice": 76,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27791,7 +29826,8 @@
"coreHours": 2.56,
"invoice": 76,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27808,7 +29844,8 @@
"coreHours": 2.24,
"invoice": 76,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27825,7 +29862,8 @@
"coreHours": 3.44,
"invoice": 76,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27842,7 +29880,8 @@
"coreHours": 1.68,
"invoice": 76,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27859,7 +29898,8 @@
"coreHours": 1.68,
"invoice": 76,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27876,7 +29916,8 @@
"coreHours": 4.72,
"invoice": 76,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27893,7 +29934,8 @@
"coreHours": 2.8,
"invoice": 76,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27910,7 +29952,8 @@
"coreHours": 3.92,
"invoice": 77,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27927,7 +29970,8 @@
"coreHours": 2.56,
"invoice": 77,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27944,7 +29988,8 @@
"coreHours": 1.6,
"invoice": 77,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27961,7 +30006,8 @@
"coreHours": 3.28,
"invoice": 77,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27978,7 +30024,8 @@
"coreHours": 1.76,
"invoice": 77,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -27995,7 +30042,8 @@
"coreHours": 2.64,
"invoice": 77,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28012,7 +30060,8 @@
"coreHours": 3.28,
"invoice": 77,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28029,7 +30078,8 @@
"coreHours": 4.24,
"invoice": 77,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28046,7 +30096,8 @@
"coreHours": 1.6,
"invoice": 77,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28063,7 +30114,8 @@
"coreHours": 3.68,
"invoice": 77,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28080,7 +30132,8 @@
"coreHours": 4.08,
"invoice": 77,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28097,7 +30150,8 @@
"coreHours": 3.68,
"invoice": 77,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28114,7 +30168,8 @@
"coreHours": 3.84,
"invoice": 77,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28131,7 +30186,8 @@
"coreHours": 3.6,
"invoice": 77,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28148,7 +30204,8 @@
"coreHours": 2.0,
"invoice": 77,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28165,7 +30222,8 @@
"coreHours": 4.72,
"invoice": 77,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28182,7 +30240,8 @@
"coreHours": 4.72,
"invoice": 77,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28199,7 +30258,8 @@
"coreHours": 2.64,
"invoice": 77,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28216,7 +30276,8 @@
"coreHours": 4.08,
"invoice": 77,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28233,7 +30294,8 @@
"coreHours": 4.16,
"invoice": 77,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28250,7 +30312,8 @@
"coreHours": 3.6,
"invoice": 77,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28267,7 +30330,8 @@
"coreHours": 2.0,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28284,7 +30348,8 @@
"coreHours": 2.0,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28301,7 +30366,8 @@
"coreHours": 3.12,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28318,7 +30384,8 @@
"coreHours": 2.72,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28335,7 +30402,8 @@
"coreHours": 2.32,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28352,7 +30420,8 @@
"coreHours": 3.6,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28369,7 +30438,8 @@
"coreHours": 2.72,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28386,7 +30456,8 @@
"coreHours": 3.2,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -28403,7 +30474,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28420,7 +30492,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28437,7 +30510,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28454,7 +30528,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28471,7 +30546,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28488,7 +30564,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28505,7 +30582,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28522,7 +30600,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28539,7 +30618,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28556,7 +30636,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28573,7 +30654,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28590,7 +30672,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28607,7 +30690,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28624,7 +30708,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28641,7 +30726,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28658,14 +30744,15 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
"pk": 60857,
"model": "core.charge",
"fields": {
- "updated": "2013-12-18T21:29:22.000Z",
+ "updated": "2013-12-18T21:29:22Z",
"slice": 13,
"created": "2013-12-18T21:29:10.361Z",
"amount": 0.56,
@@ -28675,7 +30762,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28692,7 +30780,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28709,7 +30798,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28726,7 +30816,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28743,7 +30834,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28760,7 +30852,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28777,7 +30870,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28794,7 +30888,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28811,7 +30906,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28828,7 +30924,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28845,7 +30942,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28862,7 +30960,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28879,7 +30978,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28896,7 +30996,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28913,7 +31014,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28930,7 +31032,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28947,7 +31050,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28964,7 +31068,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28981,7 +31086,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -28998,7 +31104,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29015,7 +31122,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29032,7 +31140,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29049,7 +31158,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29066,7 +31176,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29083,7 +31194,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29100,7 +31212,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29117,7 +31230,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29134,7 +31248,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29151,7 +31266,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29168,7 +31284,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29185,7 +31302,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29202,7 +31320,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29219,7 +31338,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29236,7 +31356,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29253,7 +31374,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29270,7 +31392,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29287,7 +31410,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29304,7 +31428,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29321,7 +31446,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29338,7 +31464,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29355,7 +31482,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29372,7 +31500,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29389,7 +31518,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29406,7 +31536,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29423,7 +31554,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29440,7 +31572,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29457,7 +31590,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29474,7 +31608,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29491,7 +31626,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29508,7 +31644,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29525,7 +31662,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29542,7 +31680,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29559,7 +31698,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29576,7 +31716,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29593,7 +31734,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29610,7 +31752,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29627,7 +31770,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29644,7 +31788,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29661,7 +31806,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29678,7 +31824,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29695,7 +31842,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29712,7 +31860,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29729,7 +31878,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29746,7 +31896,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29763,7 +31914,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29780,7 +31932,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29797,7 +31950,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29814,7 +31968,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29831,7 +31986,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29848,7 +32004,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29865,7 +32022,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29882,7 +32040,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29899,7 +32058,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29916,7 +32076,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29933,7 +32094,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29950,7 +32112,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29967,7 +32130,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -29984,7 +32148,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30001,7 +32166,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30018,7 +32184,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30035,7 +32202,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30052,7 +32220,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30069,7 +32238,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30086,7 +32256,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30103,7 +32274,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30120,7 +32292,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30137,7 +32310,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30154,7 +32328,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30171,7 +32346,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30188,7 +32364,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30205,7 +32382,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30222,7 +32400,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30239,7 +32418,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30256,7 +32436,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30273,7 +32454,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30290,7 +32472,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30307,7 +32490,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30324,7 +32508,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30341,7 +32526,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30358,7 +32544,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30375,7 +32562,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30392,7 +32580,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30409,7 +32598,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30426,7 +32616,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30443,7 +32634,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30460,7 +32652,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30477,7 +32670,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30494,7 +32688,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30511,7 +32706,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30528,7 +32724,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30545,7 +32742,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30562,7 +32760,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30579,7 +32778,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30596,7 +32796,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30613,7 +32814,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30630,7 +32832,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30647,7 +32850,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30664,7 +32868,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30681,7 +32886,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30698,7 +32904,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30715,7 +32922,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30732,7 +32940,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30749,7 +32958,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30766,7 +32976,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30783,7 +32994,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30800,7 +33012,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30817,7 +33030,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30834,7 +33048,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30851,7 +33066,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30868,7 +33084,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30885,7 +33102,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30902,7 +33120,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30919,7 +33138,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30936,7 +33156,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30953,7 +33174,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30970,7 +33192,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -30987,7 +33210,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31004,7 +33228,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31021,7 +33246,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31038,7 +33264,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31055,7 +33282,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31072,7 +33300,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31089,7 +33318,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31106,7 +33336,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31123,7 +33354,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31140,7 +33372,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31157,7 +33390,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31174,7 +33408,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31191,7 +33426,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31208,7 +33444,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31225,7 +33462,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31242,7 +33480,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31259,7 +33498,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31276,7 +33516,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31293,7 +33534,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31310,7 +33552,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31327,7 +33570,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31344,7 +33588,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31361,7 +33606,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31378,7 +33624,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31395,7 +33642,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31412,7 +33660,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31429,7 +33678,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31446,7 +33696,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31463,7 +33714,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-18T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31480,7 +33732,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31497,7 +33750,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31514,7 +33768,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-19T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31531,7 +33786,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31548,7 +33804,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31565,7 +33822,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-20T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31582,7 +33840,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31599,7 +33858,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31616,7 +33876,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-21T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31633,7 +33894,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31650,7 +33912,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31667,7 +33930,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-22T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31684,7 +33948,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31701,7 +33966,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31718,7 +33984,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-23T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31735,7 +34002,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31752,7 +34020,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31769,7 +34038,8 @@
"coreHours": 8.0,
"invoice": 69,
"date": "2013-11-24T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31786,7 +34056,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31803,7 +34074,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31820,7 +34092,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-25T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31837,7 +34110,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31854,7 +34128,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31871,7 +34146,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-26T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31888,7 +34164,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31905,7 +34182,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31922,7 +34200,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-27T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31939,7 +34218,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31956,7 +34236,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31973,7 +34254,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-28T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -31990,7 +34272,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32007,7 +34290,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32024,7 +34308,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-29T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32041,7 +34326,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32058,7 +34344,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32075,7 +34362,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-11-30T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32092,7 +34380,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32109,7 +34398,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32126,7 +34416,8 @@
"coreHours": 8.0,
"invoice": 70,
"date": "2013-12-01T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32143,7 +34434,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32160,7 +34452,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32177,7 +34470,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-02T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32194,7 +34488,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32211,7 +34506,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32228,7 +34524,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-03T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32245,7 +34542,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32262,7 +34560,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32279,7 +34578,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-04T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32296,7 +34596,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32313,7 +34614,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32330,7 +34632,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-05T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32347,7 +34650,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32364,7 +34668,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32381,7 +34686,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-06T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32398,7 +34704,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32415,7 +34722,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32432,7 +34740,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-07T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32449,7 +34758,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32466,7 +34776,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32483,7 +34794,8 @@
"coreHours": 8.0,
"invoice": 71,
"date": "2013-12-08T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32500,7 +34812,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32517,7 +34830,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32534,7 +34848,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-09T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32551,7 +34866,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32568,7 +34884,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32585,7 +34902,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-10T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32602,7 +34920,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32619,7 +34938,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32636,7 +34956,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-11T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32653,7 +34974,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32670,7 +34992,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32687,7 +35010,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-12T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32704,7 +35028,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32721,7 +35046,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32738,7 +35064,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-13T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32755,7 +35082,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32772,7 +35100,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32789,7 +35118,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-14T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32806,7 +35136,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32823,7 +35154,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32840,7 +35172,8 @@
"coreHours": 8.0,
"invoice": 72,
"date": "2013-12-15T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32857,7 +35190,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32874,7 +35208,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32891,7 +35226,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32908,7 +35244,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32925,7 +35262,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32942,7 +35280,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32959,7 +35298,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32976,7 +35316,8 @@
"coreHours": 8.0,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "reservation"
+ "kind": "reservation",
+ "enacted": null
}
},
{
@@ -32993,7 +35334,8 @@
"coreHours": 4.08,
"invoice": 64,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33010,7 +35352,8 @@
"coreHours": 4.48,
"invoice": 64,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33027,7 +35370,8 @@
"coreHours": 4.4,
"invoice": 64,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33044,7 +35388,8 @@
"coreHours": 2.96,
"invoice": 64,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33061,7 +35406,8 @@
"coreHours": 2.96,
"invoice": 64,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33078,7 +35424,8 @@
"coreHours": 3.6,
"invoice": 64,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33095,7 +35442,8 @@
"coreHours": 3.84,
"invoice": 64,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33112,7 +35460,8 @@
"coreHours": 4.48,
"invoice": 64,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33129,7 +35478,8 @@
"coreHours": 4.64,
"invoice": 64,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33146,7 +35496,8 @@
"coreHours": 2.96,
"invoice": 64,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33163,7 +35514,8 @@
"coreHours": 3.68,
"invoice": 64,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33180,7 +35532,8 @@
"coreHours": 2.0,
"invoice": 64,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33197,7 +35550,8 @@
"coreHours": 2.16,
"invoice": 64,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33214,7 +35568,8 @@
"coreHours": 4.0,
"invoice": 64,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33231,7 +35586,8 @@
"coreHours": 3.44,
"invoice": 64,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33248,7 +35604,8 @@
"coreHours": 4.4,
"invoice": 64,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33265,7 +35622,8 @@
"coreHours": 4.08,
"invoice": 64,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33282,7 +35640,8 @@
"coreHours": 1.76,
"invoice": 64,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33299,7 +35658,8 @@
"coreHours": 2.64,
"invoice": 64,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33316,7 +35676,8 @@
"coreHours": 2.88,
"invoice": 65,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33333,7 +35694,8 @@
"coreHours": 3.28,
"invoice": 65,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33350,7 +35712,8 @@
"coreHours": 4.24,
"invoice": 65,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33367,7 +35730,8 @@
"coreHours": 2.48,
"invoice": 65,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33384,7 +35748,8 @@
"coreHours": 4.8,
"invoice": 65,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33401,7 +35766,8 @@
"coreHours": 4.4,
"invoice": 65,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33418,7 +35784,8 @@
"coreHours": 3.92,
"invoice": 65,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33435,7 +35802,8 @@
"coreHours": 2.88,
"invoice": 65,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33452,7 +35820,8 @@
"coreHours": 2.16,
"invoice": 65,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33469,7 +35838,8 @@
"coreHours": 4.16,
"invoice": 65,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33486,7 +35856,8 @@
"coreHours": 4.64,
"invoice": 65,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33503,7 +35874,8 @@
"coreHours": 4.56,
"invoice": 65,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33520,7 +35892,8 @@
"coreHours": 2.48,
"invoice": 65,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33537,7 +35910,8 @@
"coreHours": 3.76,
"invoice": 65,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33554,7 +35928,8 @@
"coreHours": 3.52,
"invoice": 65,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33571,7 +35946,8 @@
"coreHours": 4.56,
"invoice": 65,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33588,7 +35964,8 @@
"coreHours": 4.0,
"invoice": 65,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33605,7 +35982,8 @@
"coreHours": 1.84,
"invoice": 65,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33622,7 +36000,8 @@
"coreHours": 2.24,
"invoice": 65,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33639,7 +36018,8 @@
"coreHours": 2.72,
"invoice": 65,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33656,7 +36036,8 @@
"coreHours": 4.48,
"invoice": 65,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33673,7 +36054,8 @@
"coreHours": 2.08,
"invoice": 66,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33690,7 +36072,8 @@
"coreHours": 3.52,
"invoice": 66,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33707,7 +36090,8 @@
"coreHours": 3.52,
"invoice": 66,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33724,7 +36108,8 @@
"coreHours": 2.88,
"invoice": 66,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33741,7 +36126,8 @@
"coreHours": 2.48,
"invoice": 66,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33758,7 +36144,8 @@
"coreHours": 3.44,
"invoice": 66,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33775,7 +36162,8 @@
"coreHours": 4.16,
"invoice": 66,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33792,7 +36180,8 @@
"coreHours": 1.84,
"invoice": 66,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33809,7 +36198,8 @@
"coreHours": 3.76,
"invoice": 66,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33826,7 +36216,8 @@
"coreHours": 4.32,
"invoice": 66,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33843,7 +36234,8 @@
"coreHours": 3.28,
"invoice": 66,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33860,7 +36252,8 @@
"coreHours": 4.72,
"invoice": 66,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33877,7 +36270,8 @@
"coreHours": 1.68,
"invoice": 66,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33894,7 +36288,8 @@
"coreHours": 4.0,
"invoice": 66,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33911,7 +36306,8 @@
"coreHours": 3.2,
"invoice": 66,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33928,7 +36324,8 @@
"coreHours": 3.84,
"invoice": 66,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33945,7 +36342,8 @@
"coreHours": 2.24,
"invoice": 66,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33962,7 +36360,8 @@
"coreHours": 2.32,
"invoice": 66,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33979,7 +36378,8 @@
"coreHours": 3.84,
"invoice": 66,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -33996,7 +36396,8 @@
"coreHours": 4.16,
"invoice": 66,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34013,7 +36414,8 @@
"coreHours": 1.92,
"invoice": 66,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34030,7 +36432,8 @@
"coreHours": 2.8,
"invoice": 67,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34047,7 +36450,8 @@
"coreHours": 3.12,
"invoice": 67,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34064,7 +36468,8 @@
"coreHours": 4.72,
"invoice": 67,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34081,7 +36486,8 @@
"coreHours": 3.12,
"invoice": 67,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34098,7 +36504,8 @@
"coreHours": 1.68,
"invoice": 67,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34115,7 +36522,8 @@
"coreHours": 2.32,
"invoice": 67,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34132,7 +36540,8 @@
"coreHours": 4.24,
"invoice": 67,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34149,7 +36558,8 @@
"coreHours": 1.92,
"invoice": 67,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34166,7 +36576,8 @@
"coreHours": 4.48,
"invoice": 67,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34183,7 +36594,8 @@
"coreHours": 1.92,
"invoice": 67,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34200,7 +36612,8 @@
"coreHours": 1.6,
"invoice": 67,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34217,7 +36630,8 @@
"coreHours": 1.68,
"invoice": 67,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34234,7 +36648,8 @@
"coreHours": 2.08,
"invoice": 67,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34251,7 +36666,8 @@
"coreHours": 4.4,
"invoice": 67,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34268,7 +36684,8 @@
"coreHours": 4.0,
"invoice": 67,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34285,7 +36702,8 @@
"coreHours": 4.8,
"invoice": 67,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34302,7 +36720,8 @@
"coreHours": 1.92,
"invoice": 67,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34319,7 +36738,8 @@
"coreHours": 4.48,
"invoice": 67,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34336,7 +36756,8 @@
"coreHours": 4.32,
"invoice": 67,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34353,7 +36774,8 @@
"coreHours": 1.6,
"invoice": 67,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34370,7 +36792,8 @@
"coreHours": 4.08,
"invoice": 67,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34387,7 +36810,8 @@
"coreHours": 1.84,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34404,7 +36828,8 @@
"coreHours": 4.8,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34421,7 +36846,8 @@
"coreHours": 2.32,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34438,7 +36864,8 @@
"coreHours": 2.72,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34455,7 +36882,8 @@
"coreHours": 4.56,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34472,7 +36900,8 @@
"coreHours": 2.0,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34489,7 +36918,8 @@
"coreHours": 1.84,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34506,7 +36936,8 @@
"coreHours": 3.76,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34523,7 +36954,8 @@
"coreHours": 4.24,
"invoice": 63,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34540,7 +36972,8 @@
"coreHours": 2.96,
"invoice": 64,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34557,7 +36990,8 @@
"coreHours": 4.24,
"invoice": 64,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34574,7 +37008,8 @@
"coreHours": 3.28,
"invoice": 64,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34591,7 +37026,8 @@
"coreHours": 2.0,
"invoice": 64,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34608,7 +37044,8 @@
"coreHours": 4.24,
"invoice": 64,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34625,7 +37062,8 @@
"coreHours": 2.16,
"invoice": 64,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34642,7 +37080,8 @@
"coreHours": 4.8,
"invoice": 64,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34659,7 +37098,8 @@
"coreHours": 3.84,
"invoice": 64,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34676,7 +37116,8 @@
"coreHours": 4.4,
"invoice": 64,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34693,7 +37134,8 @@
"coreHours": 2.56,
"invoice": 64,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34710,7 +37152,8 @@
"coreHours": 4.72,
"invoice": 64,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34727,7 +37170,8 @@
"coreHours": 1.84,
"invoice": 64,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34744,7 +37188,8 @@
"coreHours": 3.36,
"invoice": 64,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34761,7 +37206,8 @@
"coreHours": 4.72,
"invoice": 64,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34778,7 +37224,8 @@
"coreHours": 4.16,
"invoice": 64,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34795,7 +37242,8 @@
"coreHours": 2.16,
"invoice": 64,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34812,7 +37260,8 @@
"coreHours": 1.6,
"invoice": 64,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34829,7 +37278,8 @@
"coreHours": 4.48,
"invoice": 64,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34846,7 +37296,8 @@
"coreHours": 2.16,
"invoice": 65,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34863,7 +37314,8 @@
"coreHours": 2.88,
"invoice": 65,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34880,7 +37332,8 @@
"coreHours": 4.24,
"invoice": 65,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34897,7 +37350,8 @@
"coreHours": 2.48,
"invoice": 65,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34914,7 +37368,8 @@
"coreHours": 4.72,
"invoice": 65,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34931,7 +37386,8 @@
"coreHours": 4.64,
"invoice": 65,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34948,7 +37404,8 @@
"coreHours": 1.92,
"invoice": 65,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34965,7 +37422,8 @@
"coreHours": 2.72,
"invoice": 65,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34982,7 +37440,8 @@
"coreHours": 3.68,
"invoice": 65,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -34999,7 +37458,8 @@
"coreHours": 4.32,
"invoice": 65,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35016,7 +37476,8 @@
"coreHours": 4.8,
"invoice": 65,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35033,7 +37494,8 @@
"coreHours": 2.88,
"invoice": 65,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35050,7 +37512,8 @@
"coreHours": 2.0,
"invoice": 65,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35067,7 +37530,8 @@
"coreHours": 2.0,
"invoice": 65,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35084,7 +37548,8 @@
"coreHours": 1.76,
"invoice": 65,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35101,7 +37566,8 @@
"coreHours": 4.48,
"invoice": 65,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35118,7 +37584,8 @@
"coreHours": 4.32,
"invoice": 65,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35135,7 +37602,8 @@
"coreHours": 4.24,
"invoice": 65,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35152,7 +37620,8 @@
"coreHours": 4.56,
"invoice": 65,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35169,7 +37638,8 @@
"coreHours": 2.8,
"invoice": 65,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35186,7 +37656,8 @@
"coreHours": 1.92,
"invoice": 65,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35203,7 +37674,8 @@
"coreHours": 2.16,
"invoice": 66,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35220,7 +37692,8 @@
"coreHours": 4.72,
"invoice": 66,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35237,7 +37710,8 @@
"coreHours": 2.72,
"invoice": 66,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35254,7 +37728,8 @@
"coreHours": 4.16,
"invoice": 66,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35271,7 +37746,8 @@
"coreHours": 4.48,
"invoice": 66,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35288,7 +37764,8 @@
"coreHours": 4.0,
"invoice": 66,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35305,7 +37782,8 @@
"coreHours": 4.08,
"invoice": 66,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35322,7 +37800,8 @@
"coreHours": 1.68,
"invoice": 66,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35339,7 +37818,8 @@
"coreHours": 2.48,
"invoice": 66,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35356,7 +37836,8 @@
"coreHours": 3.12,
"invoice": 66,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35373,7 +37854,8 @@
"coreHours": 2.32,
"invoice": 66,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35390,7 +37872,8 @@
"coreHours": 4.56,
"invoice": 66,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35407,7 +37890,8 @@
"coreHours": 4.08,
"invoice": 66,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35424,7 +37908,8 @@
"coreHours": 1.6,
"invoice": 66,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35441,7 +37926,8 @@
"coreHours": 3.84,
"invoice": 66,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35458,7 +37944,8 @@
"coreHours": 1.68,
"invoice": 66,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35475,7 +37962,8 @@
"coreHours": 3.84,
"invoice": 66,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35492,7 +37980,8 @@
"coreHours": 3.28,
"invoice": 66,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35509,7 +37998,8 @@
"coreHours": 3.2,
"invoice": 66,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35526,7 +38016,8 @@
"coreHours": 4.08,
"invoice": 66,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35543,7 +38034,8 @@
"coreHours": 3.2,
"invoice": 66,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35560,7 +38052,8 @@
"coreHours": 3.68,
"invoice": 67,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35577,7 +38070,8 @@
"coreHours": 3.28,
"invoice": 67,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35594,7 +38088,8 @@
"coreHours": 3.76,
"invoice": 67,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35611,7 +38106,8 @@
"coreHours": 4.08,
"invoice": 67,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35628,7 +38124,8 @@
"coreHours": 4.8,
"invoice": 67,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35645,7 +38142,8 @@
"coreHours": 4.48,
"invoice": 67,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35662,7 +38160,8 @@
"coreHours": 4.24,
"invoice": 67,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35679,7 +38178,8 @@
"coreHours": 2.72,
"invoice": 67,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35696,7 +38196,8 @@
"coreHours": 3.12,
"invoice": 67,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35713,7 +38214,8 @@
"coreHours": 3.36,
"invoice": 67,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35730,7 +38232,8 @@
"coreHours": 1.68,
"invoice": 67,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35747,7 +38250,8 @@
"coreHours": 3.52,
"invoice": 67,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35764,7 +38268,8 @@
"coreHours": 4.48,
"invoice": 67,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35781,7 +38286,8 @@
"coreHours": 2.8,
"invoice": 67,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35798,7 +38304,8 @@
"coreHours": 2.32,
"invoice": 67,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35815,7 +38322,8 @@
"coreHours": 1.76,
"invoice": 67,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35832,7 +38340,8 @@
"coreHours": 3.28,
"invoice": 67,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35849,7 +38358,8 @@
"coreHours": 4.0,
"invoice": 67,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35866,7 +38376,8 @@
"coreHours": 2.88,
"invoice": 67,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35883,7 +38394,8 @@
"coreHours": 2.32,
"invoice": 67,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35900,7 +38412,8 @@
"coreHours": 4.16,
"invoice": 67,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35917,7 +38430,8 @@
"coreHours": 1.92,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35934,7 +38448,8 @@
"coreHours": 2.64,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35951,7 +38466,8 @@
"coreHours": 3.04,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35968,7 +38484,8 @@
"coreHours": 3.52,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -35985,7 +38502,8 @@
"coreHours": 3.36,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36002,7 +38520,8 @@
"coreHours": 3.04,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36019,7 +38538,8 @@
"coreHours": 2.0,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36036,7 +38556,8 @@
"coreHours": 2.56,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36053,7 +38574,8 @@
"coreHours": 1.76,
"invoice": 64,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36070,7 +38592,8 @@
"coreHours": 1.84,
"invoice": 64,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36087,7 +38610,8 @@
"coreHours": 4.08,
"invoice": 64,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36104,7 +38628,8 @@
"coreHours": 2.0,
"invoice": 64,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36121,7 +38646,8 @@
"coreHours": 4.48,
"invoice": 64,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36138,7 +38664,8 @@
"coreHours": 2.56,
"invoice": 64,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36155,7 +38682,8 @@
"coreHours": 3.6,
"invoice": 64,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36172,7 +38700,8 @@
"coreHours": 3.52,
"invoice": 64,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36189,7 +38718,8 @@
"coreHours": 3.12,
"invoice": 64,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36206,7 +38736,8 @@
"coreHours": 3.6,
"invoice": 64,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36223,7 +38754,8 @@
"coreHours": 2.32,
"invoice": 64,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36240,7 +38772,8 @@
"coreHours": 2.96,
"invoice": 64,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36257,7 +38790,8 @@
"coreHours": 2.72,
"invoice": 64,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36274,7 +38808,8 @@
"coreHours": 4.08,
"invoice": 64,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36291,7 +38826,8 @@
"coreHours": 2.88,
"invoice": 64,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36308,7 +38844,8 @@
"coreHours": 3.12,
"invoice": 64,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36325,7 +38862,8 @@
"coreHours": 2.0,
"invoice": 64,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36342,7 +38880,8 @@
"coreHours": 1.84,
"invoice": 64,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36359,7 +38898,8 @@
"coreHours": 3.76,
"invoice": 64,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36376,7 +38916,8 @@
"coreHours": 4.08,
"invoice": 65,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36393,7 +38934,8 @@
"coreHours": 2.24,
"invoice": 65,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36410,7 +38952,8 @@
"coreHours": 3.36,
"invoice": 65,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36427,7 +38970,8 @@
"coreHours": 3.36,
"invoice": 65,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36444,7 +38988,8 @@
"coreHours": 4.72,
"invoice": 65,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36461,7 +39006,8 @@
"coreHours": 3.44,
"invoice": 65,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36478,7 +39024,8 @@
"coreHours": 4.16,
"invoice": 65,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36495,7 +39042,8 @@
"coreHours": 3.84,
"invoice": 65,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36512,7 +39060,8 @@
"coreHours": 2.4,
"invoice": 65,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36529,7 +39078,8 @@
"coreHours": 2.56,
"invoice": 65,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36546,7 +39096,8 @@
"coreHours": 3.12,
"invoice": 65,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36563,7 +39114,8 @@
"coreHours": 2.64,
"invoice": 65,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36580,7 +39132,8 @@
"coreHours": 2.56,
"invoice": 65,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36597,7 +39150,8 @@
"coreHours": 1.6,
"invoice": 65,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36614,7 +39168,8 @@
"coreHours": 4.48,
"invoice": 65,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36631,7 +39186,8 @@
"coreHours": 2.24,
"invoice": 65,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36648,7 +39204,8 @@
"coreHours": 4.32,
"invoice": 65,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36665,7 +39222,8 @@
"coreHours": 4.8,
"invoice": 65,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36682,7 +39240,8 @@
"coreHours": 4.0,
"invoice": 65,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36699,7 +39258,8 @@
"coreHours": 4.48,
"invoice": 65,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36716,7 +39276,8 @@
"coreHours": 1.68,
"invoice": 65,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36733,7 +39294,8 @@
"coreHours": 4.64,
"invoice": 66,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36750,7 +39312,8 @@
"coreHours": 1.84,
"invoice": 66,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36767,7 +39330,8 @@
"coreHours": 2.64,
"invoice": 66,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36784,7 +39348,8 @@
"coreHours": 2.4,
"invoice": 66,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36801,7 +39366,8 @@
"coreHours": 2.32,
"invoice": 66,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36818,7 +39384,8 @@
"coreHours": 1.6,
"invoice": 66,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36835,7 +39402,8 @@
"coreHours": 3.12,
"invoice": 66,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36852,7 +39420,8 @@
"coreHours": 3.68,
"invoice": 66,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36869,7 +39438,8 @@
"coreHours": 2.96,
"invoice": 66,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36886,7 +39456,8 @@
"coreHours": 1.76,
"invoice": 66,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36903,7 +39474,8 @@
"coreHours": 3.76,
"invoice": 66,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36920,7 +39492,8 @@
"coreHours": 2.0,
"invoice": 66,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36937,7 +39510,8 @@
"coreHours": 2.8,
"invoice": 66,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36954,7 +39528,8 @@
"coreHours": 3.68,
"invoice": 66,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36971,7 +39546,8 @@
"coreHours": 2.4,
"invoice": 66,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -36988,7 +39564,8 @@
"coreHours": 3.52,
"invoice": 66,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37005,7 +39582,8 @@
"coreHours": 4.8,
"invoice": 66,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37022,7 +39600,8 @@
"coreHours": 3.52,
"invoice": 66,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37039,7 +39618,8 @@
"coreHours": 3.68,
"invoice": 66,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37056,7 +39636,8 @@
"coreHours": 2.48,
"invoice": 66,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37073,7 +39654,8 @@
"coreHours": 4.32,
"invoice": 66,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37090,7 +39672,8 @@
"coreHours": 2.64,
"invoice": 67,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37107,7 +39690,8 @@
"coreHours": 4.32,
"invoice": 67,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37124,7 +39708,8 @@
"coreHours": 4.08,
"invoice": 67,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37141,7 +39726,8 @@
"coreHours": 4.48,
"invoice": 67,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37158,7 +39744,8 @@
"coreHours": 1.68,
"invoice": 67,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37175,7 +39762,8 @@
"coreHours": 2.96,
"invoice": 67,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37192,7 +39780,8 @@
"coreHours": 3.76,
"invoice": 67,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37209,7 +39798,8 @@
"coreHours": 3.44,
"invoice": 67,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37226,7 +39816,8 @@
"coreHours": 3.92,
"invoice": 67,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37243,7 +39834,8 @@
"coreHours": 4.32,
"invoice": 67,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37260,7 +39852,8 @@
"coreHours": 2.64,
"invoice": 67,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37277,7 +39870,8 @@
"coreHours": 2.4,
"invoice": 67,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37294,7 +39888,8 @@
"coreHours": 3.68,
"invoice": 67,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37311,7 +39906,8 @@
"coreHours": 4.32,
"invoice": 67,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37328,7 +39924,8 @@
"coreHours": 4.0,
"invoice": 67,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37345,7 +39942,8 @@
"coreHours": 3.2,
"invoice": 67,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37362,7 +39960,8 @@
"coreHours": 2.48,
"invoice": 67,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37379,7 +39978,8 @@
"coreHours": 4.48,
"invoice": 67,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37396,7 +39996,8 @@
"coreHours": 3.36,
"invoice": 67,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37413,7 +40014,8 @@
"coreHours": 4.0,
"invoice": 67,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37430,7 +40032,8 @@
"coreHours": 3.12,
"invoice": 67,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37447,7 +40050,8 @@
"coreHours": 1.84,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37464,7 +40068,8 @@
"coreHours": 4.48,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37481,7 +40086,8 @@
"coreHours": 2.08,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37498,7 +40104,8 @@
"coreHours": 4.56,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37515,7 +40122,8 @@
"coreHours": 2.08,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37532,7 +40140,8 @@
"coreHours": 4.72,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37549,7 +40158,8 @@
"coreHours": 4.0,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37566,7 +40176,8 @@
"coreHours": 3.36,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37583,7 +40194,8 @@
"coreHours": 3.6,
"invoice": 64,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37600,7 +40212,8 @@
"coreHours": 3.84,
"invoice": 64,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37617,7 +40230,8 @@
"coreHours": 2.48,
"invoice": 64,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37634,7 +40248,8 @@
"coreHours": 3.52,
"invoice": 64,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37651,7 +40266,8 @@
"coreHours": 2.8,
"invoice": 64,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37668,7 +40284,8 @@
"coreHours": 1.76,
"invoice": 64,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37685,7 +40302,8 @@
"coreHours": 2.0,
"invoice": 64,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37702,7 +40320,8 @@
"coreHours": 2.32,
"invoice": 64,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37719,7 +40338,8 @@
"coreHours": 2.8,
"invoice": 64,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37736,7 +40356,8 @@
"coreHours": 2.8,
"invoice": 64,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37753,7 +40374,8 @@
"coreHours": 2.56,
"invoice": 64,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37770,7 +40392,8 @@
"coreHours": 2.4,
"invoice": 64,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37787,7 +40410,8 @@
"coreHours": 2.32,
"invoice": 64,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37804,7 +40428,8 @@
"coreHours": 4.24,
"invoice": 64,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37821,7 +40446,8 @@
"coreHours": 4.48,
"invoice": 64,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37838,7 +40464,8 @@
"coreHours": 3.68,
"invoice": 64,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37855,7 +40482,8 @@
"coreHours": 2.8,
"invoice": 64,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37872,7 +40500,8 @@
"coreHours": 4.16,
"invoice": 64,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37889,7 +40518,8 @@
"coreHours": 3.36,
"invoice": 64,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37906,7 +40536,8 @@
"coreHours": 1.68,
"invoice": 65,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37923,7 +40554,8 @@
"coreHours": 4.32,
"invoice": 65,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37940,7 +40572,8 @@
"coreHours": 4.48,
"invoice": 65,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37957,7 +40590,8 @@
"coreHours": 3.92,
"invoice": 65,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37974,7 +40608,8 @@
"coreHours": 4.8,
"invoice": 65,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -37991,7 +40626,8 @@
"coreHours": 3.12,
"invoice": 65,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38008,7 +40644,8 @@
"coreHours": 1.68,
"invoice": 65,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38025,7 +40662,8 @@
"coreHours": 2.8,
"invoice": 65,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38042,7 +40680,8 @@
"coreHours": 2.16,
"invoice": 65,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38059,7 +40698,8 @@
"coreHours": 2.8,
"invoice": 65,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38076,7 +40716,8 @@
"coreHours": 3.04,
"invoice": 65,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38093,7 +40734,8 @@
"coreHours": 4.56,
"invoice": 65,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38110,7 +40752,8 @@
"coreHours": 3.2,
"invoice": 65,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38127,7 +40770,8 @@
"coreHours": 2.32,
"invoice": 65,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38144,7 +40788,8 @@
"coreHours": 4.8,
"invoice": 65,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38161,7 +40806,8 @@
"coreHours": 1.84,
"invoice": 65,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38178,7 +40824,8 @@
"coreHours": 2.88,
"invoice": 65,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38195,7 +40842,8 @@
"coreHours": 3.28,
"invoice": 65,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38212,7 +40860,8 @@
"coreHours": 2.24,
"invoice": 65,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38229,7 +40878,8 @@
"coreHours": 4.16,
"invoice": 65,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38246,7 +40896,8 @@
"coreHours": 1.68,
"invoice": 65,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38263,7 +40914,8 @@
"coreHours": 2.0,
"invoice": 66,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38280,7 +40932,8 @@
"coreHours": 2.08,
"invoice": 66,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38297,7 +40950,8 @@
"coreHours": 2.64,
"invoice": 66,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38314,7 +40968,8 @@
"coreHours": 3.84,
"invoice": 66,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38331,7 +40986,8 @@
"coreHours": 3.6,
"invoice": 66,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38348,7 +41004,8 @@
"coreHours": 4.72,
"invoice": 66,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38365,7 +41022,8 @@
"coreHours": 4.24,
"invoice": 66,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38382,7 +41040,8 @@
"coreHours": 2.96,
"invoice": 66,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38399,7 +41058,8 @@
"coreHours": 3.44,
"invoice": 66,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38416,7 +41076,8 @@
"coreHours": 2.8,
"invoice": 66,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38433,7 +41094,8 @@
"coreHours": 2.24,
"invoice": 66,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38450,7 +41112,8 @@
"coreHours": 2.56,
"invoice": 66,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38467,7 +41130,8 @@
"coreHours": 2.0,
"invoice": 66,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38484,7 +41148,8 @@
"coreHours": 2.72,
"invoice": 66,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38501,7 +41166,8 @@
"coreHours": 2.24,
"invoice": 66,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38518,7 +41184,8 @@
"coreHours": 2.8,
"invoice": 66,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38535,7 +41202,8 @@
"coreHours": 2.32,
"invoice": 66,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38552,7 +41220,8 @@
"coreHours": 4.16,
"invoice": 66,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38569,7 +41238,8 @@
"coreHours": 3.36,
"invoice": 66,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38586,7 +41256,8 @@
"coreHours": 2.48,
"invoice": 66,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38603,7 +41274,8 @@
"coreHours": 4.8,
"invoice": 66,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38620,7 +41292,8 @@
"coreHours": 4.48,
"invoice": 67,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38637,7 +41310,8 @@
"coreHours": 3.92,
"invoice": 67,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38654,7 +41328,8 @@
"coreHours": 1.68,
"invoice": 67,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38671,7 +41346,8 @@
"coreHours": 2.08,
"invoice": 67,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38688,7 +41364,8 @@
"coreHours": 1.92,
"invoice": 67,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38705,7 +41382,8 @@
"coreHours": 2.08,
"invoice": 67,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38722,7 +41400,8 @@
"coreHours": 1.6,
"invoice": 67,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38739,7 +41418,8 @@
"coreHours": 2.0,
"invoice": 67,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38756,7 +41436,8 @@
"coreHours": 3.92,
"invoice": 67,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38773,7 +41454,8 @@
"coreHours": 3.44,
"invoice": 67,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38790,7 +41472,8 @@
"coreHours": 2.64,
"invoice": 67,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38807,7 +41490,8 @@
"coreHours": 4.4,
"invoice": 67,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38824,7 +41508,8 @@
"coreHours": 2.24,
"invoice": 67,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38841,7 +41526,8 @@
"coreHours": 2.0,
"invoice": 67,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38858,7 +41544,8 @@
"coreHours": 2.24,
"invoice": 67,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38875,7 +41562,8 @@
"coreHours": 4.8,
"invoice": 67,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38892,7 +41580,8 @@
"coreHours": 2.96,
"invoice": 67,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38909,7 +41598,8 @@
"coreHours": 3.84,
"invoice": 67,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38926,7 +41616,8 @@
"coreHours": 4.64,
"invoice": 67,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38943,7 +41634,8 @@
"coreHours": 2.32,
"invoice": 67,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38960,7 +41652,8 @@
"coreHours": 1.68,
"invoice": 67,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38977,7 +41670,8 @@
"coreHours": 4.56,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -38994,7 +41688,8 @@
"coreHours": 4.48,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39011,7 +41706,8 @@
"coreHours": 2.08,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39028,7 +41724,8 @@
"coreHours": 4.0,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39045,7 +41742,8 @@
"coreHours": 2.96,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39062,7 +41760,8 @@
"coreHours": 3.36,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39079,7 +41778,8 @@
"coreHours": 4.8,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39096,7 +41796,8 @@
"coreHours": 1.76,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39113,7 +41814,8 @@
"coreHours": 2.64,
"invoice": 64,
"date": "2013-11-18T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39130,7 +41832,8 @@
"coreHours": 3.52,
"invoice": 64,
"date": "2013-11-19T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39147,7 +41850,8 @@
"coreHours": 2.08,
"invoice": 64,
"date": "2013-11-19T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39164,7 +41868,8 @@
"coreHours": 3.12,
"invoice": 64,
"date": "2013-11-19T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39181,7 +41886,8 @@
"coreHours": 3.6,
"invoice": 64,
"date": "2013-11-20T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39198,7 +41904,8 @@
"coreHours": 3.36,
"invoice": 64,
"date": "2013-11-20T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39215,7 +41922,8 @@
"coreHours": 3.44,
"invoice": 64,
"date": "2013-11-20T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39232,7 +41940,8 @@
"coreHours": 2.4,
"invoice": 64,
"date": "2013-11-21T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39249,7 +41958,8 @@
"coreHours": 2.72,
"invoice": 64,
"date": "2013-11-21T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39266,7 +41976,8 @@
"coreHours": 2.0,
"invoice": 64,
"date": "2013-11-21T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39283,7 +41994,8 @@
"coreHours": 4.64,
"invoice": 64,
"date": "2013-11-22T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39300,7 +42012,8 @@
"coreHours": 2.96,
"invoice": 64,
"date": "2013-11-22T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39317,7 +42030,8 @@
"coreHours": 2.48,
"invoice": 64,
"date": "2013-11-22T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39334,7 +42048,8 @@
"coreHours": 2.72,
"invoice": 64,
"date": "2013-11-23T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39351,7 +42066,8 @@
"coreHours": 3.92,
"invoice": 64,
"date": "2013-11-23T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39368,7 +42084,8 @@
"coreHours": 3.12,
"invoice": 64,
"date": "2013-11-23T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39385,7 +42102,8 @@
"coreHours": 4.16,
"invoice": 64,
"date": "2013-11-24T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39402,7 +42120,8 @@
"coreHours": 4.48,
"invoice": 64,
"date": "2013-11-24T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39419,7 +42138,8 @@
"coreHours": 2.4,
"invoice": 64,
"date": "2013-11-24T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39436,7 +42156,8 @@
"coreHours": 3.2,
"invoice": 65,
"date": "2013-11-25T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39453,7 +42174,8 @@
"coreHours": 4.08,
"invoice": 65,
"date": "2013-11-25T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39470,7 +42192,8 @@
"coreHours": 4.8,
"invoice": 65,
"date": "2013-11-25T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39487,7 +42210,8 @@
"coreHours": 2.48,
"invoice": 65,
"date": "2013-11-26T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39504,7 +42228,8 @@
"coreHours": 2.56,
"invoice": 65,
"date": "2013-11-26T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39521,7 +42246,8 @@
"coreHours": 1.84,
"invoice": 65,
"date": "2013-11-26T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39538,7 +42264,8 @@
"coreHours": 3.92,
"invoice": 65,
"date": "2013-11-27T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39555,7 +42282,8 @@
"coreHours": 2.8,
"invoice": 65,
"date": "2013-11-27T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39572,7 +42300,8 @@
"coreHours": 3.28,
"invoice": 65,
"date": "2013-11-27T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39589,7 +42318,8 @@
"coreHours": 1.84,
"invoice": 65,
"date": "2013-11-28T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39606,7 +42336,8 @@
"coreHours": 4.16,
"invoice": 65,
"date": "2013-11-28T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39623,7 +42354,8 @@
"coreHours": 3.52,
"invoice": 65,
"date": "2013-11-28T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39640,7 +42372,8 @@
"coreHours": 3.2,
"invoice": 65,
"date": "2013-11-29T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39657,7 +42390,8 @@
"coreHours": 3.44,
"invoice": 65,
"date": "2013-11-29T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39674,7 +42408,8 @@
"coreHours": 2.08,
"invoice": 65,
"date": "2013-11-29T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39691,7 +42426,8 @@
"coreHours": 2.64,
"invoice": 65,
"date": "2013-11-30T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39708,7 +42444,8 @@
"coreHours": 3.68,
"invoice": 65,
"date": "2013-11-30T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39725,7 +42462,8 @@
"coreHours": 3.04,
"invoice": 65,
"date": "2013-11-30T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39742,7 +42480,8 @@
"coreHours": 4.64,
"invoice": 65,
"date": "2013-12-01T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39759,7 +42498,8 @@
"coreHours": 3.2,
"invoice": 65,
"date": "2013-12-01T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39776,7 +42516,8 @@
"coreHours": 4.48,
"invoice": 65,
"date": "2013-12-01T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39793,7 +42534,8 @@
"coreHours": 4.16,
"invoice": 66,
"date": "2013-12-02T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39810,7 +42552,8 @@
"coreHours": 3.6,
"invoice": 66,
"date": "2013-12-02T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39827,7 +42570,8 @@
"coreHours": 4.24,
"invoice": 66,
"date": "2013-12-02T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39844,7 +42588,8 @@
"coreHours": 2.24,
"invoice": 66,
"date": "2013-12-03T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39861,7 +42606,8 @@
"coreHours": 4.32,
"invoice": 66,
"date": "2013-12-03T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39878,7 +42624,8 @@
"coreHours": 2.8,
"invoice": 66,
"date": "2013-12-03T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39895,7 +42642,8 @@
"coreHours": 4.24,
"invoice": 66,
"date": "2013-12-04T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39912,7 +42660,8 @@
"coreHours": 4.72,
"invoice": 66,
"date": "2013-12-04T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39929,7 +42678,8 @@
"coreHours": 2.64,
"invoice": 66,
"date": "2013-12-04T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39946,7 +42696,8 @@
"coreHours": 3.44,
"invoice": 66,
"date": "2013-12-05T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39963,7 +42714,8 @@
"coreHours": 3.52,
"invoice": 66,
"date": "2013-12-05T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39980,7 +42732,8 @@
"coreHours": 4.0,
"invoice": 66,
"date": "2013-12-05T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -39997,7 +42750,8 @@
"coreHours": 2.64,
"invoice": 66,
"date": "2013-12-06T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40014,7 +42768,8 @@
"coreHours": 4.4,
"invoice": 66,
"date": "2013-12-06T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40031,7 +42786,8 @@
"coreHours": 4.64,
"invoice": 66,
"date": "2013-12-06T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40048,7 +42804,8 @@
"coreHours": 1.6,
"invoice": 66,
"date": "2013-12-07T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40065,7 +42822,8 @@
"coreHours": 3.6,
"invoice": 66,
"date": "2013-12-07T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40082,7 +42840,8 @@
"coreHours": 4.4,
"invoice": 66,
"date": "2013-12-07T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40099,7 +42858,8 @@
"coreHours": 4.72,
"invoice": 66,
"date": "2013-12-08T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40116,7 +42876,8 @@
"coreHours": 3.28,
"invoice": 66,
"date": "2013-12-08T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40133,7 +42894,8 @@
"coreHours": 4.32,
"invoice": 66,
"date": "2013-12-08T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40150,7 +42912,8 @@
"coreHours": 2.08,
"invoice": 67,
"date": "2013-12-09T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40167,7 +42930,8 @@
"coreHours": 2.08,
"invoice": 67,
"date": "2013-12-09T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40184,7 +42948,8 @@
"coreHours": 3.12,
"invoice": 67,
"date": "2013-12-09T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40201,7 +42966,8 @@
"coreHours": 3.12,
"invoice": 67,
"date": "2013-12-10T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40218,7 +42984,8 @@
"coreHours": 2.32,
"invoice": 67,
"date": "2013-12-10T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40235,7 +43002,8 @@
"coreHours": 4.4,
"invoice": 67,
"date": "2013-12-10T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40252,7 +43020,8 @@
"coreHours": 2.24,
"invoice": 67,
"date": "2013-12-11T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40269,7 +43038,8 @@
"coreHours": 4.08,
"invoice": 67,
"date": "2013-12-11T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40286,7 +43056,8 @@
"coreHours": 4.48,
"invoice": 67,
"date": "2013-12-11T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40303,7 +43074,8 @@
"coreHours": 3.2,
"invoice": 67,
"date": "2013-12-12T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40320,7 +43092,8 @@
"coreHours": 3.84,
"invoice": 67,
"date": "2013-12-12T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40337,7 +43110,8 @@
"coreHours": 3.2,
"invoice": 67,
"date": "2013-12-12T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40354,7 +43128,8 @@
"coreHours": 4.0,
"invoice": 67,
"date": "2013-12-13T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40371,7 +43146,8 @@
"coreHours": 2.56,
"invoice": 67,
"date": "2013-12-13T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40388,7 +43164,8 @@
"coreHours": 1.92,
"invoice": 67,
"date": "2013-12-13T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40405,7 +43182,8 @@
"coreHours": 2.96,
"invoice": 67,
"date": "2013-12-14T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40422,7 +43200,8 @@
"coreHours": 3.6,
"invoice": 67,
"date": "2013-12-14T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40439,7 +43218,8 @@
"coreHours": 3.28,
"invoice": 67,
"date": "2013-12-14T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40456,7 +43236,8 @@
"coreHours": 2.08,
"invoice": 67,
"date": "2013-12-15T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40473,7 +43254,8 @@
"coreHours": 4.72,
"invoice": 67,
"date": "2013-12-15T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40490,7 +43272,8 @@
"coreHours": 2.88,
"invoice": 67,
"date": "2013-12-15T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40507,7 +43290,8 @@
"coreHours": 3.04,
"invoice": null,
"date": "2013-12-16T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40524,7 +43308,8 @@
"coreHours": 4.56,
"invoice": null,
"date": "2013-12-16T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40541,7 +43326,8 @@
"coreHours": 1.76,
"invoice": null,
"date": "2013-12-16T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40558,7 +43344,8 @@
"coreHours": 2.48,
"invoice": null,
"date": "2013-12-17T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40575,7 +43362,8 @@
"coreHours": 2.56,
"invoice": null,
"date": "2013-12-17T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40592,7 +43380,8 @@
"coreHours": 1.6,
"invoice": null,
"date": "2013-12-17T21:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40609,7 +43398,8 @@
"coreHours": 2.8,
"invoice": null,
"date": "2013-12-18T05:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40626,7 +43416,8 @@
"coreHours": 3.6,
"invoice": null,
"date": "2013-12-18T13:00:00Z",
- "kind": "besteffort"
+ "kind": "besteffort",
+ "enacted": null
}
},
{
@@ -40635,9 +43426,11 @@
"fields": {
"updated": "2013-12-11T18:11:43.757Z",
"description": "",
+ "created": "2013-12-11T18:11:43.757Z",
"enabled": true,
+ "service_provider_id": null,
"name": "internet2",
- "created": "2013-12-11T18:11:43.757Z"
+ "enacted": null
}
},
{
@@ -40646,9 +43439,11 @@
"fields": {
"updated": "2013-12-11T18:13:38.024Z",
"description": "",
+ "created": "2013-12-11T18:11:52.622Z",
"enabled": true,
+ "service_provider_id": null,
"name": "Syndicate",
- "created": "2013-12-11T18:11:52.622Z"
+ "enacted": null
}
},
{
@@ -40656,12 +43451,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:17.472Z",
- "description": "Peer-to-peer content sharing for Syndicate distributed filesystem",
+ "name": "Syndicate",
"created": "2013-12-11T23:57:17.472Z",
+ "content_provider_id": null,
"serviceProvider": 2,
+ "description": "Peer-to-peer content sharing for Syndicate distributed filesystem",
"enabled": true,
"users": [],
- "name": "Syndicate"
+ "enacted": null
}
},
{
@@ -40669,12 +43466,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.586Z",
- "description": "Content Provider for Georgia Tech",
+ "name": "Georgia Tech",
"created": "2013-12-11T23:57:20.586Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Content Provider for Georgia Tech",
"enabled": true,
"users": [],
- "name": "Georgia Tech"
+ "enacted": null
}
},
{
@@ -40682,12 +43481,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.611Z",
- "description": "Content Provider for Stanford University",
+ "name": "Stanford University",
"created": "2013-12-11T23:57:20.611Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Content Provider for Stanford University",
"enabled": true,
"users": [],
- "name": "Stanford University"
+ "enacted": null
}
},
{
@@ -40695,12 +43496,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.636Z",
- "description": "Content Provider for University of Washington",
+ "name": "University of Washington",
"created": "2013-12-11T23:57:20.636Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Content Provider for University of Washington",
"enabled": true,
"users": [],
- "name": "University of Washington"
+ "enacted": null
}
},
{
@@ -40708,12 +43511,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.660Z",
- "description": "Content Provider for Max Planck Institute",
+ "name": "Max Planck Institute",
"created": "2013-12-11T23:57:20.660Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Content Provider for Max Planck Institute",
"enabled": true,
"users": [],
- "name": "Max Planck Institute"
+ "enacted": null
}
},
{
@@ -40721,12 +43526,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.685Z",
- "description": "Content Provider for Princeton University",
+ "name": "Princeton University",
"created": "2013-12-11T23:57:20.685Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Content Provider for Princeton University",
"enabled": true,
"users": [],
- "name": "Princeton University"
+ "enacted": null
}
},
{
@@ -40734,12 +43541,14 @@
"model": "hpc.contentprovider",
"fields": {
"updated": "2013-12-11T23:57:20.710Z",
- "description": "Open Networking Lab",
+ "name": "ON.LAB",
"created": "2013-12-11T23:57:20.710Z",
+ "content_provider_id": null,
"serviceProvider": 1,
+ "description": "Open Networking Lab",
"enabled": true,
"users": [],
- "name": "ON.LAB"
+ "enacted": null
}
},
{
@@ -40747,14 +43556,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.496Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.496Z",
"url": "node70.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40762,14 +43573,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.503Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.503Z",
"url": "node69.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40777,14 +43590,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.512Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.512Z",
"url": "node68.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40792,14 +43607,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.520Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.520Z",
"url": "node67.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40807,14 +43624,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.528Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.528Z",
"url": "node66.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40822,14 +43641,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.537Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.537Z",
"url": "node65.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40837,14 +43658,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.545Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.545Z",
"url": "node64.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40852,14 +43675,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.553Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.553Z",
"url": "node63.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40867,14 +43692,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.561Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.561Z",
"url": "node62.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40882,14 +43709,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.570Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.570Z",
"url": "node61.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40897,14 +43726,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.578Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.578Z",
"url": "node60.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40912,14 +43743,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.586Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.586Z",
"url": "node59.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40927,14 +43760,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.595Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.595Z",
"url": "node58.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40942,14 +43777,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.603Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.603Z",
"url": "node57.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40957,14 +43794,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.611Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.611Z",
"url": "node56.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40972,14 +43811,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.619Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.619Z",
"url": "node55.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -40987,14 +43828,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.628Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.628Z",
"url": "node54.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41002,14 +43845,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.636Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.636Z",
"url": "node53.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41017,14 +43862,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.644Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.644Z",
"url": "node52.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41032,14 +43879,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.653Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.653Z",
"url": "node51.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41047,14 +43896,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.661Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.661Z",
"url": "node50.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41062,14 +43913,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.669Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.669Z",
"url": "node49.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41077,14 +43930,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.677Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.677Z",
"url": "node48.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41092,14 +43947,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.686Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.686Z",
"url": "node47.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41107,14 +43964,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.694Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.694Z",
"url": "node46.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41122,14 +43981,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.702Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.702Z",
"url": "node45.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41137,14 +43998,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.711Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.711Z",
"url": "node44.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41152,14 +44015,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.719Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.719Z",
"url": "node43.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41167,14 +44032,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.727Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.727Z",
"url": "node42.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41182,14 +44049,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.735Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.735Z",
"url": "node41.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41197,14 +44066,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.744Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.744Z",
"url": "node40.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41212,14 +44083,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.752Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.752Z",
"url": "node39.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41227,14 +44100,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.760Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.760Z",
"url": "node38.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41242,14 +44117,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.768Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.768Z",
"url": "node37.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41257,14 +44134,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.777Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.777Z",
"url": "node36.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41272,14 +44151,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.785Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.785Z",
"url": "node35.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41287,14 +44168,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.793Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.793Z",
"url": "node34.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41302,14 +44185,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.802Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.802Z",
"url": "node33.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41317,14 +44202,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.810Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.810Z",
"url": "node32.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41332,14 +44219,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.818Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.818Z",
"url": "node31.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41347,14 +44236,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.826Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.826Z",
"url": "node30.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41362,14 +44253,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.835Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.835Z",
"url": "node29.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41377,14 +44270,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.843Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.843Z",
"url": "node28.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41392,14 +44287,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.851Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.851Z",
"url": "node27.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41407,14 +44304,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.860Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.860Z",
"url": "node26.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41422,14 +44321,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.868Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.868Z",
"url": "node25.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41437,14 +44338,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.876Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.876Z",
"url": "node24.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41452,14 +44355,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.884Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.884Z",
"url": "node23.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41467,14 +44372,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.893Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.893Z",
"url": "node22.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41482,14 +44389,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.901Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.901Z",
"url": "node21.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41497,14 +44406,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.909Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.909Z",
"url": "node20.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41512,14 +44423,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.918Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.918Z",
"url": "node19.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41527,14 +44440,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.926Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.926Z",
"url": "node18.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41542,14 +44457,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.934Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.934Z",
"url": "node17.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41557,14 +44474,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.942Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.942Z",
"url": "node16.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41572,14 +44491,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.951Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.951Z",
"url": "node15.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41587,14 +44508,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.959Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.959Z",
"url": "node14.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41602,14 +44525,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.967Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.967Z",
"url": "node13.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41617,14 +44542,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.975Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.975Z",
"url": "node12.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41632,14 +44559,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.984Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.984Z",
"url": "node11.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41647,14 +44576,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:17.992Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:17.992Z",
"url": "node10.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41662,14 +44593,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18Z",
"url": "node9.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41677,14 +44610,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.009Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.009Z",
"url": "node8.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41692,14 +44627,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.017Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.017Z",
"url": "node7.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41707,14 +44644,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.025Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.025Z",
"url": "node6.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41722,14 +44661,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.034Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.034Z",
"url": "node5.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41737,14 +44678,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.042Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.042Z",
"url": "node4.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41752,14 +44695,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.050Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.050Z",
"url": "node3.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41767,14 +44712,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.058Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.058Z",
"url": "node2.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41782,14 +44729,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.067Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.067Z",
"url": "node1.stanford.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41797,14 +44746,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.084Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.084Z",
"url": "node70.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41812,14 +44763,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.092Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.092Z",
"url": "node69.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41827,14 +44780,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.100Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.100Z",
"url": "node68.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41842,14 +44797,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.108Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.108Z",
"url": "node67.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41857,14 +44814,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.116Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.116Z",
"url": "node66.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41872,14 +44831,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.125Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.125Z",
"url": "node65.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41887,14 +44848,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.133Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.133Z",
"url": "node64.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41902,14 +44865,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.141Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.141Z",
"url": "node63.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41917,14 +44882,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.149Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.149Z",
"url": "node62.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41932,14 +44899,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.158Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.158Z",
"url": "node61.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41947,14 +44916,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.166Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.166Z",
"url": "node60.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41962,14 +44933,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.174Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.174Z",
"url": "node59.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41977,14 +44950,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.183Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.183Z",
"url": "node58.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -41992,14 +44967,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.191Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.191Z",
"url": "node57.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42007,14 +44984,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.199Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.199Z",
"url": "node56.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42022,14 +45001,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.208Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.207Z",
"url": "node55.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42037,14 +45018,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.216Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.216Z",
"url": "node54.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42052,14 +45035,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.224Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.224Z",
"url": "node53.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42067,14 +45052,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.238Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.238Z",
"url": "node52.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42082,14 +45069,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.286Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.286Z",
"url": "node51.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42097,14 +45086,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.299Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.298Z",
"url": "node50.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42112,14 +45103,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.307Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.307Z",
"url": "node49.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42127,14 +45120,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.315Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.315Z",
"url": "node48.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42142,14 +45137,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.323Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.323Z",
"url": "node47.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42157,14 +45154,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.332Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.332Z",
"url": "node46.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42172,14 +45171,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.340Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.340Z",
"url": "node45.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42187,14 +45188,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.348Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.348Z",
"url": "node44.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42202,14 +45205,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.357Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.356Z",
"url": "node43.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42217,14 +45222,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.365Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.365Z",
"url": "node42.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42232,14 +45239,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.373Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.373Z",
"url": "node41.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42247,14 +45256,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.381Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.381Z",
"url": "node40.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42262,14 +45273,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.390Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.390Z",
"url": "node39.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42277,14 +45290,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.398Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.398Z",
"url": "node38.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42292,14 +45307,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.406Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.406Z",
"url": "node37.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42307,14 +45324,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.414Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.414Z",
"url": "node36.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42322,14 +45341,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.423Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.423Z",
"url": "node35.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42337,14 +45358,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.431Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.431Z",
"url": "node34.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42352,14 +45375,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.439Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.439Z",
"url": "node33.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42367,14 +45392,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.448Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.448Z",
"url": "node32.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42382,14 +45409,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.456Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.456Z",
"url": "node31.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42397,14 +45426,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.464Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.464Z",
"url": "node30.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42412,14 +45443,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.472Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.472Z",
"url": "node29.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42427,14 +45460,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.481Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.481Z",
"url": "node28.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42442,14 +45477,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.489Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.489Z",
"url": "node27.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42457,14 +45494,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.497Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.497Z",
"url": "node26.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42472,14 +45511,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.506Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.505Z",
"url": "node25.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42487,14 +45528,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.514Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.514Z",
"url": "node24.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42502,14 +45545,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.522Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.522Z",
"url": "node23.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42517,14 +45562,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.530Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.530Z",
"url": "node22.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42532,14 +45579,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.539Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.539Z",
"url": "node21.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42547,14 +45596,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.547Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.547Z",
"url": "node20.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42562,14 +45613,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.555Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.555Z",
"url": "node19.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42577,14 +45630,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.564Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.563Z",
"url": "node18.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42592,14 +45647,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.572Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.572Z",
"url": "node17.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42607,14 +45664,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.580Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.580Z",
"url": "node16.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42622,14 +45681,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.588Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.588Z",
"url": "node15.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42637,14 +45698,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.597Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.597Z",
"url": "node14.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42652,14 +45715,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.605Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.605Z",
"url": "node13.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42667,14 +45732,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.613Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.613Z",
"url": "node12.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42682,14 +45749,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.622Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.622Z",
"url": "node11.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42697,14 +45766,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.630Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.630Z",
"url": "node10.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42712,14 +45783,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.638Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.638Z",
"url": "node9.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42727,14 +45800,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.646Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.646Z",
"url": "node8.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42742,14 +45817,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.655Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.655Z",
"url": "node7.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42757,14 +45834,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.663Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.663Z",
"url": "node6.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42772,14 +45851,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.671Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.671Z",
"url": "node5.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42787,14 +45868,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.680Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.680Z",
"url": "node4.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42802,14 +45885,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.688Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.688Z",
"url": "node3.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42817,14 +45902,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.696Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.696Z",
"url": "node2.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42832,14 +45919,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.704Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.704Z",
"url": "node1.washington.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42847,14 +45936,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.722Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.722Z",
"url": "node70.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42862,14 +45953,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.729Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.729Z",
"url": "node69.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42877,14 +45970,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.738Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.737Z",
"url": "node68.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42892,14 +45987,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.746Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.746Z",
"url": "node67.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42907,14 +46004,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.754Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.754Z",
"url": "node66.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42922,14 +46021,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.762Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.762Z",
"url": "node65.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42937,14 +46038,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.771Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.771Z",
"url": "node64.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42952,14 +46055,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.779Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.779Z",
"url": "node63.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42967,14 +46072,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.787Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.787Z",
"url": "node62.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42982,14 +46089,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.795Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.795Z",
"url": "node61.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -42997,14 +46106,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.804Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.804Z",
"url": "node60.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43012,14 +46123,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.812Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.812Z",
"url": "node59.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43027,14 +46140,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.820Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.820Z",
"url": "node58.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43042,14 +46157,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.829Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.829Z",
"url": "node57.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43057,14 +46174,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.837Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.837Z",
"url": "node56.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43072,14 +46191,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.845Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.845Z",
"url": "node55.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43087,14 +46208,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.853Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.853Z",
"url": "node54.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43102,14 +46225,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.862Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.862Z",
"url": "node53.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43117,14 +46242,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.870Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.870Z",
"url": "node52.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43132,14 +46259,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.878Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.878Z",
"url": "node51.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43147,14 +46276,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.887Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.887Z",
"url": "node50.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43162,14 +46293,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.895Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.895Z",
"url": "node49.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43177,14 +46310,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.903Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.903Z",
"url": "node48.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43192,14 +46327,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.911Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.911Z",
"url": "node47.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43207,14 +46344,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.920Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.920Z",
"url": "node46.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43222,14 +46361,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.928Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.928Z",
"url": "node45.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43237,14 +46378,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.936Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.936Z",
"url": "node44.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43252,14 +46395,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.944Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.944Z",
"url": "node43.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43267,14 +46412,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.953Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.953Z",
"url": "node42.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43282,14 +46429,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.961Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.961Z",
"url": "node41.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43297,14 +46446,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.969Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.969Z",
"url": "node40.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43312,14 +46463,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.978Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.978Z",
"url": "node39.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43327,14 +46480,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.986Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.986Z",
"url": "node38.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43342,14 +46497,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:18.994Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:18.994Z",
"url": "node37.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43357,14 +46514,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.002Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.002Z",
"url": "node36.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43372,14 +46531,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.011Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.011Z",
"url": "node35.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43387,14 +46548,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.019Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.019Z",
"url": "node34.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43402,14 +46565,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.027Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.027Z",
"url": "node33.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43417,14 +46582,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.036Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.036Z",
"url": "node32.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43432,14 +46599,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.044Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.044Z",
"url": "node31.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43447,14 +46616,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.052Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.052Z",
"url": "node30.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43462,14 +46633,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.060Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.060Z",
"url": "node29.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43477,14 +46650,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.069Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.069Z",
"url": "node28.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43492,14 +46667,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.077Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.077Z",
"url": "node27.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43507,14 +46684,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.086Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.085Z",
"url": "node26.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43522,14 +46701,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.094Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.094Z",
"url": "node25.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43537,14 +46718,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.102Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.102Z",
"url": "node24.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43552,14 +46735,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.110Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.110Z",
"url": "node23.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43567,14 +46752,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.118Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.118Z",
"url": "node22.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43582,14 +46769,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.127Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.127Z",
"url": "node21.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43597,14 +46786,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.135Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.135Z",
"url": "node20.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43612,14 +46803,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.143Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.143Z",
"url": "node19.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43627,14 +46820,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.152Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.152Z",
"url": "node18.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43642,14 +46837,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.160Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.160Z",
"url": "node17.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43657,14 +46854,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.168Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.168Z",
"url": "node16.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43672,14 +46871,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.176Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.176Z",
"url": "node15.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43687,14 +46888,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.185Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.185Z",
"url": "node14.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43702,14 +46905,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.193Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.193Z",
"url": "node13.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43717,14 +46922,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.201Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.201Z",
"url": "node12.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43732,14 +46939,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.210Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.210Z",
"url": "node11.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43747,14 +46956,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.218Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.218Z",
"url": "node10.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43762,14 +46973,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.226Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.226Z",
"url": "node9.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43777,14 +46990,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.234Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.234Z",
"url": "node8.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43792,14 +47007,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.243Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.243Z",
"url": "node7.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43807,14 +47024,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.251Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.251Z",
"url": "node6.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43822,14 +47041,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.259Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.259Z",
"url": "node5.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43837,14 +47058,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.268Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.268Z",
"url": "node4.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43852,14 +47075,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.276Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.276Z",
"url": "node3.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43867,14 +47092,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.284Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.284Z",
"url": "node2.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43882,14 +47109,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.292Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.292Z",
"url": "node1.princeton.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43897,14 +47126,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.310Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.310Z",
"url": "node70.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43912,14 +47143,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.317Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.317Z",
"url": "node69.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43927,14 +47160,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.325Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.325Z",
"url": "node68.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43942,14 +47177,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.334Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.334Z",
"url": "node67.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43957,14 +47194,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.342Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.342Z",
"url": "node66.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43972,14 +47211,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.350Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.350Z",
"url": "node65.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -43987,14 +47228,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.359Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.359Z",
"url": "node64.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44002,14 +47245,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.367Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.367Z",
"url": "node63.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44017,14 +47262,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.375Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.375Z",
"url": "node62.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44032,14 +47279,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.383Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.383Z",
"url": "node61.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44047,14 +47296,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.392Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.392Z",
"url": "node60.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44062,14 +47313,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.400Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.400Z",
"url": "node59.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44077,14 +47330,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.408Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.408Z",
"url": "node58.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44092,14 +47347,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.417Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.416Z",
"url": "node57.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44107,14 +47364,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.425Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.425Z",
"url": "node56.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44122,14 +47381,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.433Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.433Z",
"url": "node55.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44137,14 +47398,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.441Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.441Z",
"url": "node54.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44152,14 +47415,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.450Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.450Z",
"url": "node53.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44167,14 +47432,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.458Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.458Z",
"url": "node52.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44182,14 +47449,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.466Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.466Z",
"url": "node51.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44197,14 +47466,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.475Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.475Z",
"url": "node50.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44212,14 +47483,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.483Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.483Z",
"url": "node49.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44227,14 +47500,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.491Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.491Z",
"url": "node48.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44242,14 +47517,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.499Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.499Z",
"url": "node47.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44257,14 +47534,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.508Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.508Z",
"url": "node46.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44272,14 +47551,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.516Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.516Z",
"url": "node45.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44287,14 +47568,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.524Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.524Z",
"url": "node44.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44302,14 +47585,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.533Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.532Z",
"url": "node43.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44317,14 +47602,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.541Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.541Z",
"url": "node42.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44332,14 +47619,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.549Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.549Z",
"url": "node41.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44347,14 +47636,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.557Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.557Z",
"url": "node40.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44362,14 +47653,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.566Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.566Z",
"url": "node39.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44377,14 +47670,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.574Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.574Z",
"url": "node38.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44392,14 +47687,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.582Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.582Z",
"url": "node37.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44407,14 +47704,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.591Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.590Z",
"url": "node36.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44422,14 +47721,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.599Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.599Z",
"url": "node35.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44437,14 +47738,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.607Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.607Z",
"url": "node34.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44452,14 +47755,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.615Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.615Z",
"url": "node33.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44467,14 +47772,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.624Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.624Z",
"url": "node32.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44482,14 +47789,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.632Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.632Z",
"url": "node31.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44497,14 +47806,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.640Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.640Z",
"url": "node30.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44512,14 +47823,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.649Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.648Z",
"url": "node29.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44527,14 +47840,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.657Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.657Z",
"url": "node28.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44542,14 +47857,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.665Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.665Z",
"url": "node27.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44557,14 +47874,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.673Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.673Z",
"url": "node26.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44572,14 +47891,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.682Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.682Z",
"url": "node25.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44587,14 +47908,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.690Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.690Z",
"url": "node24.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44602,14 +47925,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.698Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.698Z",
"url": "node23.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44617,14 +47942,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.706Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.706Z",
"url": "node22.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44632,14 +47959,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.715Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.715Z",
"url": "node21.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44647,14 +47976,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.723Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.723Z",
"url": "node20.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44662,14 +47993,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.731Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.731Z",
"url": "node19.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44677,14 +48010,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.740Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.740Z",
"url": "node18.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44692,14 +48027,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.748Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.748Z",
"url": "node17.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44707,14 +48044,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.756Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.756Z",
"url": "node16.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44722,14 +48061,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.764Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.764Z",
"url": "node15.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44737,14 +48078,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.773Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.773Z",
"url": "node14.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44752,14 +48095,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.781Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.781Z",
"url": "node13.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44767,14 +48112,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.789Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.789Z",
"url": "node12.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44782,14 +48129,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.798Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.798Z",
"url": "node11.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44797,14 +48146,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.806Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.806Z",
"url": "node10.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44812,14 +48163,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.814Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.814Z",
"url": "node9.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44827,14 +48180,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.822Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.822Z",
"url": "node8.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44842,14 +48197,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.831Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.831Z",
"url": "node7.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44857,14 +48214,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.839Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.839Z",
"url": "node6.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44872,14 +48231,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.847Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.847Z",
"url": "node5.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44887,14 +48248,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.856Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.855Z",
"url": "node4.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44902,14 +48265,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.864Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.864Z",
"url": "node3.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44917,14 +48282,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.872Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.872Z",
"url": "node2.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44932,14 +48299,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.880Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.880Z",
"url": "node1.gt.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44947,14 +48316,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.898Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.898Z",
"url": "node70.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44962,14 +48333,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.905Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.905Z",
"url": "node69.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44977,14 +48350,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.913Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.913Z",
"url": "node68.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -44992,14 +48367,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.922Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.922Z",
"url": "node67.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45007,14 +48384,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.930Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.930Z",
"url": "node66.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45022,14 +48401,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.938Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.938Z",
"url": "node65.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45037,14 +48418,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.947Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.947Z",
"url": "node64.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45052,14 +48435,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.955Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.955Z",
"url": "node63.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45067,14 +48452,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.963Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.963Z",
"url": "node62.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45082,14 +48469,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.971Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.971Z",
"url": "node61.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45097,14 +48486,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.980Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.980Z",
"url": "node60.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45112,14 +48503,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.988Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.988Z",
"url": "node59.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45127,14 +48520,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:19.996Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:19.996Z",
"url": "node58.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45142,14 +48537,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.005Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.005Z",
"url": "node57.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45157,14 +48554,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.013Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.013Z",
"url": "node56.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45172,14 +48571,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.021Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.021Z",
"url": "node55.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45187,14 +48588,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.029Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.029Z",
"url": "node54.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45202,14 +48605,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.038Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.038Z",
"url": "node53.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45217,14 +48622,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.046Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.046Z",
"url": "node52.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45232,14 +48639,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.054Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.054Z",
"url": "node51.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45247,14 +48656,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.063Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.062Z",
"url": "node50.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45262,14 +48673,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.071Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.071Z",
"url": "node49.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45277,14 +48690,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.079Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.079Z",
"url": "node48.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45292,14 +48707,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.087Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.087Z",
"url": "node47.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45307,14 +48724,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.096Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.096Z",
"url": "node46.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45322,14 +48741,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.104Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.104Z",
"url": "node45.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45337,14 +48758,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.112Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.112Z",
"url": "node44.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45352,14 +48775,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.121Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.121Z",
"url": "node43.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45367,14 +48792,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.129Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.129Z",
"url": "node42.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45382,14 +48809,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.137Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.137Z",
"url": "node41.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45397,14 +48826,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.146Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.145Z",
"url": "node40.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45412,14 +48843,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.154Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.154Z",
"url": "node39.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45427,14 +48860,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.162Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.162Z",
"url": "node38.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45442,14 +48877,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.170Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.170Z",
"url": "node37.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45457,14 +48894,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.179Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.179Z",
"url": "node36.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45472,14 +48911,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.187Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.187Z",
"url": "node35.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45487,14 +48928,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.195Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.195Z",
"url": "node34.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45502,14 +48945,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.203Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.203Z",
"url": "node33.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45517,14 +48962,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.212Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.212Z",
"url": "node32.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45532,14 +48979,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.220Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.220Z",
"url": "node31.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45547,14 +48996,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.228Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.228Z",
"url": "node30.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45562,14 +49013,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.237Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.236Z",
"url": "node29.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45577,14 +49030,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.245Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.245Z",
"url": "node28.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45592,14 +49047,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.253Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.253Z",
"url": "node27.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45607,14 +49064,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.261Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.261Z",
"url": "node26.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45622,14 +49081,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.270Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.270Z",
"url": "node25.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45637,14 +49098,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.278Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.278Z",
"url": "node24.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45652,14 +49115,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.286Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.286Z",
"url": "node23.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45667,14 +49132,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.294Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.294Z",
"url": "node22.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45682,14 +49149,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.303Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.303Z",
"url": "node21.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45697,14 +49166,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.311Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.311Z",
"url": "node20.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45712,14 +49183,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.319Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.319Z",
"url": "node19.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45727,14 +49200,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.328Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.328Z",
"url": "node18.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45742,14 +49217,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.336Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.336Z",
"url": "node17.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45757,14 +49234,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.344Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.344Z",
"url": "node16.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45772,14 +49251,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.352Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.352Z",
"url": "node15.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45787,14 +49268,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.361Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.361Z",
"url": "node14.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45802,14 +49285,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.369Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.369Z",
"url": "node13.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45817,14 +49302,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.377Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.377Z",
"url": "node12.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45832,14 +49319,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.386Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.386Z",
"url": "node11.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45847,14 +49336,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.394Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.394Z",
"url": "node10.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45862,14 +49353,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.402Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.402Z",
"url": "node9.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45877,14 +49370,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.410Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.410Z",
"url": "node8.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45892,14 +49387,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.419Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.419Z",
"url": "node7.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45907,14 +49404,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.427Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.427Z",
"url": "node6.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45922,14 +49421,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.435Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.435Z",
"url": "node5.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45937,14 +49438,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.443Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.443Z",
"url": "node4.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45952,14 +49455,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.452Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.452Z",
"url": "node3.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45967,14 +49472,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.460Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.460Z",
"url": "node2.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45982,14 +49489,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.468Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "syndicate origin server",
"created": "2013-12-11T23:57:20.468Z",
"url": "node1.mpisws.vicci.org:32780",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 29
+ "authenticated": false,
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -45997,14 +49506,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.594Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "Content from www.cs.gatech.edu",
"created": "2013-12-11T23:57:20.594Z",
"url": "www.cs.gatech.edu",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 30
+ "authenticated": false,
+ "contentProvider": 30,
+ "enacted": null
}
},
{
@@ -46012,14 +49523,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.619Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "Content from www.cs.stanford.edu",
"created": "2013-12-11T23:57:20.619Z",
"url": "www.cs.stanford.edu",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 31
+ "authenticated": false,
+ "contentProvider": 31,
+ "enacted": null
}
},
{
@@ -46027,14 +49540,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.644Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "Content from www.cs.washington.edu",
"created": "2013-12-11T23:57:20.644Z",
"url": "www.cs.washington.edu",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 32
+ "authenticated": false,
+ "contentProvider": 32,
+ "enacted": null
}
},
{
@@ -46042,14 +49557,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.669Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "Content from www.mpg.de",
"created": "2013-12-11T23:57:20.669Z",
"url": "www.mpg.de",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 33
+ "authenticated": false,
+ "contentProvider": 33,
+ "enacted": null
}
},
{
@@ -46057,14 +49574,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.694Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "Content from www.cs.princeton.edu",
"created": "2013-12-11T23:57:20.694Z",
"url": "www.cs.princeton.edu",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 34
+ "authenticated": false,
+ "contentProvider": 34,
+ "enacted": null
}
},
{
@@ -46072,14 +49591,16 @@
"model": "hpc.originserver",
"fields": {
"updated": "2013-12-11T23:57:20.719Z",
- "authenticated": false,
+ "origin_server_id": null,
"description": "onlab virtual machine images",
"created": "2013-12-11T23:57:20.719Z",
"url": "images.onlab.org",
"enabled": true,
"redirects": true,
"protocol": "http",
- "contentProvider": 35
+ "authenticated": false,
+ "contentProvider": 35,
+ "enacted": null
}
},
{
@@ -46090,9 +49611,11 @@
"description": "CDN Prefix for the Syndicate distributed filesystem",
"created": "2013-12-11T23:57:20.479Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "cdn.syndicatedrive.com",
"defaultOriginServer": 3876,
- "contentProvider": 29
+ "contentProvider": 29,
+ "enacted": null
}
},
{
@@ -46103,9 +49626,11 @@
"description": "CDN Prefix for Georgia Tech",
"created": "2013-12-11T23:57:20.602Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "gt.opencdn.internet2.edu",
"defaultOriginServer": 3877,
- "contentProvider": 30
+ "contentProvider": 30,
+ "enacted": null
}
},
{
@@ -46116,9 +49641,11 @@
"description": "CDN Prefix for Stanford University",
"created": "2013-12-11T23:57:20.627Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "stanford.opencdn.internet2.edu",
"defaultOriginServer": 3878,
- "contentProvider": 31
+ "contentProvider": 31,
+ "enacted": null
}
},
{
@@ -46129,9 +49656,11 @@
"description": "CDN Prefix for University of Washington",
"created": "2013-12-11T23:57:20.652Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "washington.opencdn.internet2.edu",
"defaultOriginServer": 3879,
- "contentProvider": 32
+ "contentProvider": 32,
+ "enacted": null
}
},
{
@@ -46142,9 +49671,11 @@
"description": "CDN Prefix for Max Planck Institute",
"created": "2013-12-11T23:57:20.677Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "mp.opencdn.internet2.edu",
"defaultOriginServer": 3880,
- "contentProvider": 33
+ "contentProvider": 33,
+ "enacted": null
}
},
{
@@ -46155,9 +49686,11 @@
"description": "CDN Prefix for Princeton University",
"created": "2013-12-11T23:57:20.702Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "princeton.opencdn.internet2.edu",
"defaultOriginServer": 3881,
- "contentProvider": 34
+ "contentProvider": 34,
+ "enacted": null
}
},
{
@@ -46168,103 +49701,28 @@
"description": "CDN Prefix for ON.LAB",
"created": "2013-12-11T23:57:20.727Z",
"enabled": true,
+ "cdn_prefix_id": null,
"prefix": "onlab.vicci.org",
"defaultOriginServer": 3882,
- "contentProvider": 35
+ "contentProvider": 35,
+ "enacted": null
}
},
{
- "pk": 1,
- "model": "core.siteprivilege",
- "fields": {
- "site": 24,
- "updated": "2013-12-17T18:08:58.293Z",
- "role": 1,
- "user": 15,
- "created": "2013-12-17T18:08:58.293Z"
- }
-},
-
-{
"pk": 5,
"model": "syndicate.syndicateservice",
"fields": {}
},
{
"pk": 1,
- "model": "syndicate.syndicateuser",
+ "model": "core.siteprivilege",
"fields": {
- "max_RGs": 100,
- "is_admin": true,
- "user": 6,
- "max_AGs": 100,
- "max_UGs": 100,
- "max_volumes": 100
- }
-},
-{
- "pk": 2,
- "model": "syndicate.syndicateuser",
- "fields": {
- "max_RGs": 500,
- "is_admin": false,
- "user": 13,
- "max_AGs": 10,
- "max_UGs": 500,
- "max_volumes": 1
- }
-},
-{
- "pk": 1,
- "model": "syndicate.volume",
- "fields": {
- "description": "GenBank dataset snapshot from Nov. 2013",
- "blocksize": 61440,
- "metadata_private_key": "",
- "default_gateway_caps": "3",
- "private": false,
- "file_quota": -1,
- "api_public_key": "",
- "owner_id": 1,
- "archive": true,
- "metadata_public_key": "",
- "name": "GenBank-11-2013"
- }
-},
-{
- "pk": 2,
- "model": "syndicate.volume",
- "fields": {
- "description": "Volume associated with princeton_syndicate",
- "blocksize": 102400,
- "metadata_private_key": "",
- "default_gateway_caps": "31",
- "private": true,
- "file_quota": 1000000,
- "api_public_key": "",
- "owner_id": 1,
- "archive": false,
- "metadata_public_key": "",
- "name": "princeton_syndicate-Volume"
- }
-},
-{
- "pk": 1,
- "model": "syndicate.volumeaccessright",
- "fields": {
- "volume": 1,
- "gateway_caps": "3",
- "owner_id": 1
- }
-},
-{
- "pk": 1,
- "model": "syndicate.volumeaccessrequest",
- "fields": {
- "volume": 2,
- "message": "Hi Jude, this is Siobhan. Can I join the princeton_syndicate volume with read-only permission?\r\n",
- "gateway_caps": "3",
- "owner_id": 2
+ "updated": "2013-12-17T18:08:58.293Z",
+ "created": "2013-12-17T18:08:58.293Z",
+ "site": 24,
+ "role": 1,
+ "user": 15,
+ "enacted": null
}
}
]
diff --git a/planetstack/core/models/__init__.py b/planetstack/core/models/__init__.py
index 6926d90..e31da37 100644
--- a/planetstack/core/models/__init__.py
+++ b/planetstack/core/models/__init__.py
@@ -6,26 +6,25 @@
from .service import ServiceAttribute
from .tag import Tag
from .role import Role
-#from .deployment import Deployment
from .site import Site,Deployment, DeploymentRole, DeploymentPrivilege, SiteDeployments
-from .user import User
+from .dashboard import DashboardView
+from .user import User, UserDeployments, UserDashboardView
from .serviceclass import ServiceClass
-from .slice import Slice
-from .site import SitePrivilege
-from .image import Image
+from .slice import Slice, SliceDeployments
+from .site import SitePrivilege, SiteDeployments
+from .image import Image, ImageDeployments
from .node import Node
from .serviceresource import ServiceResource
from .slice import SliceRole
from .slice import SlicePrivilege
from .site import SiteRole
from .site import SitePrivilege
-#from .deployment import DeploymentRole
-#from .deployment import DeploymentPrivilege
from .planetstack import PlanetStackRole
from .planetstack import PlanetStackPrivilege
from .slicetag import SliceTag
from .sliver import Sliver
from .reservation import ReservedResource
from .reservation import Reservation
-from .network import Network, NetworkParameterType, NetworkParameter, NetworkSliver, NetworkTemplate, Router, NetworkSlice
+from .network import Network, NetworkParameterType, NetworkParameter, NetworkSliver, NetworkTemplate, Router, NetworkSlice, NetworkDeployments
from .billing import Account, Invoice, Charge, UsableObject, Payment
+
diff --git a/planetstack/core/models/dashboard.py b/planetstack/core/models/dashboard.py
new file mode 100644
index 0000000..aa79f84
--- /dev/null
+++ b/planetstack/core/models/dashboard.py
@@ -0,0 +1,11 @@
+import os
+from django.db import models
+from core.models import PlCoreBase
+from django.contrib.contenttypes import generic
+
+class DashboardView(PlCoreBase):
+ name = models.CharField(max_length=200, unique=True, help_text="Name of the View")
+ url = models.CharField(max_length=1024, help_text="URL of Dashboard")
+
+ def __unicode__(self): return u'%s' % (self.name)
+
diff --git a/planetstack/core/models/deployment.py b/planetstack/core/models/deployment.py
deleted file mode 100644
index 1e5e6dc..0000000
--- a/planetstack/core/models/deployment.py
+++ /dev/null
@@ -1,34 +0,0 @@
-import os
-from django.db import models
-from core.models import PlCoreBase
-from django.contrib.contenttypes import generic
-
-# Create your models here.
-
-class ManyToManyField_NoSyncdb(models.ManyToManyField):
- def __init__(self, *args, **kwargs):
- super(ManyToManyField_NoSyncdb, self).__init__(*args, **kwargs)
- self.creates_table = False
-
-class Deployment(PlCoreBase):
- name = models.CharField(max_length=200, unique=True, help_text="Name of the Deployment")
-# sites = ManyToManyField_NoSyncdb('Site', through=Site.deployments.through, blank=True)
-
- def __unicode__(self): return u'%s' % (self.name)
-
-
-class DeploymentRole(PlCoreBase):
-
- ROLE_CHOICES = (('admin','Admin'),)
- role = models.CharField(choices=ROLE_CHOICES, unique=True, max_length=30)
-
- def __unicode__(self): return u'%s' % (self.role)
-
-class DeploymentPrivilege(PlCoreBase):
-
- user = models.ForeignKey('User', related_name='deployment_privileges')
- deployment = models.ForeignKey('Deployment', related_name='deployment_privileges')
- role = models.ForeignKey('DeploymentRole')
-
- def __unicode__(self): return u'%s %s %s' % (self.deployment, self.user, self.role)
-
diff --git a/planetstack/core/models/image.py b/planetstack/core/models/image.py
index b4803e2..db01e1b 100644
--- a/planetstack/core/models/image.py
+++ b/planetstack/core/models/image.py
@@ -1,13 +1,23 @@
import os
from django.db import models
from core.models import PlCoreBase
+from core.models import Deployment
# Create your models here.
class Image(PlCoreBase):
- image_id = models.CharField(max_length=256, unique=True)
name = models.CharField(max_length=256, unique=True)
disk_format = models.CharField(max_length=256)
container_format = models.CharField(max_length=256)
+ path = models.CharField(max_length=256, null=True, blank=True, help_text="Path to image on local disk")
def __unicode__(self): return u'%s' % (self.name)
+
+class ImageDeployments(PlCoreBase):
+ image = models.ForeignKey(Image)
+ deployment = models.ForeignKey(Deployment)
+ glance_image_id = models.CharField(null=True, blank=True, max_length=200, help_text="Glance image id")
+
+ def __unicode__(self): return u'%s %s' % (self.image, self.deployment)
+
+
diff --git a/planetstack/core/models/network.py b/planetstack/core/models/network.py
index 72e7a5f..298c54d 100644
--- a/planetstack/core/models/network.py
+++ b/planetstack/core/models/network.py
@@ -1,7 +1,7 @@
import os
import socket
from django.db import models
-from core.models import PlCoreBase, Site, Slice, Sliver
+from core.models import PlCoreBase, Site, Slice, Sliver, Deployment
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
@@ -50,6 +50,41 @@
self.subnet = find_unused_subnet(existing_subnets=[x.subnet for x in Network.objects.all()])
super(Network, self).save(*args, **kwds)
+ def can_update(self, user):
+ return self.owner.can_update(user)
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = Network.objects.all()
+ else:
+ slices = Slice.select_by_user(user)
+ #slice_ids = [s.id for s in Slice.select_by_user(user)]
+ qs = Network.objects.filter(owner__in=slices)
+ return qs
+
+class NetworkDeployments(PlCoreBase):
+ # Stores the openstack ids at various deployments
+ network = models.ForeignKey(Network)
+ deployment = models.ForeignKey(Deployment)
+ net_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum network")
+ router_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum router id")
+ subnet_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum subnet id")
+ subnet = models.CharField(max_length=32, blank=True)
+
+ def can_update(self, user):
+ return user.is_admin
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = NetworkDeployments.objects.all()
+ else:
+ slices = Slice.select_by_user(user)
+ networks = Network.objects.filter(owner__in=slices)
+ qs = NetworkDeployments.objects.filter(network__in=networks)
+ return qs
+
class NetworkSlice(PlCoreBase):
# This object exists solely so we can implement the permission check when
# adding slices to networks. It adds no additional fields to the relation.
@@ -70,6 +105,18 @@
def __unicode__(self): return u'%s-%s' % (self.network.name, self.slice.name)
+ def can_update(self, user):
+ return self.slice.can_update(user)
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = NetworkSlice.objects.all()
+ else:
+ slice_ids = [s.id for s in Slice.select_by_user(user)]
+ qs = NetworkSlice.objects.filter(id__in=slice_ids)
+ return qs
+
class NetworkSliver(PlCoreBase):
network = models.ForeignKey(Network)
sliver = models.ForeignKey(Sliver)
@@ -93,6 +140,18 @@
def __unicode__(self): return u'%s-%s' % (self.network.name, self.sliver.instance_name)
+ def can_update(self, user):
+ return self.sliver.can_update(user)
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = NetworkSliver.objects.all()
+ else:
+ sliver_ids = [s.id for s in NetworkSliver.select_by_user(user)]
+ qs = NetworkSliver.objects.filter(id__in=sliver_ids)
+ return qs
+
class Router(PlCoreBase):
name = models.CharField(max_length=32)
owner = models.ForeignKey(Slice, related_name="routers")
diff --git a/planetstack/core/models/plcorebase.py b/planetstack/core/models/plcorebase.py
index 590e240..ec79419 100644
--- a/planetstack/core/models/plcorebase.py
+++ b/planetstack/core/models/plcorebase.py
@@ -1,15 +1,30 @@
+import datetime
import os
+import sys
from django.db import models
from django.forms.models import model_to_dict
from django.core.urlresolvers import reverse
from django.forms.models import model_to_dict
-# This is a no-op if observer_disabled is set to 1 in the config file
-from observer import *
+
+try:
+ # This is a no-op if observer_disabled is set to 1 in the config file
+ from observer import *
+except:
+ print >> sys.stderr, "import of observer failed! printing traceback and disabling observer:"
+ import traceback
+ traceback.print_exc()
+
+ # guard against something failing
+ def notify_observer(*args, **kwargs):
+ pass
class PlCoreBase(models.Model):
- created = models.DateTimeField(auto_now_add=True)
- updated = models.DateTimeField(auto_now=True)
+ # default values for created and updated are only there to keep evolution
+ # from failing.
+
+ created = models.DateTimeField(auto_now_add=True, default=datetime.datetime.now())
+ updated = models.DateTimeField(auto_now=True, default=datetime.datetime.now())
enacted = models.DateTimeField(null=True, default=None)
class Meta:
@@ -38,6 +53,13 @@
def get_field_diff(self, field_name):
return self.diff.get(field_name, None)
+ def can_update(self, user):
+ if user.is_readonly:
+ return False
+ if user.is_admin:
+ return True
+ return False
+
def delete(self, *args, **kwds):
# so we have something to give the observer
pk = self.pk
@@ -59,6 +81,14 @@
self.__initial = self._dict
+ def save_by_user(self, user, *args, **kwds):
+ if self.can_update(user):
+ self.save(*args, **kwds)
+
+ def delete_by_user(self, user, *args, **kwds):
+ if self.can_update(user):
+ self.delete(*args, **kwds)
+
@property
def _dict(self):
return model_to_dict(self, fields=[field.name for field in
diff --git a/planetstack/core/models/reservation.py b/planetstack/core/models/reservation.py
index e445228..db3769f 100644
--- a/planetstack/core/models/reservation.py
+++ b/planetstack/core/models/reservation.py
@@ -19,6 +19,18 @@
def endTime(self):
return self.startTime + datetime.timedelta(hours=self.duration)
+ def can_update(self, user):
+ return self.slice.can_update(user)
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = Reservation.objects.all()
+ else:
+ slice_ids = [s.id for s in Slice.select_by_user(user)]
+ qs = Reservation.objects.filter(id__in=slice_ids)
+ return qs
+
class ReservedResource(PlCoreBase):
sliver = models.ForeignKey(Sliver, related_name="reservedResourrces")
resource = models.ForeignKey(ServiceResource, related_name="reservedResources")
@@ -30,6 +42,16 @@
def __unicode__(self): return u'%d %s on %s' % (self.quantity, self.resource, self.sliver)
+ def can_update(self, user):
+ return self.sliver.slice.can_update(user)
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = ReservedResource.objects.all()
+ else:
+ sliver_ids = [s.id for s in Sliver.select_by_user(user)]
+ qs = ReservedResource.objects.filter(id__in=sliver_ids)
+ return qs
diff --git a/planetstack/core/models/serviceclass.py b/planetstack/core/models/serviceclass.py
index ce3eaee..3b6ee82 100644
--- a/planetstack/core/models/serviceclass.py
+++ b/planetstack/core/models/serviceclass.py
@@ -27,4 +27,6 @@
except ServiceClass.DoesNotExist:
return None
-
+ def save_by_user(self, user, *args, **kwds):
+ if self.can_update(user):
+ super(ServiceClass, self).save(*args, **kwds)
diff --git a/planetstack/core/models/site.py b/planetstack/core/models/site.py
index 65d965b..eea62fe 100644
--- a/planetstack/core/models/site.py
+++ b/planetstack/core/models/site.py
@@ -1,16 +1,15 @@
import os
from django.db import models
from core.models import PlCoreBase
-#from core.models import Deployment
from core.models import Tag
from django.contrib.contenttypes import generic
from geoposition.fields import GeopositionField
+from core.acl import AccessControlList
class Site(PlCoreBase):
"""
A logical grouping of Nodes that are co-located at the same geographic location, which also typically corresponds to the Nodes' location in the physical network.
"""
- tenant_id = models.CharField(null=True, blank=True, max_length=200, help_text="Keystone tenant id")
name = models.CharField(max_length=200, help_text="Name for this Site")
site_url = models.URLField(null=True, blank=True, max_length=512, help_text="Site's Home URL Page")
enabled = models.BooleanField(default=True, help_text="Status for this Site")
@@ -21,12 +20,34 @@
is_public = models.BooleanField(default=True, help_text="Indicates the visibility of this site to other members")
abbreviated_name = models.CharField(max_length=80)
- deployments = models.ManyToManyField('Deployment', blank=True, related_name='sites')
- #deployments = models.ManyToManyField('Deployment', through='SiteDeployments', blank=True)
+ #deployments = models.ManyToManyField('Deployment', blank=True, related_name='sites')
+ deployments = models.ManyToManyField('Deployment', through='SiteDeployments', blank=True, help_text="Select which sites are allowed to host nodes in this deployment")
tags = generic.GenericRelation(Tag)
def __unicode__(self): return u'%s' % (self.name)
+ def can_update(self, user):
+ if user.is_readonly:
+ return False
+ if user.is_admin:
+ return True
+ site_privs = SitePrivilege.objects.filter(user=user, site=self)
+ for site_priv in site_privs:
+ if site_priv.role.role == 'pi':
+ return True
+ return False
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = Site.objects.all()
+ else:
+ site_ids = [sp.site.id for sp in SitePrivilege.objects.filter(user=user)]
+ site_ids.append(user.site.id)
+ qs = Site.objects.filter(id__in=site_ids)
+ return qs
+
+
class SiteRole(PlCoreBase):
ROLE_CHOICES = (('admin','Admin'),('pi','PI'),('tech','Tech'),('billing','Billing'))
@@ -48,12 +69,68 @@
def delete(self, *args, **kwds):
super(SitePrivilege, self).delete(*args, **kwds)
+ def can_update(self, user):
+ return self.site.can_update(user)
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = SitePrivilege.objects.all()
+ else:
+ sp_ids = [sp.id for sp in SitePrivilege.objects.filter(user=user)]
+ qs = SitePrivilege.objects.filter(id__in=sp_ids)
+ return qs
+
class Deployment(PlCoreBase):
name = models.CharField(max_length=200, unique=True, help_text="Name of the Deployment")
- #sites = models.ManyToManyField('Site', through='SiteDeployments', blank=True)
+ admin_user = models.CharField(max_length=200, null=True, blank=True, help_text="Username of an admin user at this deployment")
+ admin_password = models.CharField(max_length=200, null=True, blank=True, help_text="Password of theadmin user at this deployment")
+ admin_tenant = models.CharField(max_length=200, null=True, blank=True, help_text="Name of the tenant the admin user belongs to")
+ auth_url = models.CharField(max_length=200, null=True, blank=True, help_text="Auth url for the deployment")
+
+ # smbaker: the default of 'allow all' is intended for evolutions of existing
+ # deployments. When new deployments are created via the GUI, they are
+ # given a default of 'allow site <site_of_creator>'
+ accessControl = models.TextField(max_length=200, blank=False, null=False, default="allow all",
+ help_text="Access control list that specifies which sites/users may use nodes in this deployment")
+
+ def get_acl(self):
+ return AccessControlList(self.accessControl)
+
+ def test_acl(self, slice=None, user=None):
+ potential_users=[]
+
+ if user:
+ potential_users.append(user)
+
+ if slice:
+ potential_users.append(slice.creator)
+ for priv in slice.slice_privileges.all():
+ if priv.user not in potential_users:
+ potential_users.append(priv.user)
+
+ acl = self.get_acl()
+ for user in potential_users:
+ if acl.test(user) == "allow":
+ return True
+
+ return False
+
+ @staticmethod
+ def select_by_acl(user):
+ ids = []
+ for deployment in Deployment.objects.all():
+ acl = deployment.get_acl()
+ if acl.test(user) == "allow":
+ ids.append(deployment.id)
+
+ return Deployment.objects.filter(id__in=ids)
def __unicode__(self): return u'%s' % (self.name)
+ @staticmethod
+ def select_by_user(user):
+ return Deployment.objects.all()
class DeploymentRole(PlCoreBase):
@@ -70,11 +147,36 @@
def __unicode__(self): return u'%s %s %s' % (self.deployment, self.user, self.role)
+ def can_update(self, user):
+ if user.is_readonly:
+ return False
+ if user.is_admin:
+ return True
+ dprivs = DeploymentPrivilege.objects.filter(user=user)
+ for dpriv in dprivs:
+ if dpriv.role.role == 'admin':
+ return True
+ return False
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = DeploymentPrivilege.objects.all()
+ else:
+ dpriv_ids = [dp.id for dp in DeploymentPrivilege.objects.filter(user=user)]
+ qs = DeploymentPrivilege.objects.filter(id__in=dpriv_ids)
+ return qs
+
class SiteDeployments(PlCoreBase):
site = models.ForeignKey(Site)
deployment = models.ForeignKey(Deployment)
+ tenant_id = models.CharField(null=True, blank=True, max_length=200, help_text="Keystone tenant id")
- class Meta:
- db_table = 'site_deployments'
- #auto_created = Site
+ @staticmethod
+ def select_by_user(user):
+ return SiteDeployments.objects.all()
+
+ #class Meta:
+ # db_table = 'core_site_deployments'
+ # #auto_created = Site
diff --git a/planetstack/core/models/slice.py b/planetstack/core/models/slice.py
index 1fa342a..bd41f87 100644
--- a/planetstack/core/models/slice.py
+++ b/planetstack/core/models/slice.py
@@ -9,22 +9,22 @@
from core.models import Tag
from django.contrib.contenttypes import generic
from core.models import Service
+from core.models import Deployment
# Create your models here.
class Slice(PlCoreBase):
- tenant_id = models.CharField(max_length=200, help_text="Keystone tenant id")
name = models.CharField(unique=True, help_text="The Name of the Slice", max_length=80)
enabled = models.BooleanField(default=True, help_text="Status for this Slice")
omf_friendly = models.BooleanField()
description=models.TextField(blank=True,help_text="High level description of the slice and expected activities", max_length=1024)
slice_url = models.URLField(blank=True, max_length=512)
site = models.ForeignKey(Site, related_name='slices', help_text="The Site this Slice belongs to")
- network_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum network")
- router_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum router id")
- subnet_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum subnet id")
+ max_slivers = models.IntegerField(default=10)
+ imagePreference = models.CharField(default="Ubuntu 12.04 LTS", null=True, blank=True, max_length=256)
service = models.ForeignKey(Service, related_name='service', null=True, blank=True)
-
+ network = models.CharField(default="Private Only",null=True, blank=True, max_length=256)
+ mountDataSets = models.CharField(default="GenBank",null=True, blank=True, max_length=256)
tags = generic.GenericRelation(Tag)
serviceClass = models.ForeignKey(ServiceClass, related_name = "slices", null=True, default=ServiceClass.get_default)
@@ -42,6 +42,26 @@
self.creator = self.caller
super(Slice, self).save(*args, **kwds)
+ def can_update(self, user):
+ if user.is_readonly:
+ return False
+ if user.is_admin:
+ return True
+ slice_privs = SlicePrivilege.objects.filter(user=user, slice=self)
+ for slice_priv in slice_privs:
+ if slice_priv.role.role == 'admin':
+ return True
+ return False
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = Slice.objects.all()
+ else:
+ slice_ids = [sp.slice.id for sp in SlicePrivilege.objects.filter(user=user)]
+ qs = Slice.objects.filter(id__in=slice_ids)
+ return qs
+
class SliceRole(PlCoreBase):
ROLE_CHOICES = (('admin','Admin'),('default','Default'))
@@ -55,3 +75,34 @@
role = models.ForeignKey('SliceRole')
def __unicode__(self): return u'%s %s %s' % (self.slice, self.user, self.role)
+
+ def can_update(self, user):
+ return self.slice.can_update(user)
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = SlicePrivilege.objects.all()
+ else:
+ sp_ids = [sp.id for sp in SlicePrivilege.objects.filter(user=user)]
+ qs = SlicePrivilege.objects.filter(id__in=sp_ids)
+ return qs
+
+class SliceDeployments(PlCoreBase):
+ slice = models.ForeignKey(Slice)
+ deployment = models.ForeignKey(Deployment)
+ tenant_id = models.CharField(null=True, blank=True, max_length=200, help_text="Keystone tenant id")
+ network_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum network")
+ router_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum router id")
+ subnet_id = models.CharField(null=True, blank=True, max_length=256, help_text="Quantum subnet id")
+
+ def __unicode__(self): return u'%s %s' % (self.slice, self.deployment)
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = SliceDeployments.objects.all()
+ else:
+ slices = Slice.select_by_user(user)
+ qs = SliceDeployments.objects.filter(slice__in=slices)
+ return qs
diff --git a/planetstack/core/models/slicetag.py b/planetstack/core/models/slicetag.py
index 76cc669..ea1d026 100644
--- a/planetstack/core/models/slicetag.py
+++ b/planetstack/core/models/slicetag.py
@@ -10,5 +10,14 @@
name = models.CharField(help_text="The name of this tag", max_length=30, choices=NAME_CHOICES)
value = models.CharField(help_text="The value of this tag", max_length=1024)
+ def can_update(self, user):
+ return self.slice.can_update(user)
-
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = SliceTag.objects.all()
+ else:
+ st_ids = [st.id for st in SliceTag.objects.filter(user=user)]
+ qs = SliceTag.objects.filter(id__in=st_ids)
+ return qs
diff --git a/planetstack/core/models/sliver.py b/planetstack/core/models/sliver.py
index 9c00cee..0f37bc9 100644
--- a/planetstack/core/models/sliver.py
+++ b/planetstack/core/models/sliver.py
@@ -25,6 +25,7 @@
deploymentNetwork = models.ForeignKey(Deployment, verbose_name='deployment', related_name='sliver_deploymentNetwork')
numberCores = models.IntegerField(verbose_name="Number of Cores", help_text="Number of cores for sliver", default=0)
tags = generic.GenericRelation(Tag)
+ userData = models.TextField(blank=True, null=True, help_text="user_data passed to instance during creation")
def __unicode__(self):
if self.instance_name:
@@ -36,10 +37,26 @@
else:
return u'unsaved-sliver'
-
def save(self, *args, **kwds):
if not self.name:
self.name = self.slice.name
if not self.creator and hasattr(self, 'caller'):
self.creator = self.caller
+ self.deploymentNetwork = self.node.deployment
+
+ if not self.deploymentNetwork.test_acl(slice=self.slice):
+ raise exceptions.ValidationError("Deployment %s's ACL does not allow any of this slice %s's users" % (self.deploymentNetwork.name, self.slice.name))
+
super(Sliver, self).save(*args, **kwds)
+
+ def can_update(self, user):
+ return self.slice.can_update(user)
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = Sliver.objects.all()
+ else:
+ slices = Slice.select_by_user(user)
+ qs = Sliver.objects.filter(slice__in=slices)
+ return qs
diff --git a/planetstack/core/models/tag.py b/planetstack/core/models/tag.py
index cbe63a5..7818c32 100644
--- a/planetstack/core/models/tag.py
+++ b/planetstack/core/models/tag.py
@@ -22,3 +22,12 @@
def __unicode__(self):
return self.name
+
+ def can_update(self, user):
+ if user.is_admin:
+ return True
+ return False
+
+ @staticmethod
+ def select_by_user(user):
+ return Tag.objects.all()
diff --git a/planetstack/core/models/user.py b/planetstack/core/models/user.py
index a3b82d8..6e7eef6 100644
--- a/planetstack/core/models/user.py
+++ b/planetstack/core/models/user.py
@@ -2,9 +2,12 @@
import datetime
from collections import defaultdict
from django.db import models
-from core.models import PlCoreBase,Site
+from django.db.models import F, Q
+from core.models import PlCoreBase,Site, DashboardView
+from core.models.deployment import Deployment
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from timezones.fields import TimeZoneField
+from operator import itemgetter, attrgetter
# Create your models here.
class UserManager(BaseUserManager):
@@ -56,8 +59,6 @@
username = models.CharField(max_length=255, default="Something" )
-
- kuser_id = models.CharField(null=True, blank=True, help_text="keystone user id", max_length=200)
firstname = models.CharField(help_text="person's given name", max_length=200)
lastname = models.CharField(help_text="person's surname", max_length=200)
@@ -77,6 +78,8 @@
timezone = TimeZoneField()
+ dashboards = models.ManyToManyField('DashboardView', through='UserDashboardView', blank=True)
+
objects = UserManager()
USERNAME_FIELD = 'email'
@@ -113,6 +116,20 @@
def is_superuser(self):
return False
+ def get_dashboards(self):
+ DEFAULT_DASHBOARDS=["Tenant"]
+
+ dashboards = sorted(list(self.dashboardViews.all()), key=attrgetter('order'))
+ dashboards = [x.dashboardView for x in dashboards]
+
+ if not dashboards:
+ for dashboardName in DEFAULT_DASHBOARDS:
+ dbv = DashboardView.objects.filter(name=dashboardName)
+ if dbv:
+ dashboards.append(dbv[0])
+
+ return dashboards
+
# def get_roles(self):
# from core.models.site import SitePrivilege
# from core.models.slice import SliceMembership
@@ -130,4 +147,42 @@
if not self.id:
self.set_password(self.password)
self.username = self.email
- super(User, self).save(*args, **kwds)
+ super(User, self).save(*args, **kwds)
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = User.objects.all()
+ else:
+ # can see all users at any site where this user has pi role
+ from core.models.site import SitePrivilege
+ site_privs = SitePrivilege.objects.filter(user=user)
+ sites = [sp.site for sp in site_privs if sp.role.role == 'pi']
+ # get site privs of users at these sites
+ site_privs = SitePrivilege.objects.filter(site__in=sites)
+ user_ids = [sp.user.id for sp in site_privs] + [user.id]
+ qs = User.objects.filter(Q(site__in=sites) | Q(id__in=user_ids))
+ return qs
+
+
+
+class UserDeployments(PlCoreBase):
+ user = models.ForeignKey(User)
+ deployment = models.ForeignKey(Deployment)
+ kuser_id = models.CharField(null=True, blank=True, max_length=200, help_text="Keystone user id")
+
+ def __unicode__(self): return u'%s %s' % (self.user, self.deployment.name)
+
+ @staticmethod
+ def select_by_user(user):
+ if user.is_admin:
+ qs = UserDeployments.objects.all()
+ else:
+ users = Users.select_by_user(user)
+ qs = Usereployments.objects.filter(user__in=slices)
+ return qs
+
+class UserDashboardView(PlCoreBase):
+ user = models.ForeignKey(User, related_name="dashboardViews")
+ dashboardView = models.ForeignKey(DashboardView, related_name="dashboardViews")
+ order = models.IntegerField(default=0)
diff --git a/planetstack/core/plus/sites.py b/planetstack/core/plus/sites.py
deleted file mode 100644
index da86a10..0000000
--- a/planetstack/core/plus/sites.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#sites.py
-
-from django.contrib.admin.sites import AdminSite
-
-
-class AdminMixin(object):
- """Mixin for AdminSite to allow custom dashboard views."""
-
- def __init__(self, *args, **kwargs):
- return super(AdminMixin, self).__init__(*args, **kwargs)
-
- def get_urls(self):
- """Add our dashboard view to the admin urlconf. Deleted the default index."""
- from django.conf.urls import patterns, url
- from views import DashboardWelcomeView
-
- urls = super(AdminMixin, self).get_urls()
- del urls[0]
- custom_url = patterns('',
- url(r'^$', self.admin_view(DashboardWelcomeView.as_view()),
- name="index")
- )
-
- return custom_url + urls
-
-
-class SitePlus(AdminMixin, AdminSite):
- """
- A Django AdminSite with the AdminMixin to allow registering custom
- dashboard view.
- """
diff --git a/planetstack/core/plus/views.py b/planetstack/core/plus/views.py
deleted file mode 100644
index 386f6b5..0000000
--- a/planetstack/core/plus/views.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#views.py
-from django.views.generic import TemplateView
-
-from core.models import Slice,SliceRole,SlicePrivilege,Site,Reservation
-
-class DashboardWelcomeView(TemplateView):
- template_name = 'admin/dashboard/welcome.html'
-
- def get(self, request, *args, **kwargs):
- context = self.get_context_data(**kwargs)
- sliceList = Slice.objects.all()
- try:
- site = Site.objects.filter(id=request.user.site.id)
- except:
- site = Site.objects.filter(name="Princeton")
- context['site'] = site[0]
-
- slicePrivs = SlicePrivilege.objects.filter(user=request.user)
- userSliceInfo = []
- for entry in slicePrivs:
-
- try:
- reservationList = Reservation.objects.filter(slice=entry.slice)
- reservations = (True,reservationList)
-
- except:
- reservations = None
-
- userSliceInfo.append({'slice': Slice.objects.get(id=entry.slice.id),
- 'role': SliceRole.objects.get(id=entry.role.id).role,
- 'reservations': reservations})
-
- context['userSliceInfo'] = userSliceInfo
- return self.render_to_response(context=context)
diff --git a/planetstack/core/serializers.py b/planetstack/core/serializers.py
index b83157b..3fb726d 100644
--- a/planetstack/core/serializers.py
+++ b/planetstack/core/serializers.py
@@ -124,6 +124,9 @@
'network_id',
'router_id',
'subnet_id',
+ 'imagePreference',
+ 'network',
+ 'mountDataSets',
'site',
'slivers',
'updated',
diff --git a/planetstack/core/static/chartsBg.jpg b/planetstack/core/static/chartsBg.jpg
new file mode 100644
index 0000000..386614f
--- /dev/null
+++ b/planetstack/core/static/chartsBg.jpg
Binary files differ
diff --git a/planetstack/core/static/hpc_historical.css b/planetstack/core/static/hpc_historical.css
new file mode 100644
index 0000000..7be52db
--- /dev/null
+++ b/planetstack/core/static/hpc_historical.css
@@ -0,0 +1,50 @@
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+.row:before,
+.row:after {
+ display: table;
+ content: " ";
+}
+
+.row:after {
+ clear: both;
+}
+
+.row:before,
+.row:after {
+ display: table;
+ content: " ";
+}
+
+.row:after {
+ clear: both;
+}
+
+.graph_container {
+ width: 800px;
+}
+
+.col-md-halfgraph,
+.col-md-fullgraph {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+
+.col-md-halfgraph,
+.col-md-fullgraph {
+ float: left;
+}
+.col-md-halfgraph {
+ width: 350px;
+}
+.col-md-fullgraph {
+ width: 700px;
+}
+.col-md-12 {
+ width: 100%;
+}
diff --git a/planetstack/core/static/img/bg_left_white.gif b/planetstack/core/static/img/bg_left_white.gif
new file mode 100644
index 0000000..7407236
--- /dev/null
+++ b/planetstack/core/static/img/bg_left_white.gif
Binary files differ
diff --git a/planetstack/core/static/js/Leaflet.MakiMarkers.js b/planetstack/core/static/js/Leaflet.MakiMarkers.js
new file mode 100644
index 0000000..910bb31
--- /dev/null
+++ b/planetstack/core/static/js/Leaflet.MakiMarkers.js
@@ -0,0 +1,101 @@
+/*
+ * Leaflet plugin to create map icons using Maki Icons from MapBox.
+ *
+ * References:
+ * Maki Icons: https://www.mapbox.com/maki/
+ * MapBox Marker API: https://www.mapbox.com/developers/api/#Stand-alone.markers
+ *
+ * Usage:
+ * var icon = L.MakiMarkers.icon({icon: "rocket", color: "#b0b", size: "m"});
+ *
+ * License:
+ * MIT: http://jseppi.mit-license.org/
+ */
+(function () {
+ "use strict";
+ L.MakiMarkers = {
+ // Available Maki Icons
+ icons: ["circle-stroked", "circle", "square-stroked", "square",
+ "triangle-stroked", "triangle", "star-stroked", "star", "cross",
+ "marker-stroked", "marker", "religious-jewish", "religious-christian",
+ "religious-muslim", "cemetery", "rocket", "airport", "heliport", "rail",
+ "rail-metro", "rail-light", "bus", "fuel", "parking", "parking-garage",
+ "airfield", "roadblock", "ferry", "harbor", "bicycle", "park", "park2",
+ "museum", "lodging", "monument", "zoo", "garden", "campsite", "theatre",
+ "art-gallery", "pitch", "soccer", "america-football", "tennis", "basketball",
+ "baseball", "golf", "swimming", "cricket", "skiing", "school", "college",
+ "library", "post", "fire-station", "town-hall", "police", "prison",
+ "embassy", "beer", "restaurant", "cafe", "shop", "fast-food", "bar", "bank",
+ "grocery", "cinema", "pharmacy", "hospital", "danger", "industrial",
+ "warehouse", "commercial", "building", "place-of-worship", "alcohol-shop",
+ "logging", "oil-well", "slaughterhouse", "dam", "water", "wetland",
+ "disability", "telephone", "emergency-telephone", "toilets", "waste-basket",
+ "music", "land-use", "city", "town", "village", "farm", "bakery", "dog-park",
+ "lighthouse", "clothing-store", "polling-place", "playground", "entrance",
+ "heart", "london-underground", "minefield", "rail-underground", "rail-above",
+ "camera", "laundry", "car", "suitcase", "hairdresser", "chemist"],
+ defaultColor: "#0a0",
+ defaultIcon: "circle-stroked",
+ defaultSize: "m",
+ apiUrl: "https://api.tiles.mapbox.com/v3/marker/",
+ smallOptions: {
+ iconSize: [20, 50],
+ popupAnchor: [0,-20]
+ },
+ mediumOptions: {
+ iconSize: [30,70],
+ popupAnchor: [0,-30]
+ },
+ largeOptions: {
+ iconSize: [36,90],
+ popupAnchor: [0,-40]
+ }
+ };
+
+ L.MakiMarkers.Icon = L.Icon.extend({
+ options: {
+ //Maki icon: any from https://www.mapbox.com/maki/ (ref: L.MakiMarkers.icons)
+ icon: L.MakiMarkers.defaultIcon,
+ //Marker color: short or long form hex color code
+ color: L.MakiMarkers.defaultColor,
+ //Marker size: "s" (small), "m" (medium), or "l" (large)
+ size: L.MakiMarkers.defaultSize,
+ shadowAnchor: null,
+ shadowSize: null,
+ shadowUrl: null,
+ className: 'maki-marker'
+ },
+
+ initialize: function(options) {
+ var pin;
+
+ options = L.setOptions(this, options);
+
+ switch (options.size) {
+ case "s":
+ L.extend(options, L.MakiMarkers.smallOptions);
+ break;
+ case "l":
+ L.extend(options, L.MakiMarkers.largeOptions);
+ break;
+ default:
+ options.size = "m";
+ L.extend(options, L.MakiMarkers.mediumOptions);
+ break;
+ }
+
+ if (options.color.charAt(0) === '#') {
+ options.color = options.color.substr(1);
+ }
+
+ pin = "pin-" + options.size + "-" + options.icon + "+" +
+ options.color + ".png";
+
+ options.iconUrl = "" + L.MakiMarkers.apiUrl + pin;
+ }
+ });
+
+ L.MakiMarkers.icon = function(options) {
+ return new L.MakiMarkers.Icon(options);
+ };
+})();
diff --git a/planetstack/core/static/log4javascript-1.4.6/changelog.txt b/planetstack/core/static/log4javascript-1.4.6/changelog.txt
new file mode 100644
index 0000000..fe10b97
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/changelog.txt
@@ -0,0 +1,379 @@
+log4javascript change log
+-------------------------
+
+1.4.6 (19/3/2013)
+- Added fix to handle 1223 status code from XMLHttpRequest in IE
+
+1.4.5 (20/2/2013)
+- Changed AjaxAppender to send raw data rather than URL-encoded form data when
+ content-type is not "application/x-www-form-urlencoded"
+
+- Exposed sendAllRemaining() method of AjaxAppender
+
+1.4.4 (8/2/2013)
+- Fixed issue with repeated Content-Type headers in AjaxAppender
+
+- Improved uniqueness of PopUpAppender window name
+
+1.4.3 (18/9/2012)
+- Added addHeader() and getHeaders() methods to AjaxAppender
+
+- Modified sendAllOnUnload feature of AjaxAppender. It now works in WebKit but
+ at the expense of popping up a confirm dialog. That being the case, it is now
+ disabled by default.
+
+- Removed leaked global variable "initialized"
+
+- Fixed bugs #3528265, #3560924, #3560922, #2805479, #3510639 on Sourceforge
+ Tracker
+
+
+1.4.2 (13/10/2011)
+- Fixed JsonLayout trailing comma issue. See
+ http://stackoverflow.com/questions/7735382/asmx-weirdness-deserializing-json-
+ blob-from-log4javascript-logging
+
+- Fixed bugs #3401332, #3185753, #2884623, #2817213 on Sourceforge Tracker
+
+
+1.4.1 (23/3/2009)
+- Fixed document.domain/query string bug (#2519903 on Sourceforge Tracker)
+
+- Added isVisible() method to PopUpAppender
+
+- Added check for whether the console has been closed in isVisible() method of
+ InPageAppender
+
+- Included unit tests in the distribution
+
+
+1.4 (30/10/2008)
+
+- Added time() and timeEnd() methods to Logger
+
+- Added group() and groupEnd() methods to Logger and support for displaying
+ expandable groups to InPageAppender and PopUpAppender
+
+- Added facility to layout custom fields. A custom field value may now
+ optionally be a function which is passed a reference to the layout and a
+ logging event and run at the time the layout's format method is called
+
+- Added option to XmlLayout and JsonLayout to allow multiple messages to be
+ formatted either as one combined message or multiple messages
+
+- Added code to set log4javascript as a property of the window object. This
+ ensures that if log4javascript is loaded via eval() (e.g. Dojo's module
+ loading system), the log4javascript object is guaranteed to be available even
+ though IE does not evaluate the script in the global scope
+
+- Added useDocumentWrite parameter to constructors and isUseDocumentWrite()
+ and setUseDocumentWrite() methods for InPageAppender and PopUpAppender and
+ added console.html to the build so that the appender may use either the
+ existing document.write method or the external HTML file to build the console.
+ This is to allow support for setting document.domain in the main document,
+ which is impossible with the document.write method
+
+- Added milliseconds property to logging events and changed JsonLayout,
+ XmlLayout and HttpPostDataLayout to include milliseconds by default
+
+- Added layout parameter to AjaxAppender and a toString() method on each layout
+
+- Setting configuration properties in appenders via constructor paramaters has
+ been phased out.
+
+- Added window.unload handler for AjaxAppender to send outstanding messages.
+ Doesn't work in Opera
+
+- Implemented log4j-style hierarchical loggers with additive appenders. For
+ example, a logger called "app.stuff" has as its parent the logger called
+ "app", all of whose appenders it inherits
+
+- Changed XmlLayout and JsonLayout to send data as a key/value pair
+
+- Bugfix for inaccessible error details
+
+- An appender can no longer be added more than once to the same logger
+
+- Multiple messages may now be specified in logger methods
+
+- New conversion character 'a' added to PatternLayout. This is the same as 'm'
+ except that if the first message specified is an array then it treats each
+ element of the array as though it had been passed in as a message parameter
+
+- Command line added to console windows with configurable object expansion
+ depth. Command line presence and object expansion depth are configurable in
+ the appender via setShowCommandLine() and setCommandLineObjectExpansionDepth()
+ methods respectively
+
+- Command line history, navigated by cursor keys and stored in a session cookie
+
+- Firebug-inspired command line functions added: $, dir, dirxml, cd, clear,
+ keys, values, expansionDepth
+
+- Fixes for several bugs in object expansion
+
+- Fix for bug in initialization of InPageAppender in IE 5
+
+- Fix to allow searchable HTML in log entries
+
+- Fix for bug which automatically displayed search next/previous buttons when
+ the search box is clicked regardless of whether there were any matches
+
+- Searches in PopUpAppender and InPageAppender now preserve formatting
+
+- More fixes to interaction of search and severity filters in console window
+ used by PopUpAppender and InPageAppender
+
+- Added SwitchableConsoleAppender that allows flipping from an in-page console
+ to a pop-up console window and back again while retaining state
+
+- Custom events added that are raised when PopUpAppender and InPageAppender
+ windows load and unload, and on the main log4javascript object when the main
+ page loads, when the main page is resized and when log4javascript errors occur
+
+- InPageAppender may now be initialized before the page loads by providing an
+ element id for its container, or omitting the container altogether (in which
+ case the appender is added as a fixed div at the bottom of the page)
+
+- Tweaked PopUpAppender and InPageAppender so that the formatted log message is
+ produced when append() is called rather than when the message is actually sent
+ to the console window, thus allowing reliable temporary switching of layouts
+
+- Much improved scrolling to current search match: scrolls only if part of the
+ search match is not visible and centres around it rather than putting flush to
+ the top left
+
+- Removed setReadable() method from JsonLayout - now specified only in the
+ constructor
+
+- Fixed problem in IE where copying selections of log entries would produce two
+ copies of each log entry
+
+
+1.3.1 (20/11/2006)
+
+- Fix to interaction of search and severity filters in console window used by
+ PopUpAppender and InPageAppender
+
+
+1.3 (19/10/2006)
+
+- Fully tested and supported in IE 7 Beta 3
+
+- Added support for FireBug logging levels in BrowserConsoleAppender
+
+- Added optional limit to the number of log messages stored by PopUpAppender and
+ InPageAppender. When this limit is reached, each new message causes the oldest
+ message to be discarded.
+
+- Exceptions passed into logging methods are now displayed in logging output.
+
+- Added facility to pass objects as well as strings to logging methods.
+ Enhanced conversion character 'm' to PatternLayout to expand object properties
+ in the formatted output
+
+- Added stack trace to error reports (alerts and log entries) in Firefox. This
+ is turned off by default but can be switched on via the new
+ log4javascript.setShowStackTraces function
+
+- Added log4javascript_stub.js to distribution - this has stub versions of all
+ objects and methods in log4javascript.js and can be used as a lightweight
+ replacement for log4javascript.js in production systems
+
+- Added log4javascript_compressed.js to distribution - comments and whitespace
+ are removed, resulting in a 30% smaller file
+
+- Added custom fields to layouts
+
+- Added setReopenWhenClosed and isReopenWhenClosed methods to PopUpAppender to
+ allow log4javascript to open a new pop-up console window automatically at the
+ time of the next log entry after the original window was closed
+
+- Layout.ignoresThrowable implemented to allow Layout/Appender combinations to
+ decide whether to display exceptions
+
+- Added NullLayout that performs no formatting on the logging event
+
+- Lowered BrowserConsoleAppender's default threshold to DEBUG and set its
+ default layout to NullLayout so that unformatted objects can be passed into
+ FireBug
+
+- Renamed InlineAppender to InPageAppender (though InlineAppender still works
+ for the sake of backwards compatibility)
+
+- Cosmetic changes to InPageAppender and PopUpAppender
+
+- Added equals() method to Level
+
+- Added removeAppender() and removeAllAppenders() methods to Logger
+
+- Added extensive test script
+
+- Fixed bug where Appender.setLayout and Appender.setThreshold threw an
+ unhandled error if not supplied with a genuine Layout or Level respectively
+
+- Fixed bug where InlinePopUpAppender and PopUpAppender continue to poll their
+ console windows indefinitely (thus generating warnings) if the console window
+ is closed before it has fully loaded
+
+- Fixed bug in w and W symbols in SimpleDateFormat
+
+- Fixed bug with quotes inside messages in JsonLayout
+
+- Fixed bugs in PatternLayout with built-in DATE format and truncation modifiers
+
+- Changed execution order of callbacks in AjaxAppender so that
+ requestSuccessCallback is guaranteed to be called before the next request is
+ sent
+
+- Changed AjaxAppender so that log messages are formatted immediately before
+ a request is sent rather than when append() is called, thus guaranteeing that
+ changes to the layout take effect immediately
+
+- PopUpAppender windows now have unique names per hostname to prevent clashes
+ from multiple instances of log4javascript running on different servers
+
+- Fixed error in XmlLayout's format method when passed an object
+
+- Fixed errors in JsonLayout's handling of strings containing line breaks and/or
+ double quotes
+
+
+1.2 (21/6/2006)
+
+- Tested in and added workaround for a bug in Opera 9 Beta 2 and Opera 9.0
+
+- Tested in Konqueror 3.4 and 3.5 and added workarounds and fixes for browser
+ bugs
+
+- Added addErrorListener and removeErrorListener methods to log4javascript
+ object to allow custom error handling
+
+- Added close() method to PopUpAppender and InlineAppender
+
+- Added test directory with an HTML page containing automated tests
+
+- Added enable/disable logging checkbox to InlinePopUpAppender and PopUpAppender
+ so that unnecessary messages (for instance, from a timer) can be ignored
+
+- An invalid value supplied to a configuration option setter now leaves config
+ property unchanged rather than reverting to the default
+
+- Fixed bug in PopUpAppender in IE on Windows XP Service Pack 2 when accessed
+ via the file system. The browser by default disables JavaScript in the pop-up
+ window until the user opts to enable it, at which point they would previously
+ see an uncaught error in log4javascript. Now, a proper error message is
+ displayed and the appender is disabled.
+
+- Slight alterations to toolbar in InlineAppender and PopUpAppender - text
+ capitalization and title attributes added to inputs
+
+- toString() method added to all appenders
+
+- Correction to errors in XmlLayout's output
+
+- Documentation corrections and additions
+
+
+1.1.1 (17/5/2006)
+
+- Fixed a minor bug with scrolling to the latest message and added "scroll to
+ latest" checkbox to console window in InlineAppender and PopUpAppender
+
+
+1.1 (16/5/2006)
+
+- Added configuration option setters on Appenders and refactored to prevent
+ config properties being altered directly. Several configuration options
+ may not be altered after the appender has been initialized
+
+- Added scrollToLatestMessage constructor parameter, isScrollToLatestMessage
+ and setScrollToLatestMessage methods to InlineAppender and PopUpAppender
+
+- Added isVisible method to InlineAppender
+
+- Changed setShowOneError to setAlertAllErrors in logLog, with obvious change
+ in logic
+
+- Added layout property key configuration options to layout constructors for
+ JsonLayout and HttpPostDataLayout
+
+- Changed the default timestamp property name to "timestamp" instead of
+ "timeStamp" in JsonLayout and HttpPostDataLayout
+
+- Expanded documentation to include a section in the manual about configuring
+ appenders
+
+- Removed browser sniffing code
+
+
+1.0.1 (30/4/2006)
+
+- Option to have new log messages appear at the top added to InlineAppender and
+ PopUpAppender. This option can be specified in the constructor and can also
+ be toggled via a checkbox in the console window
+
+- PopUpAppender changed to not focus the pop-up console window by default, and
+ the demo page altered to create its own logger with focussing turned on,
+ meaning the behaviour in the demo is essentially unchanged
+
+
+1.0 (26/4/2006)
+
+- Tweaks to default values in PopUpAppender and InlineAppender
+
+- Bugfixes and stylistic tweaks resulting from running JSLint on
+ log4javascript.js
+
+
+1.0 beta 2
+
+- Show/hide button removed from InlineAppender, replaced by show() and hide()
+ methods on the InlineAppender object
+
+- batchSeparator, batchHeader and batchFooter added to Layout and applied to
+ JsonLayout - a batch of JSON log messages is now created as an array literal
+
+
+1.0 beta
+
+- TRACE level added, since this was added to log4j in 1.2.12
+
+- PopUpAppender default settings bugfix
+
+- getLevel method added to Logger
+
+- Tweak to vertical alignment of checkboxes and padding of buttons in
+ InlineAppender and PopUpAppender
+
+- Fixed getDefaultLogger and getNullLogger to return loggers other than the
+ root logger
+
+0.96
+
+- Moved console.html to inline document.writes in log4javascript.js
+
+- Fixed getDefaultLogger to return the same object on successive calls
+
+- Fixed scrolling issue in Opera InlineAppender and PopUpAppender
+
+- Scrollbars are now automatic on InlineAppender and PopUpAppender, i.e. they
+ only appear when required
+
+- Fixed bug where regex searches were not applied to new log entries in
+ InlineAppender and PopUpAppender
+
+- Changed Safari font size in InlineAppender and PopUpAppender
+
+0.95
+
+- AjaxAppender enhancements:
+ - waitForResponse added
+ - timer added
+
+- layout parameter added to all appender constructors
+
+0.94
+- First publicly available version
+- IE 5 support added
+- Full support for wrapping in IE added for InlineAppender and PopUpAppender
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/console.html b/planetstack/core/static/log4javascript-1.4.6/console.html
new file mode 100644
index 0000000..476d272
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/console.html
@@ -0,0 +1,263 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<title>log4javascript</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->
+<meta http-equiv="X-UA-Compatible" content="IE=7" />
+<script type="text/javascript">var isIe = false, isIePre7 = false;</script>
+<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->
+<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->
+<script type="text/javascript">
+//<![CDATA[
+var loggingEnabled=true;var logQueuedEventsTimer=null;var logEntries=[];var logEntriesAndSeparators=[];var logItems=[];var renderDelay=100;var unrenderedLogItemsExist=false;var rootGroup,currentGroup=null;var loaded=false;var currentLogItem=null;var logMainContainer;function copyProperties(obj,props){for(var i in props){obj[i]=props[i];}}
+function LogItem(){}
+LogItem.prototype={mainContainer:null,wrappedContainer:null,unwrappedContainer:null,group:null,appendToLog:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].appendToLog();}
+this.group.update();},doRemove:function(doUpdate,removeFromGroup){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].remove();}
+this.unwrappedElementContainer=null;this.wrappedElementContainer=null;this.mainElementContainer=null;}
+if(this.group&&removeFromGroup){this.group.removeChild(this,doUpdate);}
+if(this===currentLogItem){currentLogItem=null;}},remove:function(doUpdate,removeFromGroup){this.doRemove(doUpdate,removeFromGroup);},render:function(){},accept:function(visitor){visitor.visit(this);},getUnwrappedDomContainer:function(){return this.group.unwrappedElementContainer.contentDiv;},getWrappedDomContainer:function(){return this.group.wrappedElementContainer.contentDiv;},getMainDomContainer:function(){return this.group.mainElementContainer.contentDiv;}};LogItem.serializedItemKeys={LOG_ENTRY:0,GROUP_START:1,GROUP_END:2};function LogItemContainerElement(){}
+LogItemContainerElement.prototype={appendToLog:function(){var insertBeforeFirst=(newestAtTop&&this.containerDomNode.hasChildNodes());if(insertBeforeFirst){this.containerDomNode.insertBefore(this.mainDiv,this.containerDomNode.firstChild);}else{this.containerDomNode.appendChild(this.mainDiv);}}};function SeparatorElementContainer(containerDomNode){this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="separator";this.mainDiv.innerHTML=" ";}
+SeparatorElementContainer.prototype=new LogItemContainerElement();SeparatorElementContainer.prototype.remove=function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;};function Separator(){this.rendered=false;}
+Separator.prototype=new LogItem();copyProperties(Separator.prototype,{render:function(){var containerDomNode=this.group.contentDiv;if(isIe){this.unwrappedElementContainer=new SeparatorElementContainer(this.getUnwrappedDomContainer());this.wrappedElementContainer=new SeparatorElementContainer(this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new SeparatorElementContainer(this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}
+this.content=this.formattedMessage;this.rendered=true;}});function GroupElementContainer(group,containerDomNode,isRoot,isWrapped){this.group=group;this.containerDomNode=containerDomNode;this.isRoot=isRoot;this.isWrapped=isWrapped;this.expandable=false;if(this.isRoot){if(isIe){this.contentDiv=logMainContainer.appendChild(document.createElement("div"));this.contentDiv.id=this.isWrapped?"log_wrapped":"log_unwrapped";}else{this.contentDiv=logMainContainer;}}else{var groupElementContainer=this;this.mainDiv=document.createElement("div");this.mainDiv.className="group";this.headingDiv=this.mainDiv.appendChild(document.createElement("div"));this.headingDiv.className="groupheading";this.expander=this.headingDiv.appendChild(document.createElement("span"));this.expander.className="expander unselectable greyedout";this.expander.unselectable=true;var expanderText=this.group.expanded?"-":"+";this.expanderTextNode=this.expander.appendChild(document.createTextNode(expanderText));this.headingDiv.appendChild(document.createTextNode(" "+this.group.name));this.contentDiv=this.mainDiv.appendChild(document.createElement("div"));var contentCssClass=this.group.expanded?"expanded":"collapsed";this.contentDiv.className="groupcontent "+contentCssClass;this.expander.onclick=function(){if(groupElementContainer.group.expandable){groupElementContainer.group.toggleExpanded();}};}}
+GroupElementContainer.prototype=new LogItemContainerElement();copyProperties(GroupElementContainer.prototype,{toggleExpanded:function(){if(!this.isRoot){var oldCssClass,newCssClass,expanderText;if(this.group.expanded){newCssClass="expanded";oldCssClass="collapsed";expanderText="-";}else{newCssClass="collapsed";oldCssClass="expanded";expanderText="+";}
+replaceClass(this.contentDiv,newCssClass,oldCssClass);this.expanderTextNode.nodeValue=expanderText;}},remove:function(){if(!this.isRoot){this.headingDiv=null;this.expander.onclick=null;this.expander=null;this.expanderTextNode=null;this.contentDiv=null;this.containerDomNode=null;this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;}},reverseChildren:function(){var node=null;var childDomNodes=[];while((node=this.contentDiv.firstChild)){this.contentDiv.removeChild(node);childDomNodes.push(node);}
+while((node=childDomNodes.pop())){this.contentDiv.appendChild(node);}},update:function(){if(!this.isRoot){if(this.group.expandable){removeClass(this.expander,"greyedout");}else{addClass(this.expander,"greyedout");}}},clear:function(){if(this.isRoot){this.contentDiv.innerHTML="";}}});function Group(name,isRoot,initiallyExpanded){this.name=name;this.group=null;this.isRoot=isRoot;this.initiallyExpanded=initiallyExpanded;this.elementContainers=[];this.children=[];this.expanded=initiallyExpanded;this.rendered=false;this.expandable=false;}
+Group.prototype=new LogItem();copyProperties(Group.prototype,{addChild:function(logItem){this.children.push(logItem);logItem.group=this;},render:function(){if(isIe){var unwrappedDomContainer,wrappedDomContainer;if(this.isRoot){unwrappedDomContainer=logMainContainer;wrappedDomContainer=logMainContainer;}else{unwrappedDomContainer=this.getUnwrappedDomContainer();wrappedDomContainer=this.getWrappedDomContainer();}
+this.unwrappedElementContainer=new GroupElementContainer(this,unwrappedDomContainer,this.isRoot,false);this.wrappedElementContainer=new GroupElementContainer(this,wrappedDomContainer,this.isRoot,true);this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{var mainDomContainer=this.isRoot?logMainContainer:this.getMainDomContainer();this.mainElementContainer=new GroupElementContainer(this,mainDomContainer,this.isRoot,false);this.elementContainers=[this.mainElementContainer];}
+this.rendered=true;},toggleExpanded:function(){this.expanded=!this.expanded;for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].toggleExpanded();}},expand:function(){if(!this.expanded){this.toggleExpanded();}},accept:function(visitor){visitor.visitGroup(this);},reverseChildren:function(){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].reverseChildren();}}},update:function(){var previouslyExpandable=this.expandable;this.expandable=(this.children.length!==0);if(this.expandable!==previouslyExpandable){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].update();}}},flatten:function(){var visitor=new GroupFlattener();this.accept(visitor);return visitor.logEntriesAndSeparators;},removeChild:function(child,doUpdate){array_remove(this.children,child);child.group=null;if(doUpdate){this.update();}},remove:function(doUpdate,removeFromGroup){for(var i=0,len=this.children.length;i<len;i++){this.children[i].remove(false,false);}
+this.children=[];this.update();if(this===currentGroup){currentGroup=this.group;}
+this.doRemove(doUpdate,removeFromGroup);},serialize:function(items){items.push([LogItem.serializedItemKeys.GROUP_START,this.name]);for(var i=0,len=this.children.length;i<len;i++){this.children[i].serialize(items);}
+if(this!==currentGroup){items.push([LogItem.serializedItemKeys.GROUP_END]);}},clear:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clear();}}});function LogEntryElementContainer(){}
+LogEntryElementContainer.prototype=new LogItemContainerElement();copyProperties(LogEntryElementContainer.prototype,{remove:function(){this.doRemove();},doRemove:function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;this.contentElement=null;this.containerDomNode=null;},setContent:function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=content;}},setSearchMatch:function(isMatch){var oldCssClass=isMatch?"searchnonmatch":"searchmatch";var newCssClass=isMatch?"searchmatch":"searchnonmatch";replaceClass(this.mainDiv,newCssClass,oldCssClass);},clearSearch:function(){removeClass(this.mainDiv,"searchmatch");removeClass(this.mainDiv,"searchnonmatch");}});function LogEntryWrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.mainDiv.className="logentry wrapped "+this.logEntry.level;this.contentElement=this.mainDiv;}
+LogEntryWrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryWrappedElementContainer.prototype.setContent=function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=wrappedContent;}};function LogEntryUnwrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry unwrapped "+this.logEntry.level;this.pre=this.mainDiv.appendChild(document.createElement("pre"));this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.pre.className="unwrapped";this.contentElement=this.pre;}
+LogEntryUnwrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryUnwrappedElementContainer.prototype.remove=function(){this.doRemove();this.pre=null;};function LogEntryMainElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry nonielogentry "+this.logEntry.level;this.contentElement=this.mainDiv.appendChild(document.createElement("span"));this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));}
+LogEntryMainElementContainer.prototype=new LogEntryElementContainer();function LogEntry(level,formattedMessage){this.level=level;this.formattedMessage=formattedMessage;this.rendered=false;}
+LogEntry.prototype=new LogItem();copyProperties(LogEntry.prototype,{render:function(){var logEntry=this;var containerDomNode=this.group.contentDiv;if(isIe){this.formattedMessage=this.formattedMessage.replace(/\r\n/g,"\r");this.unwrappedElementContainer=new LogEntryUnwrappedElementContainer(this,this.getUnwrappedDomContainer());this.wrappedElementContainer=new LogEntryWrappedElementContainer(this,this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new LogEntryMainElementContainer(this,this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}
+this.content=this.formattedMessage;this.rendered=true;},setContent:function(content,wrappedContent){if(content!=this.content){if(isIe&&(content!==this.formattedMessage)){content=content.replace(/\r\n/g,"\r");}
+for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setContent(content,wrappedContent);}
+this.content=content;}},getSearchMatches:function(){var matches=[];var i,len;if(isIe){var unwrappedEls=getElementsByClass(this.unwrappedElementContainer.mainDiv,"searchterm","span");var wrappedEls=getElementsByClass(this.wrappedElementContainer.mainDiv,"searchterm","span");for(i=0,len=unwrappedEls.length;i<len;i++){matches[i]=new Match(this.level,null,unwrappedEls[i],wrappedEls[i]);}}else{var els=getElementsByClass(this.mainElementContainer.mainDiv,"searchterm","span");for(i=0,len=els.length;i<len;i++){matches[i]=new Match(this.level,els[i]);}}
+return matches;},setSearchMatch:function(isMatch){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setSearchMatch(isMatch);}},clearSearch:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clearSearch();}},accept:function(visitor){visitor.visitLogEntry(this);},serialize:function(items){items.push([LogItem.serializedItemKeys.LOG_ENTRY,this.level,this.formattedMessage]);}});function LogItemVisitor(){}
+LogItemVisitor.prototype={visit:function(logItem){},visitParent:function(logItem){if(logItem.group){logItem.group.accept(this);}},visitChildren:function(logItem){for(var i=0,len=logItem.children.length;i<len;i++){logItem.children[i].accept(this);}},visitLogEntry:function(logEntry){this.visit(logEntry);},visitSeparator:function(separator){this.visit(separator);},visitGroup:function(group){this.visit(group);}};function GroupFlattener(){this.logEntriesAndSeparators=[];}
+GroupFlattener.prototype=new LogItemVisitor();GroupFlattener.prototype.visitGroup=function(group){this.visitChildren(group);};GroupFlattener.prototype.visitLogEntry=function(logEntry){this.logEntriesAndSeparators.push(logEntry);};GroupFlattener.prototype.visitSeparator=function(separator){this.logEntriesAndSeparators.push(separator);};window.onload=function(){if(location.search){var queryBits=unescape(location.search).substr(1).split("&"),nameValueBits;for(var i=0,len=queryBits.length;i<len;i++){nameValueBits=queryBits[i].split("=");if(nameValueBits[0]=="log4javascript_domain"){document.domain=nameValueBits[1];break;}}}
+logMainContainer=$("log");if(isIePre7){addClass(logMainContainer,"oldIe");}
+rootGroup=new Group("root",true);rootGroup.render();currentGroup=rootGroup;setCommandInputWidth();setLogContainerHeight();toggleLoggingEnabled();toggleSearchEnabled();toggleSearchFilter();toggleSearchHighlight();applyFilters();checkAllLevels();toggleWrap();toggleNewestAtTop();toggleScrollToLatest();renderQueuedLogItems();loaded=true;$("command").value="";$("command").autocomplete="off";$("command").onkeydown=function(evt){evt=getEvent(evt);if(evt.keyCode==10||evt.keyCode==13){evalCommandLine();stopPropagation(evt);}else if(evt.keyCode==27){this.value="";this.focus();}else if(evt.keyCode==38&&commandHistory.length>0){currentCommandIndex=Math.max(0,currentCommandIndex-1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}else if(evt.keyCode==40&&commandHistory.length>0){currentCommandIndex=Math.min(commandHistory.length-1,currentCommandIndex+1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}};$("command").onkeypress=function(evt){evt=getEvent(evt);if(evt.keyCode==38&&commandHistory.length>0&&evt.preventDefault){evt.preventDefault();}};$("command").onkeyup=function(evt){evt=getEvent(evt);if(evt.keyCode==27&&evt.preventDefault){evt.preventDefault();this.focus();}};document.onkeydown=function keyEventHandler(evt){evt=getEvent(evt);switch(evt.keyCode){case 69:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){evalLastCommand();cancelKeyEvent(evt);return false;}
+break;case 75:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusSearch();cancelKeyEvent(evt);return false;}
+break;case 40:case 76:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusCommandLine();cancelKeyEvent(evt);return false;}
+break;}};setTimeout(setLogContainerHeight,20);setShowCommandLine(showCommandLine);doSearch();};window.onunload=function(){if(mainWindowExists()){appender.unload();}
+appender=null;};function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}
+function setLoggingEnabled(enable){loggingEnabled=enable;}
+var appender=null;function setAppender(appenderParam){appender=appenderParam;}
+function setShowCloseButton(showCloseButton){$("closeButton").style.display=showCloseButton?"inline":"none";}
+function setShowHideButton(showHideButton){$("hideButton").style.display=showHideButton?"inline":"none";}
+var newestAtTop=false;function LogItemContentReverser(){}
+LogItemContentReverser.prototype=new LogItemVisitor();LogItemContentReverser.prototype.visitGroup=function(group){group.reverseChildren();this.visitChildren(group);};function setNewestAtTop(isNewestAtTop){var oldNewestAtTop=newestAtTop;var i,iLen,j,jLen;newestAtTop=Boolean(isNewestAtTop);if(oldNewestAtTop!=newestAtTop){var visitor=new LogItemContentReverser();rootGroup.accept(visitor);if(currentSearch){var currentMatch=currentSearch.matches[currentMatchIndex];var matchIndex=0;var matches=[];var actOnLogEntry=function(logEntry){var logEntryMatches=logEntry.getSearchMatches();for(j=0,jLen=logEntryMatches.length;j<jLen;j++){matches[matchIndex]=logEntryMatches[j];if(currentMatch&&logEntryMatches[j].equals(currentMatch)){currentMatchIndex=matchIndex;}
+matchIndex++;}};if(newestAtTop){for(i=logEntries.length-1;i>=0;i--){actOnLogEntry(logEntries[i]);}}else{for(i=0,iLen=logEntries.length;i<iLen;i++){actOnLogEntry(logEntries[i]);}}
+currentSearch.matches=matches;if(currentMatch){currentMatch.setCurrent();}}else if(scrollToLatest){doScrollToLatest();}}
+$("newestAtTop").checked=isNewestAtTop;}
+function toggleNewestAtTop(){var isNewestAtTop=$("newestAtTop").checked;setNewestAtTop(isNewestAtTop);}
+var scrollToLatest=true;function setScrollToLatest(isScrollToLatest){scrollToLatest=isScrollToLatest;if(scrollToLatest){doScrollToLatest();}
+$("scrollToLatest").checked=isScrollToLatest;}
+function toggleScrollToLatest(){var isScrollToLatest=$("scrollToLatest").checked;setScrollToLatest(isScrollToLatest);}
+function doScrollToLatest(){var l=logMainContainer;if(typeof l.scrollTop!="undefined"){if(newestAtTop){l.scrollTop=0;}else{var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}}
+var closeIfOpenerCloses=true;function setCloseIfOpenerCloses(isCloseIfOpenerCloses){closeIfOpenerCloses=isCloseIfOpenerCloses;}
+var maxMessages=null;function setMaxMessages(max){maxMessages=max;pruneLogEntries();}
+var showCommandLine=false;function setShowCommandLine(isShowCommandLine){showCommandLine=isShowCommandLine;if(loaded){$("commandLine").style.display=showCommandLine?"block":"none";setCommandInputWidth();setLogContainerHeight();}}
+function focusCommandLine(){if(loaded){$("command").focus();}}
+function focusSearch(){if(loaded){$("searchBox").focus();}}
+function getLogItems(){var items=[];for(var i=0,len=logItems.length;i<len;i++){logItems[i].serialize(items);}
+return items;}
+function setLogItems(items){var loggingReallyEnabled=loggingEnabled;loggingEnabled=true;for(var i=0,len=items.length;i<len;i++){switch(items[i][0]){case LogItem.serializedItemKeys.LOG_ENTRY:log(items[i][1],items[i][2]);break;case LogItem.serializedItemKeys.GROUP_START:group(items[i][1]);break;case LogItem.serializedItemKeys.GROUP_END:groupEnd();break;}}
+loggingEnabled=loggingReallyEnabled;}
+function log(logLevel,formattedMessage){if(loggingEnabled){var logEntry=new LogEntry(logLevel,formattedMessage);logEntries.push(logEntry);logEntriesAndSeparators.push(logEntry);logItems.push(logEntry);currentGroup.addChild(logEntry);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}
+logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}
+function renderQueuedLogItems(){logQueuedEventsTimer=null;var pruned=pruneLogEntries();var initiallyHasMatches=currentSearch?currentSearch.hasMatches():false;for(var i=0,len=logItems.length;i<len;i++){if(!logItems[i].rendered){logItems[i].render();logItems[i].appendToLog();if(currentSearch&&(logItems[i]instanceof LogEntry)){currentSearch.applyTo(logItems[i]);}}}
+if(currentSearch){if(pruned){if(currentSearch.hasVisibleMatches()){if(currentMatchIndex===null){setCurrentMatchIndex(0);}
+displayMatches();}else{displayNoMatches();}}else if(!initiallyHasMatches&¤tSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}}
+if(scrollToLatest){doScrollToLatest();}
+unrenderedLogItemsExist=false;}
+function pruneLogEntries(){if((maxMessages!==null)&&(logEntriesAndSeparators.length>maxMessages)){var numberToDelete=logEntriesAndSeparators.length-maxMessages;var prunedLogEntries=logEntriesAndSeparators.slice(0,numberToDelete);if(currentSearch){currentSearch.removeMatches(prunedLogEntries);}
+var group;for(var i=0;i<numberToDelete;i++){group=logEntriesAndSeparators[i].group;array_remove(logItems,logEntriesAndSeparators[i]);array_remove(logEntries,logEntriesAndSeparators[i]);logEntriesAndSeparators[i].remove(true,true);if(group.children.length===0&&group!==currentGroup&&group!==rootGroup){array_remove(logItems,group);group.remove(true,true);}}
+logEntriesAndSeparators=array_removeFromStart(logEntriesAndSeparators,numberToDelete);return true;}
+return false;}
+function group(name,startExpanded){if(loggingEnabled){initiallyExpanded=(typeof startExpanded==="undefined")?true:Boolean(startExpanded);var newGroup=new Group(name,false,initiallyExpanded);currentGroup.addChild(newGroup);currentGroup=newGroup;logItems.push(newGroup);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}
+logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}
+function groupEnd(){currentGroup=(currentGroup===rootGroup)?rootGroup:currentGroup.group;}
+function mainPageReloaded(){currentGroup=rootGroup;var separator=new Separator();logEntriesAndSeparators.push(separator);logItems.push(separator);currentGroup.addChild(separator);}
+function closeWindow(){if(appender&&mainWindowExists()){appender.close(true);}else{window.close();}}
+function hide(){if(appender&&mainWindowExists()){appender.hide();}}
+var mainWindow=window;var windowId="log4javascriptConsoleWindow_"+new Date().getTime()+"_"+(""+Math.random()).substr(2);function setMainWindow(win){mainWindow=win;mainWindow[windowId]=window;if(opener&&closeIfOpenerCloses){pollOpener();}}
+function pollOpener(){if(closeIfOpenerCloses){if(mainWindowExists()){setTimeout(pollOpener,500);}else{closeWindow();}}}
+function mainWindowExists(){try{return(mainWindow&&!mainWindow.closed&&mainWindow[windowId]==window);}catch(ex){}
+return false;}
+var logLevels=["TRACE","DEBUG","INFO","WARN","ERROR","FATAL"];function getCheckBox(logLevel){return $("switch_"+logLevel);}
+function getIeWrappedLogContainer(){return $("log_wrapped");}
+function getIeUnwrappedLogContainer(){return $("log_unwrapped");}
+function applyFilters(){for(var i=0;i<logLevels.length;i++){if(getCheckBox(logLevels[i]).checked){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}
+updateSearchFromFilters();}
+function toggleAllLevels(){var turnOn=$("switch_ALL").checked;for(var i=0;i<logLevels.length;i++){getCheckBox(logLevels[i]).checked=turnOn;if(turnOn){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}}
+function checkAllLevels(){for(var i=0;i<logLevels.length;i++){if(!getCheckBox(logLevels[i]).checked){getCheckBox("ALL").checked=false;return;}}
+getCheckBox("ALL").checked=true;}
+function clearLog(){rootGroup.clear();currentGroup=rootGroup;logEntries=[];logItems=[];logEntriesAndSeparators=[];doSearch();}
+function toggleWrap(){var enable=$("wrap").checked;if(enable){addClass(logMainContainer,"wrap");}else{removeClass(logMainContainer,"wrap");}
+refreshCurrentMatch();}
+var searchTimer=null;function scheduleSearch(){try{clearTimeout(searchTimer);}catch(ex){}
+searchTimer=setTimeout(doSearch,500);}
+function Search(searchTerm,isRegex,searchRegex,isCaseSensitive){this.searchTerm=searchTerm;this.isRegex=isRegex;this.searchRegex=searchRegex;this.isCaseSensitive=isCaseSensitive;this.matches=[];}
+Search.prototype={hasMatches:function(){return this.matches.length>0;},hasVisibleMatches:function(){if(this.hasMatches()){for(var i=0;i<this.matches.length;i++){if(this.matches[i].isVisible()){return true;}}}
+return false;},match:function(logEntry){var entryText=String(logEntry.formattedMessage);var matchesSearch=false;if(this.isRegex){matchesSearch=this.searchRegex.test(entryText);}else if(this.isCaseSensitive){matchesSearch=(entryText.indexOf(this.searchTerm)>-1);}else{matchesSearch=(entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase())>-1);}
+return matchesSearch;},getNextVisibleMatchIndex:function(){for(var i=currentMatchIndex+1;i<this.matches.length;i++){if(this.matches[i].isVisible()){return i;}}
+for(i=0;i<=currentMatchIndex;i++){if(this.matches[i].isVisible()){return i;}}
+return-1;},getPreviousVisibleMatchIndex:function(){for(var i=currentMatchIndex-1;i>=0;i--){if(this.matches[i].isVisible()){return i;}}
+for(var i=this.matches.length-1;i>=currentMatchIndex;i--){if(this.matches[i].isVisible()){return i;}}
+return-1;},applyTo:function(logEntry){var doesMatch=this.match(logEntry);if(doesMatch){logEntry.group.expand();logEntry.setSearchMatch(true);var logEntryContent;var wrappedLogEntryContent;var searchTermReplacementStartTag="<span class=\"searchterm\">";var searchTermReplacementEndTag="<"+"/span>";var preTagName=isIe?"pre":"span";var preStartTag="<"+preTagName+" class=\"pre\">";var preEndTag="<"+"/"+preTagName+">";var startIndex=0;var searchIndex,matchedText,textBeforeMatch;if(this.isRegex){var flags=this.isCaseSensitive?"g":"gi";var capturingRegex=new RegExp("("+this.searchRegex.source+")",flags);var rnd=(""+Math.random()).substr(2);var startToken="%%s"+rnd+"%%";var endToken="%%e"+rnd+"%%";logEntryContent=logEntry.formattedMessage.replace(capturingRegex,startToken+"$1"+endToken);logEntryContent=escapeHtml(logEntryContent);var result;var searchString=logEntryContent;logEntryContent="";wrappedLogEntryContent="";while((searchIndex=searchString.indexOf(startToken,startIndex))>-1){var endTokenIndex=searchString.indexOf(endToken,searchIndex);matchedText=searchString.substring(searchIndex+startToken.length,endTokenIndex);textBeforeMatch=searchString.substring(startIndex,searchIndex);logEntryContent+=preStartTag+textBeforeMatch+preEndTag;logEntryContent+=searchTermReplacementStartTag+preStartTag+matchedText+
+preEndTag+searchTermReplacementEndTag;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+
+matchedText+searchTermReplacementEndTag;}
+startIndex=endTokenIndex+endToken.length;}
+logEntryContent+=preStartTag+searchString.substr(startIndex)+preEndTag;if(isIe){wrappedLogEntryContent+=searchString.substr(startIndex);}}else{logEntryContent="";wrappedLogEntryContent="";var searchTermReplacementLength=searchTermReplacementStartTag.length+
+this.searchTerm.length+searchTermReplacementEndTag.length;var searchTermLength=this.searchTerm.length;var searchTermLowerCase=this.searchTerm.toLowerCase();var logTextLowerCase=logEntry.formattedMessage.toLowerCase();while((searchIndex=logTextLowerCase.indexOf(searchTermLowerCase,startIndex))>-1){matchedText=escapeHtml(logEntry.formattedMessage.substr(searchIndex,this.searchTerm.length));textBeforeMatch=escapeHtml(logEntry.formattedMessage.substring(startIndex,searchIndex));var searchTermReplacement=searchTermReplacementStartTag+
+preStartTag+matchedText+preEndTag+searchTermReplacementEndTag;logEntryContent+=preStartTag+textBeforeMatch+preEndTag+searchTermReplacement;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+
+matchedText+searchTermReplacementEndTag;}
+startIndex=searchIndex+searchTermLength;}
+var textAfterLastMatch=escapeHtml(logEntry.formattedMessage.substr(startIndex));logEntryContent+=preStartTag+textAfterLastMatch+preEndTag;if(isIe){wrappedLogEntryContent+=textAfterLastMatch;}}
+logEntry.setContent(logEntryContent,wrappedLogEntryContent);var logEntryMatches=logEntry.getSearchMatches();this.matches=this.matches.concat(logEntryMatches);}else{logEntry.setSearchMatch(false);logEntry.setContent(logEntry.formattedMessage,logEntry.formattedMessage);}
+return doesMatch;},removeMatches:function(logEntries){var matchesToRemoveCount=0;var currentMatchRemoved=false;var matchesToRemove=[];var i,iLen,j,jLen;for(i=0,iLen=this.matches.length;i<iLen;i++){for(j=0,jLen=logEntries.length;j<jLen;j++){if(this.matches[i].belongsTo(logEntries[j])){matchesToRemove.push(this.matches[i]);if(i===currentMatchIndex){currentMatchRemoved=true;}}}}
+var newMatch=currentMatchRemoved?null:this.matches[currentMatchIndex];if(currentMatchRemoved){for(i=currentMatchIndex,iLen=this.matches.length;i<iLen;i++){if(this.matches[i].isVisible()&&!array_contains(matchesToRemove,this.matches[i])){newMatch=this.matches[i];break;}}}
+for(i=0,iLen=matchesToRemove.length;i<iLen;i++){array_remove(this.matches,matchesToRemove[i]);matchesToRemove[i].remove();}
+if(this.hasVisibleMatches()){if(newMatch===null){setCurrentMatchIndex(0);}else{var newMatchIndex=0;for(i=0,iLen=this.matches.length;i<iLen;i++){if(newMatch===this.matches[i]){newMatchIndex=i;break;}}
+setCurrentMatchIndex(newMatchIndex);}}else{currentMatchIndex=null;displayNoMatches();}}};function getPageOffsetTop(el,container){var currentEl=el;var y=0;while(currentEl&¤tEl!=container){y+=currentEl.offsetTop;currentEl=currentEl.offsetParent;}
+return y;}
+function scrollIntoView(el){var logContainer=logMainContainer;if(!$("wrap").checked){var logContainerLeft=logContainer.scrollLeft;var logContainerRight=logContainerLeft+logContainer.offsetWidth;var elLeft=el.offsetLeft;var elRight=elLeft+el.offsetWidth;if(elLeft<logContainerLeft||elRight>logContainerRight){logContainer.scrollLeft=elLeft-(logContainer.offsetWidth-el.offsetWidth)/2;}}
+var logContainerTop=logContainer.scrollTop;var logContainerBottom=logContainerTop+logContainer.offsetHeight;var elTop=getPageOffsetTop(el)-getToolBarsHeight();var elBottom=elTop+el.offsetHeight;if(elTop<logContainerTop||elBottom>logContainerBottom){logContainer.scrollTop=elTop-(logContainer.offsetHeight-el.offsetHeight)/2;}}
+function Match(logEntryLevel,spanInMainDiv,spanInUnwrappedPre,spanInWrappedDiv){this.logEntryLevel=logEntryLevel;this.spanInMainDiv=spanInMainDiv;if(isIe){this.spanInUnwrappedPre=spanInUnwrappedPre;this.spanInWrappedDiv=spanInWrappedDiv;}
+this.mainSpan=isIe?spanInUnwrappedPre:spanInMainDiv;}
+Match.prototype={equals:function(match){return this.mainSpan===match.mainSpan;},setCurrent:function(){if(isIe){addClass(this.spanInUnwrappedPre,"currentmatch");addClass(this.spanInWrappedDiv,"currentmatch");var elementToScroll=$("wrap").checked?this.spanInWrappedDiv:this.spanInUnwrappedPre;scrollIntoView(elementToScroll);}else{addClass(this.spanInMainDiv,"currentmatch");scrollIntoView(this.spanInMainDiv);}},belongsTo:function(logEntry){if(isIe){return isDescendant(this.spanInUnwrappedPre,logEntry.unwrappedPre);}else{return isDescendant(this.spanInMainDiv,logEntry.mainDiv);}},setNotCurrent:function(){if(isIe){removeClass(this.spanInUnwrappedPre,"currentmatch");removeClass(this.spanInWrappedDiv,"currentmatch");}else{removeClass(this.spanInMainDiv,"currentmatch");}},isOrphan:function(){return isOrphan(this.mainSpan);},isVisible:function(){return getCheckBox(this.logEntryLevel).checked;},remove:function(){if(isIe){this.spanInUnwrappedPre=null;this.spanInWrappedDiv=null;}else{this.spanInMainDiv=null;}}};var currentSearch=null;var currentMatchIndex=null;function doSearch(){var searchBox=$("searchBox");var searchTerm=searchBox.value;var isRegex=$("searchRegex").checked;var isCaseSensitive=$("searchCaseSensitive").checked;var i;if(searchTerm===""){$("searchReset").disabled=true;$("searchNav").style.display="none";removeClass(document.body,"searching");removeClass(searchBox,"hasmatches");removeClass(searchBox,"nomatches");for(i=0;i<logEntries.length;i++){logEntries[i].clearSearch();logEntries[i].setContent(logEntries[i].formattedMessage,logEntries[i].formattedMessage);}
+currentSearch=null;setLogContainerHeight();}else{$("searchReset").disabled=false;$("searchNav").style.display="block";var searchRegex;var regexValid;if(isRegex){try{searchRegex=isCaseSensitive?new RegExp(searchTerm,"g"):new RegExp(searchTerm,"gi");regexValid=true;replaceClass(searchBox,"validregex","invalidregex");searchBox.title="Valid regex";}catch(ex){regexValid=false;replaceClass(searchBox,"invalidregex","validregex");searchBox.title="Invalid regex: "+(ex.message?ex.message:(ex.description?ex.description:"unknown error"));return;}}else{searchBox.title="";removeClass(searchBox,"validregex");removeClass(searchBox,"invalidregex");}
+addClass(document.body,"searching");currentSearch=new Search(searchTerm,isRegex,searchRegex,isCaseSensitive);for(i=0;i<logEntries.length;i++){currentSearch.applyTo(logEntries[i]);}
+setLogContainerHeight();if(currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}else{displayNoMatches();}}}
+function updateSearchFromFilters(){if(currentSearch){if(currentSearch.hasMatches()){if(currentMatchIndex===null){currentMatchIndex=0;}
+var currentMatch=currentSearch.matches[currentMatchIndex];if(currentMatch.isVisible()){displayMatches();setCurrentMatchIndex(currentMatchIndex);}else{currentMatch.setNotCurrent();var nextVisibleMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextVisibleMatchIndex>-1){setCurrentMatchIndex(nextVisibleMatchIndex);displayMatches();}else{displayNoMatches();}}}else{displayNoMatches();}}}
+function refreshCurrentMatch(){if(currentSearch&¤tSearch.hasVisibleMatches()){setCurrentMatchIndex(currentMatchIndex);}}
+function displayMatches(){replaceClass($("searchBox"),"hasmatches","nomatches");$("searchBox").title=""+currentSearch.matches.length+" matches found";$("searchNav").style.display="block";setLogContainerHeight();}
+function displayNoMatches(){replaceClass($("searchBox"),"nomatches","hasmatches");$("searchBox").title="No matches found";$("searchNav").style.display="none";setLogContainerHeight();}
+function toggleSearchEnabled(enable){enable=(typeof enable=="undefined")?!$("searchDisable").checked:enable;$("searchBox").disabled=!enable;$("searchReset").disabled=!enable;$("searchRegex").disabled=!enable;$("searchNext").disabled=!enable;$("searchPrevious").disabled=!enable;$("searchCaseSensitive").disabled=!enable;$("searchNav").style.display=(enable&&($("searchBox").value!=="")&¤tSearch&¤tSearch.hasVisibleMatches())?"block":"none";if(enable){removeClass($("search"),"greyedout");addClass(document.body,"searching");if($("searchHighlight").checked){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}
+if($("searchFilter").checked){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}
+$("searchDisable").checked=!enable;}else{addClass($("search"),"greyedout");removeClass(document.body,"searching");removeClass(logMainContainer,"searchhighlight");removeClass(logMainContainer,"searchfilter");}
+setLogContainerHeight();}
+function toggleSearchFilter(){var enable=$("searchFilter").checked;if(enable){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}
+refreshCurrentMatch();}
+function toggleSearchHighlight(){var enable=$("searchHighlight").checked;if(enable){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}}
+function clearSearch(){$("searchBox").value="";doSearch();}
+function searchNext(){if(currentSearch!==null&¤tMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var nextMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextMatchIndex>currentMatchIndex||confirm("Reached the end of the page. Start from the top?")){setCurrentMatchIndex(nextMatchIndex);}}}
+function searchPrevious(){if(currentSearch!==null&¤tMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var previousMatchIndex=currentSearch.getPreviousVisibleMatchIndex();if(previousMatchIndex<currentMatchIndex||confirm("Reached the start of the page. Continue from the bottom?")){setCurrentMatchIndex(previousMatchIndex);}}}
+function setCurrentMatchIndex(index){currentMatchIndex=index;currentSearch.matches[currentMatchIndex].setCurrent();}
+function addClass(el,cssClass){if(!hasClass(el,cssClass)){if(el.className){el.className+=" "+cssClass;}else{el.className=cssClass;}}}
+function hasClass(el,cssClass){if(el.className){var classNames=el.className.split(" ");return array_contains(classNames,cssClass);}
+return false;}
+function removeClass(el,cssClass){if(hasClass(el,cssClass)){var existingClasses=el.className.split(" ");var newClasses=[];for(var i=0,len=existingClasses.length;i<len;i++){if(existingClasses[i]!=cssClass){newClasses[newClasses.length]=existingClasses[i];}}
+el.className=newClasses.join(" ");}}
+function replaceClass(el,newCssClass,oldCssClass){removeClass(el,oldCssClass);addClass(el,newCssClass);}
+function getElementsByClass(el,cssClass,tagName){var elements=el.getElementsByTagName(tagName);var matches=[];for(var i=0,len=elements.length;i<len;i++){if(hasClass(elements[i],cssClass)){matches.push(elements[i]);}}
+return matches;}
+function $(id){return document.getElementById(id);}
+function isDescendant(node,ancestorNode){while(node!=null){if(node===ancestorNode){return true;}
+node=node.parentNode;}
+return false;}
+function isOrphan(node){var currentNode=node;while(currentNode){if(currentNode==document.body){return false;}
+currentNode=currentNode.parentNode;}
+return true;}
+function escapeHtml(str){return str.replace(/&/g,"&").replace(/[<]/g,"<").replace(/>/g,">");}
+function getWindowWidth(){if(window.innerWidth){return window.innerWidth;}else if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth;}else if(document.body){return document.body.clientWidth;}
+return 0;}
+function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}
+return 0;}
+function getToolBarsHeight(){return $("switches").offsetHeight;}
+function getChromeHeight(){var height=getToolBarsHeight();if(showCommandLine){height+=$("commandLine").offsetHeight;}
+return height;}
+function setLogContainerHeight(){if(logMainContainer){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";logMainContainer.style.height=""+
+Math.max(0,windowHeight-getChromeHeight())+"px";}}
+function setCommandInputWidth(){if(showCommandLine){$("command").style.width=""+Math.max(0,$("commandLineContainer").offsetWidth-
+($("evaluateButton").offsetWidth+13))+"px";}}
+window.onresize=function(){setCommandInputWidth();setLogContainerHeight();};if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}
+return this.length;};}
+if(!Array.prototype.pop){Array.prototype.pop=function(){if(this.length>0){var val=this[this.length-1];this.length=this.length-1;return val;}};}
+if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}
+this.length=this.length-1;return firstItem;}};}
+if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}
+var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}
+return itemsDeleted;};}
+function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}
+if(index>=0){arr.splice(index,1);return index;}else{return false;}}
+function array_removeFromStart(array,numberToRemove){if(Array.prototype.splice){array.splice(0,numberToRemove);}else{for(var i=numberToRemove,len=array.length;i<len;i++){array[i-numberToRemove]=array[i];}
+array.length=array.length-numberToRemove;}
+return array;}
+function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}
+return false;}
+function getErrorMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}
+return""+ex;}
+function moveCaretToEnd(input){if(input.setSelectionRange){input.focus();var length=input.value.length;input.setSelectionRange(length,length);}else if(input.createTextRange){var range=input.createTextRange();range.collapse(false);range.select();}
+input.focus();}
+function stopPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}}
+function getEvent(evt){return evt?evt:event;}
+function getTarget(evt){return evt.target?evt.target:evt.srcElement;}
+function getRelatedTarget(evt){if(evt.relatedTarget){return evt.relatedTarget;}else if(evt.srcElement){switch(evt.type){case"mouseover":return evt.fromElement;case"mouseout":return evt.toElement;default:return evt.srcElement;}}}
+function cancelKeyEvent(evt){evt.returnValue=false;stopPropagation(evt);}
+function evalCommandLine(){var expr=$("command").value;evalCommand(expr);$("command").value="";}
+function evalLastCommand(){if(lastCommand!=null){evalCommand(lastCommand);}}
+var lastCommand=null;var commandHistory=[];var currentCommandIndex=0;function evalCommand(expr){if(appender){appender.evalCommandAndAppend(expr);}else{var prefix=">>> "+expr+"\r\n";try{log("INFO",prefix+eval(expr));}catch(ex){log("ERROR",prefix+"Error: "+getErrorMessage(ex));}}
+if(expr!=commandHistory[commandHistory.length-1]){commandHistory.push(expr);if(appender){appender.storeCommandHistory(commandHistory);}}
+currentCommandIndex=(expr==commandHistory[currentCommandIndex])?currentCommandIndex+1:commandHistory.length;lastCommand=expr;}
+//]]>
+</script>
+<style type="text/css">
+body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#switchesContainer input{margin-bottom:0}div.toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div.toolbar,div#search input{font-family:tahoma,verdana,arial,helvetica,sans-serif}div.toolbar input.button{padding:0 5px;font-size:100%}div.toolbar input.hidden{display:none}div#switches input#clearButton{margin-left:20px}div#levels label{font-weight:bold}div#levels label,div#options label{margin-right:5px}div#levels label#wrapLabel{font-weight:normal}div#search label{margin-right:10px}div#search label.searchboxlabel{margin-right:0}div#search input{font-size:100%}div#search input.validregex{color:green}div#search input.invalidregex{color:red}div#search input.nomatches{color:white;background-color:#ff6666}div#search input.nomatches{color:white;background-color:#ff6666}div#searchNav{display:none}div#commandLine{display:none}div#commandLine input#command{font-size:100%;font-family:Courier New,Courier}div#commandLine input#evaluateButton{}*.greyedout{color:gray !important;border-color:gray !important}*.greyedout *.alwaysenabled{color:black}*.unselectable{-khtml-user-select:none;-moz-user-select:none;user-select:none}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both;position:relative}div.group{border-color:#cccccc;border-style:solid;border-width:1px 0 1px 1px;overflow:visible}div.oldIe div.group,div.oldIe div.group *,div.oldIe *.logentry{height:1%}div.group div.groupheading span.expander{border:solid black 1px;font-family:Courier New,Courier;font-size:0.833em;background-color:#eeeeee;position:relative;top:-1px;color:black;padding:0 2px;cursor:pointer;cursor:hand;height:1%}div.group div.groupcontent{margin-left:10px;padding-bottom:2px;overflow:visible}div.group div.expanded{display:block}div.group div.collapsed{display:none}*.logentry{overflow:visible;display:none;white-space:pre}span.pre{white-space:pre}pre.unwrapped{display:inline !important}pre.unwrapped pre.pre,div.wrapped pre.pre{display:inline}div.wrapped pre.pre{white-space:normal}div.wrapped{display:none}body.searching *.logentry span.currentmatch{color:white !important;background-color:green !important}body.searching div.searchhighlight *.logentry span.searchterm{color:black;background-color:yellow}div.wrap *.logentry{white-space:normal !important;border-width:0 0 1px 0;border-color:#dddddd;border-style:dotted}div.wrap #log_wrapped,#log_unwrapped{display:block}div.wrap #log_unwrapped,#log_wrapped{display:none}div.wrap *.logentry span.pre{overflow:visible;white-space:normal}div.wrap *.logentry pre.unwrapped{display:none}div.wrap *.logentry span.wrapped{display:inline}div.searchfilter *.searchnonmatch{display:none !important}div#log *.TRACE,label#label_TRACE{color:#666666}div#log *.DEBUG,label#label_DEBUG{color:green}div#log *.INFO,label#label_INFO{color:#000099}div#log *.WARN,label#label_WARN{color:#999900}div#log *.ERROR,label#label_ERROR{color:red}div#log *.FATAL,label#label_FATAL{color:#660066}div.TRACE#log *.TRACE,div.DEBUG#log *.DEBUG,div.INFO#log *.INFO,div.WARN#log *.WARN,div.ERROR#log *.ERROR,div.FATAL#log *.FATAL{display:block}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}
+</style>
+</head>
+<body id="body">
+<div id="switchesContainer">
+<div id="switches">
+<div id="levels" class="toolbar">
+Filters:
+<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>
+<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>
+<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>
+<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>
+<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>
+<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>
+<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>
+</div>
+<div id="search" class="toolbar">
+<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />
+<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />
+<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>
+<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>
+<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>
+<div id="searchNav">
+<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />
+<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />
+<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>
+<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>
+</div>
+</div>
+<div id="options" class="toolbar">
+Options:
+<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>
+<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>
+<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>
+<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>
+<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages" />
+<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />
+<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />
+</div>
+</div>
+</div>
+<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>
+<div id="commandLine" class="toolbar">
+<div id="commandLineContainer">
+<input type="text" id="command" title="Enter a JavaScript command here and hit return or press 'Evaluate'" />
+<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />
+</div>
+</div>
+</body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/console_uncompressed.html b/planetstack/core/static/log4javascript-1.4.6/console_uncompressed.html
new file mode 100644
index 0000000..55679f8
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/console_uncompressed.html
@@ -0,0 +1,2279 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->
+ <meta http-equiv="X-UA-Compatible" content="IE=7" />
+ <script type="text/javascript">var isIe = false, isIePre7 = false;</script>
+ <!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->
+ <!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->
+ <script type="text/javascript">
+ //<![CDATA[
+ var loggingEnabled = true;
+ var logQueuedEventsTimer = null;
+ var logEntries = [];
+ var logEntriesAndSeparators = [];
+ var logItems = [];
+ var renderDelay = 100;
+ var unrenderedLogItemsExist = false;
+ var rootGroup, currentGroup = null;
+ var loaded = false;
+ var currentLogItem = null;
+ var logMainContainer;
+
+ function copyProperties(obj, props) {
+ for (var i in props) {
+ obj[i] = props[i];
+ }
+ }
+
+ /*----------------------------------------------------------------*/
+
+ function LogItem() {
+ }
+
+ LogItem.prototype = {
+ mainContainer: null,
+ wrappedContainer: null,
+ unwrappedContainer: null,
+ group: null,
+
+ appendToLog: function() {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].appendToLog();
+ }
+ this.group.update();
+ },
+
+ doRemove: function(doUpdate, removeFromGroup) {
+ if (this.rendered) {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].remove();
+ }
+ this.unwrappedElementContainer = null;
+ this.wrappedElementContainer = null;
+ this.mainElementContainer = null;
+ }
+ if (this.group && removeFromGroup) {
+ this.group.removeChild(this, doUpdate);
+ }
+ if (this === currentLogItem) {
+ currentLogItem = null;
+ }
+ },
+
+ remove: function(doUpdate, removeFromGroup) {
+ this.doRemove(doUpdate, removeFromGroup);
+ },
+
+ render: function() {},
+
+ accept: function(visitor) {
+ visitor.visit(this);
+ },
+
+ getUnwrappedDomContainer: function() {
+ return this.group.unwrappedElementContainer.contentDiv;
+ },
+
+ getWrappedDomContainer: function() {
+ return this.group.wrappedElementContainer.contentDiv;
+ },
+
+ getMainDomContainer: function() {
+ return this.group.mainElementContainer.contentDiv;
+ }
+ };
+
+ LogItem.serializedItemKeys = {LOG_ENTRY: 0, GROUP_START: 1, GROUP_END: 2};
+
+ /*----------------------------------------------------------------*/
+
+ function LogItemContainerElement() {
+ }
+
+ LogItemContainerElement.prototype = {
+ appendToLog: function() {
+ var insertBeforeFirst = (newestAtTop && this.containerDomNode.hasChildNodes());
+ if (insertBeforeFirst) {
+ this.containerDomNode.insertBefore(this.mainDiv, this.containerDomNode.firstChild);
+ } else {
+ this.containerDomNode.appendChild(this.mainDiv);
+ }
+ }
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function SeparatorElementContainer(containerDomNode) {
+ this.containerDomNode = containerDomNode;
+ this.mainDiv = document.createElement("div");
+ this.mainDiv.className = "separator";
+ this.mainDiv.innerHTML = " ";
+ }
+
+ SeparatorElementContainer.prototype = new LogItemContainerElement();
+
+ SeparatorElementContainer.prototype.remove = function() {
+ this.mainDiv.parentNode.removeChild(this.mainDiv);
+ this.mainDiv = null;
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function Separator() {
+ this.rendered = false;
+ }
+
+ Separator.prototype = new LogItem();
+
+ copyProperties(Separator.prototype, {
+ render: function() {
+ var containerDomNode = this.group.contentDiv;
+ if (isIe) {
+ this.unwrappedElementContainer = new SeparatorElementContainer(this.getUnwrappedDomContainer());
+ this.wrappedElementContainer = new SeparatorElementContainer(this.getWrappedDomContainer());
+ this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];
+ } else {
+ this.mainElementContainer = new SeparatorElementContainer(this.getMainDomContainer());
+ this.elementContainers = [this.mainElementContainer];
+ }
+ this.content = this.formattedMessage;
+ this.rendered = true;
+ }
+ });
+
+ /*----------------------------------------------------------------*/
+
+ function GroupElementContainer(group, containerDomNode, isRoot, isWrapped) {
+ this.group = group;
+ this.containerDomNode = containerDomNode;
+ this.isRoot = isRoot;
+ this.isWrapped = isWrapped;
+ this.expandable = false;
+
+ if (this.isRoot) {
+ if (isIe) {
+ this.contentDiv = logMainContainer.appendChild(document.createElement("div"));
+ this.contentDiv.id = this.isWrapped ? "log_wrapped" : "log_unwrapped";
+ } else {
+ this.contentDiv = logMainContainer;
+ }
+ } else {
+ var groupElementContainer = this;
+
+ this.mainDiv = document.createElement("div");
+ this.mainDiv.className = "group";
+
+ this.headingDiv = this.mainDiv.appendChild(document.createElement("div"));
+ this.headingDiv.className = "groupheading";
+
+ this.expander = this.headingDiv.appendChild(document.createElement("span"));
+ this.expander.className = "expander unselectable greyedout";
+ this.expander.unselectable = true;
+ var expanderText = this.group.expanded ? "-" : "+";
+ this.expanderTextNode = this.expander.appendChild(document.createTextNode(expanderText));
+
+ this.headingDiv.appendChild(document.createTextNode(" " + this.group.name));
+
+ this.contentDiv = this.mainDiv.appendChild(document.createElement("div"));
+ var contentCssClass = this.group.expanded ? "expanded" : "collapsed";
+ this.contentDiv.className = "groupcontent " + contentCssClass;
+
+ this.expander.onclick = function() {
+ if (groupElementContainer.group.expandable) {
+ groupElementContainer.group.toggleExpanded();
+ }
+ };
+ }
+ }
+
+ GroupElementContainer.prototype = new LogItemContainerElement();
+
+ copyProperties(GroupElementContainer.prototype, {
+ toggleExpanded: function() {
+ if (!this.isRoot) {
+ var oldCssClass, newCssClass, expanderText;
+ if (this.group.expanded) {
+ newCssClass = "expanded";
+ oldCssClass = "collapsed";
+ expanderText = "-";
+ } else {
+ newCssClass = "collapsed";
+ oldCssClass = "expanded";
+ expanderText = "+";
+ }
+ replaceClass(this.contentDiv, newCssClass, oldCssClass);
+ this.expanderTextNode.nodeValue = expanderText;
+ }
+ },
+
+ remove: function() {
+ if (!this.isRoot) {
+ this.headingDiv = null;
+ this.expander.onclick = null;
+ this.expander = null;
+ this.expanderTextNode = null;
+ this.contentDiv = null;
+ this.containerDomNode = null;
+ this.mainDiv.parentNode.removeChild(this.mainDiv);
+ this.mainDiv = null;
+ }
+ },
+
+ reverseChildren: function() {
+ // Invert the order of the log entries
+ var node = null;
+
+ // Remove all the log container nodes
+ var childDomNodes = [];
+ while ((node = this.contentDiv.firstChild)) {
+ this.contentDiv.removeChild(node);
+ childDomNodes.push(node);
+ }
+
+ // Put them all back in reverse order
+ while ((node = childDomNodes.pop())) {
+ this.contentDiv.appendChild(node);
+ }
+ },
+
+ update: function() {
+ if (!this.isRoot) {
+ if (this.group.expandable) {
+ removeClass(this.expander, "greyedout");
+ } else {
+ addClass(this.expander, "greyedout");
+ }
+ }
+ },
+
+ clear: function() {
+ if (this.isRoot) {
+ this.contentDiv.innerHTML = "";
+ }
+ }
+ });
+
+ /*----------------------------------------------------------------*/
+
+ function Group(name, isRoot, initiallyExpanded) {
+ this.name = name;
+ this.group = null;
+ this.isRoot = isRoot;
+ this.initiallyExpanded = initiallyExpanded;
+ this.elementContainers = [];
+ this.children = [];
+ this.expanded = initiallyExpanded;
+ this.rendered = false;
+ this.expandable = false;
+ }
+
+ Group.prototype = new LogItem();
+
+ copyProperties(Group.prototype, {
+ addChild: function(logItem) {
+ this.children.push(logItem);
+ logItem.group = this;
+ },
+
+ render: function() {
+ if (isIe) {
+ var unwrappedDomContainer, wrappedDomContainer;
+ if (this.isRoot) {
+ unwrappedDomContainer = logMainContainer;
+ wrappedDomContainer = logMainContainer;
+ } else {
+ unwrappedDomContainer = this.getUnwrappedDomContainer();
+ wrappedDomContainer = this.getWrappedDomContainer();
+ }
+ this.unwrappedElementContainer = new GroupElementContainer(this, unwrappedDomContainer, this.isRoot, false);
+ this.wrappedElementContainer = new GroupElementContainer(this, wrappedDomContainer, this.isRoot, true);
+ this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];
+ } else {
+ var mainDomContainer = this.isRoot ? logMainContainer : this.getMainDomContainer();
+ this.mainElementContainer = new GroupElementContainer(this, mainDomContainer, this.isRoot, false);
+ this.elementContainers = [this.mainElementContainer];
+ }
+ this.rendered = true;
+ },
+
+ toggleExpanded: function() {
+ this.expanded = !this.expanded;
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].toggleExpanded();
+ }
+ },
+
+ expand: function() {
+ if (!this.expanded) {
+ this.toggleExpanded();
+ }
+ },
+
+ accept: function(visitor) {
+ visitor.visitGroup(this);
+ },
+
+ reverseChildren: function() {
+ if (this.rendered) {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].reverseChildren();
+ }
+ }
+ },
+
+ update: function() {
+ var previouslyExpandable = this.expandable;
+ this.expandable = (this.children.length !== 0);
+ if (this.expandable !== previouslyExpandable) {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].update();
+ }
+ }
+ },
+
+ flatten: function() {
+ var visitor = new GroupFlattener();
+ this.accept(visitor);
+ return visitor.logEntriesAndSeparators;
+ },
+
+ removeChild: function(child, doUpdate) {
+ array_remove(this.children, child);
+ child.group = null;
+ if (doUpdate) {
+ this.update();
+ }
+ },
+
+ remove: function(doUpdate, removeFromGroup) {
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ this.children[i].remove(false, false);
+ }
+ this.children = [];
+ this.update();
+ if (this === currentGroup) {
+ currentGroup = this.group;
+ }
+ this.doRemove(doUpdate, removeFromGroup);
+ },
+
+ serialize: function(items) {
+ items.push([LogItem.serializedItemKeys.GROUP_START, this.name]);
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ this.children[i].serialize(items);
+ }
+ if (this !== currentGroup) {
+ items.push([LogItem.serializedItemKeys.GROUP_END]);
+ }
+ },
+
+ clear: function() {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].clear();
+ }
+ }
+ });
+
+ /*----------------------------------------------------------------*/
+
+ function LogEntryElementContainer() {
+ }
+
+ LogEntryElementContainer.prototype = new LogItemContainerElement();
+
+ copyProperties(LogEntryElementContainer.prototype, {
+ remove: function() {
+ this.doRemove();
+ },
+
+ doRemove: function() {
+ this.mainDiv.parentNode.removeChild(this.mainDiv);
+ this.mainDiv = null;
+ this.contentElement = null;
+ this.containerDomNode = null;
+ },
+
+ setContent: function(content, wrappedContent) {
+ if (content === this.formattedMessage) {
+ this.contentElement.innerHTML = "";
+ this.contentElement.appendChild(document.createTextNode(this.formattedMessage));
+ } else {
+ this.contentElement.innerHTML = content;
+ }
+ },
+
+ setSearchMatch: function(isMatch) {
+ var oldCssClass = isMatch ? "searchnonmatch" : "searchmatch";
+ var newCssClass = isMatch ? "searchmatch" : "searchnonmatch";
+ replaceClass(this.mainDiv, newCssClass, oldCssClass);
+ },
+
+ clearSearch: function() {
+ removeClass(this.mainDiv, "searchmatch");
+ removeClass(this.mainDiv, "searchnonmatch");
+ }
+ });
+
+ /*----------------------------------------------------------------*/
+
+ function LogEntryWrappedElementContainer(logEntry, containerDomNode) {
+ this.logEntry = logEntry;
+ this.containerDomNode = containerDomNode;
+ this.mainDiv = document.createElement("div");
+ this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));
+ this.mainDiv.className = "logentry wrapped " + this.logEntry.level;
+ this.contentElement = this.mainDiv;
+ }
+
+ LogEntryWrappedElementContainer.prototype = new LogEntryElementContainer();
+
+ LogEntryWrappedElementContainer.prototype.setContent = function(content, wrappedContent) {
+ if (content === this.formattedMessage) {
+ this.contentElement.innerHTML = "";
+ this.contentElement.appendChild(document.createTextNode(this.formattedMessage));
+ } else {
+ this.contentElement.innerHTML = wrappedContent;
+ }
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function LogEntryUnwrappedElementContainer(logEntry, containerDomNode) {
+ this.logEntry = logEntry;
+ this.containerDomNode = containerDomNode;
+ this.mainDiv = document.createElement("div");
+ this.mainDiv.className = "logentry unwrapped " + this.logEntry.level;
+ this.pre = this.mainDiv.appendChild(document.createElement("pre"));
+ this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));
+ this.pre.className = "unwrapped";
+ this.contentElement = this.pre;
+ }
+
+ LogEntryUnwrappedElementContainer.prototype = new LogEntryElementContainer();
+
+ LogEntryUnwrappedElementContainer.prototype.remove = function() {
+ this.doRemove();
+ this.pre = null;
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function LogEntryMainElementContainer(logEntry, containerDomNode) {
+ this.logEntry = logEntry;
+ this.containerDomNode = containerDomNode;
+ this.mainDiv = document.createElement("div");
+ this.mainDiv.className = "logentry nonielogentry " + this.logEntry.level;
+ this.contentElement = this.mainDiv.appendChild(document.createElement("span"));
+ this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));
+ }
+
+ LogEntryMainElementContainer.prototype = new LogEntryElementContainer();
+
+ /*----------------------------------------------------------------*/
+
+ function LogEntry(level, formattedMessage) {
+ this.level = level;
+ this.formattedMessage = formattedMessage;
+ this.rendered = false;
+ }
+
+ LogEntry.prototype = new LogItem();
+
+ copyProperties(LogEntry.prototype, {
+ render: function() {
+ var logEntry = this;
+ var containerDomNode = this.group.contentDiv;
+
+ // Support for the CSS attribute white-space in IE for Windows is
+ // non-existent pre version 6 and slightly odd in 6, so instead
+ // use two different HTML elements
+ if (isIe) {
+ this.formattedMessage = this.formattedMessage.replace(/\r\n/g, "\r"); // Workaround for IE's treatment of white space
+ this.unwrappedElementContainer = new LogEntryUnwrappedElementContainer(this, this.getUnwrappedDomContainer());
+ this.wrappedElementContainer = new LogEntryWrappedElementContainer(this, this.getWrappedDomContainer());
+ this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];
+ } else {
+ this.mainElementContainer = new LogEntryMainElementContainer(this, this.getMainDomContainer());
+ this.elementContainers = [this.mainElementContainer];
+ }
+ this.content = this.formattedMessage;
+ this.rendered = true;
+ },
+
+ setContent: function(content, wrappedContent) {
+ if (content != this.content) {
+ if (isIe && (content !== this.formattedMessage)) {
+ content = content.replace(/\r\n/g, "\r"); // Workaround for IE's treatment of white space
+ }
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].setContent(content, wrappedContent);
+ }
+ this.content = content;
+ }
+ },
+
+ getSearchMatches: function() {
+ var matches = [];
+ var i, len;
+ if (isIe) {
+ var unwrappedEls = getElementsByClass(this.unwrappedElementContainer.mainDiv, "searchterm", "span");
+ var wrappedEls = getElementsByClass(this.wrappedElementContainer.mainDiv, "searchterm", "span");
+ for (i = 0, len = unwrappedEls.length; i < len; i++) {
+ matches[i] = new Match(this.level, null, unwrappedEls[i], wrappedEls[i]);
+ }
+ } else {
+ var els = getElementsByClass(this.mainElementContainer.mainDiv, "searchterm", "span");
+ for (i = 0, len = els.length; i < len; i++) {
+ matches[i] = new Match(this.level, els[i]);
+ }
+ }
+ return matches;
+ },
+
+ setSearchMatch: function(isMatch) {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].setSearchMatch(isMatch);
+ }
+ },
+
+ clearSearch: function() {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].clearSearch();
+ }
+ },
+
+ accept: function(visitor) {
+ visitor.visitLogEntry(this);
+ },
+
+ serialize: function(items) {
+ items.push([LogItem.serializedItemKeys.LOG_ENTRY, this.level, this.formattedMessage]);
+ }
+ });
+
+ /*----------------------------------------------------------------*/
+
+ function LogItemVisitor() {
+ }
+
+ LogItemVisitor.prototype = {
+ visit: function(logItem) {
+ },
+
+ visitParent: function(logItem) {
+ if (logItem.group) {
+ logItem.group.accept(this);
+ }
+ },
+
+ visitChildren: function(logItem) {
+ for (var i = 0, len = logItem.children.length; i < len; i++) {
+ logItem.children[i].accept(this);
+ }
+ },
+
+ visitLogEntry: function(logEntry) {
+ this.visit(logEntry);
+ },
+
+ visitSeparator: function(separator) {
+ this.visit(separator);
+ },
+
+ visitGroup: function(group) {
+ this.visit(group);
+ }
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function GroupFlattener() {
+ this.logEntriesAndSeparators = [];
+ }
+
+ GroupFlattener.prototype = new LogItemVisitor();
+
+ GroupFlattener.prototype.visitGroup = function(group) {
+ this.visitChildren(group);
+ };
+
+ GroupFlattener.prototype.visitLogEntry = function(logEntry) {
+ this.logEntriesAndSeparators.push(logEntry);
+ };
+
+ GroupFlattener.prototype.visitSeparator = function(separator) {
+ this.logEntriesAndSeparators.push(separator);
+ };
+
+ /*----------------------------------------------------------------*/
+
+ window.onload = function() {
+ // Sort out document.domain
+ if (location.search) {
+ var queryBits = unescape(location.search).substr(1).split("&"), nameValueBits;
+ for (var i = 0, len = queryBits.length; i < len; i++) {
+ nameValueBits = queryBits[i].split("=");
+ if (nameValueBits[0] == "log4javascript_domain") {
+ document.domain = nameValueBits[1];
+ break;
+ }
+ }
+ }
+
+ // Create DOM objects
+ logMainContainer = $("log");
+ if (isIePre7) {
+ addClass(logMainContainer, "oldIe");
+ }
+
+ rootGroup = new Group("root", true);
+ rootGroup.render();
+ currentGroup = rootGroup;
+
+ setCommandInputWidth();
+ setLogContainerHeight();
+ toggleLoggingEnabled();
+ toggleSearchEnabled();
+ toggleSearchFilter();
+ toggleSearchHighlight();
+ applyFilters();
+ checkAllLevels();
+ toggleWrap();
+ toggleNewestAtTop();
+ toggleScrollToLatest();
+ renderQueuedLogItems();
+ loaded = true;
+ $("command").value = "";
+ $("command").autocomplete = "off";
+ $("command").onkeydown = function(evt) {
+ evt = getEvent(evt);
+ if (evt.keyCode == 10 || evt.keyCode == 13) { // Return/Enter
+ evalCommandLine();
+ stopPropagation(evt);
+ } else if (evt.keyCode == 27) { // Escape
+ this.value = "";
+ this.focus();
+ } else if (evt.keyCode == 38 && commandHistory.length > 0) { // Up
+ currentCommandIndex = Math.max(0, currentCommandIndex - 1);
+ this.value = commandHistory[currentCommandIndex];
+ moveCaretToEnd(this);
+ } else if (evt.keyCode == 40 && commandHistory.length > 0) { // Down
+ currentCommandIndex = Math.min(commandHistory.length - 1, currentCommandIndex + 1);
+ this.value = commandHistory[currentCommandIndex];
+ moveCaretToEnd(this);
+ }
+ };
+
+ // Prevent the keypress moving the caret in Firefox
+ $("command").onkeypress = function(evt) {
+ evt = getEvent(evt);
+ if (evt.keyCode == 38 && commandHistory.length > 0 && evt.preventDefault) { // Up
+ evt.preventDefault();
+ }
+ };
+
+ // Prevent the keyup event blurring the input in Opera
+ $("command").onkeyup = function(evt) {
+ evt = getEvent(evt);
+ if (evt.keyCode == 27 && evt.preventDefault) { // Up
+ evt.preventDefault();
+ this.focus();
+ }
+ };
+
+ // Add document keyboard shortcuts
+ document.onkeydown = function keyEventHandler(evt) {
+ evt = getEvent(evt);
+ switch (evt.keyCode) {
+ case 69: // Ctrl + shift + E: re-execute last command
+ if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {
+ evalLastCommand();
+ cancelKeyEvent(evt);
+ return false;
+ }
+ break;
+ case 75: // Ctrl + shift + K: focus search
+ if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {
+ focusSearch();
+ cancelKeyEvent(evt);
+ return false;
+ }
+ break;
+ case 40: // Ctrl + shift + down arrow: focus command line
+ case 76: // Ctrl + shift + L: focus command line
+ if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {
+ focusCommandLine();
+ cancelKeyEvent(evt);
+ return false;
+ }
+ break;
+ }
+ };
+
+ // Workaround to make sure log div starts at the correct size
+ setTimeout(setLogContainerHeight, 20);
+
+ setShowCommandLine(showCommandLine);
+ doSearch();
+ };
+
+ window.onunload = function() {
+ if (mainWindowExists()) {
+ appender.unload();
+ }
+ appender = null;
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function toggleLoggingEnabled() {
+ setLoggingEnabled($("enableLogging").checked);
+ }
+
+ function setLoggingEnabled(enable) {
+ loggingEnabled = enable;
+ }
+
+ var appender = null;
+
+ function setAppender(appenderParam) {
+ appender = appenderParam;
+ }
+
+ function setShowCloseButton(showCloseButton) {
+ $("closeButton").style.display = showCloseButton ? "inline" : "none";
+ }
+
+ function setShowHideButton(showHideButton) {
+ $("hideButton").style.display = showHideButton ? "inline" : "none";
+ }
+
+ var newestAtTop = false;
+
+ /*----------------------------------------------------------------*/
+
+ function LogItemContentReverser() {
+ }
+
+ LogItemContentReverser.prototype = new LogItemVisitor();
+
+ LogItemContentReverser.prototype.visitGroup = function(group) {
+ group.reverseChildren();
+ this.visitChildren(group);
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function setNewestAtTop(isNewestAtTop) {
+ var oldNewestAtTop = newestAtTop;
+ var i, iLen, j, jLen;
+ newestAtTop = Boolean(isNewestAtTop);
+ if (oldNewestAtTop != newestAtTop) {
+ var visitor = new LogItemContentReverser();
+ rootGroup.accept(visitor);
+
+ // Reassemble the matches array
+ if (currentSearch) {
+ var currentMatch = currentSearch.matches[currentMatchIndex];
+ var matchIndex = 0;
+ var matches = [];
+ var actOnLogEntry = function(logEntry) {
+ var logEntryMatches = logEntry.getSearchMatches();
+ for (j = 0, jLen = logEntryMatches.length; j < jLen; j++) {
+ matches[matchIndex] = logEntryMatches[j];
+ if (currentMatch && logEntryMatches[j].equals(currentMatch)) {
+ currentMatchIndex = matchIndex;
+ }
+ matchIndex++;
+ }
+ };
+ if (newestAtTop) {
+ for (i = logEntries.length - 1; i >= 0; i--) {
+ actOnLogEntry(logEntries[i]);
+ }
+ } else {
+ for (i = 0, iLen = logEntries.length; i < iLen; i++) {
+ actOnLogEntry(logEntries[i]);
+ }
+ }
+ currentSearch.matches = matches;
+ if (currentMatch) {
+ currentMatch.setCurrent();
+ }
+ } else if (scrollToLatest) {
+ doScrollToLatest();
+ }
+ }
+ $("newestAtTop").checked = isNewestAtTop;
+ }
+
+ function toggleNewestAtTop() {
+ var isNewestAtTop = $("newestAtTop").checked;
+ setNewestAtTop(isNewestAtTop);
+ }
+
+ var scrollToLatest = true;
+
+ function setScrollToLatest(isScrollToLatest) {
+ scrollToLatest = isScrollToLatest;
+ if (scrollToLatest) {
+ doScrollToLatest();
+ }
+ $("scrollToLatest").checked = isScrollToLatest;
+ }
+
+ function toggleScrollToLatest() {
+ var isScrollToLatest = $("scrollToLatest").checked;
+ setScrollToLatest(isScrollToLatest);
+ }
+
+ function doScrollToLatest() {
+ var l = logMainContainer;
+ if (typeof l.scrollTop != "undefined") {
+ if (newestAtTop) {
+ l.scrollTop = 0;
+ } else {
+ var latestLogEntry = l.lastChild;
+ if (latestLogEntry) {
+ l.scrollTop = l.scrollHeight;
+ }
+ }
+ }
+ }
+
+ var closeIfOpenerCloses = true;
+
+ function setCloseIfOpenerCloses(isCloseIfOpenerCloses) {
+ closeIfOpenerCloses = isCloseIfOpenerCloses;
+ }
+
+ var maxMessages = null;
+
+ function setMaxMessages(max) {
+ maxMessages = max;
+ pruneLogEntries();
+ }
+
+ var showCommandLine = false;
+
+ function setShowCommandLine(isShowCommandLine) {
+ showCommandLine = isShowCommandLine;
+ if (loaded) {
+ $("commandLine").style.display = showCommandLine ? "block" : "none";
+ setCommandInputWidth();
+ setLogContainerHeight();
+ }
+ }
+
+ function focusCommandLine() {
+ if (loaded) {
+ $("command").focus();
+ }
+ }
+
+ function focusSearch() {
+ if (loaded) {
+ $("searchBox").focus();
+ }
+ }
+
+ function getLogItems() {
+ var items = [];
+ for (var i = 0, len = logItems.length; i < len; i++) {
+ logItems[i].serialize(items);
+ }
+ return items;
+ }
+
+ function setLogItems(items) {
+ var loggingReallyEnabled = loggingEnabled;
+ // Temporarily turn logging on
+ loggingEnabled = true;
+ for (var i = 0, len = items.length; i < len; i++) {
+ switch (items[i][0]) {
+ case LogItem.serializedItemKeys.LOG_ENTRY:
+ log(items[i][1], items[i][2]);
+ break;
+ case LogItem.serializedItemKeys.GROUP_START:
+ group(items[i][1]);
+ break;
+ case LogItem.serializedItemKeys.GROUP_END:
+ groupEnd();
+ break;
+ }
+ }
+ loggingEnabled = loggingReallyEnabled;
+ }
+
+ function log(logLevel, formattedMessage) {
+ if (loggingEnabled) {
+ var logEntry = new LogEntry(logLevel, formattedMessage);
+ logEntries.push(logEntry);
+ logEntriesAndSeparators.push(logEntry);
+ logItems.push(logEntry);
+ currentGroup.addChild(logEntry);
+ if (loaded) {
+ if (logQueuedEventsTimer !== null) {
+ clearTimeout(logQueuedEventsTimer);
+ }
+ logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);
+ unrenderedLogItemsExist = true;
+ }
+ }
+ }
+
+ function renderQueuedLogItems() {
+ logQueuedEventsTimer = null;
+ var pruned = pruneLogEntries();
+
+ // Render any unrendered log entries and apply the current search to them
+ var initiallyHasMatches = currentSearch ? currentSearch.hasMatches() : false;
+ for (var i = 0, len = logItems.length; i < len; i++) {
+ if (!logItems[i].rendered) {
+ logItems[i].render();
+ logItems[i].appendToLog();
+ if (currentSearch && (logItems[i] instanceof LogEntry)) {
+ currentSearch.applyTo(logItems[i]);
+ }
+ }
+ }
+ if (currentSearch) {
+ if (pruned) {
+ if (currentSearch.hasVisibleMatches()) {
+ if (currentMatchIndex === null) {
+ setCurrentMatchIndex(0);
+ }
+ displayMatches();
+ } else {
+ displayNoMatches();
+ }
+ } else if (!initiallyHasMatches && currentSearch.hasVisibleMatches()) {
+ setCurrentMatchIndex(0);
+ displayMatches();
+ }
+ }
+ if (scrollToLatest) {
+ doScrollToLatest();
+ }
+ unrenderedLogItemsExist = false;
+ }
+
+ function pruneLogEntries() {
+ if ((maxMessages !== null) && (logEntriesAndSeparators.length > maxMessages)) {
+ var numberToDelete = logEntriesAndSeparators.length - maxMessages;
+ var prunedLogEntries = logEntriesAndSeparators.slice(0, numberToDelete);
+ if (currentSearch) {
+ currentSearch.removeMatches(prunedLogEntries);
+ }
+ var group;
+ for (var i = 0; i < numberToDelete; i++) {
+ group = logEntriesAndSeparators[i].group;
+ array_remove(logItems, logEntriesAndSeparators[i]);
+ array_remove(logEntries, logEntriesAndSeparators[i]);
+ logEntriesAndSeparators[i].remove(true, true);
+ if (group.children.length === 0 && group !== currentGroup && group !== rootGroup) {
+ array_remove(logItems, group);
+ group.remove(true, true);
+ }
+ }
+ logEntriesAndSeparators = array_removeFromStart(logEntriesAndSeparators, numberToDelete);
+ return true;
+ }
+ return false;
+ }
+
+ function group(name, startExpanded) {
+ if (loggingEnabled) {
+ initiallyExpanded = (typeof startExpanded === "undefined") ? true : Boolean(startExpanded);
+ var newGroup = new Group(name, false, initiallyExpanded);
+ currentGroup.addChild(newGroup);
+ currentGroup = newGroup;
+ logItems.push(newGroup);
+ if (loaded) {
+ if (logQueuedEventsTimer !== null) {
+ clearTimeout(logQueuedEventsTimer);
+ }
+ logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);
+ unrenderedLogItemsExist = true;
+ }
+ }
+ }
+
+ function groupEnd() {
+ currentGroup = (currentGroup === rootGroup) ? rootGroup : currentGroup.group;
+ }
+
+ function mainPageReloaded() {
+ currentGroup = rootGroup;
+ var separator = new Separator();
+ logEntriesAndSeparators.push(separator);
+ logItems.push(separator);
+ currentGroup.addChild(separator);
+ }
+
+ function closeWindow() {
+ if (appender && mainWindowExists()) {
+ appender.close(true);
+ } else {
+ window.close();
+ }
+ }
+
+ function hide() {
+ if (appender && mainWindowExists()) {
+ appender.hide();
+ }
+ }
+
+ var mainWindow = window;
+ var windowId = "log4javascriptConsoleWindow_" + new Date().getTime() + "_" + ("" + Math.random()).substr(2);
+
+ function setMainWindow(win) {
+ mainWindow = win;
+ mainWindow[windowId] = window;
+ // If this is a pop-up, poll the opener to see if it's closed
+ if (opener && closeIfOpenerCloses) {
+ pollOpener();
+ }
+ }
+
+ function pollOpener() {
+ if (closeIfOpenerCloses) {
+ if (mainWindowExists()) {
+ setTimeout(pollOpener, 500);
+ } else {
+ closeWindow();
+ }
+ }
+ }
+
+ function mainWindowExists() {
+ try {
+ return (mainWindow && !mainWindow.closed &&
+ mainWindow[windowId] == window);
+ } catch (ex) {}
+ return false;
+ }
+
+ var logLevels = ["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"];
+
+ function getCheckBox(logLevel) {
+ return $("switch_" + logLevel);
+ }
+
+ function getIeWrappedLogContainer() {
+ return $("log_wrapped");
+ }
+
+ function getIeUnwrappedLogContainer() {
+ return $("log_unwrapped");
+ }
+
+ function applyFilters() {
+ for (var i = 0; i < logLevels.length; i++) {
+ if (getCheckBox(logLevels[i]).checked) {
+ addClass(logMainContainer, logLevels[i]);
+ } else {
+ removeClass(logMainContainer, logLevels[i]);
+ }
+ }
+ updateSearchFromFilters();
+ }
+
+ function toggleAllLevels() {
+ var turnOn = $("switch_ALL").checked;
+ for (var i = 0; i < logLevels.length; i++) {
+ getCheckBox(logLevels[i]).checked = turnOn;
+ if (turnOn) {
+ addClass(logMainContainer, logLevels[i]);
+ } else {
+ removeClass(logMainContainer, logLevels[i]);
+ }
+ }
+ }
+
+ function checkAllLevels() {
+ for (var i = 0; i < logLevels.length; i++) {
+ if (!getCheckBox(logLevels[i]).checked) {
+ getCheckBox("ALL").checked = false;
+ return;
+ }
+ }
+ getCheckBox("ALL").checked = true;
+ }
+
+ function clearLog() {
+ rootGroup.clear();
+ currentGroup = rootGroup;
+ logEntries = [];
+ logItems = [];
+ logEntriesAndSeparators = [];
+ doSearch();
+ }
+
+ function toggleWrap() {
+ var enable = $("wrap").checked;
+ if (enable) {
+ addClass(logMainContainer, "wrap");
+ } else {
+ removeClass(logMainContainer, "wrap");
+ }
+ refreshCurrentMatch();
+ }
+
+ /* ------------------------------------------------------------------- */
+
+ // Search
+
+ var searchTimer = null;
+
+ function scheduleSearch() {
+ try {
+ clearTimeout(searchTimer);
+ } catch (ex) {
+ // Do nothing
+ }
+ searchTimer = setTimeout(doSearch, 500);
+ }
+
+ function Search(searchTerm, isRegex, searchRegex, isCaseSensitive) {
+ this.searchTerm = searchTerm;
+ this.isRegex = isRegex;
+ this.searchRegex = searchRegex;
+ this.isCaseSensitive = isCaseSensitive;
+ this.matches = [];
+ }
+
+ Search.prototype = {
+ hasMatches: function() {
+ return this.matches.length > 0;
+ },
+
+ hasVisibleMatches: function() {
+ if (this.hasMatches()) {
+ for (var i = 0; i < this.matches.length; i++) {
+ if (this.matches[i].isVisible()) {
+ return true;
+ }
+ }
+ }
+ return false;
+ },
+
+ match: function(logEntry) {
+ var entryText = String(logEntry.formattedMessage);
+ var matchesSearch = false;
+ if (this.isRegex) {
+ matchesSearch = this.searchRegex.test(entryText);
+ } else if (this.isCaseSensitive) {
+ matchesSearch = (entryText.indexOf(this.searchTerm) > -1);
+ } else {
+ matchesSearch = (entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1);
+ }
+ return matchesSearch;
+ },
+
+ getNextVisibleMatchIndex: function() {
+ for (var i = currentMatchIndex + 1; i < this.matches.length; i++) {
+ if (this.matches[i].isVisible()) {
+ return i;
+ }
+ }
+ // Start again from the first match
+ for (i = 0; i <= currentMatchIndex; i++) {
+ if (this.matches[i].isVisible()) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ getPreviousVisibleMatchIndex: function() {
+ for (var i = currentMatchIndex - 1; i >= 0; i--) {
+ if (this.matches[i].isVisible()) {
+ return i;
+ }
+ }
+ // Start again from the last match
+ for (var i = this.matches.length - 1; i >= currentMatchIndex; i--) {
+ if (this.matches[i].isVisible()) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ applyTo: function(logEntry) {
+ var doesMatch = this.match(logEntry);
+ if (doesMatch) {
+ logEntry.group.expand();
+ logEntry.setSearchMatch(true);
+ var logEntryContent;
+ var wrappedLogEntryContent;
+ var searchTermReplacementStartTag = "<span class=\"searchterm\">";
+ var searchTermReplacementEndTag = "<" + "/span>";
+ var preTagName = isIe ? "pre" : "span";
+ var preStartTag = "<" + preTagName + " class=\"pre\">";
+ var preEndTag = "<" + "/" + preTagName + ">";
+ var startIndex = 0;
+ var searchIndex, matchedText, textBeforeMatch;
+ if (this.isRegex) {
+ var flags = this.isCaseSensitive ? "g" : "gi";
+ var capturingRegex = new RegExp("(" + this.searchRegex.source + ")", flags);
+
+ // Replace the search term with temporary tokens for the start and end tags
+ var rnd = ("" + Math.random()).substr(2);
+ var startToken = "%%s" + rnd + "%%";
+ var endToken = "%%e" + rnd + "%%";
+ logEntryContent = logEntry.formattedMessage.replace(capturingRegex, startToken + "$1" + endToken);
+
+ // Escape the HTML to get rid of angle brackets
+ logEntryContent = escapeHtml(logEntryContent);
+
+ // Substitute the proper HTML back in for the search match
+ var result;
+ var searchString = logEntryContent;
+ logEntryContent = "";
+ wrappedLogEntryContent = "";
+ while ((searchIndex = searchString.indexOf(startToken, startIndex)) > -1) {
+ var endTokenIndex = searchString.indexOf(endToken, searchIndex);
+ matchedText = searchString.substring(searchIndex + startToken.length, endTokenIndex);
+ textBeforeMatch = searchString.substring(startIndex, searchIndex);
+ logEntryContent += preStartTag + textBeforeMatch + preEndTag;
+ logEntryContent += searchTermReplacementStartTag + preStartTag + matchedText +
+ preEndTag + searchTermReplacementEndTag;
+ if (isIe) {
+ wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +
+ matchedText + searchTermReplacementEndTag;
+ }
+ startIndex = endTokenIndex + endToken.length;
+ }
+ logEntryContent += preStartTag + searchString.substr(startIndex) + preEndTag;
+ if (isIe) {
+ wrappedLogEntryContent += searchString.substr(startIndex);
+ }
+ } else {
+ logEntryContent = "";
+ wrappedLogEntryContent = "";
+ var searchTermReplacementLength = searchTermReplacementStartTag.length +
+ this.searchTerm.length + searchTermReplacementEndTag.length;
+ var searchTermLength = this.searchTerm.length;
+ var searchTermLowerCase = this.searchTerm.toLowerCase();
+ var logTextLowerCase = logEntry.formattedMessage.toLowerCase();
+ while ((searchIndex = logTextLowerCase.indexOf(searchTermLowerCase, startIndex)) > -1) {
+ matchedText = escapeHtml(logEntry.formattedMessage.substr(searchIndex, this.searchTerm.length));
+ textBeforeMatch = escapeHtml(logEntry.formattedMessage.substring(startIndex, searchIndex));
+ var searchTermReplacement = searchTermReplacementStartTag +
+ preStartTag + matchedText + preEndTag + searchTermReplacementEndTag;
+ logEntryContent += preStartTag + textBeforeMatch + preEndTag + searchTermReplacement;
+ if (isIe) {
+ wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +
+ matchedText + searchTermReplacementEndTag;
+ }
+ startIndex = searchIndex + searchTermLength;
+ }
+ var textAfterLastMatch = escapeHtml(logEntry.formattedMessage.substr(startIndex));
+ logEntryContent += preStartTag + textAfterLastMatch + preEndTag;
+ if (isIe) {
+ wrappedLogEntryContent += textAfterLastMatch;
+ }
+ }
+ logEntry.setContent(logEntryContent, wrappedLogEntryContent);
+ var logEntryMatches = logEntry.getSearchMatches();
+ this.matches = this.matches.concat(logEntryMatches);
+ } else {
+ logEntry.setSearchMatch(false);
+ logEntry.setContent(logEntry.formattedMessage, logEntry.formattedMessage);
+ }
+ return doesMatch;
+ },
+
+ removeMatches: function(logEntries) {
+ var matchesToRemoveCount = 0;
+ var currentMatchRemoved = false;
+ var matchesToRemove = [];
+ var i, iLen, j, jLen;
+
+ // Establish the list of matches to be removed
+ for (i = 0, iLen = this.matches.length; i < iLen; i++) {
+ for (j = 0, jLen = logEntries.length; j < jLen; j++) {
+ if (this.matches[i].belongsTo(logEntries[j])) {
+ matchesToRemove.push(this.matches[i]);
+ if (i === currentMatchIndex) {
+ currentMatchRemoved = true;
+ }
+ }
+ }
+ }
+
+ // Set the new current match index if the current match has been deleted
+ // This will be the first match that appears after the first log entry being
+ // deleted, if one exists; otherwise, it's the first match overall
+ var newMatch = currentMatchRemoved ? null : this.matches[currentMatchIndex];
+ if (currentMatchRemoved) {
+ for (i = currentMatchIndex, iLen = this.matches.length; i < iLen; i++) {
+ if (this.matches[i].isVisible() && !array_contains(matchesToRemove, this.matches[i])) {
+ newMatch = this.matches[i];
+ break;
+ }
+ }
+ }
+
+ // Remove the matches
+ for (i = 0, iLen = matchesToRemove.length; i < iLen; i++) {
+ array_remove(this.matches, matchesToRemove[i]);
+ matchesToRemove[i].remove();
+ }
+
+ // Set the new match, if one exists
+ if (this.hasVisibleMatches()) {
+ if (newMatch === null) {
+ setCurrentMatchIndex(0);
+ } else {
+ // Get the index of the new match
+ var newMatchIndex = 0;
+ for (i = 0, iLen = this.matches.length; i < iLen; i++) {
+ if (newMatch === this.matches[i]) {
+ newMatchIndex = i;
+ break;
+ }
+ }
+ setCurrentMatchIndex(newMatchIndex);
+ }
+ } else {
+ currentMatchIndex = null;
+ displayNoMatches();
+ }
+ }
+ };
+
+ function getPageOffsetTop(el, container) {
+ var currentEl = el;
+ var y = 0;
+ while (currentEl && currentEl != container) {
+ y += currentEl.offsetTop;
+ currentEl = currentEl.offsetParent;
+ }
+ return y;
+ }
+
+ function scrollIntoView(el) {
+ var logContainer = logMainContainer;
+ // Check if the whole width of the element is visible and centre if not
+ if (!$("wrap").checked) {
+ var logContainerLeft = logContainer.scrollLeft;
+ var logContainerRight = logContainerLeft + logContainer.offsetWidth;
+ var elLeft = el.offsetLeft;
+ var elRight = elLeft + el.offsetWidth;
+ if (elLeft < logContainerLeft || elRight > logContainerRight) {
+ logContainer.scrollLeft = elLeft - (logContainer.offsetWidth - el.offsetWidth) / 2;
+ }
+ }
+ // Check if the whole height of the element is visible and centre if not
+ var logContainerTop = logContainer.scrollTop;
+ var logContainerBottom = logContainerTop + logContainer.offsetHeight;
+ var elTop = getPageOffsetTop(el) - getToolBarsHeight();
+ var elBottom = elTop + el.offsetHeight;
+ if (elTop < logContainerTop || elBottom > logContainerBottom) {
+ logContainer.scrollTop = elTop - (logContainer.offsetHeight - el.offsetHeight) / 2;
+ }
+ }
+
+ function Match(logEntryLevel, spanInMainDiv, spanInUnwrappedPre, spanInWrappedDiv) {
+ this.logEntryLevel = logEntryLevel;
+ this.spanInMainDiv = spanInMainDiv;
+ if (isIe) {
+ this.spanInUnwrappedPre = spanInUnwrappedPre;
+ this.spanInWrappedDiv = spanInWrappedDiv;
+ }
+ this.mainSpan = isIe ? spanInUnwrappedPre : spanInMainDiv;
+ }
+
+ Match.prototype = {
+ equals: function(match) {
+ return this.mainSpan === match.mainSpan;
+ },
+
+ setCurrent: function() {
+ if (isIe) {
+ addClass(this.spanInUnwrappedPre, "currentmatch");
+ addClass(this.spanInWrappedDiv, "currentmatch");
+ // Scroll the visible one into view
+ var elementToScroll = $("wrap").checked ? this.spanInWrappedDiv : this.spanInUnwrappedPre;
+ scrollIntoView(elementToScroll);
+ } else {
+ addClass(this.spanInMainDiv, "currentmatch");
+ scrollIntoView(this.spanInMainDiv);
+ }
+ },
+
+ belongsTo: function(logEntry) {
+ if (isIe) {
+ return isDescendant(this.spanInUnwrappedPre, logEntry.unwrappedPre);
+ } else {
+ return isDescendant(this.spanInMainDiv, logEntry.mainDiv);
+ }
+ },
+
+ setNotCurrent: function() {
+ if (isIe) {
+ removeClass(this.spanInUnwrappedPre, "currentmatch");
+ removeClass(this.spanInWrappedDiv, "currentmatch");
+ } else {
+ removeClass(this.spanInMainDiv, "currentmatch");
+ }
+ },
+
+ isOrphan: function() {
+ return isOrphan(this.mainSpan);
+ },
+
+ isVisible: function() {
+ return getCheckBox(this.logEntryLevel).checked;
+ },
+
+ remove: function() {
+ if (isIe) {
+ this.spanInUnwrappedPre = null;
+ this.spanInWrappedDiv = null;
+ } else {
+ this.spanInMainDiv = null;
+ }
+ }
+ };
+
+ var currentSearch = null;
+ var currentMatchIndex = null;
+
+ function doSearch() {
+ var searchBox = $("searchBox");
+ var searchTerm = searchBox.value;
+ var isRegex = $("searchRegex").checked;
+ var isCaseSensitive = $("searchCaseSensitive").checked;
+ var i;
+
+ if (searchTerm === "") {
+ $("searchReset").disabled = true;
+ $("searchNav").style.display = "none";
+ removeClass(document.body, "searching");
+ removeClass(searchBox, "hasmatches");
+ removeClass(searchBox, "nomatches");
+ for (i = 0; i < logEntries.length; i++) {
+ logEntries[i].clearSearch();
+ logEntries[i].setContent(logEntries[i].formattedMessage, logEntries[i].formattedMessage);
+ }
+ currentSearch = null;
+ setLogContainerHeight();
+ } else {
+ $("searchReset").disabled = false;
+ $("searchNav").style.display = "block";
+ var searchRegex;
+ var regexValid;
+ if (isRegex) {
+ try {
+ searchRegex = isCaseSensitive ? new RegExp(searchTerm, "g") : new RegExp(searchTerm, "gi");
+ regexValid = true;
+ replaceClass(searchBox, "validregex", "invalidregex");
+ searchBox.title = "Valid regex";
+ } catch (ex) {
+ regexValid = false;
+ replaceClass(searchBox, "invalidregex", "validregex");
+ searchBox.title = "Invalid regex: " + (ex.message ? ex.message : (ex.description ? ex.description : "unknown error"));
+ return;
+ }
+ } else {
+ searchBox.title = "";
+ removeClass(searchBox, "validregex");
+ removeClass(searchBox, "invalidregex");
+ }
+ addClass(document.body, "searching");
+ currentSearch = new Search(searchTerm, isRegex, searchRegex, isCaseSensitive);
+ for (i = 0; i < logEntries.length; i++) {
+ currentSearch.applyTo(logEntries[i]);
+ }
+ setLogContainerHeight();
+
+ // Highlight the first search match
+ if (currentSearch.hasVisibleMatches()) {
+ setCurrentMatchIndex(0);
+ displayMatches();
+ } else {
+ displayNoMatches();
+ }
+ }
+ }
+
+ function updateSearchFromFilters() {
+ if (currentSearch) {
+ if (currentSearch.hasMatches()) {
+ if (currentMatchIndex === null) {
+ currentMatchIndex = 0;
+ }
+ var currentMatch = currentSearch.matches[currentMatchIndex];
+ if (currentMatch.isVisible()) {
+ displayMatches();
+ setCurrentMatchIndex(currentMatchIndex);
+ } else {
+ currentMatch.setNotCurrent();
+ // Find the next visible match, if one exists
+ var nextVisibleMatchIndex = currentSearch.getNextVisibleMatchIndex();
+ if (nextVisibleMatchIndex > -1) {
+ setCurrentMatchIndex(nextVisibleMatchIndex);
+ displayMatches();
+ } else {
+ displayNoMatches();
+ }
+ }
+ } else {
+ displayNoMatches();
+ }
+ }
+ }
+
+ function refreshCurrentMatch() {
+ if (currentSearch && currentSearch.hasVisibleMatches()) {
+ setCurrentMatchIndex(currentMatchIndex);
+ }
+ }
+
+ function displayMatches() {
+ replaceClass($("searchBox"), "hasmatches", "nomatches");
+ $("searchBox").title = "" + currentSearch.matches.length + " matches found";
+ $("searchNav").style.display = "block";
+ setLogContainerHeight();
+ }
+
+ function displayNoMatches() {
+ replaceClass($("searchBox"), "nomatches", "hasmatches");
+ $("searchBox").title = "No matches found";
+ $("searchNav").style.display = "none";
+ setLogContainerHeight();
+ }
+
+ function toggleSearchEnabled(enable) {
+ enable = (typeof enable == "undefined") ? !$("searchDisable").checked : enable;
+ $("searchBox").disabled = !enable;
+ $("searchReset").disabled = !enable;
+ $("searchRegex").disabled = !enable;
+ $("searchNext").disabled = !enable;
+ $("searchPrevious").disabled = !enable;
+ $("searchCaseSensitive").disabled = !enable;
+ $("searchNav").style.display = (enable && ($("searchBox").value !== "") &&
+ currentSearch && currentSearch.hasVisibleMatches()) ?
+ "block" : "none";
+ if (enable) {
+ removeClass($("search"), "greyedout");
+ addClass(document.body, "searching");
+ if ($("searchHighlight").checked) {
+ addClass(logMainContainer, "searchhighlight");
+ } else {
+ removeClass(logMainContainer, "searchhighlight");
+ }
+ if ($("searchFilter").checked) {
+ addClass(logMainContainer, "searchfilter");
+ } else {
+ removeClass(logMainContainer, "searchfilter");
+ }
+ $("searchDisable").checked = !enable;
+ } else {
+ addClass($("search"), "greyedout");
+ removeClass(document.body, "searching");
+ removeClass(logMainContainer, "searchhighlight");
+ removeClass(logMainContainer, "searchfilter");
+ }
+ setLogContainerHeight();
+ }
+
+ function toggleSearchFilter() {
+ var enable = $("searchFilter").checked;
+ if (enable) {
+ addClass(logMainContainer, "searchfilter");
+ } else {
+ removeClass(logMainContainer, "searchfilter");
+ }
+ refreshCurrentMatch();
+ }
+
+ function toggleSearchHighlight() {
+ var enable = $("searchHighlight").checked;
+ if (enable) {
+ addClass(logMainContainer, "searchhighlight");
+ } else {
+ removeClass(logMainContainer, "searchhighlight");
+ }
+ }
+
+ function clearSearch() {
+ $("searchBox").value = "";
+ doSearch();
+ }
+
+ function searchNext() {
+ if (currentSearch !== null && currentMatchIndex !== null) {
+ currentSearch.matches[currentMatchIndex].setNotCurrent();
+ var nextMatchIndex = currentSearch.getNextVisibleMatchIndex();
+ if (nextMatchIndex > currentMatchIndex || confirm("Reached the end of the page. Start from the top?")) {
+ setCurrentMatchIndex(nextMatchIndex);
+ }
+ }
+ }
+
+ function searchPrevious() {
+ if (currentSearch !== null && currentMatchIndex !== null) {
+ currentSearch.matches[currentMatchIndex].setNotCurrent();
+ var previousMatchIndex = currentSearch.getPreviousVisibleMatchIndex();
+ if (previousMatchIndex < currentMatchIndex || confirm("Reached the start of the page. Continue from the bottom?")) {
+ setCurrentMatchIndex(previousMatchIndex);
+ }
+ }
+ }
+
+ function setCurrentMatchIndex(index) {
+ currentMatchIndex = index;
+ currentSearch.matches[currentMatchIndex].setCurrent();
+ }
+
+ /* ------------------------------------------------------------------------- */
+
+ // CSS Utilities
+
+ function addClass(el, cssClass) {
+ if (!hasClass(el, cssClass)) {
+ if (el.className) {
+ el.className += " " + cssClass;
+ } else {
+ el.className = cssClass;
+ }
+ }
+ }
+
+ function hasClass(el, cssClass) {
+ if (el.className) {
+ var classNames = el.className.split(" ");
+ return array_contains(classNames, cssClass);
+ }
+ return false;
+ }
+
+ function removeClass(el, cssClass) {
+ if (hasClass(el, cssClass)) {
+ // Rebuild the className property
+ var existingClasses = el.className.split(" ");
+ var newClasses = [];
+ for (var i = 0, len = existingClasses.length; i < len; i++) {
+ if (existingClasses[i] != cssClass) {
+ newClasses[newClasses.length] = existingClasses[i];
+ }
+ }
+ el.className = newClasses.join(" ");
+ }
+ }
+
+ function replaceClass(el, newCssClass, oldCssClass) {
+ removeClass(el, oldCssClass);
+ addClass(el, newCssClass);
+ }
+
+ /* ------------------------------------------------------------------------- */
+
+ // Other utility functions
+
+ function getElementsByClass(el, cssClass, tagName) {
+ var elements = el.getElementsByTagName(tagName);
+ var matches = [];
+ for (var i = 0, len = elements.length; i < len; i++) {
+ if (hasClass(elements[i], cssClass)) {
+ matches.push(elements[i]);
+ }
+ }
+ return matches;
+ }
+
+ // Syntax borrowed from Prototype library
+ function $(id) {
+ return document.getElementById(id);
+ }
+
+ function isDescendant(node, ancestorNode) {
+ while (node != null) {
+ if (node === ancestorNode) {
+ return true;
+ }
+ node = node.parentNode;
+ }
+ return false;
+ }
+
+ function isOrphan(node) {
+ var currentNode = node;
+ while (currentNode) {
+ if (currentNode == document.body) {
+ return false;
+ }
+ currentNode = currentNode.parentNode;
+ }
+ return true;
+ }
+
+ function escapeHtml(str) {
+ return str.replace(/&/g, "&").replace(/[<]/g, "<").replace(/>/g, ">");
+ }
+
+ function getWindowWidth() {
+ if (window.innerWidth) {
+ return window.innerWidth;
+ } else if (document.documentElement && document.documentElement.clientWidth) {
+ return document.documentElement.clientWidth;
+ } else if (document.body) {
+ return document.body.clientWidth;
+ }
+ return 0;
+ }
+
+ function getWindowHeight() {
+ if (window.innerHeight) {
+ return window.innerHeight;
+ } else if (document.documentElement && document.documentElement.clientHeight) {
+ return document.documentElement.clientHeight;
+ } else if (document.body) {
+ return document.body.clientHeight;
+ }
+ return 0;
+ }
+
+ function getToolBarsHeight() {
+ return $("switches").offsetHeight;
+ }
+
+ function getChromeHeight() {
+ var height = getToolBarsHeight();
+ if (showCommandLine) {
+ height += $("commandLine").offsetHeight;
+ }
+ return height;
+ }
+
+ function setLogContainerHeight() {
+ if (logMainContainer) {
+ var windowHeight = getWindowHeight();
+ $("body").style.height = getWindowHeight() + "px";
+ logMainContainer.style.height = "" +
+ Math.max(0, windowHeight - getChromeHeight()) + "px";
+ }
+ }
+
+ function setCommandInputWidth() {
+ if (showCommandLine) {
+ $("command").style.width = "" + Math.max(0, $("commandLineContainer").offsetWidth -
+ ($("evaluateButton").offsetWidth + 13)) + "px";
+ }
+ }
+
+ window.onresize = function() {
+ setCommandInputWidth();
+ setLogContainerHeight();
+ };
+
+ if (!Array.prototype.push) {
+ Array.prototype.push = function() {
+ for (var i = 0, len = arguments.length; i < len; i++){
+ this[this.length] = arguments[i];
+ }
+ return this.length;
+ };
+ }
+
+ if (!Array.prototype.pop) {
+ Array.prototype.pop = function() {
+ if (this.length > 0) {
+ var val = this[this.length - 1];
+ this.length = this.length - 1;
+ return val;
+ }
+ };
+ }
+
+ if (!Array.prototype.shift) {
+ Array.prototype.shift = function() {
+ if (this.length > 0) {
+ var firstItem = this[0];
+ for (var i = 0, len = this.length - 1; i < len; i++) {
+ this[i] = this[i + 1];
+ }
+ this.length = this.length - 1;
+ return firstItem;
+ }
+ };
+ }
+
+ if (!Array.prototype.splice) {
+ Array.prototype.splice = function(startIndex, deleteCount) {
+ var itemsAfterDeleted = this.slice(startIndex + deleteCount);
+ var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);
+ this.length = startIndex;
+ // Copy the arguments into a proper Array object
+ var argumentsArray = [];
+ for (var i = 0, len = arguments.length; i < len; i++) {
+ argumentsArray[i] = arguments[i];
+ }
+ var itemsToAppend = (argumentsArray.length > 2) ?
+ itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;
+ for (i = 0, len = itemsToAppend.length; i < len; i++) {
+ this.push(itemsToAppend[i]);
+ }
+ return itemsDeleted;
+ };
+ }
+
+ function array_remove(arr, val) {
+ var index = -1;
+ for (var i = 0, len = arr.length; i < len; i++) {
+ if (arr[i] === val) {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0) {
+ arr.splice(index, 1);
+ return index;
+ } else {
+ return false;
+ }
+ }
+
+ function array_removeFromStart(array, numberToRemove) {
+ if (Array.prototype.splice) {
+ array.splice(0, numberToRemove);
+ } else {
+ for (var i = numberToRemove, len = array.length; i < len; i++) {
+ array[i - numberToRemove] = array[i];
+ }
+ array.length = array.length - numberToRemove;
+ }
+ return array;
+ }
+
+ function array_contains(arr, val) {
+ for (var i = 0, len = arr.length; i < len; i++) {
+ if (arr[i] == val) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function getErrorMessage(ex) {
+ if (ex.message) {
+ return ex.message;
+ } else if (ex.description) {
+ return ex.description;
+ }
+ return "" + ex;
+ }
+
+ function moveCaretToEnd(input) {
+ if (input.setSelectionRange) {
+ input.focus();
+ var length = input.value.length;
+ input.setSelectionRange(length, length);
+ } else if (input.createTextRange) {
+ var range = input.createTextRange();
+ range.collapse(false);
+ range.select();
+ }
+ input.focus();
+ }
+
+ function stopPropagation(evt) {
+ if (evt.stopPropagation) {
+ evt.stopPropagation();
+ } else if (typeof evt.cancelBubble != "undefined") {
+ evt.cancelBubble = true;
+ }
+ }
+
+ function getEvent(evt) {
+ return evt ? evt : event;
+ }
+
+ function getTarget(evt) {
+ return evt.target ? evt.target : evt.srcElement;
+ }
+
+ function getRelatedTarget(evt) {
+ if (evt.relatedTarget) {
+ return evt.relatedTarget;
+ } else if (evt.srcElement) {
+ switch(evt.type) {
+ case "mouseover":
+ return evt.fromElement;
+ case "mouseout":
+ return evt.toElement;
+ default:
+ return evt.srcElement;
+ }
+ }
+ }
+
+ function cancelKeyEvent(evt) {
+ evt.returnValue = false;
+ stopPropagation(evt);
+ }
+
+ function evalCommandLine() {
+ var expr = $("command").value;
+ evalCommand(expr);
+ $("command").value = "";
+ }
+
+ function evalLastCommand() {
+ if (lastCommand != null) {
+ evalCommand(lastCommand);
+ }
+ }
+
+ var lastCommand = null;
+ var commandHistory = [];
+ var currentCommandIndex = 0;
+
+ function evalCommand(expr) {
+ if (appender) {
+ appender.evalCommandAndAppend(expr);
+ } else {
+ var prefix = ">>> " + expr + "\r\n";
+ try {
+ log("INFO", prefix + eval(expr));
+ } catch (ex) {
+ log("ERROR", prefix + "Error: " + getErrorMessage(ex));
+ }
+ }
+ // Update command history
+ if (expr != commandHistory[commandHistory.length - 1]) {
+ commandHistory.push(expr);
+ // Update the appender
+ if (appender) {
+ appender.storeCommandHistory(commandHistory);
+ }
+ }
+ currentCommandIndex = (expr == commandHistory[currentCommandIndex]) ? currentCommandIndex + 1 : commandHistory.length;
+ lastCommand = expr;
+ }
+ //]]>
+ </script>
+ <style type="text/css">
+ body {
+ background-color: white;
+ color: black;
+ padding: 0;
+ margin: 0;
+ font-family: tahoma, verdana, arial, helvetica, sans-serif;
+ overflow: hidden;
+ }
+
+ div#switchesContainer input {
+ margin-bottom: 0;
+ }
+
+ div.toolbar {
+ border-top: solid #ffffff 1px;
+ border-bottom: solid #aca899 1px;
+ background-color: #f1efe7;
+ padding: 3px 5px;
+ font-size: 68.75%;
+ }
+
+ div.toolbar, div#search input {
+ font-family: tahoma, verdana, arial, helvetica, sans-serif;
+ }
+
+ div.toolbar input.button {
+ padding: 0 5px;
+ font-size: 100%;
+ }
+
+ div.toolbar input.hidden {
+ display: none;
+ }
+
+ div#switches input#clearButton {
+ margin-left: 20px;
+ }
+
+ div#levels label {
+ font-weight: bold;
+ }
+
+ div#levels label, div#options label {
+ margin-right: 5px;
+ }
+
+ div#levels label#wrapLabel {
+ font-weight: normal;
+ }
+
+ div#search label {
+ margin-right: 10px;
+ }
+
+ div#search label.searchboxlabel {
+ margin-right: 0;
+ }
+
+ div#search input {
+ font-size: 100%;
+ }
+
+ div#search input.validregex {
+ color: green;
+ }
+
+ div#search input.invalidregex {
+ color: red;
+ }
+
+ div#search input.nomatches {
+ color: white;
+ background-color: #ff6666;
+ }
+
+ div#search input.nomatches {
+ color: white;
+ background-color: #ff6666;
+ }
+
+ div#searchNav {
+ display: none;
+ }
+
+ div#commandLine {
+ display: none;
+ }
+
+ div#commandLine input#command {
+ font-size: 100%;
+ font-family: Courier New, Courier;
+ }
+
+ div#commandLine input#evaluateButton {
+ }
+
+ *.greyedout {
+ color: gray !important;
+ border-color: gray !important;
+ }
+
+ *.greyedout *.alwaysenabled { color: black; }
+
+ *.unselectable {
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ }
+
+ div#log {
+ font-family: Courier New, Courier;
+ font-size: 75%;
+ width: 100%;
+ overflow: auto;
+ clear: both;
+ position: relative;
+ }
+
+ div.group {
+ border-color: #cccccc;
+ border-style: solid;
+ border-width: 1px 0 1px 1px;
+ overflow: visible;
+ }
+
+ div.oldIe div.group, div.oldIe div.group *, div.oldIe *.logentry {
+ height: 1%;
+ }
+
+ div.group div.groupheading span.expander {
+ border: solid black 1px;
+ font-family: Courier New, Courier;
+ font-size: 0.833em;
+ background-color: #eeeeee;
+ position: relative;
+ top: -1px;
+ color: black;
+ padding: 0 2px;
+ cursor: pointer;
+ cursor: hand;
+ height: 1%;
+ }
+
+ div.group div.groupcontent {
+ margin-left: 10px;
+ padding-bottom: 2px;
+ overflow: visible;
+ }
+
+ div.group div.expanded {
+ display: block;
+ }
+
+ div.group div.collapsed {
+ display: none;
+ }
+
+ *.logentry {
+ overflow: visible;
+ display: none;
+ white-space: pre;
+ }
+
+ span.pre {
+ white-space: pre;
+ }
+
+ pre.unwrapped {
+ display: inline !important;
+ }
+
+ pre.unwrapped pre.pre, div.wrapped pre.pre {
+ display: inline;
+ }
+
+ div.wrapped pre.pre {
+ white-space: normal;
+ }
+
+ div.wrapped {
+ display: none;
+ }
+
+ body.searching *.logentry span.currentmatch {
+ color: white !important;
+ background-color: green !important;
+ }
+
+ body.searching div.searchhighlight *.logentry span.searchterm {
+ color: black;
+ background-color: yellow;
+ }
+
+ div.wrap *.logentry {
+ white-space: normal !important;
+ border-width: 0 0 1px 0;
+ border-color: #dddddd;
+ border-style: dotted;
+ }
+
+ div.wrap #log_wrapped, #log_unwrapped {
+ display: block;
+ }
+
+ div.wrap #log_unwrapped, #log_wrapped {
+ display: none;
+ }
+
+ div.wrap *.logentry span.pre {
+ overflow: visible;
+ white-space: normal;
+ }
+
+ div.wrap *.logentry pre.unwrapped {
+ display: none;
+ }
+
+ div.wrap *.logentry span.wrapped {
+ display: inline;
+ }
+
+ div.searchfilter *.searchnonmatch {
+ display: none !important;
+ }
+
+ div#log *.TRACE, label#label_TRACE {
+ color: #666666;
+ }
+
+ div#log *.DEBUG, label#label_DEBUG {
+ color: green;
+ }
+
+ div#log *.INFO, label#label_INFO {
+ color: #000099;
+ }
+
+ div#log *.WARN, label#label_WARN {
+ color: #999900;
+ }
+
+ div#log *.ERROR, label#label_ERROR {
+ color: red;
+ }
+
+ div#log *.FATAL, label#label_FATAL {
+ color: #660066;
+ }
+
+ div.TRACE#log *.TRACE,
+ div.DEBUG#log *.DEBUG,
+ div.INFO#log *.INFO,
+ div.WARN#log *.WARN,
+ div.ERROR#log *.ERROR,
+ div.FATAL#log *.FATAL {
+ display: block;
+ }
+
+ div#log div.separator {
+ background-color: #cccccc;
+ margin: 5px 0;
+ line-height: 1px;
+ }
+ </style>
+ </head>
+
+ <body id="body">
+ <div id="switchesContainer">
+ <div id="switches">
+ <div id="levels" class="toolbar">
+ Filters:
+ <input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>
+ <input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>
+ <input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>
+ <input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>
+ <input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>
+ <input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>
+ <input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>
+ </div>
+ <div id="search" class="toolbar">
+ <label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />
+ <input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />
+ <input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>
+ <input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>
+ <input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>
+ <div id="searchNav">
+ <input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />
+ <input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />
+ <input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>
+ <input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>
+ </div>
+ </div>
+ <div id="options" class="toolbar">
+ Options:
+ <input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>
+ <input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>
+ <input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>
+ <input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>
+ <input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages" />
+ <input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />
+ <input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />
+ </div>
+ </div>
+ </div>
+ <div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>
+ <div id="commandLine" class="toolbar">
+ <div id="commandLineContainer">
+ <input type="text" id="command" title="Enter a JavaScript command here and hit return or press 'Evaluate'" />
+ <input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/demos/basic.html b/planetstack/core/static/log4javascript-1.4.6/demos/basic.html
new file mode 100644
index 0000000..51d5857
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/demos/basic.html
@@ -0,0 +1,159 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript basic demo</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ <script type="text/javascript" src="../js/log4javascript.js"></script>
+ <script type="text/javascript">
+ // <![CDATA[
+ var log = log4javascript.getLogger("main");
+ var appender = new log4javascript.PopUpAppender();
+ log.addAppender(appender);
+ log.debug("This is debugging message from the log4javascript basic demo page");
+
+ var words = ["Watford", "eased", "their", "relegation", "fears", "with", "a", "win",
+ "against", "a", "Charlton", "side", "who", "slipped", "further", "towards", "the",
+ "drop", "Don", "Cowie", "drilled", "in", "a", "shot", "to", "put", "the", "Hornets",
+ "ahead", "before", "Tresor", "Kandol", "ended", "a", "powerful", "run", "by",
+ "rounding", "keeper", "Scott", "Loach", "and", "slotting", "in", "to", "level"
+ ];
+
+ var loaded = false;
+
+ function generateRandom() {
+ var numberOfEntries = parseInt(document.getElementById("numberOfLogEntries").value);
+ for (var i = 0; i < numberOfEntries; i++) {
+ var numberOfWords = 1 + Math.floor(10 * Math.random());
+ var entryWords = [];
+ for (var j = 0; j < numberOfWords; j++) {
+ entryWords.push(words[Math.floor(Math.random() * words.length)]);
+ }
+ var entryMessage = entryWords.join(" ");
+ var levelNum = Math.floor(Math.random() * 6);
+ switch (levelNum) {
+ case 0:
+ log.trace(entryMessage);
+ break;
+ case 1:
+ log.debug(entryMessage);
+ break;
+ case 2:
+ log.info(entryMessage);
+ break;
+ case 3:
+ log.warn(entryMessage);
+ break;
+ case 4:
+ log.error(entryMessage);
+ break;
+ case 5:
+ log.fatal(entryMessage);
+ break;
+ }
+ }
+ }
+
+ function generateObjectExpansion() {
+ var debugObj = {
+ a: {
+ b: "stuff",
+ c: 3,
+ d: {
+ e: ["a", "b", "c"]
+ }
+ },
+ f: "Things",
+ g: 5
+ };
+ log.debug(debugObj);
+ }
+
+ function generateError() {
+ try {
+ throw new Error("Made up error");
+ } catch (ex) {
+ log.error("Logging an error!", ex);
+ }
+ }
+ // ]]>
+ </script>
+ </head>
+ <body onload="loaded = true; document.getElementById('enabled').checked = true;">
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="/docs/index.html">log4javascript</a></h1>
+ </div>
+ <div id="content">
+ <div id="nav">
+ <a class="navitem" href="../index.html">home</a>
+ | <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <a class="navitem" href="../docs/index.html">docs</a>
+ | <a class="navitem" href="../docs/quickstart.html">quick start</a>
+ | <a class="navitem" href="index.html">demos</a>
+ | <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
+ | <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
+ </div>
+ <h1>log4javascript basic demo</h1>
+ <p>
+ <em><strong>NB.</strong> Since the demo below uses pop-up windows, you will
+ need to disable any pop-up blockers you may have for it to work.</em>
+ </p>
+ <p>
+ This demo demonstrates the default logger. For more options, please see the
+ <a href="index.html">demos area</a>.
+ </p>
+ <p>
+ Enter a log message below and click on one of the buttons to log
+ your message at your desired level. You can then filter by
+ log level, toggle word-wrapping and perform text and regular
+ expression searches on the log entries.
+ </p>
+ <div class="example">
+ <input type="text" id="logText" value="Put log message here" />
+ <input type="button" value="debug" onclick="log.debug(document.getElementById('logText').value)" />
+ <input type="button" value="info" onclick="log.info(document.getElementById('logText').value)" />
+ <input type="button" value="warn" onclick="log.warn(document.getElementById('logText').value)" />
+ <input type="button" value="error" onclick="log.error(document.getElementById('logText').value)" />
+ <input type="button" value="fatal" onclick="log.fatal(document.getElementById('logText').value)" />
+ <br />
+ <input type="button" value="assert 1 equals 1" onclick="log.assert(1 === 1)" />
+ <input type="button" value="assert 1 equals 2" onclick="log.assert(1 === 2)" />
+ <br />
+ Generate <input type="text" size="5" id="numberOfLogEntries" value="50" /> random log entries
+ <input type="button" value="go" onclick="generateRandom()" />
+ <br />
+ <input type="button" value="Log exception" onclick="generateError()" />
+ <input type="button" value="Log example object" onclick="generateObjectExpansion()" />
+ <br />
+ <input type="checkbox" id="enabled" onclick="log4javascript.setEnabled(this.checked)" checked="checked" /> <label for="enabled">logging enabled</label>
+ <br />
+ <input type="text" id="groupName" value="Group name" />
+ <input type="button" value="group" onclick="log.group(document.getElementById('groupName').value)" />
+ <input type="button" value="end group" onclick="log.groupEnd()" />
+ <br />
+ <input type="text" id="timerName" value="Example timer name" />
+ <input type="button" value="start timer" onclick="log.time(document.getElementById('timerName').value)" />
+ <input type="button" value="end timer" onclick="log.timeEnd(document.getElementById('timerName').value)" />
+ </div>
+ </div>
+ <br class="clear" />
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/demos/blank.html b/planetstack/core/static/log4javascript-1.4.6/demos/blank.html
new file mode 100644
index 0000000..7e8ac56
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/demos/blank.html
@@ -0,0 +1,4 @@
+<html>
+<head><title>Blank page</title></head>
+<body></body>
+</html>
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/demos/index.html b/planetstack/core/static/log4javascript-1.4.6/demos/index.html
new file mode 100644
index 0000000..00e84ac
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/demos/index.html
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript demos</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ </head>
+ <body>
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="/docs/index.html">log4javascript</a></h1>
+ </div>
+ <div id="content">
+ <div id="nav">
+ <a class="navitem" href="../index.html">home</a>
+ | <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <a class="navitem" href="../docs/index.html">docs</a>
+ | <a class="navitem" href="../docs/quickstart.html">quick start</a>
+ | <span class="navitem">demos</span>
+ | <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
+ | <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
+ </div>
+ <h1>log4javascript demos</h1>
+ <ul>
+ <li><a href="basic.html">Basic demo</a></li>
+ <li><a href="inpage.html">In-page console demo</a></li>
+ <li><a href="lite.html">log4javascript Lite demo</a></li>
+ </ul>
+ </div>
+ <br class="clear" />
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/demos/inpage.html b/planetstack/core/static/log4javascript-1.4.6/demos/inpage.html
new file mode 100644
index 0000000..8e47d72
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/demos/inpage.html
@@ -0,0 +1,174 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript in-page console demo</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ <script type="text/javascript" src="../js/log4javascript_uncompressed.js"></script>
+ <script type="text/javascript">
+ // <![CDATA[
+ var log = log4javascript.getLogger("main");
+ var appender = new log4javascript.InPageAppender();
+ log.addAppender(appender);
+ log.debug("This is a debugging message from the log4javascript in-page page");
+
+ var words = ["Watford", "eased", "their", "relegation", "fears", "with", "a", "win",
+ "against", "a", "Charlton", "side", "who", "slipped", "further", "towards", "the",
+ "drop", "Don", "Cowie", "drilled", "in", "a", "shot", "to", "put", "the", "Hornets",
+ "ahead", "before", "Tresor", "Kandol", "ended", "a", "powerful", "run", "by",
+ "rounding", "keeper", "Scott", "Loach", "and", "slotting", "in", "to", "level"
+ ];
+
+ var loaded = false;
+
+ function generateRandom() {
+ var numberOfEntries = parseInt(document.getElementById("numberOfLogEntries").value);
+ for (var i = 0; i < numberOfEntries; i++) {
+ var numberOfWords = 1 + Math.floor(10 * Math.random());
+ var entryWords = [];
+ for (var j = 0; j < numberOfWords; j++) {
+ entryWords.push(words[Math.floor(Math.random() * words.length)]);
+ }
+ var entryMessage = entryWords.join(" ");
+ var levelNum = Math.floor(Math.random() * 6);
+ switch (levelNum) {
+ case 0:
+ log.trace(entryMessage);
+ break;
+ case 1:
+ log.debug(entryMessage);
+ break;
+ case 2:
+ log.info(entryMessage);
+ break;
+ case 3:
+ log.warn(entryMessage);
+ break;
+ case 4:
+ log.error(entryMessage);
+ break;
+ case 5:
+ log.fatal(entryMessage);
+ break;
+ }
+ }
+ }
+
+ var consoleVisible = true;
+
+ function toggleConsole(button) {
+ if (consoleVisible) {
+ appender.hide();
+ button.value = "Show console";
+ consoleVisible = false;
+ } else {
+ appender.show();
+ button.value = "Hide console";
+ consoleVisible = true;
+ }
+ }
+
+ function generateObjectExpansion() {
+ var debugObj = {
+ a: {
+ b: "stuff",
+ c: 3,
+ d: {
+ e: ["a", "b", "c"]
+ }
+ },
+ f: "Things",
+ g: 5
+ };
+ log.debug(debugObj);
+ }
+
+ function generateError() {
+ try {
+ throw new Error("Made up error");
+ } catch (ex) {
+ log.error("Logging an error!", ex);
+ }
+ }
+ // ]]>
+ </script>
+ </head>
+ <body>
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="/docs/index.html">log4javascript</a></h1>
+ </div>
+ <div id="content">
+ <div id="nav">
+ <a class="navitem" href="../index.html">home</a>
+ | <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <a class="navitem" href="../docs/index.html">docs</a>
+ | <a class="navitem" href="../docs/quickstart.html">quick start</a>
+ | <a class="navitem" href="index.html">demos</a>
+ | <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
+ | <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
+ </div>
+ <h1>log4javascript in-page console demo</h1>
+ <p>
+ This demo demonstrates an in-page logger. The example uses the default behaviour, which
+ is to place the log console in a fixed area at the bottom of the page. However, the
+ console may be placed inside any element in the page. To do this, you may specify the ID
+ of the element (even if the page has not yet loaded) or a reference to the element itself.
+ </p>
+ <p>
+ Enter a log message below and click on one of the buttons to log
+ your message at your desired level. You can then filter by
+ log level, toggle word-wrapping and perform text and regular
+ expression searches on the log entries.
+ </p>
+ <div class="example">
+ <input type="button" value="Hide console" onclick="toggleConsole(this)" />
+ <br />
+ <input type="text" id="logText" value="Put log message here" />
+ <input type="button" value="debug" onclick="log.debug(document.getElementById('logText').value)" />
+ <input type="button" value="info" onclick="log.info(document.getElementById('logText').value)" />
+ <input type="button" value="warn" onclick="log.warn(document.getElementById('logText').value)" />
+ <input type="button" value="error" onclick="log.error(document.getElementById('logText').value)" />
+ <input type="button" value="fatal" onclick="log.fatal(document.getElementById('logText').value)" />
+ <br />
+ <input type="button" value="assert 1 equals 1" onclick="log.assert(1 === 1)" />
+ <input type="button" value="assert 1 equals 2" onclick="log.assert(1 === 2)" />
+ <br />
+ Generate <input type="text" size="5" id="numberOfLogEntries" value="50" /> random log entries
+ <input type="button" value="go" onclick="generateRandom()" />
+ <br />
+ <input type="button" value="Log exception" onclick="generateError()" />
+ <input type="button" value="Log example object" onclick="generateObjectExpansion()" />
+ <br />
+ <input type="checkbox" id="enabled" onclick="log4javascript.setEnabled(this.checked)" checked="checked" /> <label for="enabled">logging enabled</label>
+ <br />
+ <input type="text" id="groupName" value="Group name" />
+ <input type="button" value="group" onclick="log.group(document.getElementById('groupName').value)" />
+ <input type="button" value="end group" onclick="log.groupEnd()" />
+ <br />
+ <input type="text" id="timerName" value="Example timer name" />
+ <input type="button" value="start timer" onclick="log.time(document.getElementById('timerName').value)" />
+ <input type="button" value="end timer" onclick="log.timeEnd(document.getElementById('timerName').value)" />
+ </div>
+ </div>
+ <br class="clear" />
+ <div id="log"></div>
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/demos/lite.html b/planetstack/core/static/log4javascript-1.4.6/demos/lite.html
new file mode 100644
index 0000000..a1d2dd3
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/demos/lite.html
@@ -0,0 +1,148 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript lite demo</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ <script type="text/javascript" src="../js/log4javascript_lite.js"></script>
+ <script type="text/javascript">
+ // <![CDATA[
+ var log = log4javascript.getDefaultLogger();
+ log.debug("This is debugging message from the log4javascript lite demo page");
+
+ var words = ["Boothroyd", "who", "took", "over", "two", "years",
+ "ago", "and", "continues", "to", "maintain", "that", "the",
+ "club", "are", "building", "for", "the", "future", "made",
+ "six", "changes", "and", "gave", "a", "first", "Premiership",
+ "start", "to", "on-loan", "Brazilian", "midfielder",
+ "Douglas", "Rinaldi", "Darius", "Henderson", "and", "Steve",
+ "Kabba", "were", "two", "of", "the", "players", "restored",
+ "to", "the", "home", "side", "and", "were", "responsible",
+ "for", "giving", "Chelsea", "an", "uncomfortable", "start",
+ "which", "set", "the", "pattern", "for", "the", "match"
+ ];
+
+ var loaded = false;
+
+ function generateRandom() {
+ var numberOfEntries = parseInt(document.getElementById("numberOfLogEntries").value);
+ for (var i = 0; i < numberOfEntries; i++) {
+ var numberOfWords = 1 + Math.floor(10 * Math.random());
+ var entryWords = [];
+ for (var j = 0; j < numberOfWords; j++) {
+ entryWords.push(words[Math.floor(Math.random() * words.length)]);
+ }
+ var entryMessage = entryWords.join(" ");
+ var levelNum = Math.floor(Math.random() * 6);
+ switch (levelNum) {
+ case 0:
+ log.trace(entryMessage);
+ break;
+ case 1:
+ log.debug(entryMessage);
+ break;
+ case 2:
+ log.info(entryMessage);
+ break;
+ case 3:
+ log.warn(entryMessage);
+ break;
+ case 4:
+ log.error(entryMessage);
+ break;
+ case 5:
+ log.fatal(entryMessage);
+ break;
+ }
+ }
+ }
+
+ function generateObjectExpansion() {
+ var debugObj = {
+ a: {
+ b: "stuff",
+ c: 3,
+ d: {
+ e: ["a", "b", "c"]
+ }
+ },
+ f: "Things",
+ g: 5
+ };
+ log.debug(debugObj);
+ }
+
+ function generateError() {
+ try {
+ throw new Error("Made up error");
+ } catch (ex) {
+ log.error("Logging an error!", ex);
+ }
+ }
+ // ]]>
+ </script>
+ </head>
+ <body onload="loaded = true; document.getElementById('enabled').checked = true;">
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="/docs/index.html">log4javascript</a></h1>
+ </div>
+ <div id="content">
+ <div id="nav">
+ <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <a class="navitem" href="../docs/index.html">docs</a>
+ | <a class="navitem" href="../docs/quickstart.html">quick start</a>
+ | <a class="navitem" href="../docs/manual.html">manual</a>
+ | <a class="navitem" href="index.html">demos</a>
+ | <a class="navitem" href="http://www.timdown.co.uk/log4javascript" target="_blank">website</a>
+ </div>
+ <h1>log4javascript lite demo</h1>
+ <p>
+ <em><strong>NB.</strong> Since the demo below uses pop-up windows, you will
+ need to disable any pop-up blockers you may have for it to work.</em>
+ </p>
+ <p>
+ This demo demonstrates the lite edition of log4javascript.
+ </p>
+ <p>
+ Enter a log message below and click on one of the buttons to log
+ your message at your desired level.
+ </p>
+ <div class="example">
+ <input type="text" id="logText" value="Put log message here" />
+ <input type="button" value="trace" onclick="log.trace(document.getElementById('logText').value)" />
+ <input type="button" value="debug" onclick="log.debug(document.getElementById('logText').value)" />
+ <input type="button" value="info" onclick="log.info(document.getElementById('logText').value)" />
+ <input type="button" value="warn" onclick="log.warn(document.getElementById('logText').value)" />
+ <input type="button" value="error" onclick="log.error(document.getElementById('logText').value)" />
+ <input type="button" value="fatal" onclick="log.fatal(document.getElementById('logText').value)" />
+ <br />
+ Generate <input type="text" size="5" id="numberOfLogEntries" value="50" /> random log entries
+ <input type="button" value="go" onclick="generateRandom()" />
+ <br />
+ <input type="button" value="Log exception" onclick="generateError()" />
+ <input type="button" value="Log example object" onclick="generateObjectExpansion()" />
+ <br />
+ <input type="checkbox" id="enabled" onclick="log4javascript.setEnabled(this.checked)" checked="checked" /> <label for="enabled">logging enabled</label>
+ <br />
+ </div>
+ </div>
+ <br class="clear" />
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/docs/backwardsincompatibilities.html b/planetstack/core/static/log4javascript-1.4.6/docs/backwardsincompatibilities.html
new file mode 100644
index 0000000..f212fd4
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/docs/backwardsincompatibilities.html
@@ -0,0 +1,90 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript - backwards incompatibilities in version 1.4</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ </head>
+ <body>
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="/index.html">log4javascript</a></h1>
+ </div>
+ <div id="content">
+ <div id="nav">
+ <a class="navitem" href="../index.html">home</a>
+ | <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <a class="navitem" href="index.html">docs</a>
+ | <a class="navitem" href="quickstart.html">quick start</a>
+ | <a class="navitem" href="../demos/index.html">demos</a>
+ | <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
+ | <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
+ </div>
+ <h1>Backwards incompatibilities in log4javascript 1.4</h1>
+ <ul>
+ <li>
+ Loggers are now hierarchical. This means logger names containing full stops have
+ special meaning. For example, from version 1.4 the logger named <code>myapp.ajax</code>
+ by default inherits all the appenders of the logger named <code>myapp</code>, while
+ prior to version 1.4 these loggers would be entirely independent;
+ </li>
+ <li>
+ The signature of the <code>log</code> method of <code>Logger</code> has changed.
+ However, you should not use this method directly; instead, use one of the level-specific
+ wrapper functions (<code>debug</code>, <code>info</code>, <code>error</code> etc.);
+ </li>
+ <li>
+ Appenders can no longer be configured via constructor parameters. Instead you must use
+ setter methods;
+ </li>
+ <li>
+ The format of requests sent via <code><a href="manual.html#ajaxappender">AjaxAppender</a></code>
+ has changed when using <code><a href="manual.html#jsonlayout">JsonLayout</a></code> or
+ <code><a href="manual.html#xmllayout">XmlLayout</a></code>: the formatted log messages are sent
+ as a name-value pair (with default name <code>data</code>) rather than a single unencoded string;
+ </li>
+ <li>
+ All timestamps returned by <code><a href="manual.html#xmllayout">XmlLayout</a></code>,
+ <code><a href="manual.html#jsonlayout">JsonLayout</a></code> and
+ <code><a href="manual.html#httppostdatlayout">HttpPostDataLayout</a></code> are
+ now measured in milliseconds since January 1st 1970 (previously they were returned
+ as seconds since January 1st 1970);
+ </li>
+ <li>
+ The constructors for <a href="manual.html#jsonlayout">JsonLayout</a> and
+ <a href="manual.html#httppostdatlayout">HttpPostDataLayout</a> have changed; the property names
+ used for the properties of the logging event are now set via <code>setKeys</code> rather than
+ in the constructor;
+ </li>
+ <li>
+ <code>setReadable</code> has been removed from <a href="manual.html#jsonlayout">JsonLayout</a>.
+ The <code>readable</code> property should now be set via the constructor;
+ </li>
+ <li>
+ <code>addErrorListener</code> and <code>removeErrorListener</code> removed from
+ the <code>log4javascript</code> object and replaced with the more generic
+ <code><a href="manual.html#log4javascriptaddeventlistener">addEventListener</a></code>
+ and <code>removeEventListener</code> methods. The listener functions are passed
+ different parameters.
+ </li>
+ </ul>
+ </div>
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/docs/distribution.html b/planetstack/core/static/log4javascript-1.4.6/docs/distribution.html
new file mode 100644
index 0000000..8f6cdfd
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/docs/distribution.html
@@ -0,0 +1,87 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" >
+ <head>
+ <title>log4javascript 1.4 distribution</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ </head>
+ <body>
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="../index.html">log4javascript</a></h1>
+ </div>
+ <div id="content">
+ <div id="nav">
+ <a class="navitem" href="../index.html">home</a>
+ | <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <a class="navitem" href="index.html">docs</a>
+ | <a class="navitem" href="quickstart.html">quick start</a>
+ | <a class="navitem" href="../demos/index.html">demos</a>
+ | <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
+ | <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
+ </div>
+ <h1>log4javascript 1.4 distribution</h1>
+ <p>
+ From version 1.4 the distribution includes three different editions of log4javascript:
+ </p>
+ <ul>
+ <li>
+ <div><strong>Standard Edition</strong></div>
+ <p>
+ Equivalent to log4javascript from earlier versions and suitable for general JavaScript
+ debugging and logging (including via Ajax).
+ </p>
+ </li>
+ <li>
+ <div><strong>Production Edition</strong></div>
+ <p>
+ Designed for use in production systems where the focus is solely on logging JavaScript
+ messages back to the server. Consequently this edition omits all appenders except
+ <a href="manual.html#ajaxappender">AjaxAppender</a>, resulting in a drastically reduced
+ file size compared to the standard edition.
+ </p>
+ </li>
+ <li>
+ <div><strong>Lite Edition</strong></div>
+ <p>
+ A lightweight version of log4javascript for quick page debugging. Included is a single logger
+ using a basic pop-up window appender with a fixed layout.
+ </p>
+ </li>
+ </ul>
+ <p>
+ Each edition comes in compressed and uncompressed versions. The compressed version is
+ functionally identical to the uncompressed version but has had whitespace and comments removed
+ and therefore downloads more quickly.
+ </p>
+ <p>
+ Each edition also comes with a stub version. This contains dummy implementations of all
+ log4javacript objects and methods in the public API, making it ideal for production environments
+ where logging is not required. Replacing the main log4javascript script file with this file
+ means that log calls may be left in production code. Compressed and uncompressed versions of
+ each stub are included.
+ </p>
+ <p>
+ Finally, each edition comes with a suite of unit tests, available as HTML pages in the
+ <code>test/</code> directory. Note that these tests crash old versions (pre-3.1) of Safari. Sorry.
+ </p>
+ </div>
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/docs/index.html b/planetstack/core/static/log4javascript-1.4.6/docs/index.html
new file mode 100644
index 0000000..d3b3ac2
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/docs/index.html
@@ -0,0 +1,190 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript documentation</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ </head>
+ <body>
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="../index.html">log4javascript</a></h1>
+ <div id="nav">
+ <a class="navitem" href="../index.html">home</a>
+ | <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <span class="navitem">docs</span>
+ | <a class="navitem" href="quickstart.html">quick start</a>
+ | <a class="navitem" href="../demos/index.html">demos</a>
+ | <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
+ | <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
+ </div>
+ </div>
+ <div id="content">
+ <h1>log4javascript 1.4 documentation</h1>
+ <div id="links">
+ <h2>Links</h2>
+ <ul>
+ <li><a href="quickstart.html">Quick start</a></li>
+ <li><a href="distribution.html">Details of the log4javascript distribution</a></li>
+ <li><a href="backwardsincompatibilities.html">Backwards incompatibilities</a></li>
+ <li><a href="whatsnew.html">What's new in this release</a></li>
+ <li><a href="../changelog.txt">Change log</a></li>
+ <li><a href="manual.html">log4javascript manual</a></li>
+ <li><a href="lite.html">log4javascript Lite</a></li>
+ <li><a href="manual_lite.html">log4javascript Lite manual</a></li>
+ <li><a href="../demos/basic.html">Basic demo</a></li>
+ <li><a href="../demos/ajax.html">Ajax demo</a></li>
+ </ul>
+ </div>
+ <div id="contents">
+ <h2>Contents</h2>
+ <ul>
+ <li><a href="#whatitis">What it is</a></li>
+ <li><a href="#whofor">Who it's for</a></li>
+ <li><a href="#previousversions">Note on previous versions</a></li>
+ <li><a href="#features">Features</a></li>
+ <li><a href="#browsers">Browser support</a></li>
+ <li><a href="#licence">Licence</a></li>
+ <li><a href="#furtherreading">Further reading</a></li>
+ </ul>
+ </div>
+ <div id="whatitis">
+ <h2>What it is</h2>
+ <p>
+ log4javascript is a JavaScript logging framework based on the Java
+ logging framework <a href="http://logging.apache.org/log4j/docs/index.html"
+ title="log4j home page (opens in new window)" target="_blank">log4j</a>.
+ </p>
+ <p>
+ log4javascript implements a subset of log4j (primarily loggers, appenders
+ and layouts) and has a few convenience methods of its own for
+ quick JavaScript development. It can be used to debug JavaScript
+ applications of all sizes, including Ajax applications.
+ </p>
+ <p>
+ If you just want to start using it, try the <a href="quickstart.html">quickstart
+ tutorial</a>.
+ </p>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="whofor">
+ <h2>Who it's for</h2>
+ <p>
+ log4javascript is aimed at JavaScript developers.
+ </p>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="previousversions">
+ <h2>Note on previous versions</h2>
+ <p>
+ Documentation for previous versions of log4javascript are not available here.
+ However, documentation is bundled with every previous version, all of which
+ are <a href="http://sourceforge.net/projects/log4javascript"
+ target="_blank" title="Download (opens in new window)">available to download</a>.
+ </p>
+ </div>
+ <div id="features">
+ <h2>Features</h2>
+ <ul>
+ <li>can be initialized with one JavaScript include and one line of code;</li>
+ <li>
+ by default logs to a pop-up console window with powerful search (including
+ regular expression) and filtering features. This console window can also
+ be used inline as an iframe in the main page;
+ </li>
+ <li>
+ can send log messages to the server via HTTP (Ajax, if you like);
+ </li>
+ <li>
+ highly configurable using familiar methods from log4j, including the
+ powerful <code><a href="manual.html#patternlayout">PatternLayout</a></code>
+ which gives the developer complete control over the format of the log messages.
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="browsers">
+ <h2>Browser support</h2>
+ <h3>Fully supported browsers:</h3>
+ <ul>
+ <li>All versions Firefox back to 0.6</li>
+ <li>Other Mozilla-based browsers, as far back as Netscape 7</li>
+ <li>Internet Explorer 5 and higher for Windows</li>
+ <li>Safari 1.3 and higher (untested on earlier versions)</li>
+ <li>Opera 8.01 and higher (pre- version 9 browsers have a rendering
+ bug related to scrolling that affects searching in PopUpAppender and InPageAppender)</li>
+ <li>Konqueror 3.4.3 and higher (untested on earlier versions)</li>
+ <li>Google Chrome</li>
+ </ul>
+ <h3>Partially supported browsers:</h3>
+ <ul>
+ <li>Older Mozilla-based browsers, e.g. Netscape 6.2 (generally OK except for
+ display problems searching and filtering PopUpAppender and InPageAppender)</li>
+ <li>Opera 7.0 - 8.0 (InPageAppender not supported until version 7.5, plus some display
+ problems searching PopUpAppender and InPageAppender. AjaxAppender not supported at all)</li>
+ </ul>
+ <h3>Unsupported browsers:</h3>
+ <ul>
+ <li>
+ Internet Explorer for Mac. There are no plans to make log4javascript work
+ in this browser.
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="licence">
+ <h2>Licence</h2>
+ <p>
+ log4javascript is licenced under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>. The Apache website has <a href="http://www.apache.org/foundation/licence-FAQ.html#WhatDoesItMEAN"
+ title="View licence (opens in new window)" target="_blank">more details</a>.
+ </p>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="furtherreading">
+ <h2>Further reading</h2>
+ <p>
+ In order to gain an understanding of the ideas behind log4j and therefore log4javascript,
+ I highly recommend reading the <a href="http://logging.apache.org/log4j/docs/manual.html">short
+ introduction to log4j</a> from the log4j website. log4javascript borrows heavily from
+ log4j but does not carry over all its concepts - for example, Filters and Renderers are not
+ implemented.
+ </p>
+ <p>
+ <a href="manual.html">The full log4javascript manual</a>
+ </p>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ </div>
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/docs/lite.html b/planetstack/core/static/log4javascript-1.4.6/docs/lite.html
new file mode 100644
index 0000000..11b4684
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/docs/lite.html
@@ -0,0 +1,182 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" >
+ <head>
+ <title>log4javascript 1.4 Lite</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ <style type="text/css">
+ .visibleifabletocopy {
+ display: none;
+ }
+
+ body.abletocopy .visibleifabletocopy {
+ display: block;
+ }
+ </style>
+ <script type="text/javascript">
+ function copyCode() {
+ if (window.clipboardData && clipboardData.setData) {
+ clipboardData.setData("Text", code);
+ alert("Code copied to clipboard.")
+ }
+ }
+
+ var code;
+
+ window.onload = function() {
+ var textArea = document.getElementById("codetextarea");
+ code = textArea.value;
+ textArea.select();
+ if (window.clipboardData && clipboardData.setData) {
+ document.body.className = "abletocopy";
+ }
+ };
+ </script>
+ <link rel="stylesheet" type="text/css" media="screen,print" href="lite.css" title="Default" />
+ </head>
+ <body>
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="../index.html">log4javascript</a></h1>
+ </div>
+ <div id="content">
+ <div id="nav">
+ <a class="navitem" href="../index.html">home</a>
+ | <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <a class="navitem" href="index.html">docs</a>
+ | <a class="navitem" href="quickstart.html">quick start</a>
+ | <a class="navitem" href="../demos/index.html">demos</a>
+ | <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
+ | <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
+ </div>
+ <h1>log4javascript 1.4 Lite</h1>
+ <h2>Contents</h2>
+ <ul>
+ <li><a href="#intro">Introduction</a></li>
+ <li><a href="#code">Code</a></li>
+ <li><a href="#api">API</a></li>
+ </ul>
+ <div id="intro">
+ <h2>Introduction</h2>
+ <p>
+ log4javascript Lite is designed to be a basic, lightweight, cross-browser logging tool. It
+ provides functions to log messages of different severity to a pop-up window using the exactly
+ the same syntax as log4javascript.
+ </p>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="code">
+ <h2>Code</h2>
+ <p>
+ You can copy the code for log4javascript Lite below:
+ </p>
+ <textarea id="codetextarea" cols="80" rows="10">
+if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}
+this.length--;return firstItem;}};}
+var log4javascript;(function(){var newLine="\r\n";function Log4JavaScript(){}
+log4javascript=new Log4JavaScript();log4javascript.version="1.4.6";log4javascript.edition="log4javascript_lite";function getExceptionMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}else{return String(ex);}}
+function getUrlFileName(url){var lastSlashIndex=Math.max(url.lastIndexOf("/"),url.lastIndexOf("\\"));return url.substr(lastSlashIndex+1);}
+function getExceptionStringRep(ex){if(ex){var exStr="Exception: "+getExceptionMessage(ex);try{if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber;}
+if(ex.fileName){exStr+=" in file "+getUrlFileName(ex.fileName);}}catch(localEx){}
+if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack;}
+return exStr;}
+return null;}
+function isError(err){return(err instanceof Error);}
+function bool(obj){return Boolean(obj);}
+var enabled=(typeof log4javascript_disabled!="undefined")&&log4javascript_disabled?false:true;log4javascript.setEnabled=function(enable){enabled=bool(enable);};log4javascript.isEnabled=function(){return enabled;};var showStackTraces=false;log4javascript.setShowStackTraces=function(show){showStackTraces=bool(show);};var Level=function(level,name){this.level=level;this.name=name;};Level.prototype={toString:function(){return this.name;},equals:function(level){return this.level==level.level;},isGreaterOrEqual:function(level){return this.level>=level.level;}};Level.ALL=new Level(Number.MIN_VALUE,"ALL");Level.TRACE=new Level(10000,"TRACE");Level.DEBUG=new Level(20000,"DEBUG");Level.INFO=new Level(30000,"INFO");Level.WARN=new Level(40000,"WARN");Level.ERROR=new Level(50000,"ERROR");Level.FATAL=new Level(60000,"FATAL");Level.OFF=new Level(Number.MAX_VALUE,"OFF");log4javascript.Level=Level;function Appender(){var getConsoleHtmlLines=function(){return['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">','<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">','<head>','<title>log4javascript</title>','<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />','<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->','<meta http-equiv="X-UA-Compatible" content="IE=7" />','<script type="text/javascript">','//<![CDATA[','var loggingEnabled=true;var messagesBeforeDocLoaded=[];function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}','function setLoggingEnabled(enable){loggingEnabled=enable;}','function scrollToLatestEntry(){var l=getLogContainer();if(typeof l.scrollTop!="undefined"){var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}','function log(logLevel,formattedMessage){if(loggingEnabled){if(loaded){doLog(logLevel,formattedMessage);}else{messagesBeforeDocLoaded.push([logLevel,formattedMessage]);}}}','function doLog(logLevel,formattedMessage){var logEntry=document.createElement("div");logEntry.appendChild(document.createTextNode(formattedMessage));logEntry.className="logentry "+logLevel.name;getLogContainer().appendChild(logEntry);scrollToLatestEntry();}','function mainPageReloaded(){var separator=document.createElement("div");separator.className="separator";separator.innerHTML=" ";getLogContainer().appendChild(separator);}','var loaded=false;var logLevels=["DEBUG","INFO","WARN","ERROR","FATAL"];window.onload=function(){setLogContainerHeight();toggleLoggingEnabled();for(var i=0;i<messagesBeforeDocLoaded.length;i++){doLog(messagesBeforeDocLoaded[i][0],messagesBeforeDocLoaded[i][1]);}','messagesBeforeDocLoaded=[];loaded=true;setTimeout(setLogContainerHeight,20);};function getLogContainer(){return $("log");}','function clearLog(){getLogContainer().innerHTML="";}','function $(id){return document.getElementById(id);}','function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}','return 0;}','function getChromeHeight(){return $("toolbar").offsetHeight;}','function setLogContainerHeight(){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";getLogContainer().style.height=""+','Math.max(0,windowHeight-getChromeHeight())+"px";}','window.onresize=function(){setLogContainerHeight();};','//]]>','</scr' + 'ipt>','<style type="text/css">','body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div#toolbar input.button{padding:0 5px;font-size:100%}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both}*.logentry{overflow:visible;white-space:pre}*.TRACE{color:#666666}*.DEBUG{color:green}*.INFO{color:#000099}*.WARN{color:#999900}*.ERROR{color:red}*.FATAL{color:#660066}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}','</style>','</head>','<body id="body">','<div id="toolbar">','Options:','<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" class="stateful" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Enable logging</label>','<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="stateful button" title="Clear all log messages" />','<input type="button" id="closeButton" value="Close" onclick="window.close()" class="stateful button" title="Close the window" />','</div>','<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>','</body>','</html>'];};var popUp=null;var popUpsBlocked=false;var popUpClosed=false;var popUpLoaded=false;var complainAboutPopUpBlocking=true;var initialized=false;var isSupported=true;var width=600;var height=400;var focusPopUp=false;var queuedLoggingEvents=new Array();function isLoaded(win){try{return bool(win.loaded);}catch(ex){return false;}}
+function finalInit(){popUpLoaded=true;appendQueuedLoggingEvents();}
+function writeHtml(doc){var lines=getConsoleHtmlLines();doc.open();for(var i=0,len=lines.length;i<len;i++){doc.writeln(lines[i]);}
+doc.close();}
+function pollConsoleWindow(){function pollConsoleWindowLoaded(){if(popUpLoaded){clearInterval(poll);}else if(bool(popUp)&&isLoaded(popUp)){clearInterval(poll);finalInit();}}
+var poll=setInterval(pollConsoleWindowLoaded,100);}
+function init(){var windowProperties="width="+width+",height="+height+",status,resizable";var windowName="log4javascriptLitePopUp"+location.host.replace(/[^a-z0-9]/gi,"_");popUp=window.open("",windowName,windowProperties);popUpClosed=false;if(popUp){if(isLoaded(popUp)){popUp.mainPageReloaded();finalInit();}else{writeHtml(popUp.document);if(isLoaded(popUp)){finalInit();}else{pollConsoleWindow();}}}else{isSupported=false;if(complainAboutPopUpBlocking){alert("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");}}
+initialized=true;}
+function safeToAppend(){if(!popUpsBlocked&&!popUpClosed){if(popUp.closed){popUpClosed=true;return false;}
+if(!popUpLoaded&&popUp.loaded){popUpLoaded=true;}}
+return!popUpsBlocked&&popUpLoaded&&!popUpClosed;}
+function padWithZeroes(num,len){var str=""+num;while(str.length<len){str="0"+str;}
+return str;}
+function padWithSpaces(str,len){while(str.length<len){str+=" ";}
+return str;}
+this.append=function(loggingEvent){if(!initialized){init();}
+queuedLoggingEvents.push(loggingEvent);if(safeToAppend()){appendQueuedLoggingEvents();}};function appendQueuedLoggingEvents(){if(safeToAppend()){while(queuedLoggingEvents.length>0){var currentLoggingEvent=queuedLoggingEvents.shift();var date=currentLoggingEvent.timeStamp;var formattedDate=padWithZeroes(date.getHours(),2)+":"+
+padWithZeroes(date.getMinutes(),2)+":"+padWithZeroes(date.getSeconds(),2);var formattedMessage=formattedDate+" "+padWithSpaces(currentLoggingEvent.level.name,5)+" - "+currentLoggingEvent.getCombinedMessages();var throwableStringRep=currentLoggingEvent.getThrowableStrRep();if(throwableStringRep){formattedMessage+=newLine+throwableStringRep;}
+popUp.log(currentLoggingEvent.level,formattedMessage);}
+if(focusPopUp){popUp.focus();}}}}
+log4javascript.Appender=Appender;function Logger(){var appender=new Appender();var loggerLevel=Level.ALL;this.log=function(level,params){if(enabled&&level.isGreaterOrEqual(this.getLevel())){var exception;var finalParamIndex=params.length-1;var lastParam=params[params.length-1];if(params.length>1&&isError(lastParam)){exception=lastParam;finalParamIndex--;}
+var messages=[];for(var i=0;i<=finalParamIndex;i++){messages[i]=params[i];}
+var loggingEvent=new LoggingEvent(this,new Date(),level,messages,exception);appender.append(loggingEvent);}};this.setLevel=function(level){loggerLevel=level;};this.getLevel=function(){return loggerLevel;};}
+Logger.prototype={trace:function(){this.log(Level.TRACE,arguments);},debug:function(){this.log(Level.DEBUG,arguments);},info:function(){this.log(Level.INFO,arguments);},warn:function(){this.log(Level.WARN,arguments);},error:function(){this.log(Level.ERROR,arguments);},fatal:function(){this.log(Level.FATAL,arguments);},isEnabledFor:function(level){return level.isGreaterOrEqual(this.getLevel());},isTraceEnabled:function(){return this.isEnabledFor(Level.TRACE);},isDebugEnabled:function(){return this.isEnabledFor(Level.DEBUG);},isInfoEnabled:function(){return this.isEnabledFor(Level.INFO);},isWarnEnabled:function(){return this.isEnabledFor(Level.WARN);},isErrorEnabled:function(){return this.isEnabledFor(Level.ERROR);},isFatalEnabled:function(){return this.isEnabledFor(Level.FATAL);}};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=new Logger();}
+return defaultLogger;};log4javascript.getLogger=log4javascript.getDefaultLogger;var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=new Logger();nullLogger.setLevel(Level.OFF);}
+return nullLogger;};var LoggingEvent=function(logger,timeStamp,level,messages,exception){this.logger=logger;this.timeStamp=timeStamp;this.level=level;this.messages=messages;this.exception=exception;};LoggingEvent.prototype={getThrowableStrRep:function(){return this.exception?getExceptionStringRep(this.exception):"";},getCombinedMessages:function(){return(this.messages.length===1)?this.messages[0]:this.messages.join(newLine);}};log4javascript.LoggingEvent=LoggingEvent;window.log4javascript=log4javascript;})();
+</textarea>
+ <p class="visibleifabletocopy">
+ Press this button to copy the code to the clipboard:
+ <input type="button" value="Copy" onclick="copyCode()" />
+ </p>
+ <p>
+ You can either paste the above code inside a script tag:
+ </p>
+ <pre class="code">
+<script type="text/javascript">
+ ... [Code here]...
+</script>
+</pre>
+ <p>
+ ... or include the <code>log4javascript_lite.js</code> included in the distribution:
+ </p>
+ <pre class="code">
+<script type="text/javascript" src="log4javascript_lite.js"></script>
+</pre>
+ <pre class="code">
+<script type="text/javascript">
+ var log = log4javascript.getDefaultLogger();
+</script>
+</pre>
+ <p>
+ Using log4javascript Lite is identical to using log4javascript with its default logger:
+ </p>
+ <pre class="code">
+<script type="text/javascript">
+ var log = log4javascript.getDefaultLogger();
+ log.debug("What's going on here then?");
+</script>
+</pre>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="api">
+ <h2>API</h2>
+ <p>
+ The functions available in log4javascript Lite make up a small subset of those provided
+ by log4javascript proper. Each function is <strong>named and called identically to the equivalent
+ function in log4javascript</strong>. Full details can be found in the
+ <a href="manual_lite.html">log4javascript Lite manual</a>.
+ </p>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ </div>
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/docs/manual.html b/planetstack/core/static/log4javascript-1.4.6/docs/manual.html
new file mode 100644
index 0000000..defac9c
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/docs/manual.html
@@ -0,0 +1,3198 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript 1.4 manual</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ </head>
+ <body>
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="index.html">log4javascript</a></h1>
+ </div>
+ <div id="content">
+ <div id="nav">
+ <a class="navitem" href="../index.html">home</a>
+ | <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <a class="navitem" href="index.html">docs</a>
+ | <a class="navitem" href="quickstart.html">quick start</a>
+ | <a class="navitem" href="../demos/index.html">demos</a>
+ | <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
+ | <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
+ </div>
+ <h1>log4javascript 1.4 manual</h1>
+ <h2>Contents</h2>
+ <ul>
+ <li><a href="#intro">Introduction</a></li>
+ <li><a href="#noteaboutlog4javascript">Note about the log4javascript object</a></li>
+ <li>
+ <a href="#loggersappenderslayoutslevels">Loggers, appenders, layouts and levels</a>
+ <ul>
+ <li><a href="#configuration">Configuring appenders</a></li>
+ <li><a href="#loggersappenderslayoutslevelsexample">Example</a></li>
+ </ul>
+ </li>
+ <li><a href="#log4javascript">log4javascript static properties/methods</a></li>
+ <li><a href="#levels">Levels</a></li>
+ <li><a href="#loggers">Loggers</a></li>
+ <li>
+ <a href="#appenders">Appenders</a>
+ <ul>
+ <li><a href="#appender">Appender</a></li>
+ <li><a href="#alertappender">AlertAppender</a></li>
+ <li><a href="#ajaxappender">AjaxAppender</a></li>
+ <li><a href="#popupappender">PopUpAppender</a></li>
+ <li><a href="#inpageappender">InPageAppender</a></li>
+ <li><a href="#browserconsoleappender">BrowserConsoleAppender</a></li>
+ </ul>
+ </li>
+ <li>
+ <a href="#layouts">Layouts</a>
+ <ul>
+ <li><a href="#layout">Layout</a></li>
+ <li><a href="#nulllayout">NullLayout</a></li>
+ <li><a href="#simplelayout">SimpleLayout</a></li>
+ <li><a href="#patternlayout">PatternLayout</a></li>
+ <li><a href="#xmllayout">XmlLayout</a></li>
+ <li><a href="#jsonlayout">JsonLayout</a></li>
+ <li><a href="#httppostdatalayout">HttpPostDataLayout</a></li>
+ </ul>
+ </li>
+ <li><a href="#enabling">Enabling / disabling log4javascript</a></li>
+ <li>
+ <a href="#errorhandling">log4javascript error handling</a>
+ <ul>
+ <li><a href="#loglog">LogLog</a></li>
+ </ul>
+ </li>
+ <li><a href="#differences">Differences between log4javascript and log4j</a></li>
+ </ul>
+ <div id="intro">
+ <h2>Introduction</h2>
+ <p>
+ Anyone who has done a reasonable amount of JavaScript development will be
+ familiar with <code>alert</code> as a means of debugging. For
+ a small script, it works fine. But for anything of greater complexity than,
+ say, a rollover script its shortcomings become apparent. The most obvious problem
+ is the endless clicking of 'OK'. Another problem is that for a page
+ heavily reliant on events generated from user actions, alerts
+ can actually alter the way the page behaves. One final problem is infinite loops:
+ without alerts, the browser will notice that the script has messed
+ up and will offer the user the chance to stop the script running. With an
+ alert inside an infinite loop, you're forced to kill the browser.
+ </p>
+ <p>
+ At the other end of the scale there is
+ <a href="http://www.mozilla.org/projects/venkman/" target="_blank">Venkman</a>,
+ a full-on JavaScript debugger for Mozilla-based browsers such as Firefox. Here
+ I have to confess that I simply have not put in the time to learn how to make
+ it work well for me and I suspect I am not alone.
+ </p>
+ <p>
+ Nowadays, easily the best option for day-to-day JavaScript development is the brilliant
+ <a href="http://www.getfirebug.com" title="Firebug home page (opens in new window)"
+ target="_blank">Firebug</a>, a Firefox plugin with built-in debugger, console, logging,
+ and profiler. It's a seriously impressive tool but by its very nature as a Firefox
+ plugin can only be used in one of the typical target browsers for mainstream web
+ development.
+ </p>
+ <p>
+ log4javascript was originally written as a cross-browser tool to ease the pain of JavaScript
+ debugging without the time investment required to use a debugger effectively. It requires
+ only a JavaScript include and one line of code to initialize with default settings.
+ Having for several years used log4j and its .NET port log4net, it was natural for me to
+ base it on log4j.
+ </p>
+ <p>
+ log4javascript is by no means the only JavaScript logging framework out there.
+ It is not even the only JavaScript implementation of log4j. It turns out the name
+ log4javascript is used by another JavaScript logging framework, and that the name log4js is
+ used by at least two other pieces of software; this version of log4javascript is unrelated
+ to any of those.
+ </p>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="noteaboutlog4javascript">
+ <h2>Note about the log4javascript object</h2>
+ <p>
+ All of log4javascript's instantiable classes are accessible via the log4javascript object, which
+ acts as a namespace. Therefore references to all class names must be preceded with "log4javascript.".
+ For example:
+ </p>
+ <p>
+ <code>var popUpAppender = new log4javascript.PopUpAppender();</code>
+ </p>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="loggersappenderslayoutslevels">
+ <h2>Loggers, Appenders, Layouts and Levels</h2>
+ <p>
+ A <em>logger</em> in log4javascript is the object on which log calls are
+ made. A logger may be assigned zero or more <em>appenders</em>.
+ An appender is an object that actually does the logging: for example,
+ a <code><a href="#popupappender">PopUpAppender</a></code> logs messages to
+ a pop-up console window while an <code><a href="#ajaxappender">AjaxAppender</a></code>
+ uses HTTP to send log messages back to the server. Each appender is assigned
+ a <em>layout</em>, which is responsible for formatting log messages that
+ are passed to an appender.
+ </p>
+ <p>
+ Every log message has a <em>level</em>. This is the severity of the message.
+ Available levels are <code>TRACE</code>, <code>DEBUG</code>, <code>INFO</code>,
+ <code>WARN</code>, <code>ERROR</code> and <code>FATAL</code> - these correspond to
+ the logging methods <code>trace</code>, <code>debug</code>, <code>info</code>,
+ <code>warn</code>, <code>error</code> and <code>fatal</code> of <code>Logger</code>.
+ Levels are ordered as follows: <code>TRACE</code> < <code>DEBUG</code> <
+ <code>INFO</code> < <code>WARN</code> < <code>ERROR</code> <
+ <code>FATAL</code>. This means the <code>FATAL</code> is the most severe and
+ <code>TRACE</code> the least. Also included are levels called <code>ALL</code>
+ and <code>OFF</code> intended to enable or disable all logging respectively.
+ </p>
+ <p>
+ Both loggers and appenders also have threshold levels (by default, <code>DEBUG</code>
+ for loggers and <code>ALL</code> for appenders).
+ Setting a level to either a logger or an appender disables log messages of severity
+ lower than that level. For instance, if a level of <code>INFO</code> is set on a
+ logger then only log messages of severity <code>INFO</code> or greater will be logged,
+ meaning <code>DEBUG</code> and <code>TRACE</code> messages will not be logged. If the
+ same logger had two appenders, one of level <code>DEBUG</code> and one of level
+ <code>WARN</code> then the first appender will still only log messages of
+ <code>INFO</code> or greater while the second appender will only log messages of level
+ <code>WARN</code> or greater.
+ </p>
+ <p>
+ This allows the developer fine control over which messages get logged where.
+ </p>
+ <div id="configuration">
+ <h3>Configuring appenders</h3>
+ <p>
+ From version 1.4, <strong>configuring appenders is only possible via configuration
+ methods</strong>. As the number of configuration options increases it becomes increasingly
+ undesirable to use constructor parameters, so support for it has been dropped.
+ </p>
+ </div>
+ <div id="loggersappenderslayoutslevelsexample">
+ <h3>Example</h3>
+ <p>
+ <strong>NB.</strong> The Ajax side of this example relies on having
+ server-side processing in place.
+ </p>
+ <p>
+ First, log4javascript is initialized, and a logger (actually the
+ anonymous logger) is assigned to a variable called <code>log</code>:
+ </p>
+ <pre class="code">
+<script type="text/javascript" src="log4javascript.js"></script>
+<script type="text/javascript">
+ //<![CDATA[
+ var log = log4javascript.getLogger();
+</pre>
+ <p>
+ <code>log</code> does not yet have any appenders, so a call to <code>log.debug()</code>
+ will do nothing as yet. For this example we will use a
+ <code><a href="#popupappender">PopUpAppender</a></code> for debugging purposes.
+ Since the lifespan of the messages displayed in the pop-up is only going to be the
+ same as that of the window, a <code><a href="#patternlayout">PatternLayout</a></code>
+ is used that displays the time of the message and not the date (note that this is
+ also true of PopUpAppender's default layout). The format of the string passed into
+ PatternLayout is explained <a href="#patternlayout">below</a>.
+ </p>
+ <pre class="code">
+ var popUpAppender = new log4javascript.PopUpAppender();
+ var popUpLayout = new log4javascript.PatternLayout("%d{HH:mm:ss} %-5p - %m%n");
+ popUpAppender.setLayout(popUpLayout);
+ log.addAppender(popUpAppender);
+</pre>
+ <p>
+ Suppose that we also want to send log messages to the server, but limited to
+ error messages only. To achieve this we use an
+ <code><a href="#ajaxappender">AjaxAppender</a></code>. Note that if no layout is
+ specified then for convenience a default layout is used; in the case of
+ AjaxAppender, that is <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>,
+ which formats log messages as a standard HTTP POST string from which a simple
+ server-side script (not provided with log4javascript) will be able to extract
+ posted parameters. This is fine for our purposes:
+ </p>
+ <pre class="code">
+ var ajaxAppender = new log4javascript.AjaxAppender("myloggingservlet.do");
+ ajaxAppender.setThreshold(log4javascript.Level.<code>ERROR</code>);
+ log.addAppender(ajaxAppender);
+</pre>
+ <p>
+ Finally, some test log messages and the closing script tag:
+ </p>
+ <pre class="code">
+ log.debug("Debugging message (appears in pop-up)");
+ log.error("Error message (appears in pop-up and in server log)");
+ //]]>
+</script>
+</pre>
+ <p>
+ The full script:
+ </p>
+ <pre class="code">
+<script type="text/javascript" src="log4javascript.js"></script>
+<script type="text/javascript">
+ //<![CDATA[
+ var log = log4javascript.getLogger();
+ var popUpAppender = new log4javascript.PopUpAppender();
+ var popUpLayout = new log4javascript.PatternLayout("%d{HH:mm:ss} %-5p - %m%n");
+ popUpAppender.setLayout(popUpLayout);
+ log.addAppender(popUpAppender);
+ var ajaxAppender = new log4javascript.AjaxAppender("myloggingservlet.do");
+ ajaxAppender.setThreshold(log4javascript.Level.ERROR);
+ log.addAppender(ajaxAppender);
+ log.debug("Debugging message (appears in pop-up)");
+ log.error("Error message (appears in pop-up and in server log)");
+ //]]>
+</script>
+</pre>
+ <p>
+ <a href="../examples/example_manual.html" title="View example (opens in new window)"
+ target="_blank">See this example in action</a> (opens in new window)
+ </p>
+ </div>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="log4javascript">
+ <h2>log4javascript static properties/methods</h2>
+ <h4>Properties</h4>
+ <ul class="propertieslist">
+ <li class="property">
+ <div class="name">version</div>
+ <div class="summary">
+ The version number of your copy of log4javascript.
+ </div>
+ </li>
+ <li class="property">
+ <div class="name">edition</div>
+ <div class="summary">
+ The edition of your copy of log4javascript.
+ </div>
+ </li>
+ <li class="property">
+ <div class="name">logLog</div>
+ <div class="summary">
+ log4javascript's internal logging object. <a href="#loglog">See below for more details</a>.
+ </div>
+ </li>
+ </ul>
+ <h4>Methods</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">getLogger</div>
+ <div class="methodsignature"><code>Logger <strong>getLogger</strong>([String <em>loggerName</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">loggerName</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ <p>
+ Returns a logger with the specified name, creating it if a logger with that name does not
+ already exist. If no name is specified, a logger is returned with name <code>[anonymous]</code>, and
+ subsequent calls to <code>getLogger()</code> (with no logger name specified) will return
+ this same logger object.
+ </p>
+ <p>
+ Note that the names <code>[anonymous]</code>, <code>[default]</code>, <code>[null]</code>
+ and <code>root</code> are reserved for
+ the anonymous logger, default logger, null logger and root logger respectively.
+ </p>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getDefaultLogger</div>
+ <div class="methodsignature"><code>Logger <strong>getDefaultLogger</strong>()</code></div>
+ <div class="summary">
+ Convenience method that returns the default logger. The default logger
+ has a single appender: a <code><a href="#popupappender">PopUpAppender</a></code>
+ with the default layout, width and height, and with <code>focusPopUp</code> set to false
+ and <code>lazyInit</code>, <code>useOldPopUp</code> and
+ <code>complainAboutPopUpBlocking</code> all set to true.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getNullLogger</div>
+ <div class="methodsignature"><code>Logger <strong>getNullLogger</strong>()</code></div>
+ <div class="summary">
+ Returns an empty logger with no appenders. Useful for disabling all logging.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getRootLogger</div>
+ <div class="methodsignature"><code>Logger <strong>getRootLogger</strong>()</code></div>
+ <div class="summary">
+ Returns the root logger from which all other loggers derive.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">resetConfiguration</div>
+ <div class="methodsignature"><code>void <strong>resetConfiguration</strong>()</code></div>
+ <div class="summary">
+ Resets the all loggers to their default level.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setEnabled</div>
+ <div class="methodsignature"><code>void <strong>setEnabled</strong>(Boolean <em>enabled</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">enabled</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Enables or disables all logging, depending on <code>enabled</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns true or false depending on whether logging is enabled.
+ </div>
+ </li>
+ <li class="method" id="log4javascriptaddeventlistener">
+ <div class="name">addEventListener</div>
+ <div class="methodsignature"><code>void <strong>addEventListener</strong>(String <em>eventType</em>, Function <em>listener</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">eventType</code>
+ </li>
+ <li class="param">
+ <code class="paramname">listener</code>
+ </li>
+ </ul>
+ <div class="summary">
+ <p>
+ Adds a function to be called when an event of the type specified occurs in log4javascript.
+ Supported event types are <code>load</code> (occurs once the page has loaded) and
+ <code>error</code>.
+ </p>
+ <p>
+ Each listener is pased three paramaters:
+ </p>
+ <ul>
+ <li><code>sender</code>. The object that raised the event (i.e. the log4javascript object);</li>
+ <li><code>eventType</code>. The type of the event;</li>
+ <li>
+ <code>eventArgs</code>. An object containing of event-specific arguments. For the <code>error</code> event,
+ this is an object with properties <code>message</code> and <code>exception</code>. For the <code>load</code>
+ event this is an empty object.
+ </li>
+ </ul>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">removeEventListener</div>
+ <div class="methodsignature"><code>void <strong>removeEventListener</strong>(String <em>eventType</em>, Function <em>listener</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">eventType</code>
+ </li>
+ <li class="param">
+ <code class="paramname">listener</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Removes the event listener function supplied for the event of the type specified.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">dispatchEvent</div>
+ <div class="methodsignature"><code>void <strong>dispatchEvent</strong>(String <em>eventType</em>, Object <em>eventArgs</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">eventType</code>
+ </li>
+ <li class="param">
+ <code class="paramname">eventArgs</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Raises an event of type <code>eventType</code> on the <code>log4javascript</code> object.
+ Each of the listeners for this type of event (registered via <code>addEventListener</code>)
+ is called and passed <code>eventArgs</code> as the third parameter.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setEventTypes</div>
+ <div class="methodsignature"><code>void <strong>setEventTypes</strong>(Array <em>eventTypes</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">eventTypes</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Used internally to specify the types of events that the <code>log4javascript</code> object can raise.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setShowStackTraces</div>
+ <div class="methodsignature"><code>void <strong>setShowStackTraces</strong>(Boolean <em>show</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">show</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Enables or disables displaying of error stack traces, depending on <code>show</code>.
+ By default, stack traces are not displayed. (Only works in Firefox)
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">evalInScope</div>
+ <div class="methodsignature"><code>Object <strong>evalInScope</strong>(String <em>expr</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">expr</code>
+ </li>
+ </ul>
+ <div class="summary">
+ This evaluates the given expression in the log4javascript scope, thus allowing
+ scripts to access internal log4javascript variables and functions. This was written
+ for the purposes of automated testing but could be used by custom extensions to
+ log4javascript.
+ </div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="levels">
+ <h2>Levels</h2>
+ <p>
+ Levels are available as static properties of the <code>log4javascript.Level</code>
+ object. In ascending order of severity:
+ </p>
+ <ol>
+ <li><code>log4javascript.Level.ALL</code></li>
+ <li><code>log4javascript.Level.TRACE</code></li>
+ <li><code>log4javascript.Level.DEBUG</code></li>
+ <li><code>log4javascript.Level.INFO</code></li>
+ <li><code>log4javascript.Level.WARN</code></li>
+ <li><code>log4javascript.Level.ERROR</code></li>
+ <li><code>log4javascript.Level.FATAL</code></li>
+ <li><code>log4javascript.Level.OFF</code></li>
+ </ol>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="loggers">
+ <h2>Loggers</h2>
+ <p>
+ It is possible to have multiple loggers in log4javascript. For example, you
+ may wish to have a logger for debugging purposes that logs messages to a
+ pop-up window and a separate logger that reports any client-side application
+ errors to the server via Ajax.
+ </p>
+ <div id="loggerhierarchy">
+ <h3>Logger hierarchy and appender additivity</h3>
+ <p>
+ From version 1.4, log4javascript has hierarchical loggers, implemented in the same way
+ as log4j. In summary, you specify a logger's parent logger by means of a dot between the
+ parent logger name and the child logger name. Therefore the logger <code>tim.app.security</code>
+ inherits from <code>tim.app</code>, which in turn inherits from <code>tim</code> which,
+ finally, inherits from the root logger.
+ </p>
+ <p>
+ What inheritance means for a logger is that in the absence of a threshold level set
+ specifically on the logger it inherits its level from its parent; also, a logger inherits
+ all its parent's appenders (this is known as <em>appender additivity</em> in log4j. This
+ behaviour can be enabled or disabled via <code>setAdditivity()</code>. See below). In the
+ above example, if the root logger has a level of <code>DEBUG</code> and one appender,
+ each of the loggers <code>tim.app.security</code>, <code>tim.app</code> and <code>tim</code> would
+ inherit the root level's appender. If, say, <code>tim.app</code>'s threshold level was set
+ to <code>WARN</code>, <code>tim</code>'s effective level would remain at <code>DEBUG</code>
+ (inherited from the root logger) while <code>tim.app.security</code>'s effective level would
+ be <code>WARN</code>, inherited from <code>tim.app</code>. The important thing to note is
+ that appenders accumulate down the logger hierarchy while levels are simply inherited from
+ the nearest ancestor with a threshold level set.
+ </p>
+ <p>
+ For a detailed explanation of the logger hierarchy, see the
+ <a href="http://logging.apache.org/log4j/docs/manual.html" target="_blank"
+ title="Log4j manual (opens in new window)">log4j manual</a>.
+ </p>
+ </div>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ It is not possible to instantiate loggers directly. Instead you must use
+ one of the methods of the <code>log4javascript</code> object: <code>getLogger</code>,
+ <code>getRootLogger</code>, <code>getDefaultLogger</code> or <code>getNullLogger</code>.
+ </li>
+ </ul>
+ <h4>Logger methods</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">addAppender</div>
+ <div class="methodsignature"><code>void <strong>addAppender</strong>(Appender <em>appender</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">appender</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Adds the given appender.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">removeAppender</div>
+ <div class="methodsignature"><code>void <strong>removeAppender</strong>(Appender <em>appender</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">appender</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Removes the given appender.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">removeAllAppenders</div>
+ <div class="methodsignature"><code>void <strong>removeAllAppenders</strong>()</code></div>
+ <div class="summary">
+ Clears all appenders for the current logger.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setLevel</div>
+ <div class="methodsignature"><code>void <strong>setLevel</strong>(Level <em>level</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">level</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Sets the level. Log messages of a lower level than <code>level</code> will not be logged.
+ Default value is <code>DEBUG</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getLevel</div>
+ <div class="methodsignature"><code>Level <strong>getLevel</strong>()</code></div>
+ <div class="summary">
+ Returns the level explicitly set for this logger or <code>null</code> if none has been set.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getEffectiveLevel</div>
+ <div class="methodsignature"><code>Level <strong>getEffectiveLevel</strong>()</code></div>
+ <div class="summary">
+ Returns the level at which the logger is operating. This is either the level explicitly
+ set on the logger or, if no level has been set, the effective level of the logger's parent.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setAdditivity</div>
+ <div class="methodsignature"><code>void <strong>setAdditivity</strong>(Boolean <em>additivity</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">additivity</code>
+ </li>
+ </ul>
+ <div class="summary">
+ <p>
+ Sets whether appender additivity is enabled (the default) or disabled. If set to false, this
+ particular logger will not inherit any appenders form its ancestors. Any descendant of this
+ logger, however, will inherit from its ancestors as normal, unless its own additivity is
+ explicitly set to false.
+ </p>
+ <p>
+ Default value is <code>true</code>.
+ </p>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getAdditivity</div>
+ <div class="methodsignature"><code>Level <strong>getLevel</strong>()</code></div>
+ <div class="summary">
+ Returns whether additivity is enabled for this logger.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">log</div>
+ <div class="methodsignature"><code>void <strong>log</strong>(Level <em>level</em>, Object <em>params</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">level</code>
+ </li>
+ <li class="param">
+ <code class="paramname">params</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Generic logging method used by wrapper methods such as <code>debug</code>,
+ <code>error</code> etc.
+ </div>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ The signature of this method has changed in 1.4.
+ </li>
+ </ul>
+ </li>
+ <li class="method">
+ <div class="name">trace</div>
+ <div class="methodsignature"><code>void <strong>trace</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>TRACE</code>.
+ </div>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ Logging of multiple messages in one call is new in 1.4.
+ </li>
+ </ul>
+ </li>
+ <li class="method">
+ <div class="name">debug</div>
+ <div class="methodsignature"><code>void <strong>debug</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>DEBUG</code>.
+ </div>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ Logging of multiple messages in one call is new in 1.4.
+ </li>
+ </ul>
+ </li>
+ <li class="method">
+ <div class="name">info</div>
+ <div class="methodsignature"><code>void <strong>info</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>INFO</code>.
+ </div>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ Logging of multiple messages in one call is new in 1.4.
+ </li>
+ </ul>
+ </li>
+ <li class="method">
+ <div class="name">warn</div>
+ <div class="methodsignature"><code>void <strong>warn</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>WARN</code>.
+ </div>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ Logging of multiple messages in one call is new in 1.4.
+ </li>
+ </ul>
+ </li>
+ <li class="method">
+ <div class="name">error</div>
+ <div class="methodsignature"><code>void <strong>error</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>ERROR</code>.
+ </div>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ Logging of multiple messages in one call is new in 1.4.
+ </li>
+ </ul>
+ </li>
+ <li class="method">
+ <div class="name">fatal</div>
+ <div class="methodsignature"><code>void <strong>fatal</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>FATAL</code>.
+ </div>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ Logging of multiple messages in one call is new in 1.4.
+ </li>
+ </ul>
+ </li>
+ <li class="method">
+ <div class="name">isEnabledFor</div>
+ <div class="methodsignature"><code>Boolean <strong>isEnabledFor</strong>(Level <em>level</em>, Error <em>exception</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">level</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Returns whether the logger is enabled for the specified level.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isTraceEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isTraceEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>TRACE</code> messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isDebugEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isDebugEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>DEBUG</code> messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isInfoEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isInfoEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>INFO</code> messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isWarnEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isWarnEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>WARN</code> messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isErrorEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isErrorEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>ERROR</code> messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isFatalEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isFatalEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>FATAL</code> messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">group</div>
+ <div class="methodsignature"><code>void <strong>group</strong>(String <em>name</em>, Boolean <em>initiallyExpanded</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">name</code>
+ </li>
+ <li class="param">
+ <code class="paramname">initiallyExpanded</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Starts a new group of log messages. In appenders that support grouping (currently
+ <code><a href="#popupappender">PopUpAppender</a></code> and
+ <code><a href="#inpageappender">InPageAppender</a></code>), a group appears as an expandable
+ section in the console, labelled with the <code>name</code> specified.
+ Specifying <code>initiallyExpanded</code> determines whether the
+ group starts off expanded (the default is <code>true</code>). Groups may be nested.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">groupEnd</div>
+ <div class="methodsignature"><code>void <strong>groupEnd</strong>()</code></div>
+ <div class="summary">
+ Ends the current group. If there is no group then this function has no effect.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">time</div>
+ <div class="methodsignature"><code>void <strong>time</strong>(String <em>name</em>, Level <em>level</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">name</code>
+ </li>
+ <li class="param">
+ <code class="paramname">level</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Starts a timer with name <code>name</code>. When the timer is ended with a
+ call to <code>timeEnd</code> using the same name, the amount of time that
+ has elapsed in milliseconds since the timer was started is logged at level
+ <code>level</code>. If not level is supplied, the level defaults to <code>INFO</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">timeEnd</div>
+ <div class="methodsignature"><code>void <strong>timeEnd</strong>(String <em>name</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">name</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Ends the timer with name <code>name</code> and logs the time elapsed.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">assert</div>
+ <div class="methodsignature"><code>void <strong>assert</strong>(Object <em>expr</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">expr</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Asserts the given expression is <code>true</code> or evaluates to <code>true</code>.
+ If so, nothing is logged. If not, an error is logged at the <code>ERROR</code> level.
+ </div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="appenders">
+ <h2>Appenders</h2>
+ <div id="appender">
+ <h3>Appender</h3>
+ <p>
+ There are methods common to all appenders, as listed below.
+ </p>
+ <h4>Methods</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">doAppend</div>
+ <div class="methodsignature"><code>void <strong>doAppend</strong>(LoggingEvent <em>loggingEvent</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">loggingEvent</code>
+ </li>
+ </ul>
+ <div class="summary">
+ <p>
+ Checks the logging event's level is at least as severe as the appender's
+ threshold and calls the appender's <code>append</code> method if so.
+ </p>
+ <p>
+ This method should not in general be used directly or overridden.
+ </p>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">append</div>
+ <div class="methodsignature"><code>void <strong>append</strong>(LoggingEvent <em>loggingEvent</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">loggingEvent</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Appender-specific method to append a log message. Every appender object should implement
+ this method.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setLayout</div>
+ <div class="methodsignature"><code>void <strong>setLayout</strong>(Layout <em>layout</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">layout</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Sets the appender's layout.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getLayout</div>
+ <div class="methodsignature"><code>Layout <strong>getLayout</strong>()</code></div>
+ <div class="summary">
+ Returns the appender's layout.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setThreshold</div>
+ <div class="methodsignature"><code>void <strong>setThreshold</strong>(Level <em>level</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">level</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Sets the appender's threshold. Log messages of level less severe than this
+ threshold will not be logged.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getThreshold</div>
+ <div class="methodsignature"><code>Level <strong>getThreshold</strong>()</code></div>
+ <div class="summary">
+ Returns the appender's threshold.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">toString</div>
+ <div class="methodsignature"><code>string <strong>toString</strong>()</code></div>
+ <div class="summary">
+ Returns a string representation of the appender. Every appender object should implement
+ this method.
+ </div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="alertappender">
+ <h3>AlertAppender</h3>
+ <p class="editions">Editions: <strong>Standard</strong></p>
+ <p>
+ Displays a log message as a JavaScript alert.
+ </p>
+ <h4>Constructor</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">AlertAppender</div>
+ <div class="methodsignature"><code><strong>AlertAppender</strong>()</code></div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="ajaxappender">
+ <h3>AjaxAppender</h3>
+ <p class="editions">Editions: <strong>Standard, Production</strong></p>
+ <p>
+ A flexible appender that asynchronously sends log messages to a server via HTTP
+ (Ajax, if you insist, though the 'x' of Ajax only comes into play in any form if you use an
+ <code><a href="#xmllayout">XmlLayout</a></code>).
+ </p>
+ <p>
+ The default configuration is to send each log message as a separate HTTP post
+ request to the server using an <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>,
+ without waiting for a response before sending any subsequent requests. However,
+ an <code>AjaxAppender</code> may be configured to do any one of or combinations of the following:
+ </p>
+ <ul>
+ <li>
+ send log messages in batches (if the selected layout supports it - particularly suited
+ to <code>AjaxAppender</code> are <code><a href="#jsonlayout">JsonLayout</a></code> and
+ <code><a href="#xmllayout">XmlLayout</a></code>, both of which allow batching);
+ </li>
+ <li>
+ wait for a response from a previous request before sending the next log message / batch
+ of messages;
+ </li>
+ <li>
+ send all queued log messages at timed intervals.
+ </li>
+ </ul>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ AjaxAppender relies on the <code>XMLHttpRequest</code> object. It also requires
+ the presence of correctly implemented <code>setRequestHeader</code> method on
+ this object, which rules out Opera prior to version 8.01. If your browser does not
+ support the necessary objects then one alert will display to explain why it
+ doesn't work, after which the appender will silently switch off.
+ </li>
+ <li>
+ In AjaxAppender only, <code>setLayout</code> may not be called after the first
+ message has been logged.
+ </li>
+ <li>
+ The default layout is <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>.
+ </li>
+ <li>
+ From version 1.4, log message data is always sent as one or more name/value pairs.
+ In the case of <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>, data
+ is sent the same as in previous versions. For other layouts such as
+ <code><a href="#jsonlayout">JsonLayout</a></code> and
+ <code><a href="#xmllayout">XmlLayout</a></code>, the formatted log message is posted as
+ the value of a parameter called <code>data</code>, though this may be changed via
+ <code>setPostVarName</code>.
+ </li>
+ <li>
+ From version 1.4, log message timestamps are sent as standard JavaScript times, i.e.
+ the number of milliseconds since 00:00:00 UTC on January 1, 1970.
+ </li>
+ <li>
+ <p>
+ Also from version 1.4, any outstanding log messages may optionally be sent when the
+ main page unloads (i.e. user follows a link, closes the window or refreshes the
+ page). This behaviour may be enabled using <code>setSendAllOnUnload</code>; see
+ below.
+ </p>
+ <p>
+ This behaviour is dependent on <code>window.onbeforeunload</code>; unfortunately,
+ Opera does not always raise this event, so this feature does not work reliably in
+ Opera.
+ </p>
+ </li>
+ </ul>
+ <h4>Constructor</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">AjaxAppender</div>
+ <div class="methodsignature">
+ <code><strong>AjaxAppender</strong>(String <em>url</em>)</code>
+ </div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">url</code>
+ <div>
+ The URL to which log messages should be sent. Note that this is subject
+ to the usual Ajax restrictions: the URL should be in the same domain as that
+ of the page making the request.
+ </div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4>Methods</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">setSendAllOnUnload</div>
+ <div class="methodsignature"><code>void <strong>setSendAllOnUnload</strong>(Boolean <em>sendAllOnUnload</em>)</code></div>
+ <div class="summary">
+ <p>
+ [<em>not available after first message logged</em>]
+ </p>
+ <p>
+ Whether to send all remaining unsent log messages to the server when the page
+ unloads.
+ </p>
+ <p>
+ Since version 1.4.3, the default value is <code>false</code>. Previously the
+ default was <code>true</code>.
+ </p>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ This feature was found not to work prior to version 1.4.3 in WebKit
+ browsers (e.g. Google Chrome, Safari). As a result, a workaround was
+ implemented in 1.4.3 which has the unfortunate side effect of popping up a
+ confirmation dialog to the user if there are any log messages to send when
+ the page unloads. As a result, this feature is now obtrusive for the user
+ and is therefore disabled by default.
+ </li>
+ <li>
+ This feature does not work in any version of Opera.
+ </li>
+ </ul>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isSendAllOnUnload</div>
+ <div class="methodsignature"><code>Boolean <strong>isSendAllOnUnload</strong>()</code></div>
+ <div class="summary">
+ Returns whether all remaining unsent log messages are sent to the server when the page unloads.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setPostVarName</div>
+ <div class="methodsignature"><code>void <strong>setPostVarName</strong>(String <em>postVarName</em>)</code></div>
+ <div class="summary">
+ <p>
+ [<em>not available after first message logged</em>]
+ </p>
+ <p>
+ Sets the post variable name whose value will the formatted log message(s) for
+ each request.
+ </p>
+ <p>
+ Default value is <code>data</code>.
+ </p>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ This has no effect if the current layout is an
+ <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>.
+ </li>
+ </ul>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getPostVarName</div>
+ <div class="methodsignature"><code>String <strong>getPostVarName</strong>()</code></div>
+ <div class="summary">
+ Returns the post variable name whose value will the formatted log message(s) for
+ each request.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setTimed</div>
+ <div class="methodsignature"><code>void <strong>setTimed</strong>(Boolean <em>timed</em>)</code></div>
+ <div class="summary">
+ <p>
+ [<em>not available after first message logged</em>]
+ </p>
+ <p>
+ Whether to send log messages to the server at regular, timed intervals.
+ </p>
+ <p>
+ Default value is <code>false</code>.
+ </p>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isTimed</div>
+ <div class="methodsignature"><code>Boolean <strong>isTimed</strong>()</code></div>
+ <div class="summary">
+ Returns whether log messages are sent to the server at regular, timed intervals.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setWaitForResponse</div>
+ <div class="methodsignature"><code>void <strong>setWaitForResponse</strong>(Boolean <em>waitForResponse</em>)</code></div>
+ <div class="summary">
+ <p>
+ [<em>not available after first message logged</em>]
+ </p>
+ <p>
+ Sets whether to wait for a response from a previous HTTP request from this
+ appender before sending the next log message / batch of messages.
+ </p>
+ <p>
+ Default value is <code>false</code>.
+ </p>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isWaitForResponse</div>
+ <div class="methodsignature"><code>Boolean <strong>isWaitForResponse</strong>()</code></div>
+ <div class="summary">
+ Returns whether the appender waits for a response from a previous HTTP request from this
+ appender before sending the next log message / batch of messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setBatchSize</div>
+ <div class="methodsignature"><code>void <strong>setBatchSize</strong>(Number <em>batchSize</em>)</code></div>
+ <div class="summary">
+ <p>
+ [<em>not available after first message logged</em>]
+ </p>
+ <p>
+ Sets the number of log messages to send in each request. If not specified,
+ defaults to <code>1</code>.
+ </p>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ Setting this to a number greater than 1 means that the appender will wait
+ until it has forwarded that many valid log messages before sending any more.
+ This also means that if the page unloads for any reason and <code>sendAllOnUnload</code>
+ is not set to <code>true</code>, any log messages waiting in the queue will not be sent.
+ </li>
+ <li>
+ If batching is used in conjunction with timed sending of log messages,
+ messages will still be sent in batches of size <code>batchSize</code>,
+ regardless of how many log messages are queued by the time the timed
+ sending is invoked. Incomplete batches will not be sent except when the
+ page unloads, if <code>sendAllOnUnload</code> is set to <code>true</code>.
+ </li>
+ </ul>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getBatchSize</div>
+ <div class="methodsignature"><code>Number <strong>getBatchSize</strong>()</code></div>
+ <div class="summary">
+ Returns the number of log messages sent in each request. See above for more details.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setTimerInterval</div>
+ <div class="methodsignature"><code>void <strong>setTimerInterval</strong>(Number <em>timerInterval</em>)</code></div>
+ <div class="summary">
+ <p>
+ [<em>not available after first message logged</em>]
+ </p>
+ <p>
+ Sets the length of time in milliseconds between each sending of queued log
+ messages.
+ </p>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ <code>timerInterval</code> only has an effect in conjunction with
+ <code>timed</code> (set by <code>setTimed()</code>. If <code>timed</code>
+ is set to false then <code>timerInterval</code> has no effect.
+ </li>
+ <li>
+ Each time the queue of log messages or batches of messages is cleared,
+ the countdown to the next sending only starts once the final request
+ has been sent (and, if <code>waitForResponse</code> is set to <code>true</code>,
+ the final response received). This means that the actual interval at
+ which the queue of messages is cleared cannot be fixed.
+ </li>
+ </ul>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getTimerInterval</div>
+ <div class="methodsignature"><code>Number <strong>getTimerInterval</strong>()</code></div>
+ <div class="summary">
+ Returns the length of time in milliseconds between each sending of queued log
+ messages. See above for more details.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setRequestSuccessCallback</div>
+ <div class="methodsignature"><code>void <strong>setRequestSuccessCallback</strong>(Function <em>requestSuccessCallback</em>)</code></div>
+ <div class="summary">
+ <p>
+ Sets the function that is called whenever a successful request is made, called at the
+ point at which the response is received. This feature can be used to confirm
+ whether a request has been successful and act accordingly.
+ </p>
+ <p>
+ A single parameter, <code>xmlHttp</code>, is passed to the callback function.
+ This is the XMLHttpRequest object that performed the request.
+ </p>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setFailCallback</div>
+ <div class="methodsignature"><code>void <strong>setFailCallback</strong>(Function <em>failCallback</em>)</code></div>
+ <div class="summary">
+ <p>
+ Sets the function that is called whenever any kind of failure occurs in the appender,
+ including browser deficiencies or configuration errors (e.g. supplying a
+ non-existent URL to the appender). This feature can be used to handle
+ AjaxAppender-specific errors.
+ </p>
+ <p>
+ A single parameter, <code>message</code>, is passed to the callback function.
+ This is the error-specific message that caused the failure.
+ </p>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setSessionId</div>
+ <div class="methodsignature"><code>void <strong>setSessionId</strong>(String <em>sessionId</em>)</code></div>
+ <div class="summary">
+ Sets the session id sent to the server each time a request is made.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getSessionId</div>
+ <div class="methodsignature"><code>String <strong>getSessionId</strong>()</code></div>
+ <div class="summary">
+ Returns the session id sent to the server each time a request is made.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">addHeader</div>
+ <div class="methodsignature"><code>void <strong>addHeader</strong>(String <em>name</em>,
+ String <em>value</em>)</code></div>
+ <div class="summary">
+ <p>
+ Adds an HTTP header that is sent with each request.
+ </p>
+ <p>
+ <strong>Since: 1.4.3</strong>
+ </p>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getHeaders</div>
+ <div class="methodsignature"><code>Array <strong>getHeaders</strong>()</code></div>
+ <div class="summary">
+ Returns an array of the additional headers that are sent with each HTTP request.
+ Each array item is an object with properties <code>name</code> and
+ <code>value</code>.
+ <p>
+ <strong>Since: 1.4.3</strong>
+ </p>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">sendAll</div>
+ <div class="methodsignature"><code>void <strong>sendAll</strong>()</code></div>
+ <div class="summary">
+ Sends all log messages in the queue. If log messages are batched then only completed
+ batches are sent.
+ </div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="popupappender">
+ <h3>PopUpAppender</h3>
+ <p class="editions">Editions: <strong>Standard</strong></p>
+ <p>
+ Logs messages to a pop-up console window (note: you will need to disable pop-up
+ blockers to use it). The pop-up displays a list of all log messages, and has
+ the following features:
+ </p>
+ <ul>
+ <li>log messages are colour-coded by severity;</li>
+ <li>log messages are displayed in a monospace font to allow easy readability;</li>
+ <li>switchable wrap mode to allow wrapping of long lines</li>
+ <li>all whitespace in log messages is honoured (except in wrap mode);</li>
+ <li>filters to show and hide messages of a particular level;</li>
+ <li>
+ search facility that allows searching of log messages as you type, with the
+ following features:
+ <ul>
+ <li>supports regular expressions;</li>
+ <li>case sensitive or insensitive matching;</li>
+ <li>buttons to navigate through all the matches;</li>
+ <li>switch to highlight all matches;</li>
+ <li>switch to filter out all log messages that contain no matches;</li>
+ <li>switch to enable or disable the search;</li>
+ <li>search is dynamically applied to every log message as it is added to the console.</li>
+ </ul>
+ </li>
+ <li>switch to toggle between logging from the top down and from the bottom up;</li>
+ <li>switch to turn automatic scrolling when a new message is logged on and off;</li>
+ <li>switch to turn off all logging to the pop-up (useful if a timer is generating unwanted log messages);</li>
+ <li>optional configurable limit to the number of log message that are displayed. If
+ set and this limit is reached, each new log message will cause the oldest one to
+ be discarded;</li>
+ <li>grouped log messages. Groups may be nested and each has a button to show or hide the log messages in that group;</li>
+ <li>clear button to allow user to delete all current log messages.</li>
+ <li>
+ command prompt with up/down arrow history. Command line functions may be added
+ to the appender. Several command line functions are built in:
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="methodsignature"><code><strong>$</strong>(String <em>id</em>)</code></div>
+ <div class="summary">
+ Prints a string representation of a single element with the id supplied.
+ </div>
+ </li>
+ <li class="method">
+ <div class="methodsignature"><code><strong>dir</strong>(Object <em>obj</em>)</code></div>
+ <div class="summary">
+ Prints a list of a properties of the object supplied.
+ </div>
+ </li>
+ <li class="method">
+ <div class="methodsignature"><code><strong>dirxml</strong>(HTMLElement <em>el</em>)</code></div>
+ <div class="summary">
+ Prints the XML source code of an HTML or XML element
+ </div>
+ </li>
+ <li class="method">
+ <div class="methodsignature"><code><strong>cd</strong>(Object <em>win</em>)</code></div>
+ <div class="summary">
+ Changes the scope of execution of commands to the named frame or window (either a
+ window/frame name or a reference to a window object may be supplied).
+ </div>
+ </li>
+ <li class="method">
+ <div class="methodsignature"><code><strong>clear</strong>()</code></div>
+ <div class="summary">
+ Clears the console.
+ </div>
+ </li>
+ <li class="method">
+ <div class="methodsignature"><code><strong>keys</strong>(Object <em>obj</em>)</code></div>
+ <div class="summary">
+ Prints a list of the names of all properties of the object supplied.
+ </div>
+ </li>
+ <li class="method">
+ <div class="methodsignature"><code><strong>values</strong>(Object <em>obj</em>)</code></div>
+ <div class="summary">
+ Prints a list of the values of all properties of the object supplied.
+ </div>
+ </li>
+ <li class="method">
+ <div class="methodsignature"><code><strong>expansionDepth</strong>(Number <em>depth</em>)</code></div>
+ <div class="summary">
+ Sets the number of levels of expansion of objects that are displayed by
+ the command line. The default value is 1.
+ </div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ <p>
+ The default layout for this appender is <code><a href="#patternlayout">PatternLayout</a></code>
+ with pattern string
+ </p>
+ <p>
+ <code>%d{HH:mm:ss} %-5p - %m{1}%n</code>
+ </p>
+ </li>
+ </ul>
+ <h4>Constructor</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">PopUpAppender</div>
+ <div class="methodsignature">
+ <code><strong>PopUpAppender</strong>([Boolean <em>lazyInit</em>,
+ Boolean <em>initiallyMinimized</em>, Boolean <em>useDocumentWrite</em>,
+ Number <em>width</em>, Number <em>height</em>])</code>
+ </div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">lazyInit</code>
+ [<em>optional</em>]
+ <div>
+ Set this to <code>true</code> to open the pop-up only when the first log
+ message reaches the appender. Otherwise, the pop-up window opens as soon as the
+ appender is created. If not specified, defaults to <code>false</code>.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">initiallyMinimized</code>
+ [<em>optional</em>]
+ <div>
+ <p>
+ Whether the console window should start off hidden / minimized.
+ If not specified, defaults to <code>false</code>.
+ </p>
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">useDocumentWrite</code>
+ [<em>optional</em>]
+ <div>
+ <p>
+ Specifies how the console window is created. By default, the console window is
+ created dynamically using <code>document</code>'s <code>write</code> method. This has the
+ advantage of keeping all the code in one single JavaScript file. However, if your
+ page sets <code>document.domain</code> then the browser prevents script access to
+ a window unless it too has the same value set for <code>document.domain</code>. To
+ get round this issue, you can set <code>useDocumentWrite</code> to <code>false</code>
+ and log4javascript will instead use the external HTML file <code>console.html</code>
+ (or <code>console_uncompressed.html</code> if you're using an uncompressed version of
+ log4javascript.js), which must be placed in the same directory as your log4javascript.js file.
+ </p>
+ <p>
+ Note that if <code>useDocumentWrite</code> is set to <code>true</code>, the old pop-up
+ window will always be closed and a new one created whenever the page is refreshed, even
+ if <code>setUseOldPopUp(true)</code> has been called.
+ </p>
+ <p>
+ In general it's simpler to use the <code>document.write</code> method, so unless your
+ page needs to set <code>document.domain</code>, <code>useDocumentWrite</code> should
+ be set to <code>true</code>.
+ </p>
+ <p>
+ If not specified, defaults to <code>true</code>.
+ </p>
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">width</code>
+ [<em>optional</em>]
+ <div>
+ The outer width in pixels of the pop-up window. If not specified,
+ defaults to <code>600</code>.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">height</code>
+ [<em>optional</em>]
+ <div>
+ The outer height in pixels of the pop-up window. If not specified,
+ defaults to <code>400</code>.
+ </div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4>Methods</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">isInitiallyMinimized</div>
+ <div class="methodsignature"><code>Boolean <strong>isInitiallyMinimized</strong>()</code></div>
+ <div class="summary">
+ Returns whether the console window starts off hidden / minimized.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setInitiallyMinimized</div>
+ <div class="methodsignature"><code>void <strong>setInitiallyMinimized</strong>(Boolean <em>initiallyMinimized</em>)</code></div>
+ <div class="summary">
+ [<em>not available after initialization</em>]
+ <br />
+ Sets whether the console window should start off hidden / minimized.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isFocusPopUp</div>
+ <div class="methodsignature"><code>Boolean <strong>isFocusPopUp</strong>()</code></div>
+ <div class="summary">
+ Returns whether the pop-up window is focussed (i.e. brought it to the front)
+ when a new log message is added. Default value is <code>false</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setFocusPopUp</div>
+ <div class="methodsignature"><code>void <strong>setFocusPopUp</strong>(Boolean <em>focusPopUp</em>)</code></div>
+ <div class="summary">
+ Sets whether to focus the pop-up window (i.e. bring it to the front)
+ when a new log message is added.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isUseOldPopUp</div>
+ <div class="methodsignature"><code>Boolean <strong>isUseOldPopUp</strong>()</code></div>
+ <div class="summary">
+ <p>
+ Returns whether the same pop-up window is used if the main page is
+ reloaded. If set to <code>true</code>, when the page is reloaded
+ a line is drawn in the pop-up and subsequent log messages are added
+ to the same pop-up. Otherwise, a new pop-up window is created that
+ replaces the original pop-up. If not specified, defaults to
+ <code>true</code>.
+ </p>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ In Internet Explorer 5, the browser prevents this from working
+ properly, so a new pop-up window is always created when the main
+ page reloads. Also, the original pop-up does not get closed.
+ </li>
+ </ul>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setUseOldPopUp</div>
+ <div class="methodsignature"><code>void <strong>setUseOldPopUp</strong>(Boolean <em>useOldPopUp</em>)</code></div>
+ <div class="summary">
+ [<em>not available after initialization</em>]
+ <br />
+ Sets whether to use the same pop-up window if the main page is reloaded.
+ See <code>isUseOldPopUp</code> above for details.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isComplainAboutPopUpBlocking</div>
+ <div class="methodsignature"><code>Boolean <strong>isComplainAboutPopUpBlocking</strong>()</code></div>
+ <div class="summary">
+ Returns whether an alert is shown to the user when the pop-up window
+ cannot be created as a result of a pop-up blocker. Default value is <code>true</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setComplainAboutPopUpBlocking</div>
+ <div class="methodsignature"><code>void <strong>setComplainAboutPopUpBlocking</strong>(Boolean <em>complainAboutPopUpBlocking</em>)</code></div>
+ <div class="summary">
+ [<em>not available after initialization</em>]
+ <br />
+ Sets whether to announce to show an alert to the user when the pop-up window
+ cannot be created as a result of a pop-up blocker.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isNewestMessageAtTop</div>
+ <div class="methodsignature"><code>Boolean <strong>isNewestMessageAtTop</strong>()</code></div>
+ <div class="summary">
+ Returns whether new log messages are displayed at the top of the pop-up window.
+ Default value is <code>false</code> (i.e. log messages are appended to the bottom of the window).
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setNewestMessageAtTop</div>
+ <div class="methodsignature"><code>void <strong>setNewestMessageAtTop</strong>(Boolean <em>newestMessageAtTop</em>)</code></div>
+ <div class="summary">
+ Sets whether to display new log messages at the top inside the pop-up window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isScrollToLatestMessage</div>
+ <div class="methodsignature"><code>Boolean <strong>isScrollToLatestMessage</strong>()</code></div>
+ <div class="summary">
+ Returns whether the pop-up window scrolls to display the latest log message when a new message
+ is logged. Default value is <code>true</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setScrollToLatestMessage</div>
+ <div class="methodsignature"><code>void <strong>setScrollToLatestMessage</strong>(Boolean <em>scrollToLatestMessage</em>)</code></div>
+ <div class="summary">
+ Sets whether to scroll the pop-up window to display the latest log message when a new message
+ is logged.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isReopenWhenClosed</div>
+ <div class="methodsignature"><code>Boolean <strong>isReopenWhenClosed</strong>()</code></div>
+ <div class="summary">
+ Returns whether the pop-up window reopens automatically after being closed when a new log message is logged.
+ Default value is <code>false</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setReopenWhenClosed</div>
+ <div class="methodsignature"><code>void <strong>setReopenWhenClosed</strong>(Boolean <em>reopenWhenClosed</em>)</code></div>
+ <div class="summary">
+ Sets whether to reopen the pop-up window automatically after being closed when a new log message is logged.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getWidth</div>
+ <div class="methodsignature"><code>Number <strong>getWidth</strong>()</code></div>
+ <div class="summary">
+ Returns the outer width in pixels of the pop-up window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setWidth</div>
+ <div class="methodsignature"><code>void <strong>setWidth</strong>(Number <em>width</em>)</code></div>
+ <div class="summary">
+ [<em>not available after initialization</em>]
+ <br />
+ Sets the outer width in pixels of the pop-up window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getHeight</div>
+ <div class="methodsignature"><code>Number <strong>getHeight</strong>()</code></div>
+ <div class="summary">
+ [<em>not available after initialization</em>]
+ <br />
+ Returns the outer height in pixels of the pop-up window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setHeight</div>
+ <div class="methodsignature"><code>void <strong>setHeight</strong>(Number <em>height</em>)</code></div>
+ <div class="summary">
+ Sets the outer height in pixels of the pop-up window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getMaxMessages</div>
+ <div class="methodsignature"><code>Number <strong>getMaxMessages</strong>()</code></div>
+ <div class="summary">
+ Returns the largest number of log messages that are displayed and stored
+ by the the console. Once reached, a new log message wil cause the
+ oldest message to be discarded. Default value is <code>null</code>, which means no
+ limit is applied.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setMaxMessages</div>
+ <div class="methodsignature"><code>void <strong>setMaxMessages</strong>(Number <em>maxMessages</em>)</code></div>
+ <div class="summary">
+ [<em>not available after initialization</em>]
+ <br />
+ Sets the largest number of messages displayed and stored by the console window. Set
+ this to <code>null</code> to make this number unlimited.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isShowCommandLine</div>
+ <div class="methodsignature"><code>Boolean <strong>isShowCommandLine</strong>()</code></div>
+ <div class="summary">
+ Returns whether the console includes a command line.
+ Default value is <code>true</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setShowCommandLine</div>
+ <div class="methodsignature"><code>void <strong>setShowCommandLine</strong>(Boolean <em>showCommandLine</em>)</code></div>
+ <div class="summary">
+ Sets whether the console includes a command line.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getCommandLineObjectExpansionDepth</div>
+ <div class="methodsignature"><code>Number <strong>getCommandLineObjectExpansionDepth</strong>()</code></div>
+ <div class="summary">
+ Returns the number of levels to expand when an object value is logged to the console.
+ Each property of an object above this threshold will be expanded if it is itself an object
+ or array, otherwise its string representation will be displayed. Default value is 1 (i.e.
+ the properties of the object logged will be displayed in their string representation but
+ not expanded).
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setCommandLineObjectExpansionDepth:</div>
+ <div class="methodsignature"><code>void <strong>setCommandLineObjectExpansionDepth</strong>(Number <em>expansionDepth</em>)</code></div>
+ <div class="summary">
+ Sets the number of levels to expand when an object value is logged to the console.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getCommandWindow</div>
+ <div class="methodsignature"><code>Window <strong>getCommandWindow</strong>()</code></div>
+ <div class="summary">
+ Returns a reference to the window in which commands typed into the command line
+ are currently being executed.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setCommandWindow</div>
+ <div class="methodsignature"><code>void <strong>setCommandWindow</strong>(Window <em>commandWindow</em>)</code></div>
+ <div class="summary">
+ Sets the window in which commands typed into the command line are executed.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getCommandLayout</div>
+ <div class="methodsignature"><code>Number <strong>getCommandLayout</strong>()</code></div>
+ <div class="summary">
+ Returns the layout used to format the output for commands typed into the command line.
+ The default value is a <code><a href="#patternlayout">PatternLayout</a></code> with
+ pattern string <code>%m</code>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setCommandLayout</div>
+ <div class="methodsignature"><code>void <strong>setCommandLayout</strong>(Layout <em>commandLayout</em>)</code></div>
+ <div class="summary">
+ Sets the layout used to format the output for commands typed into the command line.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">clear</div>
+ <div class="methodsignature"><code>void <strong>clear</strong>()</code></div>
+ <div class="summary">
+ Clears all messages from the console window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">close</div>
+ <div class="methodsignature"><code>void <strong>close</strong>()</code></div>
+ <div class="summary">
+ Closes the pop-up window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">show</div>
+ <div class="methodsignature"><code>void <strong>show</strong>()</code></div>
+ <div class="summary">
+ Opens the pop-up window, if not already open.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">hide</div>
+ <div class="methodsignature"><code>void <strong>hide</strong>()</code></div>
+ <div class="summary">
+ Closes the pop-up window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">focus</div>
+ <div class="methodsignature"><code>void <strong>focus</strong>()</code></div>
+ <div class="summary">
+ Brings the console window to the top and gives it the focus.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">focusCommandLine</div>
+ <div class="methodsignature"><code>void <strong>focusCommandLine</strong>()</code></div>
+ <div class="summary">
+ Brings the console window to the top and gives the focus to the command line.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">focusSearch</div>
+ <div class="methodsignature"><code>void <strong>focusSearch</strong>()</code></div>
+ <div class="summary">
+ Brings the console window to the top and gives the focus to the search box.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">evalCommandAndAppend</div>
+ <div class="methodsignature"><code>void <strong>evalCommandAndAppend</strong>(String <em>expr</em>)</code></div>
+ <div class="summary">
+ Evaluates the expression and appends the result to the console.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">addCommandLineFunction</div>
+ <div class="methodsignature"><code>void <strong>addCommandLineFunction</strong>(String <em>functionName</em>, Function <em>commandLineFunction</em>)</code></div>
+ <div class="summary">
+ <p>
+ Adds a function with the name specified to the list of functions available on the command line.
+ This feature may be used to add custom functions to the command line.
+ </p>
+ <p>
+ When you call the function on the command line, <code>commandLineFunction</code> is executed with the
+ following three parameters:
+ </p>
+ <ul>
+ <li><em>appender</em>. A reference to the appender in which the command was executed;</li>
+ <li><em>args</em>.
+ An array-like list of parameters passed into the function on the command line
+ (actually a reference to the <code>arguments</code> object representing the parameters passed
+ into the function by the user);</li>
+ <li><em>returnValue</em>. This is an object with two properties that allow the function to control
+ how the result is displayed:
+ <ul>
+ <li><em>appendResult</em>. A boolean value that determines whether the returned value from this
+ function is appended to the console. The default value is <code>true</code>;</li>
+ <li><em>isError</em>. A boolean value that specifies whether the output of this function
+ should be displayed as an error. The default value is <code>false</code>.</li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ The value returned by the function is formatted by the command layout and appended to the console.
+ </p>
+ </div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="inpageappender">
+ <h3>InPageAppender</h3>
+ <p class="editions">Editions: <strong>Standard</strong></p>
+ <p>
+ Logs messages to a console window in the page. The console is identical
+ to that used by the <code><a href="#popupappender">PopUpAppender</a></code>, except
+ for the absence of a 'Close' button.
+ </p>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ Prior to log4javascript 1.3, InPageAppender was known as InlineAppender.
+ For the sake of backwards compatibility, InlineAppender is still included in
+ 1.3 and later as an alias for InPageAppender.
+ </li>
+ <li>
+ <p>
+ The default layout for this appender is <code><a href="#patternlayout">PatternLayout</a></code>
+ with pattern string
+ </p>
+ <p>
+ <code>%d{HH:mm:ss} %-5p - %m{1}%n</code>
+ </p>
+ </li>
+ </ul>
+ <h4>Constructor</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">InPageAppender</div>
+ <div class="methodsignature">
+ <code><strong>InPageAppender</strong>(HTMLElement <em>container</em>[,
+ Boolean <em>lazyInit</em>, Boolean <em>initiallyMinimized</em>,
+ Boolean <em>useDocumentWrite</em>, String <em>width</em>, String <em>height</em>])</code>
+ </div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">container</code>
+ <div>
+ The container element for the console window. This should be an HTML element.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">lazyInit</code>
+ [<em>optional</em>]
+ <div>
+ Set this to <code>true</code> to create the console only when the first log
+ message reaches the appender. Otherwise, the console is initialized as soon as the
+ appender is created. If not specified, defaults to <code>true</code>.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">initiallyMinimized</code>
+ [<em>optional</em>]
+ <div>
+ <p>
+ Whether the console window should start off hidden / minimized.
+ If not specified, defaults to <code>false</code>.
+ </p>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ In Safari (and possibly other browsers) hiding an <code>iframe</code>
+ resets its document, thus destroying the console window.
+ </li>
+ </ul>
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">useDocumentWrite</code>
+ [<em>optional</em>]
+ <div>
+ <p>
+ Specifies how the console window is created. By default, the console window is
+ created dynamically using <code>document</code>'s <code>write</code> method. This has the
+ advantage of keeping all the code in one single JavaScript file. However, if your
+ page sets <code>document.domain</code> then the browser prevents script access to
+ a window unless it too has the same value set for <code>document.domain</code>. To
+ get round this issue, you can set <code>useDocumentWrite</code> to <code>false</code>
+ and log4javascript will instead use the external HTML file <code>console.html</code>
+ (or <code>console_uncompressed.html</code> if you're using an uncompressed version of
+ log4javascript.js), which must be placed in the same directory as your log4javascript.js file.
+ </p>
+ <p>
+ In general it's simpler to use the <code>document.write</code> method, so unless your
+ page needs to set <code>document.domain</code>, <code>useDocumentWrite</code> should
+ be set to <code>true</code>.
+ </p>
+ <p>
+ If not specified, defaults to <code>true</code>.
+ </p>
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">width</code>
+ [<em>optional</em>]
+ <div>
+ The width of the console window. Any valid CSS length may be used. If not
+ specified, defaults to <code>100%</code>.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">height</code>
+ [<em>optional</em>]
+ <div>
+ The height of the console window. Any valid CSS length may be used. If not
+ specified, defaults to <code>250px</code>.
+ </div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4>Methods</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">addCssProperty</div>
+ <div class="methodsignature"><code>void <strong>addCssProperty</strong>(String <em>name</em>, String <em>value</em>)</code></div>
+ <div class="summary">
+ Sets a CSS style property on the HTML element containing the console iframe.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isVisible</div>
+ <div class="methodsignature"><code>Boolean <strong>isVisible</strong>()</code></div>
+ <div class="summary">
+ Returns whether the console window is currently visible.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isInitiallyMinimized</div>
+ <div class="methodsignature"><code>Boolean <strong>isInitiallyMinimized</strong>()</code></div>
+ <div class="summary">
+ Returns whether the console window starts off hidden / minimized.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setInitiallyMinimized</div>
+ <div class="methodsignature"><code>void <strong>setInitiallyMinimized</strong>(Boolean <em>initiallyMinimized</em>)</code></div>
+ <div class="summary">
+ [<em>not available after initialization</em>]
+ <br />
+ Sets whether the console window should start off hidden / minimized.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isNewestMessageAtTop</div>
+ <div class="methodsignature"><code>Boolean <strong>isNewestMessageAtTop</strong>()</code></div>
+ <div class="summary">
+ Returns whether new log messages are displayed at the top of the console window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setNewestMessageAtTop</div>
+ <div class="methodsignature"><code>void <strong>setNewestMessageAtTop</strong>(Boolean <em>newestMessageAtTop</em>)</code></div>
+ <div class="summary">
+ Sets whether to display new log messages at the top inside the console window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isScrollToLatestMessage</div>
+ <div class="methodsignature"><code>Boolean <strong>isScrollToLatestMessage</strong>()</code></div>
+ <div class="summary">
+ Returns whether the pop-up window scrolls to display the latest log message when a new message
+ is logged.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setScrollToLatestMessage</div>
+ <div class="methodsignature"><code>void <strong>setScrollToLatestMessage</strong>(Boolean <em>scrollToLatestMessage</em>)</code></div>
+ <div class="summary">
+ Sets whether to scroll the console window to display the latest log message when a new message
+ is logged.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getWidth</div>
+ <div class="methodsignature"><code>String <strong>getWidth</strong>()</code></div>
+ <div class="summary">
+ Returns the outer width of the console window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setWidth</div>
+ <div class="methodsignature"><code>void <strong>setWidth</strong>(String <em>width</em>)</code></div>
+ <div class="summary">
+ [<em>not available after initialization</em>]
+ <br />
+ Sets the outer width of the console window. Any valid CSS length may be used.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getHeight</div>
+ <div class="methodsignature"><code>String <strong>getHeight</strong>()</code></div>
+ <div class="summary">
+ Returns the outer height of the console window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setHeight</div>
+ <div class="methodsignature"><code>void <strong>setHeight</strong>(String <em>height</em>)</code></div>
+ <div class="summary">
+ [<em>not available after initialization</em>]
+ <br />
+ Sets the outer height of the console window. Any valid CSS length may be used.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getMaxMessages</div>
+ <div class="methodsignature"><code>Number <strong>getMaxMessages</strong>()</code></div>
+ <div class="summary">
+ Returns the largest number of messages displayed and stored by the console window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setMaxMessages</div>
+ <div class="methodsignature"><code>void <strong>setMaxMessages</strong>(Number <em>maxMessages</em>)</code></div>
+ <div class="summary">
+ [<em>not available after initialization</em>]
+ <br />
+ Sets the largest number of messages displayed and stored by the console window. Set
+ this to <code>null</code> to make this number unlimited.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isShowCommandLine</div>
+ <div class="methodsignature"><code>Boolean <strong>isShowCommandLine</strong>()</code></div>
+ <div class="summary">
+ Returns whether the console includes a command line.
+ Default value is <code>true</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setShowCommandLine</div>
+ <div class="methodsignature"><code>void <strong>setShowCommandLine</strong>(Boolean <em>showCommandLine</em>)</code></div>
+ <div class="summary">
+ Sets whether the console includes a command line.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getCommandLineObjectExpansionDepth</div>
+ <div class="methodsignature"><code>Number <strong>getCommandLineObjectExpansionDepth</strong>()</code></div>
+ <div class="summary">
+ Returns the number of levels to expand when an object value is logged to the console.
+ Each property of an object above this threshold will be expanded if it is itself an object
+ or array, otherwise its string representation will be displayed. Default value is 1 (i.e.
+ the properties of the object logged will be displayed in their string representation but
+ not expanded).
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setCommandLineObjectExpansionDepth:</div>
+ <div class="methodsignature"><code>void <strong>setCommandLineObjectExpansionDepth</strong>(Number <em>expansionDepth</em>)</code></div>
+ <div class="summary">
+ Sets the number of levels to expand when an object value is logged to the console.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getCommandWindow</div>
+ <div class="methodsignature"><code>Window <strong>getCommandWindow</strong>()</code></div>
+ <div class="summary">
+ Returns a reference to the window in which commands typed into the command line
+ are currently being executed.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setCommandWindow</div>
+ <div class="methodsignature"><code>void <strong>setCommandWindow</strong>(Window <em>commandWindow</em>)</code></div>
+ <div class="summary">
+ Sets the window in which commands typed into the command line are executed.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getCommandLayout</div>
+ <div class="methodsignature"><code>Number <strong>getCommandLayout</strong>()</code></div>
+ <div class="summary">
+ Returns the layout used to format the output for commands typed into the command line.
+ The default value is a <code><a href="#patternlayout">PatternLayout</a></code> with
+ pattern string <code>%m</code>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setCommandLayout</div>
+ <div class="methodsignature"><code>void <strong>setCommandLayout</strong>(Layout <em>commandLayout</em>)</code></div>
+ <div class="summary">
+ Sets the layout used to format the output for commands typed into the command line.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">clear</div>
+ <div class="methodsignature"><code>void <strong>clear</strong>()</code></div>
+ <div class="summary">
+ Clears all messages from the console window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">show</div>
+ <div class="methodsignature"><code>void <strong>show</strong>()</code></div>
+ <div class="summary">
+ <p>
+ Shows / unhides the console window.
+ </p>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ In Safari (and possibly other browsers), hiding an <code>iframe</code>
+ resets its document, thus destroying the console window.
+ </li>
+ </ul>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">hide</div>
+ <div class="methodsignature"><code>void <strong>hide</strong>()</code></div>
+ <div class="summary">
+ <p>
+ Hides / minimizes the console window.
+ </p>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ In Safari (and possibly other browsers), hiding an <code>iframe</code>
+ resets its document, thus destroying the console window.
+ </li>
+ </ul>
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">close</div>
+ <div class="methodsignature"><code>void <strong>close</strong>()</code></div>
+ <div class="summary">
+ Removes the console window iframe from the main document.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">focus</div>
+ <div class="methodsignature"><code>void <strong>focus</strong>()</code></div>
+ <div class="summary">
+ Brings the console window to the top and gives it the focus.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">focusCommandLine</div>
+ <div class="methodsignature"><code>void <strong>focusCommandLine</strong>()</code></div>
+ <div class="summary">
+ Brings the console window to the top and gives the focus to the command line.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">focusSearch</div>
+ <div class="methodsignature"><code>void <strong>focusSearch</strong>()</code></div>
+ <div class="summary">
+ Brings the console window to the top and gives the focus to the search box.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">evalCommandAndAppend</div>
+ <div class="methodsignature"><code>void <strong>evalCommandAndAppend</strong>(String <em>expr</em>)</code></div>
+ <div class="summary">
+ Evaluates the expression and appends the result to the console.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">addCommandLineFunction</div>
+ <div class="methodsignature"><code>void <strong>addCommandLineFunction</strong>(String <em>functionName</em>, Function <em>commandLineFunction</em>)</code></div>
+ <div class="summary">
+ <p>
+ Adds a function with the name specified to the list of functions available on the command line.
+ This feature may be used to add custom functions to the command line.
+ </p>
+ <p>
+ When you call the function on the command line, <code>commandLineFunction</code> is executed with the
+ following three parameters:
+ </p>
+ <ul>
+ <li><em>appender</em>. A reference to the appender in which the command was executed;</li>
+ <li><em>args</em>.
+ An array-like list of parameters passed into the function on the command line
+ (actually a reference to an <code>arguments</code> object);</li>
+ <li><em>returnValue</em>. This is an object with two properties that allow the function to control
+ how the result is displayed:
+ <ul>
+ <li><em>appendResult</em>. A boolean value that determines whether the returned value from this
+ function is appended to the console. The default value is <code>true</code>;</li>
+ <li><em>isError</em>. A boolean value that specifies whether the output of this function
+ should be displayed as an error. The default value is <code>false</code>.</li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ The value returned by the function is formatted by the command layout and appended to the console.
+ </p>
+ </div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="browserconsoleappender">
+ <h3>BrowserConsoleAppender</h3>
+ <p class="editions">Editions: <strong>Standardl</strong></p>
+ <p>
+ Writes log messages to the browser's built-in console, if present. This only works
+ currently in Safari, Opera and Firefox with the excellent
+ <a href="http://www.getfirebug.com" title="Firebug home page (opens in new window)"
+ target="_blank">Firebug</a> extension installed.
+ </p>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ As of log4javascript 1.3, the default threshold for this appender is <code>DEBUG</code>
+ as opposed to <code>WARN</code> as it was previously;
+ </li>
+ <li>
+ <p>
+ As of version 1.3, log4javascript has explicit support for Firebug's logging. This includes
+ the following mapping of log4javascript's log levels onto Firebug's:
+ </p>
+ <ul>
+ <li>log4javascript <code>TRACE</code>, <code>DEBUG</code> -> Firebug <code>debug</code></li>
+ <li>log4javascript <code>INFO</code> -> Firebug <code>info</code></li>
+ <li>log4javascript <code>WARN</code> -> Firebug <code>warn</code></li>
+ <li>log4javascript <code>ERROR</code>, <code>FATAL</code> -> Firebug <code>error</code></li>
+ </ul>
+ <p>
+ ... and the ability to pass objects into Firebug and take advantage of its object inspection.
+ This is because the default layout is now <code><a href="#nulllayout">NullLayout</a></code>,
+ which performs no formatting on an object.
+ </p>
+ </li>
+ </ul>
+ <h4>Constructor</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">BrowserConsoleAppender</div>
+ <div class="methodsignature"><code><strong>BrowserConsoleAppender</strong>()</code></div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ </div>
+ <div id="layouts">
+ <h2>Layouts</h2>
+ <div id="layout">
+ <h3>Layout</h3>
+ <p>
+ There are a few methods common to all layouts:
+ </p>
+ <h4>Methods</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">format</div>
+ <div class="methodsignature"><code>String <strong>format</strong>(LoggingEvent <em>loggingEvent</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">loggingEvent</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Formats the log message. You should override this method in your own layouts.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">ignoresThrowable</div>
+ <div class="methodsignature"><code>Boolean <strong>ignoresThrowable</strong>()</code></div>
+ <div class="summary">
+ Returns whether the layout ignores an error object in a logging event passed
+ to its <code>format</code> method.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getContentType</div>
+ <div class="methodsignature"><code>String <strong>getContentType</strong>()</code></div>
+ <div class="summary">
+ Returns the content type of the output of the layout.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">allowBatching</div>
+ <div class="methodsignature"><code>Boolean <strong>allowBatching</strong>()</code></div>
+ <div class="summary">
+ Returns whether the layout's output is suitable for batching.
+ <code><a href="#jsonlayout">JsonLayout</a></code> and <code><a href="#xmllayout">XmlLayout</a></code>
+ are the only built-in layouts that return true for this method.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getDataValues</div>
+ <div class="methodsignature"><code>Array <strong>getDataValues</strong>(LoggingEvent <em>loggingEvent</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">loggingEvent</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Used internally by log4javascript in constructing formatted output for some layouts.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setKeys</div>
+ <div class="methodsignature"><code>void <strong>setKeys</strong>(String <em>loggerKey</em>,
+ String <em>timeStampKey</em>, String <em>levelKey</em>, String <em>messageKey</em>,
+ String <em>exceptionKey</em>, String <em>urlKey</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">loggerKey</code>
+ <div>
+ Parameter to use for the log message's logger name. Default is <code>logger</code>.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">timeStampKey</code>
+ <div>
+ Parameter to use for the log message's timestamp. Default is <code>timestamp</code>.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">levelKey</code>
+ <div>
+ Parameter to use for the log message's level. Default is <code>level</code>.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">messageKey</code>
+ <div>
+ Parameter to use for the message itself. Default is <code>message</code>.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">exceptionKey</code>
+ <div>
+ Parameter to use for the log message's error (exception). Default is <code>exception</code>.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">urlKey</code>
+ <div>
+ Parameter to use for the current page URL. Default is <code>url</code>.
+ </div>
+ </li>
+ </ul>
+ <div class="summary">
+ This method is used to change the default keys used to create formatted name-value pairs
+ for the properties of a log message, for layouts that do this. These layouts are
+ <code><a href="#jsonlayout">JsonLayout</a></code> and
+ <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setCustomField</div>
+ <div class="methodsignature"><code>void <strong>setCustomField</strong>(String <em>name</em>,
+ String <em>value</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">name</code>
+ <div>
+ Name of the custom property you wish to be included in the formmtted output.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">value</code>
+ <div>
+ Value of the custom property you wish to be included in the formatted output.
+ </div>
+ </li>
+ </ul>
+ <div class="summary">
+ Some layouts (<code><a href="#jsonlayout">JsonLayout</a></code>,
+ <code><a href="#httppostdatalayout">HttpPostDataLayout</a></code>,
+ <code><a href="#patternlayout">PatternLayout</a></code> and
+ <code><a href="#xmllayout">XmlLayout</a></code>) allow you to set
+ custom fields (e.g. a session id to send to the server) to the
+ formatted output. Use this method to set a custom field. If there
+ is already a custom field with the specified name, its value will
+ be updated with <code>value</code>.
+ </div>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ <p>
+ From version 1.4, the custom field value may be a function. In this
+ case, the function is run at the time the layout's format method is called,
+ with the following two parameters:
+ </p>
+ <ul>
+ <li><em>layout</em>. A reference to the layout being used;</li>
+ <li><em>loggingEvent</em>. A reference to the logging event being formatted.</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li class="method">
+ <div class="name">hasCustomFields</div>
+ <div class="methodsignature"><code>Boolean <strong>hasCustomFields</strong>()</code></div>
+ <div class="summary">
+ Returns whether the layout has any custom fields.
+ </div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="nulllayout">
+ <h3>NullLayout</h3>
+ <p class="editions">Editions: <strong>All</strong></p>
+ <p>
+ The most basic layout. NullLayout's <code>format()</code> methods performs no
+ formatting at all and simply returns the message logged.
+ </p>
+ <h4>Constructor</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">NullLayout</div>
+ <div class="methodsignature"><code><strong>NullLayout</strong>()</code></div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="simplelayout">
+ <h3>SimpleLayout</h3>
+ <p class="editions">Editions: <strong>Standard, Production</strong></p>
+ <p>
+ Provides basic formatting. SimpleLayout consists of the level of the log statement,
+ followed by " - " and then the log message itself. For example,
+ </p>
+ <p><code>DEBUG - Hello world</code></p>
+ <h4>Constructor</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">SimpleLayout</div>
+ <div class="methodsignature"><code><strong>SimpleLayout</strong>()</code></div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="patternlayout">
+ <h3>PatternLayout</h3>
+ <p class="editions">Editions: <strong>All</strong></p>
+ <p>
+ Provides a flexible way of formatting a log message by means of a conversion pattern
+ string. The behaviour of this layout is a full implementation of <code>PatternLayout</code>
+ in log4j, with the exception of the set of conversion characters - log4javascript's is
+ necessarily a subset of that of log4j with a few additions of its own, since many of
+ the conversion characters in log4j only make sense in the context of Java.
+ </p>
+ <p>
+ The conversion pattern consists of literal text interspersed with special strings starting with
+ a % symbol called <em>conversion specifiers</em>. A conversion specifier consists of the
+ % symbol, a conversion character (possible characters are listed below) and
+ <em>format modifiers</em>. For full documentation of the conversion pattern, see
+ <a href="http://logging.apache.org/log4j/docs/api/org/apache/log4j/PatternLayout.html" target="_blank">log4j's
+ documentation</a>. Below is a list of all conversion characters available in log4javascript.
+ </p>
+ <h4>Conversion characters</h4>
+ <table border="1" cellspacing="0">
+ <thead>
+ <tr>
+ <th>Conversion Character</th>
+ <th>Effect</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>a</td>
+ <td>
+ <p>
+ Outputs log messages specified as an array.
+ </p>
+ <p>
+ Behaves exactly like <code>%m</code>, except that multiple log messages are
+ assumed to have been specified in the logging call as an array rather than
+ as multiple parameters.
+ </p>
+ <p>
+ <strong>Since: 1.4</strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>c</td>
+ <td>
+ <p>
+ Outputs the logger name.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>d</td>
+ <td>
+ <p>
+ Outputs the date of the logging event. The date conversion specifier
+ may be followed by a date format specifier enclosed between braces. For
+ example, <code>%d{HH:mm:ss,SSS}</code> or
+ <code>%d{dd MMM yyyy HH:mm:ss,SSS}</code>. If no date
+ format specifier is given then ISO8601 format is assumed.
+ </p>
+ <p>
+ The date format specifier is the same as that used by Java's
+ <code><a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/SimpleDateFormat.html"
+ target="_blank">SimpleDateFormat</a></code>. log4javascript
+ includes a full implementation of SimpleDateFormat's
+ <code>format</code> method, with the exception of the pattern letter
+ 'z', (string representation of the timezone) for which the information
+ is not available in JavaScript.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>f</td>
+ <td>
+ <p>
+ Outputs the value of a custom field set on the layout. If present, the specifier gives
+ the index in the array of custom fields to use; otherwise, the first custom field in the
+ array is used.
+ </p>
+ <p>
+ <strong>Since: 1.3</strong>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>m</td>
+ <td>
+ <p>
+ Outputs the log messages of the logging event (i.e. the log
+ messages supplied by the client code).
+ </p>
+ <p>
+ As of version 1.4, multiple log messages may be supplied to logging calls.
+ <code>%m</code> displays each log message (using the rules below) one after
+ another, separated by spaces.
+ </p>
+ <p>
+ As of version 1.3, an object may be specified as the log message and will
+ be expanded to show its properties in the output, provided that a specifier
+ containing the number of levels to expand is provided. If no specifier is
+ provided then the message will be treated as a string regardless of its type.
+ For example, <code>%m{1}</code> will display an expansion of the object one
+ level deep, i.e. each property of the object will be displayed but if the
+ property value is itself an object it will not be expanded and will appear
+ as <code>[object Object]</code>.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>n</td>
+ <td>
+ <p>
+ Outputs a line separator.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>p</td>
+ <td>
+ <p>
+ Outputs the level of the logging event.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>r</td>
+ <td>
+ <p>
+ Outputs the number of milliseconds since log4javascript was initialized.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>%</td>
+ <td>
+ <p>
+ The sequence %% outputs a single percent sign.
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <h4>Static properties</h4>
+ <ul class="propertieslist">
+ <li class="property">
+ <div class="name">TTCC_CONVERSION_PATTERN</div>
+ <div class="summary">
+ Built-in conversion pattern, equivalent to <code>%r %p %c - %m%n</code>.
+ </div>
+ </li>
+ <li class="property">
+ <div class="name">DEFAULT_CONVERSION_PATTERN</div>
+ <div class="summary">
+ Built-in conversion pattern, equivalent to <code>%m%n</code>.
+ </div>
+ </li>
+ <li class="property">
+ <div class="name">ISO8601_DATEFORMAT</div>
+ <div class="summary">
+ Built-in date format (and also the default), equivalent to
+ <code>yyyy-MM-dd HH:mm:ss,SSS</code>.
+ </div>
+ </li>
+ <li class="property">
+ <div class="name">DATETIME_DATEFORMAT</div>
+ <div class="summary">
+ Built-in date format, equivalent to <code>dd MMM YYYY HH:mm:ss,SSS</code>.
+ </div>
+ </li>
+ <li class="property">
+ <div class="name">ABSOLUTETIME_DATEFORMAT</div>
+ <div class="summary">
+ Built-in date format, equivalent to <code>HH:mm:ss,SSS</code>.
+ </div>
+ </li>
+ </ul>
+ <h4>Constructor</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">PatternLayout</div>
+ <div class="methodsignature"><code><strong>PatternLayout</strong>(String <em>pattern</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">pattern</code>
+ <div>
+ The conversion pattern string to use.
+ </div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="xmllayout">
+ <h3>XmlLayout</h3>
+ <p class="editions">Editions: <strong>Standard, Production</strong></p>
+ <p>
+ Based on log4j's <code>XmlLayout</code>, this layout formats a log message as a
+ fragment of XML. An example of the format of the fragment is as follows:
+ </p>
+ <pre>
+<log4javascript:event logger="[default]" timestamp="1201048234203" level="ERROR">
+<log4javascript:message><![CDATA[Big problem!]]></log4javascript:message>
+<log4javascript:exception><![CDATA[Nasty error on line number 1
+ in file http://log4javascript.org/test.html]]></log4javascript:exception>
+</log4javascript:event>
+</pre>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ This layout supports batching of log messages when used in an
+ <code><a href="#ajaxappender">AjaxAppender</a></code>. A batch of
+ messages is simply concatenated to form a string of several XML
+ frgaments similar to that above.
+ </li>
+ <li>
+ The <code><log4javascript:exception></code> element is only present if an
+ exception was passed into the original log call.
+ </li>
+ <li>
+ As of version 1.4, timestamps are returned as milliseconds since midnight of
+ January 1, 1970 rather than seconds as in previous versions. This allows finer
+ measurement of the time a logging event occurred and is also the JavaScript
+ <code>Date</code> object's standard measurement.
+ </li>
+ <li>
+ Also as of version 1.4, multiple messages may be specified as separate parameters
+ in a single logging call. In <code>XmlLayout</code>, multiple messages may be
+ formatted as a single combined message or may be formated as several
+ <code><log4javascript:message></code> elements inside one
+ <code><log4javascript:messages></code> element as shown below:
+ <br />
+ <pre>
+<log4javascript:event logger="[default]" timestamp="1201048234203" level="ERROR">
+<log4javascript:messages>
+ <log4javascript:message><![CDATA[Big problem!]]></log4javascript:message>
+ <log4javascript:message><![CDATA[Value of x when this error
+ occurred: 3]]></log4javascript:message>
+</log4javascript:messages>
+<log4javascript:exception><![CDATA[Nasty error on line number 1
+ in file http://log4javascript.org/test.html]]></log4javascript:exception>
+</log4javascript:event>
+</pre>
+ </li>
+ <li>
+ As of version 1.3, custom fields may be added to the output. Each field will
+ add a tag of the following form inside the <code><log4javascript:event></code>
+ tag:
+ <br />
+ <pre>
+<log4javascript:customfield name="sessionid"><![CDATA[1234]]></log4javascript:customfield>
+</pre>
+ </li>
+ </ul>
+ <h4>Constructor</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">XmlLayout</div>
+ <div class="methodsignature"><code><strong>XmlLayout</strong>([Boolean <em>combineMessages</em>])</code></div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">combineMessages</code>
+ <div>
+ Whether or not to format multiple log messages as a combined single
+ <code><log4javascript:message></code> element
+ composed of each individual message separated by line breaks or to include
+ a <code><log4javascript:message></code> element for each message inside
+ one <code><log4javascript:messages></code> element.
+ If not specified, defaults to <code>true</code>.
+ </div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="jsonlayout">
+ <h3>JsonLayout</h3>
+ <p class="editions">Editions: <strong>Standard, Production</strong></p>
+ <p>
+ Formats a logging event into JavaScript Object Notation (JSON).
+ JSON is a subset of JavaScript's object literal syntax, meaning that log
+ messages formatted with this layout can be interpreted directly by JavaScript
+ and converted into objects. See
+ <a href="http://json.org/" target="_blank" title="json.org (opens in new window)">json.org</a> for more details
+ about JSON.
+ </p>
+ <p>Example:</p>
+ <pre>
+{
+ "logger": "[default]",
+ "timeStamp": 1201048234203,
+ "level": "ERROR",
+ "url": "http://log4javascript.org/test.html",
+ "message": "Big problem!",
+ "exception": "Nasty error on line number 1 in file
+ http://log4javascript.org/test.html"
+}
+</pre>
+ <p>
+ The <code>exception</code> property is only present if an exception was passed
+ into the original log call.
+ </p>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ This layout supports batching of log messages when used in an
+ <code><a href="#ajaxappender">AjaxAppender</a></code>. When sent singly
+ the layout formats the log message as a single JavaScript object literal;
+ when sent as a batch, the messages are formatted as an array literal whose
+ elements are log message objects.
+ </li>
+ <li>
+ <p>
+ As of version 1.3, custom fields may be added to the output. Each field will
+ add a property of the following form to the main object literal:
+ </p>
+ <pre>
+ "sessionid": 1234
+</pre>
+ </li>
+ <li>
+ From version 1.4, the variable names used for log event properties such as
+ the message, timestamp and exception are specified using the <code>setKeys()</code>
+ method of <code><a href="#layout">Layout</a></code>.
+ </li>
+ <li>
+ <p>
+ Also as of version 1.4, multiple messages may be specified as separate parameters
+ in a single logging call. In <code>JsonLayout</code>, multiple messages may be
+ formatted as a single combined message or may be formated as an array of messages
+ as shown below:
+ </p>
+ <pre>
+{
+ "logger": "[default]",
+ "timeStamp": 1201048234203,
+ "level": "ERROR",
+ "url": "http://log4javascript.org/test.html",
+ "message": [
+ "Big problem!",
+ "Value of x when this error occurred: 3"
+ ],
+ "exception": "Nasty error on line number 1 in file
+ http://log4javascript.org/test.html"
+}
+</pre>
+ </li>
+ </ul>
+ <h4>Constructor</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">JsonLayout</div>
+ <div class="methodsignature"><code><strong>JsonLayout</strong>([Boolean <em>readable</em>, Boolean <em>combineMessages</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">readable</code>
+ <div>
+ Whether or not to format each log message with line breaks and tabs.
+ If not specified, defaults to <code>false</code>.
+ </div>
+ </li>
+ <li class="param">
+ <code class="paramname">combineMessages</code>
+ <div>
+ Whether or not to format multiple log messages as a combined single
+ <code>message</code> property composed of each individual message separated by line
+ breaks or to format multiple messages as an array.
+ If not specified, defaults to <code>true</code>.
+ </div>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4>Methods</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">isReadable</div>
+ <div class="methodsignature"><code>Boolean <strong>isReadable</strong>()</code></div>
+ <div class="summary">
+ Returns whether or not to each log message is formatted with line breaks and tabs.
+ </div>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ <p>
+ <code>setReadable</code> has been removed in version 1.4. This property can
+ be set via the constructor.
+ </p>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ <div id="httppostdatalayout">
+ <h3>HttpPostDataLayout</h3>
+ <p class="editions">Editions: <strong>Standard, Production</strong></p>
+ <p>
+ Formats the log message as a simple URL-encoded string from which a simple
+ server-side script may extract parameters such as the log message, severity
+ and timestamp. This is the default layout for
+ <code><a href="#ajaxappender">AjaxAppender</a></code>.
+ </p>
+ <h4>Constructor</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">HttpPostDataLayout</div>
+ <div class="methodsignature"><code><strong>HttpPostDataLayout</strong>()</code></div>
+ </li>
+ </ul>
+ <p><strong>Notes</strong></p>
+ <ul>
+ <li>
+ As of version 1.3, custom fields may be added to the output. Each field will
+ be added as a parameter to the post data.
+ </li>
+ <li>
+ From version 1.4, the variable names used for log event properties such as
+ the message, timestamp and exception are specified using the <code>setKeys()</code>
+ method of <code><a href="#layout">Layout</a></code>.
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ </div>
+ <div id="enabling">
+ <h2>Enabling / disabling log4javascript</h2>
+ <p>
+ All logging can be enabled or disabled in log4javascript in a number of ways:
+ </p>
+ <ul>
+ <li>
+ At any time, you can call
+ <code>log4javascript.setEnabled(<em>enabled</em>)</code>. This will
+ enable or disable all logging, depending on whether <code>enabled</code>
+ is set to <code>true</code> or <code>false</code>.
+ </li>
+ <li>
+ <p>
+ Assign a value to the global variable <code>log4javascript_disabled</code>.
+ The idea of this is so that you can enable or disable logging for a whole site by
+ including a JavaScript file in all your pages, and allowing this file to be
+ included <strong>before</strong> log4javascript.js to guarantee that no logging
+ can take place without having to alter log4javascript.js itself. Your included
+ .js file would include a single line such as the following:
+ </p>
+ <p>
+ <code>var log4javascript_disabled = true;</code>
+ </p>
+ </li>
+ <li>
+ Assign your logger object a value of <code>log4javascript.getNullLogger()</code>.
+ </li>
+ <li>
+ Replace your copy of log4javascript_x.js with stubs/log4javascript_x.js, provided in the
+ distribution. This file has a stub version of each of the functions and methods
+ in the log4javascript API and can simply be dropped in in place of the main file.
+ The compressed version of the stub is typically 15 times smaller than the
+ compressed version of the main file.
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="errorhandling">
+ <h2>log4javascript error handling</h2>
+ <p>
+ log4javascript has a single rudimentary logger-like object of its own to handle
+ messages generated by log4javascript itself. This logger is called <code>LogLog</code>
+ and is accessed via <code>log4javascript.logLog</code>.
+ </p>
+ <div id="loglog">
+ <h4>Methods</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">setQuietMode</div>
+ <div class="methodsignature"><code>void <strong>setQuietMode</strong>(Boolean <em>quietMode</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">quietMode</code>
+ <div>
+ Whether to turn quiet mode on or off.
+ </div>
+ </li>
+ </ul>
+ <div class="summary">
+ Sets whether <code>LogLog</code> is in quiet mode or not. In quiet mode, no
+ messages sent to <code>LogLog</code> have any visible effect. By default,
+ quiet mode is switched off.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setAlertAllErrors</div>
+ <div class="methodsignature"><code>void <strong>setAlertAllErrors</strong>(Boolean <em>alertAllErrors</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">showAllErrors</code>
+ <div>
+ Whether to show all errors or just the first.
+ </div>
+ </li>
+ </ul>
+ <div class="summary">
+ Sets how many errors <code>LogLog</code> will display alerts for. By default,
+ only the first error encountered generates an alert to the user. If you turn
+ all errors on by supplying <code>true</code> to this method then all errors
+ will generate alerts.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">debug</div>
+ <div class="methodsignature"><code>void <strong>debug</strong>(String <em>message</em>[, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs a debugging message to an in-memory list. This implementation is new in version 1.4.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">displayDebug</div>
+ <div class="methodsignature"><code>void <strong>displayDebug</strong>()</code></div>
+ <div class="summary">
+ Displays an alert of all debugging messages. This method is new in version 1.4.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">warn</div>
+ <div class="methodsignature"><code>void <strong>warn</strong>(String <em>message</em>[, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Currently has no effect.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">error</div>
+ <div class="methodsignature"><code>void <strong>error</strong>(String <em>message</em>[, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Generates an alert to the user if and only if the error is the first one
+ encountered and <code>setAlertAllErrors(true)</code> has not been called.
+ </div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ </div>
+ <div id="differences">
+ <h2>Differences between log4javascript and log4j</h2>
+ <p>
+ For the sake of keeping log4javascript as light and useful as possible, many
+ of the features of log4j that seem over-complex or inappropriate for
+ JavaScript have not been implemented. These include:
+ </p>
+ <ul>
+ <li>Filters</li>
+ <li>Configurators</li>
+ <li>Renderers</li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ </div>
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/docs/manual_lite.html b/planetstack/core/static/log4javascript-1.4.6/docs/manual_lite.html
new file mode 100644
index 0000000..74e5a7d
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/docs/manual_lite.html
@@ -0,0 +1,383 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript 1.4 Lite manual</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ </head>
+ <body>
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="index.html">log4javascript</a></h1>
+ </div>
+ <div id="content">
+ <div id="nav">
+ <a class="navitem" href="../index.html">home</a>
+ | <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <a class="navitem" href="index.html">docs</a>
+ | <a class="navitem" href="quickstart.html">quick start</a>
+ | <a class="navitem" href="../demos/index.html">demos</a>
+ | <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
+ | <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
+ </div>
+ <h1>log4javascript 1.4 Lite manual</h1>
+ <h2>Contents</h2>
+ <ul>
+ <li><a href="#intro">Introduction</a></li>
+ <li><a href="#log4javascript">log4javascript static properties/methods</a></li>
+ <li><a href="#levels">Levels</a></li>
+ <li><a href="#loggers">Loggers</a></li>
+ <li><a href="#enabling">Enabling / disabling log4javascript Lite</a></li>
+ </ul>
+ <div id="intro">
+ <h2>Introduction</h2>
+ <p>
+ log4javascript Lite is designed to be a basic, lightweight, cross-browser logging tool. It
+ provides functions to log messages of different severity to a pop-up window using the exactly
+ the same syntax as log4javascript. It is designed for situations when the key requirement is just
+ to display logging messages without needing all the features of the standard version of
+ log4javascript.
+ </p>
+ <p>
+ Below is the complete list of functions and properties available in log4javascript Lite.
+ They make up a small subset of those provided by the standard version of
+ log4javascript. Each function is <strong>named and called identically to the equivalent
+ function in log4javascript</strong>. Please refer to the
+ <a href="manual.html">log4javascript manual</a> for a detailed explanation
+ of all the concepts alluded to in this document.
+ </p>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="log4javascript">
+ <h2>log4javascript static properties/methods</h2>
+ <h4>Properties</h4>
+ <ul class="propertieslist">
+ <li class="property">
+ <div class="name">version</div>
+ <div class="summary">
+ The version number of your copy of log4javascript.
+ </div>
+ </li>
+ <li class="property">
+ <div class="name">edition</div>
+ <div class="summary">
+ The edition of your copy of log4javascript ("log4javascript_lite" in this case").
+ </div>
+ </li>
+ </ul>
+ <h4>Methods</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">getDefaultLogger</div>
+ <div class="methodsignature"><code>Logger <strong>getDefaultLogger</strong>()</code></div>
+ <div class="summary">
+ Returns the default and only logger (apart from the null logger). The default logger
+ logs to a simple pop-up window.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getNullLogger</div>
+ <div class="methodsignature"><code>Logger <strong>getNullLogger</strong>()</code></div>
+ <div class="summary">
+ Returns an empty logger. Useful for disabling all logging.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setEnabled</div>
+ <div class="methodsignature"><code>void <strong>setEnabled</strong>(Boolean <em>enabled</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">enabled</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Enables or disables all logging, depending on <code>enabled</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns true or false depending on whether logging is enabled.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">setShowStackTraces</div>
+ <div class="methodsignature"><code>void <strong>setShowStackTraces</strong>(Boolean <em>show</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">show</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Enables or disables displaying of error stack traces, depending on <code>show</code>.
+ By default, stack traces are not displayed. (Only works in Firefox)
+ </div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="levels">
+ <h2>Levels</h2>
+ <p>
+ Levels are available as static properties of the <code>log4javascript.Level</code>
+ object. In ascending order of severity:
+ </p>
+ <ol>
+ <li><code>log4javascript.Level.ALL</code></li>
+ <li><code>log4javascript.Level.TRACE</code></li>
+ <li><code>log4javascript.Level.DEBUG</code></li>
+ <li><code>log4javascript.Level.INFO</code></li>
+ <li><code>log4javascript.Level.WARN</code></li>
+ <li><code>log4javascript.Level.ERROR</code></li>
+ <li><code>log4javascript.Level.FATAL</code></li>
+ <li><code>log4javascript.Level.NONE</code></li>
+ </ol>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="loggers">
+ <h2>Loggers</h2>
+ <p>
+ There are only two loggers in log4javascript Lite: the default logger obtained
+ by calling <code>log4javascript.getDefaultLogger()</code> and the empty logger
+ returned by <code>log4javascript.getNullLogger()</code>.
+ </p>
+ <h4>Logger methods</h4>
+ <ul class="propertieslist">
+ <li class="method">
+ <div class="name">setLevel</div>
+ <div class="methodsignature"><code>void <strong>setLevel</strong>(Level <em>level</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">level</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Sets the level. Log messages of a lower level than <code>level</code> will not be logged.
+ Default value is <code>ALL</code> (unlike in log4javascript, where the default level is
+ <code>DEBUG</code>).
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">getLevel</div>
+ <div class="methodsignature"><code>Level <strong>getLevel</strong>()</code></div>
+ <div class="summary">
+ Returns the level for this logger.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">trace</div>
+ <div class="methodsignature"><code>void <strong>trace</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>TRACE</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">debug</div>
+ <div class="methodsignature"><code>void <strong>debug</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>DEBUG</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">info</div>
+ <div class="methodsignature"><code>void <strong>info</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>INFO</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">warn</div>
+ <div class="methodsignature"><code>void <strong>warn</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>WARN</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">error</div>
+ <div class="methodsignature"><code>void <strong>error</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>ERROR</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">fatal</div>
+ <div class="methodsignature"><code>void <strong>fatal</strong>(Object <em>message1</em>[, Object <em>message2</em>, ... ][, Error <em>exception</em>])</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">message1[, message2...]</code>
+ </li>
+ <li class="param">
+ <code class="paramname">exception</code>
+ [<em>optional</em>]
+ </li>
+ </ul>
+ <div class="summary">
+ Logs one or more messages and optionally an error at level <code>FATAL</code>.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isEnabledFor</div>
+ <div class="methodsignature"><code>Boolean <strong>isEnabledFor</strong>(Level <em>level</em>, Error <em>exception</em>)</code></div>
+ <div class="paramsheading">Parameters:</div>
+ <ul class="params">
+ <li class="param">
+ <code class="paramname">level</code>
+ </li>
+ </ul>
+ <div class="summary">
+ Returns whether the logger is enabled for the specified level.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isTraceEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isTraceEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>TRACE</code> messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isDebugEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isDebugEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>DEBUG</code> messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isInfoEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isInfoEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>INFO</code> messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isWarnEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isWarnEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>WARN</code> messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isErrorEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isErrorEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>ERROR</code> messages.
+ </div>
+ </li>
+ <li class="method">
+ <div class="name">isFatalEnabled</div>
+ <div class="methodsignature"><code>Boolean <strong>isFatalEnabled</strong>()</code></div>
+ <div class="summary">
+ Returns whether the logger is enabled for <code>FATAL</code> messages.
+ </div>
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ <div id="enabling">
+ <h2>Enabling / disabling log4javascript Lite</h2>
+ <p>
+ All logging can be enabled or disabled in log4javascript Lite in a number of ways:
+ </p>
+ <ul>
+ <li>
+ At any time, you can call
+ <code>log4javascript.setEnabled(<em>enabled</em>)</code>. This will
+ enable or disable all logging, depending on whether <code>enabled</code>
+ is set to <code>true</code> or <code>false</code>.
+ </li>
+ <li>
+ Assign your logger object a value of <code>log4javascript.getNullLogger()</code>.
+ </li>
+ <li>
+ Replace your copy of log4javascript_lite.js with stubs/log4javascript_lite.js, provided in the
+ distribution. This file has a stub version of each of the functions and methods
+ in the log4javascript Lite API and can simply be dropped in in place of the main file.
+ </li>
+ </ul>
+ <p class="linktotop">
+ <a href="#container">Top</a>
+ </p>
+ </div>
+ </div>
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/docs/quickstart.html b/planetstack/core/static/log4javascript-1.4.6/docs/quickstart.html
new file mode 100644
index 0000000..3bffff5
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/docs/quickstart.html
@@ -0,0 +1,230 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript quick start tutorial</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ </head>
+ <body>
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="index.html">log4javascript</a></h1>
+ </div>
+ <div id="content">
+ <div id="nav">
+ <a class="navitem" href="../index.html">home</a>
+ | <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <a class="navitem" href="index.html">docs</a>
+ | <span class="navitem">quick start</span>
+ | <a class="navitem" href="../demos/index.html">demos</a>
+ | <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
+ | <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
+ </div>
+ <h1>log4javascript quick start tutorial</h1>
+ <h2>Three step guide</h2>
+ <ol>
+ <li>
+ <h3>Download the code</h3>
+ <p>
+ Unzip the distribution and copy log4javascript.js into the desired
+ location. No other files are necessary.
+ </p>
+ </li>
+ <li>
+ <h3>Initialize log4javascript in your web page</h3>
+ <p>
+ Include log4javascript.js in your page using the code below. This
+ code assumes log4javascript is stored in the same directory as
+ your web page.
+ </p>
+ <pre class="code">
+<script type="text/javascript" src="log4javascript.js"></script>
+<script type="text/javascript">
+ var log = log4javascript.getDefaultLogger();
+</script>
+</pre>
+ <p>
+ The default logger uses a <code><a href="manual.html#popupappender">PopUpAppender</a></code>
+ which opens a pop-up window. By default, this window will open when the first
+ log message is written. For this to work, you will need to disable any pop-up blockers
+ you may have.
+ </p>
+ </li>
+ <li>
+ <h3>Include logging statements in your code</h3>
+ <p>
+ You have six logging methods at your disposal, depending on the severity
+ of the message you wish to log. By default, all messages are logged
+ in the pop-up window. The logging methods are:
+ </p>
+ <ul>
+ <li><code>log.trace(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>
+ <li><code>log.debug(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>
+ <li><code>log.info(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>
+ <li><code>log.warn(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>
+ <li><code>log.error(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>
+ <li><code>log.fatal(<em>message</em>[, <em>message2</em>, ... ][, <em>exception</em>])</code></li>
+ </ul>
+ <p>
+ And that's it, log away. Below are some examples of common types of logging.
+ </p>
+ </li>
+ </ol>
+ <h2>Logging examples</h2>
+ <ol>
+ <li>
+ <h3>A simple logging message string</h3>
+ <pre class="code">
+ log.info("Hello world");
+</pre>
+displays
+ <pre class="console info">
+19:52:03 INFO - Hello world
+</pre>
+ </li>
+ <li>
+ <h3>Logging an error with a message</h3>
+ <pre class="code">
+ try {
+ throw new Error("Faking something going wrong!");
+ } catch (e) {
+ log.error("An error occurred", e);
+ }
+</pre>
+displays
+ <pre class="console error">
+19:52:32 ERROR - An error occurred
+Exception: Faking something going wrong! on line number 80 in file basic.html
+</pre>
+ </li>
+ <li>
+ <h3>Logging multiple messages with one logging call</h3>
+ <pre class="code">
+ var a = "Hello";
+ var b = 3;
+ log.debug(a, b);
+</pre>
+displays
+ <pre class="console debug">
+19:53:05 DEBUG - Hello 3
+</pre>
+ </li>
+ <li>
+ <h3>Logging an object</h3>
+ <p>Logging an object:</p>
+ <pre class="code">
+ var obj = new Object();
+ obj.name = "Octopus";
+ obj.tentacles = 8;
+ log.info(obj);
+</pre>
+displays
+ <pre class="console info">
+19:53:17 INFO - {
+ name: Octopus,
+ tentacles: 8
+}
+</pre>
+ </li>
+ </ol>
+ <h2>Tweaking the default logger</h2>
+ <p>
+ The default logger is fine as a starting point, but what if you want the default logger
+ with a few different options (say, bringing the pop-up to the front whenever a log message is
+ logged, or having new log messages appear at the top of the pop-up rather than the bottom)?
+ </p>
+ <p>
+ In this case, you will need to create a new logger, then create a
+ <code><a href="manual.html#popupappender">PopUpAppender</a></code>, set options
+ on it, and add it to the logger:
+ </p>
+ <pre class="code">
+<script type="text/javascript" src="log4javascript.js"></script>
+<script type="text/javascript">
+ // Create the logger
+ var log = log4javascript.getLogger();
+
+ // Create a PopUpAppender with default options
+ var popUpAppender = new log4javascript.PopUpAppender();
+
+ // Change the desired configuration options
+ popUpAppender.setFocusPopUp(true);
+ popUpAppender.setNewestMessageAtTop(true);
+
+ // Add the appender to the logger
+ log.addAppender(popUpAppender);
+
+ // Test the logger
+ log.debug("Hello world!");
+</script>
+</pre>
+ <p>
+ <a href="../examples/example_quickstart_1.html" title="View example (opens in new window)"
+ target="_blank">See this example in action</a> (opens in new window)
+ </p>
+ <p>
+ Refer to the manual for more information about
+ <a href="manual.html#configuration">configuring appenders</a> and more
+ details about <code><a href="manual.html#popupappender">PopUpAppender</a></code>.
+ </p>
+ <h2>Sending log messages to the server</h2>
+ <p>
+ For this you will need to use an <code><a href="manual.html#ajaxappender">AjaxAppender</a></code>
+ as follows:
+ </p>
+ <pre class="code">
+ var ajaxAppender = new log4javascript.AjaxAppender(<em>URL</em>);
+ log.addAppender(ajaxAppender);
+</pre>
+ <p>
+ Now your log messages will appear in the pop-up window and be sent
+ asynchronously to the URL you specify in the form of HTTP post parameters.
+ No server-side code to process these requests is provided with log4javascript.
+ </p>
+ <p>
+ See <code><a href="manual.html#ajaxappender">AjaxAppender</a></code> for more details
+ on formatting log messages.
+ </p>
+ <h2>Changing the format of log messages</h2>
+ <p>
+ Using a <code><a href="manual.html#layouts">Layout</a></code>, you can
+ format log messages however you like. For example:
+ </p>
+ <pre class="code">
+ var log = log4javascript.getLogger("mylogger");
+ var popUpAppender = new log4javascript.PopUpAppender();
+ var layout = new log4javascript.PatternLayout("[%-5p] %m");
+ popUpAppender.setLayout(layout);
+</pre>
+ <p>A call to</p>
+ <pre class="code">
+ log.debug("Hello world");
+</pre>
+ <p>will now result in output in the pop-up window of </p>
+ <pre class="console debug">
+[DEBUG] Hello world
+</pre>
+ <p>
+ See <code><a href="manual.html#patternlayout">PatternLayout</a></code> for more details
+ on formatting log messages.
+ </p>
+ </div>
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/docs/whatsnew.html b/planetstack/core/static/log4javascript-1.4.6/docs/whatsnew.html
new file mode 100644
index 0000000..6e4e06f
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/docs/whatsnew.html
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript - what's new in version 1.4</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <link rel="stylesheet" type="text/css" media="screen,print" href="../main.css" title="Default" />
+ </head>
+ <body>
+ <div id="container" class="nonav">
+ <div id="header">
+ <h1><a href="index.html">log4javascript</a></h1>
+ </div>
+ <div id="content">
+ <div id="nav">
+ <a class="navitem" href="../index.html">home</a>
+ | <a class="navitem" href="http://sourceforge.net/projects/log4javascript" target="_blank" title="Download (opens in new window)">download</a>
+ | <a class="navitem" href="index.html">docs</a>
+ | <a class="navitem" href="quickstart.html">quick start</a>
+ | <a class="navitem" href="../demos/index.html">demos</a>
+ | <a class="navitem" href="http://log4javascript.org" target="_blank">website</a>
+ | <a class="navitem" href="http://www.timdown.co.uk" target="_blank">timdown.co.uk</a>
+ </div>
+ <h1>log4javascript - what's new in version 1.4</h1>
+ <ul>
+ <li>
+ log4javascript now comes in three different editions: Standard, Production
+ and Lite. <a href="distribution.html">Full details here</a>.
+ </li>
+ <li>
+ Loggers are now hierarchical and work exactly the same as log4j loggers.
+ This means that a logger with no level set on it inherits its level from its parent,
+ and inherits all of its parents appenders.
+ </li>
+ <li>
+ The logging console used by <code><a href="manual.html#popupappender">PopUpAppender</a></code> and
+ <code><a href="manual.html#inpageappender">InPageAppender</a></code>now has a command line, featuring
+ a command history navigated with the up and down arrow keys and a number of built-in command line
+ functions.
+ </li>
+ <li>
+ It is now possible to specify multiple messages in a single log call.
+ </li>
+ <li>
+ Log messages may be grouped in the logging console.
+ </li>
+ <li>
+ Built-in timers.
+ </li>
+ <li>
+ Improved <code><a href="manual.html#ajaxappender">AjaxAppender</a></code>, with the ability
+ to send all pending log calls to the server when navigating away from a page. Timestamps now
+ include milliseconds. All log messages or batches of log messages are now posted as
+ name-value pairs.
+ </li>
+ <li>
+ Support for IE8 beta 2.
+ </li>
+ <li>
+ Many minor enhancements and bug fixes. See the <a href="../changelog.txt">change log</a> for full
+ details.
+ </li>
+ </ul>
+ <p>
+ Please note that there are a few minor <a href="backwardsincompatibilities.html">incompatibilities
+ with earlier versions of log4javascript</a>.
+ </p>
+ </div>
+ <div id="footer">
+ <span class="externallinkinfo">
+ <strong>NB.</strong> All external links open in a new window.
+ </span>
+ Written by Tim Down. <a href="mailto:tim@log4javascript.org">tim@log4javascript.org</a>
+ <br />
+ log4javascript is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0.html"
+ title="Apache License, Version 2.0 (opens in new window)" target="_blank">Apache License,
+ Version 2.0</a>
+
+ </div>
+ </div>
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/examples/demo.html b/planetstack/core/static/log4javascript-1.4.6/examples/demo.html
new file mode 100644
index 0000000..118b879
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/examples/demo.html
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript demo redirect</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="noindex" />
+ <meta http-equiv="refresh" content="0; url=../demos/basic.html" />
+ </head>
+ <body>
+ This page has been replaced by <a href="/demos/basic.html">the basic demo page</a>.
+ Please use this link if you are not redirected automatically.
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/examples/example_manual.html b/planetstack/core/static/log4javascript-1.4.6/examples/example_manual.html
new file mode 100644
index 0000000..68189e3
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/examples/example_manual.html
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript example from manual</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <script type="text/javascript" src="../js/log4javascript.js"></script>
+ <script type="text/javascript">
+ //<![CDATA[
+ var log = log4javascript.getLogger();
+ var popUpAppender = new log4javascript.PopUpAppender();
+ var popUpLayout = new log4javascript.PatternLayout("%d{HH:mm:ss} %-5p - %m%n");
+ popUpAppender.setLayout(popUpLayout);
+ log.addAppender(popUpAppender);
+ var ajaxAppender = new log4javascript.AjaxAppender("myloggingservlet.do");
+ ajaxAppender.setThreshold(log4javascript.Level.ERROR);
+ log.addAppender(ajaxAppender);
+ log.debug("Debugging message (appears in pop-up)");
+ log.error("Error message (appears in pop-up and in server log)");
+ //]]>
+ </script>
+ </head>
+ <body>
+ <h1>log4javascript example from manual</h1>
+
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/examples/example_quickstart_1.html b/planetstack/core/static/log4javascript-1.4.6/examples/example_quickstart_1.html
new file mode 100644
index 0000000..3ae4a9f
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/examples/example_quickstart_1.html
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript quick start example 1</title>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <meta name="author" content="Tim Down - tim@log4javascript.org" />
+ <meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
+ <meta name="robots" content="all" />
+ <script type="text/javascript" src="../js/log4javascript.js"></script>
+ <script type="text/javascript">
+ //<![CDATA[
+ // Create the logger
+ var log = log4javascript.getLogger();
+
+ // Create a PopUpAppender with default options
+ var popUpAppender = new log4javascript.PopUpAppender();
+
+ // Change the desired configuration options
+ popUpAppender.setFocusPopUp(true);
+ popUpAppender.setNewestMessageAtTop(true);
+
+ // Add the appender to the logger
+ log.addAppender(popUpAppender);
+
+ // Test the logger
+ log.debug("Hello world!");
+ //]]>
+ </script>
+ </head>
+ <body>
+ <h1>log4javascript quick start example 1</h1>
+
+
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/examples/myloggingservlet.do b/planetstack/core/static/log4javascript-1.4.6/examples/myloggingservlet.do
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/examples/myloggingservlet.do
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/console.html b/planetstack/core/static/log4javascript-1.4.6/js/console.html
new file mode 100644
index 0000000..476d272
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/console.html
@@ -0,0 +1,263 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<title>log4javascript</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->
+<meta http-equiv="X-UA-Compatible" content="IE=7" />
+<script type="text/javascript">var isIe = false, isIePre7 = false;</script>
+<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->
+<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->
+<script type="text/javascript">
+//<![CDATA[
+var loggingEnabled=true;var logQueuedEventsTimer=null;var logEntries=[];var logEntriesAndSeparators=[];var logItems=[];var renderDelay=100;var unrenderedLogItemsExist=false;var rootGroup,currentGroup=null;var loaded=false;var currentLogItem=null;var logMainContainer;function copyProperties(obj,props){for(var i in props){obj[i]=props[i];}}
+function LogItem(){}
+LogItem.prototype={mainContainer:null,wrappedContainer:null,unwrappedContainer:null,group:null,appendToLog:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].appendToLog();}
+this.group.update();},doRemove:function(doUpdate,removeFromGroup){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].remove();}
+this.unwrappedElementContainer=null;this.wrappedElementContainer=null;this.mainElementContainer=null;}
+if(this.group&&removeFromGroup){this.group.removeChild(this,doUpdate);}
+if(this===currentLogItem){currentLogItem=null;}},remove:function(doUpdate,removeFromGroup){this.doRemove(doUpdate,removeFromGroup);},render:function(){},accept:function(visitor){visitor.visit(this);},getUnwrappedDomContainer:function(){return this.group.unwrappedElementContainer.contentDiv;},getWrappedDomContainer:function(){return this.group.wrappedElementContainer.contentDiv;},getMainDomContainer:function(){return this.group.mainElementContainer.contentDiv;}};LogItem.serializedItemKeys={LOG_ENTRY:0,GROUP_START:1,GROUP_END:2};function LogItemContainerElement(){}
+LogItemContainerElement.prototype={appendToLog:function(){var insertBeforeFirst=(newestAtTop&&this.containerDomNode.hasChildNodes());if(insertBeforeFirst){this.containerDomNode.insertBefore(this.mainDiv,this.containerDomNode.firstChild);}else{this.containerDomNode.appendChild(this.mainDiv);}}};function SeparatorElementContainer(containerDomNode){this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="separator";this.mainDiv.innerHTML=" ";}
+SeparatorElementContainer.prototype=new LogItemContainerElement();SeparatorElementContainer.prototype.remove=function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;};function Separator(){this.rendered=false;}
+Separator.prototype=new LogItem();copyProperties(Separator.prototype,{render:function(){var containerDomNode=this.group.contentDiv;if(isIe){this.unwrappedElementContainer=new SeparatorElementContainer(this.getUnwrappedDomContainer());this.wrappedElementContainer=new SeparatorElementContainer(this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new SeparatorElementContainer(this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}
+this.content=this.formattedMessage;this.rendered=true;}});function GroupElementContainer(group,containerDomNode,isRoot,isWrapped){this.group=group;this.containerDomNode=containerDomNode;this.isRoot=isRoot;this.isWrapped=isWrapped;this.expandable=false;if(this.isRoot){if(isIe){this.contentDiv=logMainContainer.appendChild(document.createElement("div"));this.contentDiv.id=this.isWrapped?"log_wrapped":"log_unwrapped";}else{this.contentDiv=logMainContainer;}}else{var groupElementContainer=this;this.mainDiv=document.createElement("div");this.mainDiv.className="group";this.headingDiv=this.mainDiv.appendChild(document.createElement("div"));this.headingDiv.className="groupheading";this.expander=this.headingDiv.appendChild(document.createElement("span"));this.expander.className="expander unselectable greyedout";this.expander.unselectable=true;var expanderText=this.group.expanded?"-":"+";this.expanderTextNode=this.expander.appendChild(document.createTextNode(expanderText));this.headingDiv.appendChild(document.createTextNode(" "+this.group.name));this.contentDiv=this.mainDiv.appendChild(document.createElement("div"));var contentCssClass=this.group.expanded?"expanded":"collapsed";this.contentDiv.className="groupcontent "+contentCssClass;this.expander.onclick=function(){if(groupElementContainer.group.expandable){groupElementContainer.group.toggleExpanded();}};}}
+GroupElementContainer.prototype=new LogItemContainerElement();copyProperties(GroupElementContainer.prototype,{toggleExpanded:function(){if(!this.isRoot){var oldCssClass,newCssClass,expanderText;if(this.group.expanded){newCssClass="expanded";oldCssClass="collapsed";expanderText="-";}else{newCssClass="collapsed";oldCssClass="expanded";expanderText="+";}
+replaceClass(this.contentDiv,newCssClass,oldCssClass);this.expanderTextNode.nodeValue=expanderText;}},remove:function(){if(!this.isRoot){this.headingDiv=null;this.expander.onclick=null;this.expander=null;this.expanderTextNode=null;this.contentDiv=null;this.containerDomNode=null;this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;}},reverseChildren:function(){var node=null;var childDomNodes=[];while((node=this.contentDiv.firstChild)){this.contentDiv.removeChild(node);childDomNodes.push(node);}
+while((node=childDomNodes.pop())){this.contentDiv.appendChild(node);}},update:function(){if(!this.isRoot){if(this.group.expandable){removeClass(this.expander,"greyedout");}else{addClass(this.expander,"greyedout");}}},clear:function(){if(this.isRoot){this.contentDiv.innerHTML="";}}});function Group(name,isRoot,initiallyExpanded){this.name=name;this.group=null;this.isRoot=isRoot;this.initiallyExpanded=initiallyExpanded;this.elementContainers=[];this.children=[];this.expanded=initiallyExpanded;this.rendered=false;this.expandable=false;}
+Group.prototype=new LogItem();copyProperties(Group.prototype,{addChild:function(logItem){this.children.push(logItem);logItem.group=this;},render:function(){if(isIe){var unwrappedDomContainer,wrappedDomContainer;if(this.isRoot){unwrappedDomContainer=logMainContainer;wrappedDomContainer=logMainContainer;}else{unwrappedDomContainer=this.getUnwrappedDomContainer();wrappedDomContainer=this.getWrappedDomContainer();}
+this.unwrappedElementContainer=new GroupElementContainer(this,unwrappedDomContainer,this.isRoot,false);this.wrappedElementContainer=new GroupElementContainer(this,wrappedDomContainer,this.isRoot,true);this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{var mainDomContainer=this.isRoot?logMainContainer:this.getMainDomContainer();this.mainElementContainer=new GroupElementContainer(this,mainDomContainer,this.isRoot,false);this.elementContainers=[this.mainElementContainer];}
+this.rendered=true;},toggleExpanded:function(){this.expanded=!this.expanded;for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].toggleExpanded();}},expand:function(){if(!this.expanded){this.toggleExpanded();}},accept:function(visitor){visitor.visitGroup(this);},reverseChildren:function(){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].reverseChildren();}}},update:function(){var previouslyExpandable=this.expandable;this.expandable=(this.children.length!==0);if(this.expandable!==previouslyExpandable){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].update();}}},flatten:function(){var visitor=new GroupFlattener();this.accept(visitor);return visitor.logEntriesAndSeparators;},removeChild:function(child,doUpdate){array_remove(this.children,child);child.group=null;if(doUpdate){this.update();}},remove:function(doUpdate,removeFromGroup){for(var i=0,len=this.children.length;i<len;i++){this.children[i].remove(false,false);}
+this.children=[];this.update();if(this===currentGroup){currentGroup=this.group;}
+this.doRemove(doUpdate,removeFromGroup);},serialize:function(items){items.push([LogItem.serializedItemKeys.GROUP_START,this.name]);for(var i=0,len=this.children.length;i<len;i++){this.children[i].serialize(items);}
+if(this!==currentGroup){items.push([LogItem.serializedItemKeys.GROUP_END]);}},clear:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clear();}}});function LogEntryElementContainer(){}
+LogEntryElementContainer.prototype=new LogItemContainerElement();copyProperties(LogEntryElementContainer.prototype,{remove:function(){this.doRemove();},doRemove:function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;this.contentElement=null;this.containerDomNode=null;},setContent:function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=content;}},setSearchMatch:function(isMatch){var oldCssClass=isMatch?"searchnonmatch":"searchmatch";var newCssClass=isMatch?"searchmatch":"searchnonmatch";replaceClass(this.mainDiv,newCssClass,oldCssClass);},clearSearch:function(){removeClass(this.mainDiv,"searchmatch");removeClass(this.mainDiv,"searchnonmatch");}});function LogEntryWrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.mainDiv.className="logentry wrapped "+this.logEntry.level;this.contentElement=this.mainDiv;}
+LogEntryWrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryWrappedElementContainer.prototype.setContent=function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=wrappedContent;}};function LogEntryUnwrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry unwrapped "+this.logEntry.level;this.pre=this.mainDiv.appendChild(document.createElement("pre"));this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.pre.className="unwrapped";this.contentElement=this.pre;}
+LogEntryUnwrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryUnwrappedElementContainer.prototype.remove=function(){this.doRemove();this.pre=null;};function LogEntryMainElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry nonielogentry "+this.logEntry.level;this.contentElement=this.mainDiv.appendChild(document.createElement("span"));this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));}
+LogEntryMainElementContainer.prototype=new LogEntryElementContainer();function LogEntry(level,formattedMessage){this.level=level;this.formattedMessage=formattedMessage;this.rendered=false;}
+LogEntry.prototype=new LogItem();copyProperties(LogEntry.prototype,{render:function(){var logEntry=this;var containerDomNode=this.group.contentDiv;if(isIe){this.formattedMessage=this.formattedMessage.replace(/\r\n/g,"\r");this.unwrappedElementContainer=new LogEntryUnwrappedElementContainer(this,this.getUnwrappedDomContainer());this.wrappedElementContainer=new LogEntryWrappedElementContainer(this,this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new LogEntryMainElementContainer(this,this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}
+this.content=this.formattedMessage;this.rendered=true;},setContent:function(content,wrappedContent){if(content!=this.content){if(isIe&&(content!==this.formattedMessage)){content=content.replace(/\r\n/g,"\r");}
+for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setContent(content,wrappedContent);}
+this.content=content;}},getSearchMatches:function(){var matches=[];var i,len;if(isIe){var unwrappedEls=getElementsByClass(this.unwrappedElementContainer.mainDiv,"searchterm","span");var wrappedEls=getElementsByClass(this.wrappedElementContainer.mainDiv,"searchterm","span");for(i=0,len=unwrappedEls.length;i<len;i++){matches[i]=new Match(this.level,null,unwrappedEls[i],wrappedEls[i]);}}else{var els=getElementsByClass(this.mainElementContainer.mainDiv,"searchterm","span");for(i=0,len=els.length;i<len;i++){matches[i]=new Match(this.level,els[i]);}}
+return matches;},setSearchMatch:function(isMatch){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setSearchMatch(isMatch);}},clearSearch:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clearSearch();}},accept:function(visitor){visitor.visitLogEntry(this);},serialize:function(items){items.push([LogItem.serializedItemKeys.LOG_ENTRY,this.level,this.formattedMessage]);}});function LogItemVisitor(){}
+LogItemVisitor.prototype={visit:function(logItem){},visitParent:function(logItem){if(logItem.group){logItem.group.accept(this);}},visitChildren:function(logItem){for(var i=0,len=logItem.children.length;i<len;i++){logItem.children[i].accept(this);}},visitLogEntry:function(logEntry){this.visit(logEntry);},visitSeparator:function(separator){this.visit(separator);},visitGroup:function(group){this.visit(group);}};function GroupFlattener(){this.logEntriesAndSeparators=[];}
+GroupFlattener.prototype=new LogItemVisitor();GroupFlattener.prototype.visitGroup=function(group){this.visitChildren(group);};GroupFlattener.prototype.visitLogEntry=function(logEntry){this.logEntriesAndSeparators.push(logEntry);};GroupFlattener.prototype.visitSeparator=function(separator){this.logEntriesAndSeparators.push(separator);};window.onload=function(){if(location.search){var queryBits=unescape(location.search).substr(1).split("&"),nameValueBits;for(var i=0,len=queryBits.length;i<len;i++){nameValueBits=queryBits[i].split("=");if(nameValueBits[0]=="log4javascript_domain"){document.domain=nameValueBits[1];break;}}}
+logMainContainer=$("log");if(isIePre7){addClass(logMainContainer,"oldIe");}
+rootGroup=new Group("root",true);rootGroup.render();currentGroup=rootGroup;setCommandInputWidth();setLogContainerHeight();toggleLoggingEnabled();toggleSearchEnabled();toggleSearchFilter();toggleSearchHighlight();applyFilters();checkAllLevels();toggleWrap();toggleNewestAtTop();toggleScrollToLatest();renderQueuedLogItems();loaded=true;$("command").value="";$("command").autocomplete="off";$("command").onkeydown=function(evt){evt=getEvent(evt);if(evt.keyCode==10||evt.keyCode==13){evalCommandLine();stopPropagation(evt);}else if(evt.keyCode==27){this.value="";this.focus();}else if(evt.keyCode==38&&commandHistory.length>0){currentCommandIndex=Math.max(0,currentCommandIndex-1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}else if(evt.keyCode==40&&commandHistory.length>0){currentCommandIndex=Math.min(commandHistory.length-1,currentCommandIndex+1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}};$("command").onkeypress=function(evt){evt=getEvent(evt);if(evt.keyCode==38&&commandHistory.length>0&&evt.preventDefault){evt.preventDefault();}};$("command").onkeyup=function(evt){evt=getEvent(evt);if(evt.keyCode==27&&evt.preventDefault){evt.preventDefault();this.focus();}};document.onkeydown=function keyEventHandler(evt){evt=getEvent(evt);switch(evt.keyCode){case 69:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){evalLastCommand();cancelKeyEvent(evt);return false;}
+break;case 75:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusSearch();cancelKeyEvent(evt);return false;}
+break;case 40:case 76:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusCommandLine();cancelKeyEvent(evt);return false;}
+break;}};setTimeout(setLogContainerHeight,20);setShowCommandLine(showCommandLine);doSearch();};window.onunload=function(){if(mainWindowExists()){appender.unload();}
+appender=null;};function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}
+function setLoggingEnabled(enable){loggingEnabled=enable;}
+var appender=null;function setAppender(appenderParam){appender=appenderParam;}
+function setShowCloseButton(showCloseButton){$("closeButton").style.display=showCloseButton?"inline":"none";}
+function setShowHideButton(showHideButton){$("hideButton").style.display=showHideButton?"inline":"none";}
+var newestAtTop=false;function LogItemContentReverser(){}
+LogItemContentReverser.prototype=new LogItemVisitor();LogItemContentReverser.prototype.visitGroup=function(group){group.reverseChildren();this.visitChildren(group);};function setNewestAtTop(isNewestAtTop){var oldNewestAtTop=newestAtTop;var i,iLen,j,jLen;newestAtTop=Boolean(isNewestAtTop);if(oldNewestAtTop!=newestAtTop){var visitor=new LogItemContentReverser();rootGroup.accept(visitor);if(currentSearch){var currentMatch=currentSearch.matches[currentMatchIndex];var matchIndex=0;var matches=[];var actOnLogEntry=function(logEntry){var logEntryMatches=logEntry.getSearchMatches();for(j=0,jLen=logEntryMatches.length;j<jLen;j++){matches[matchIndex]=logEntryMatches[j];if(currentMatch&&logEntryMatches[j].equals(currentMatch)){currentMatchIndex=matchIndex;}
+matchIndex++;}};if(newestAtTop){for(i=logEntries.length-1;i>=0;i--){actOnLogEntry(logEntries[i]);}}else{for(i=0,iLen=logEntries.length;i<iLen;i++){actOnLogEntry(logEntries[i]);}}
+currentSearch.matches=matches;if(currentMatch){currentMatch.setCurrent();}}else if(scrollToLatest){doScrollToLatest();}}
+$("newestAtTop").checked=isNewestAtTop;}
+function toggleNewestAtTop(){var isNewestAtTop=$("newestAtTop").checked;setNewestAtTop(isNewestAtTop);}
+var scrollToLatest=true;function setScrollToLatest(isScrollToLatest){scrollToLatest=isScrollToLatest;if(scrollToLatest){doScrollToLatest();}
+$("scrollToLatest").checked=isScrollToLatest;}
+function toggleScrollToLatest(){var isScrollToLatest=$("scrollToLatest").checked;setScrollToLatest(isScrollToLatest);}
+function doScrollToLatest(){var l=logMainContainer;if(typeof l.scrollTop!="undefined"){if(newestAtTop){l.scrollTop=0;}else{var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}}
+var closeIfOpenerCloses=true;function setCloseIfOpenerCloses(isCloseIfOpenerCloses){closeIfOpenerCloses=isCloseIfOpenerCloses;}
+var maxMessages=null;function setMaxMessages(max){maxMessages=max;pruneLogEntries();}
+var showCommandLine=false;function setShowCommandLine(isShowCommandLine){showCommandLine=isShowCommandLine;if(loaded){$("commandLine").style.display=showCommandLine?"block":"none";setCommandInputWidth();setLogContainerHeight();}}
+function focusCommandLine(){if(loaded){$("command").focus();}}
+function focusSearch(){if(loaded){$("searchBox").focus();}}
+function getLogItems(){var items=[];for(var i=0,len=logItems.length;i<len;i++){logItems[i].serialize(items);}
+return items;}
+function setLogItems(items){var loggingReallyEnabled=loggingEnabled;loggingEnabled=true;for(var i=0,len=items.length;i<len;i++){switch(items[i][0]){case LogItem.serializedItemKeys.LOG_ENTRY:log(items[i][1],items[i][2]);break;case LogItem.serializedItemKeys.GROUP_START:group(items[i][1]);break;case LogItem.serializedItemKeys.GROUP_END:groupEnd();break;}}
+loggingEnabled=loggingReallyEnabled;}
+function log(logLevel,formattedMessage){if(loggingEnabled){var logEntry=new LogEntry(logLevel,formattedMessage);logEntries.push(logEntry);logEntriesAndSeparators.push(logEntry);logItems.push(logEntry);currentGroup.addChild(logEntry);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}
+logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}
+function renderQueuedLogItems(){logQueuedEventsTimer=null;var pruned=pruneLogEntries();var initiallyHasMatches=currentSearch?currentSearch.hasMatches():false;for(var i=0,len=logItems.length;i<len;i++){if(!logItems[i].rendered){logItems[i].render();logItems[i].appendToLog();if(currentSearch&&(logItems[i]instanceof LogEntry)){currentSearch.applyTo(logItems[i]);}}}
+if(currentSearch){if(pruned){if(currentSearch.hasVisibleMatches()){if(currentMatchIndex===null){setCurrentMatchIndex(0);}
+displayMatches();}else{displayNoMatches();}}else if(!initiallyHasMatches&¤tSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}}
+if(scrollToLatest){doScrollToLatest();}
+unrenderedLogItemsExist=false;}
+function pruneLogEntries(){if((maxMessages!==null)&&(logEntriesAndSeparators.length>maxMessages)){var numberToDelete=logEntriesAndSeparators.length-maxMessages;var prunedLogEntries=logEntriesAndSeparators.slice(0,numberToDelete);if(currentSearch){currentSearch.removeMatches(prunedLogEntries);}
+var group;for(var i=0;i<numberToDelete;i++){group=logEntriesAndSeparators[i].group;array_remove(logItems,logEntriesAndSeparators[i]);array_remove(logEntries,logEntriesAndSeparators[i]);logEntriesAndSeparators[i].remove(true,true);if(group.children.length===0&&group!==currentGroup&&group!==rootGroup){array_remove(logItems,group);group.remove(true,true);}}
+logEntriesAndSeparators=array_removeFromStart(logEntriesAndSeparators,numberToDelete);return true;}
+return false;}
+function group(name,startExpanded){if(loggingEnabled){initiallyExpanded=(typeof startExpanded==="undefined")?true:Boolean(startExpanded);var newGroup=new Group(name,false,initiallyExpanded);currentGroup.addChild(newGroup);currentGroup=newGroup;logItems.push(newGroup);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}
+logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}
+function groupEnd(){currentGroup=(currentGroup===rootGroup)?rootGroup:currentGroup.group;}
+function mainPageReloaded(){currentGroup=rootGroup;var separator=new Separator();logEntriesAndSeparators.push(separator);logItems.push(separator);currentGroup.addChild(separator);}
+function closeWindow(){if(appender&&mainWindowExists()){appender.close(true);}else{window.close();}}
+function hide(){if(appender&&mainWindowExists()){appender.hide();}}
+var mainWindow=window;var windowId="log4javascriptConsoleWindow_"+new Date().getTime()+"_"+(""+Math.random()).substr(2);function setMainWindow(win){mainWindow=win;mainWindow[windowId]=window;if(opener&&closeIfOpenerCloses){pollOpener();}}
+function pollOpener(){if(closeIfOpenerCloses){if(mainWindowExists()){setTimeout(pollOpener,500);}else{closeWindow();}}}
+function mainWindowExists(){try{return(mainWindow&&!mainWindow.closed&&mainWindow[windowId]==window);}catch(ex){}
+return false;}
+var logLevels=["TRACE","DEBUG","INFO","WARN","ERROR","FATAL"];function getCheckBox(logLevel){return $("switch_"+logLevel);}
+function getIeWrappedLogContainer(){return $("log_wrapped");}
+function getIeUnwrappedLogContainer(){return $("log_unwrapped");}
+function applyFilters(){for(var i=0;i<logLevels.length;i++){if(getCheckBox(logLevels[i]).checked){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}
+updateSearchFromFilters();}
+function toggleAllLevels(){var turnOn=$("switch_ALL").checked;for(var i=0;i<logLevels.length;i++){getCheckBox(logLevels[i]).checked=turnOn;if(turnOn){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}}
+function checkAllLevels(){for(var i=0;i<logLevels.length;i++){if(!getCheckBox(logLevels[i]).checked){getCheckBox("ALL").checked=false;return;}}
+getCheckBox("ALL").checked=true;}
+function clearLog(){rootGroup.clear();currentGroup=rootGroup;logEntries=[];logItems=[];logEntriesAndSeparators=[];doSearch();}
+function toggleWrap(){var enable=$("wrap").checked;if(enable){addClass(logMainContainer,"wrap");}else{removeClass(logMainContainer,"wrap");}
+refreshCurrentMatch();}
+var searchTimer=null;function scheduleSearch(){try{clearTimeout(searchTimer);}catch(ex){}
+searchTimer=setTimeout(doSearch,500);}
+function Search(searchTerm,isRegex,searchRegex,isCaseSensitive){this.searchTerm=searchTerm;this.isRegex=isRegex;this.searchRegex=searchRegex;this.isCaseSensitive=isCaseSensitive;this.matches=[];}
+Search.prototype={hasMatches:function(){return this.matches.length>0;},hasVisibleMatches:function(){if(this.hasMatches()){for(var i=0;i<this.matches.length;i++){if(this.matches[i].isVisible()){return true;}}}
+return false;},match:function(logEntry){var entryText=String(logEntry.formattedMessage);var matchesSearch=false;if(this.isRegex){matchesSearch=this.searchRegex.test(entryText);}else if(this.isCaseSensitive){matchesSearch=(entryText.indexOf(this.searchTerm)>-1);}else{matchesSearch=(entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase())>-1);}
+return matchesSearch;},getNextVisibleMatchIndex:function(){for(var i=currentMatchIndex+1;i<this.matches.length;i++){if(this.matches[i].isVisible()){return i;}}
+for(i=0;i<=currentMatchIndex;i++){if(this.matches[i].isVisible()){return i;}}
+return-1;},getPreviousVisibleMatchIndex:function(){for(var i=currentMatchIndex-1;i>=0;i--){if(this.matches[i].isVisible()){return i;}}
+for(var i=this.matches.length-1;i>=currentMatchIndex;i--){if(this.matches[i].isVisible()){return i;}}
+return-1;},applyTo:function(logEntry){var doesMatch=this.match(logEntry);if(doesMatch){logEntry.group.expand();logEntry.setSearchMatch(true);var logEntryContent;var wrappedLogEntryContent;var searchTermReplacementStartTag="<span class=\"searchterm\">";var searchTermReplacementEndTag="<"+"/span>";var preTagName=isIe?"pre":"span";var preStartTag="<"+preTagName+" class=\"pre\">";var preEndTag="<"+"/"+preTagName+">";var startIndex=0;var searchIndex,matchedText,textBeforeMatch;if(this.isRegex){var flags=this.isCaseSensitive?"g":"gi";var capturingRegex=new RegExp("("+this.searchRegex.source+")",flags);var rnd=(""+Math.random()).substr(2);var startToken="%%s"+rnd+"%%";var endToken="%%e"+rnd+"%%";logEntryContent=logEntry.formattedMessage.replace(capturingRegex,startToken+"$1"+endToken);logEntryContent=escapeHtml(logEntryContent);var result;var searchString=logEntryContent;logEntryContent="";wrappedLogEntryContent="";while((searchIndex=searchString.indexOf(startToken,startIndex))>-1){var endTokenIndex=searchString.indexOf(endToken,searchIndex);matchedText=searchString.substring(searchIndex+startToken.length,endTokenIndex);textBeforeMatch=searchString.substring(startIndex,searchIndex);logEntryContent+=preStartTag+textBeforeMatch+preEndTag;logEntryContent+=searchTermReplacementStartTag+preStartTag+matchedText+
+preEndTag+searchTermReplacementEndTag;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+
+matchedText+searchTermReplacementEndTag;}
+startIndex=endTokenIndex+endToken.length;}
+logEntryContent+=preStartTag+searchString.substr(startIndex)+preEndTag;if(isIe){wrappedLogEntryContent+=searchString.substr(startIndex);}}else{logEntryContent="";wrappedLogEntryContent="";var searchTermReplacementLength=searchTermReplacementStartTag.length+
+this.searchTerm.length+searchTermReplacementEndTag.length;var searchTermLength=this.searchTerm.length;var searchTermLowerCase=this.searchTerm.toLowerCase();var logTextLowerCase=logEntry.formattedMessage.toLowerCase();while((searchIndex=logTextLowerCase.indexOf(searchTermLowerCase,startIndex))>-1){matchedText=escapeHtml(logEntry.formattedMessage.substr(searchIndex,this.searchTerm.length));textBeforeMatch=escapeHtml(logEntry.formattedMessage.substring(startIndex,searchIndex));var searchTermReplacement=searchTermReplacementStartTag+
+preStartTag+matchedText+preEndTag+searchTermReplacementEndTag;logEntryContent+=preStartTag+textBeforeMatch+preEndTag+searchTermReplacement;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+
+matchedText+searchTermReplacementEndTag;}
+startIndex=searchIndex+searchTermLength;}
+var textAfterLastMatch=escapeHtml(logEntry.formattedMessage.substr(startIndex));logEntryContent+=preStartTag+textAfterLastMatch+preEndTag;if(isIe){wrappedLogEntryContent+=textAfterLastMatch;}}
+logEntry.setContent(logEntryContent,wrappedLogEntryContent);var logEntryMatches=logEntry.getSearchMatches();this.matches=this.matches.concat(logEntryMatches);}else{logEntry.setSearchMatch(false);logEntry.setContent(logEntry.formattedMessage,logEntry.formattedMessage);}
+return doesMatch;},removeMatches:function(logEntries){var matchesToRemoveCount=0;var currentMatchRemoved=false;var matchesToRemove=[];var i,iLen,j,jLen;for(i=0,iLen=this.matches.length;i<iLen;i++){for(j=0,jLen=logEntries.length;j<jLen;j++){if(this.matches[i].belongsTo(logEntries[j])){matchesToRemove.push(this.matches[i]);if(i===currentMatchIndex){currentMatchRemoved=true;}}}}
+var newMatch=currentMatchRemoved?null:this.matches[currentMatchIndex];if(currentMatchRemoved){for(i=currentMatchIndex,iLen=this.matches.length;i<iLen;i++){if(this.matches[i].isVisible()&&!array_contains(matchesToRemove,this.matches[i])){newMatch=this.matches[i];break;}}}
+for(i=0,iLen=matchesToRemove.length;i<iLen;i++){array_remove(this.matches,matchesToRemove[i]);matchesToRemove[i].remove();}
+if(this.hasVisibleMatches()){if(newMatch===null){setCurrentMatchIndex(0);}else{var newMatchIndex=0;for(i=0,iLen=this.matches.length;i<iLen;i++){if(newMatch===this.matches[i]){newMatchIndex=i;break;}}
+setCurrentMatchIndex(newMatchIndex);}}else{currentMatchIndex=null;displayNoMatches();}}};function getPageOffsetTop(el,container){var currentEl=el;var y=0;while(currentEl&¤tEl!=container){y+=currentEl.offsetTop;currentEl=currentEl.offsetParent;}
+return y;}
+function scrollIntoView(el){var logContainer=logMainContainer;if(!$("wrap").checked){var logContainerLeft=logContainer.scrollLeft;var logContainerRight=logContainerLeft+logContainer.offsetWidth;var elLeft=el.offsetLeft;var elRight=elLeft+el.offsetWidth;if(elLeft<logContainerLeft||elRight>logContainerRight){logContainer.scrollLeft=elLeft-(logContainer.offsetWidth-el.offsetWidth)/2;}}
+var logContainerTop=logContainer.scrollTop;var logContainerBottom=logContainerTop+logContainer.offsetHeight;var elTop=getPageOffsetTop(el)-getToolBarsHeight();var elBottom=elTop+el.offsetHeight;if(elTop<logContainerTop||elBottom>logContainerBottom){logContainer.scrollTop=elTop-(logContainer.offsetHeight-el.offsetHeight)/2;}}
+function Match(logEntryLevel,spanInMainDiv,spanInUnwrappedPre,spanInWrappedDiv){this.logEntryLevel=logEntryLevel;this.spanInMainDiv=spanInMainDiv;if(isIe){this.spanInUnwrappedPre=spanInUnwrappedPre;this.spanInWrappedDiv=spanInWrappedDiv;}
+this.mainSpan=isIe?spanInUnwrappedPre:spanInMainDiv;}
+Match.prototype={equals:function(match){return this.mainSpan===match.mainSpan;},setCurrent:function(){if(isIe){addClass(this.spanInUnwrappedPre,"currentmatch");addClass(this.spanInWrappedDiv,"currentmatch");var elementToScroll=$("wrap").checked?this.spanInWrappedDiv:this.spanInUnwrappedPre;scrollIntoView(elementToScroll);}else{addClass(this.spanInMainDiv,"currentmatch");scrollIntoView(this.spanInMainDiv);}},belongsTo:function(logEntry){if(isIe){return isDescendant(this.spanInUnwrappedPre,logEntry.unwrappedPre);}else{return isDescendant(this.spanInMainDiv,logEntry.mainDiv);}},setNotCurrent:function(){if(isIe){removeClass(this.spanInUnwrappedPre,"currentmatch");removeClass(this.spanInWrappedDiv,"currentmatch");}else{removeClass(this.spanInMainDiv,"currentmatch");}},isOrphan:function(){return isOrphan(this.mainSpan);},isVisible:function(){return getCheckBox(this.logEntryLevel).checked;},remove:function(){if(isIe){this.spanInUnwrappedPre=null;this.spanInWrappedDiv=null;}else{this.spanInMainDiv=null;}}};var currentSearch=null;var currentMatchIndex=null;function doSearch(){var searchBox=$("searchBox");var searchTerm=searchBox.value;var isRegex=$("searchRegex").checked;var isCaseSensitive=$("searchCaseSensitive").checked;var i;if(searchTerm===""){$("searchReset").disabled=true;$("searchNav").style.display="none";removeClass(document.body,"searching");removeClass(searchBox,"hasmatches");removeClass(searchBox,"nomatches");for(i=0;i<logEntries.length;i++){logEntries[i].clearSearch();logEntries[i].setContent(logEntries[i].formattedMessage,logEntries[i].formattedMessage);}
+currentSearch=null;setLogContainerHeight();}else{$("searchReset").disabled=false;$("searchNav").style.display="block";var searchRegex;var regexValid;if(isRegex){try{searchRegex=isCaseSensitive?new RegExp(searchTerm,"g"):new RegExp(searchTerm,"gi");regexValid=true;replaceClass(searchBox,"validregex","invalidregex");searchBox.title="Valid regex";}catch(ex){regexValid=false;replaceClass(searchBox,"invalidregex","validregex");searchBox.title="Invalid regex: "+(ex.message?ex.message:(ex.description?ex.description:"unknown error"));return;}}else{searchBox.title="";removeClass(searchBox,"validregex");removeClass(searchBox,"invalidregex");}
+addClass(document.body,"searching");currentSearch=new Search(searchTerm,isRegex,searchRegex,isCaseSensitive);for(i=0;i<logEntries.length;i++){currentSearch.applyTo(logEntries[i]);}
+setLogContainerHeight();if(currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}else{displayNoMatches();}}}
+function updateSearchFromFilters(){if(currentSearch){if(currentSearch.hasMatches()){if(currentMatchIndex===null){currentMatchIndex=0;}
+var currentMatch=currentSearch.matches[currentMatchIndex];if(currentMatch.isVisible()){displayMatches();setCurrentMatchIndex(currentMatchIndex);}else{currentMatch.setNotCurrent();var nextVisibleMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextVisibleMatchIndex>-1){setCurrentMatchIndex(nextVisibleMatchIndex);displayMatches();}else{displayNoMatches();}}}else{displayNoMatches();}}}
+function refreshCurrentMatch(){if(currentSearch&¤tSearch.hasVisibleMatches()){setCurrentMatchIndex(currentMatchIndex);}}
+function displayMatches(){replaceClass($("searchBox"),"hasmatches","nomatches");$("searchBox").title=""+currentSearch.matches.length+" matches found";$("searchNav").style.display="block";setLogContainerHeight();}
+function displayNoMatches(){replaceClass($("searchBox"),"nomatches","hasmatches");$("searchBox").title="No matches found";$("searchNav").style.display="none";setLogContainerHeight();}
+function toggleSearchEnabled(enable){enable=(typeof enable=="undefined")?!$("searchDisable").checked:enable;$("searchBox").disabled=!enable;$("searchReset").disabled=!enable;$("searchRegex").disabled=!enable;$("searchNext").disabled=!enable;$("searchPrevious").disabled=!enable;$("searchCaseSensitive").disabled=!enable;$("searchNav").style.display=(enable&&($("searchBox").value!=="")&¤tSearch&¤tSearch.hasVisibleMatches())?"block":"none";if(enable){removeClass($("search"),"greyedout");addClass(document.body,"searching");if($("searchHighlight").checked){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}
+if($("searchFilter").checked){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}
+$("searchDisable").checked=!enable;}else{addClass($("search"),"greyedout");removeClass(document.body,"searching");removeClass(logMainContainer,"searchhighlight");removeClass(logMainContainer,"searchfilter");}
+setLogContainerHeight();}
+function toggleSearchFilter(){var enable=$("searchFilter").checked;if(enable){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}
+refreshCurrentMatch();}
+function toggleSearchHighlight(){var enable=$("searchHighlight").checked;if(enable){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}}
+function clearSearch(){$("searchBox").value="";doSearch();}
+function searchNext(){if(currentSearch!==null&¤tMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var nextMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextMatchIndex>currentMatchIndex||confirm("Reached the end of the page. Start from the top?")){setCurrentMatchIndex(nextMatchIndex);}}}
+function searchPrevious(){if(currentSearch!==null&¤tMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var previousMatchIndex=currentSearch.getPreviousVisibleMatchIndex();if(previousMatchIndex<currentMatchIndex||confirm("Reached the start of the page. Continue from the bottom?")){setCurrentMatchIndex(previousMatchIndex);}}}
+function setCurrentMatchIndex(index){currentMatchIndex=index;currentSearch.matches[currentMatchIndex].setCurrent();}
+function addClass(el,cssClass){if(!hasClass(el,cssClass)){if(el.className){el.className+=" "+cssClass;}else{el.className=cssClass;}}}
+function hasClass(el,cssClass){if(el.className){var classNames=el.className.split(" ");return array_contains(classNames,cssClass);}
+return false;}
+function removeClass(el,cssClass){if(hasClass(el,cssClass)){var existingClasses=el.className.split(" ");var newClasses=[];for(var i=0,len=existingClasses.length;i<len;i++){if(existingClasses[i]!=cssClass){newClasses[newClasses.length]=existingClasses[i];}}
+el.className=newClasses.join(" ");}}
+function replaceClass(el,newCssClass,oldCssClass){removeClass(el,oldCssClass);addClass(el,newCssClass);}
+function getElementsByClass(el,cssClass,tagName){var elements=el.getElementsByTagName(tagName);var matches=[];for(var i=0,len=elements.length;i<len;i++){if(hasClass(elements[i],cssClass)){matches.push(elements[i]);}}
+return matches;}
+function $(id){return document.getElementById(id);}
+function isDescendant(node,ancestorNode){while(node!=null){if(node===ancestorNode){return true;}
+node=node.parentNode;}
+return false;}
+function isOrphan(node){var currentNode=node;while(currentNode){if(currentNode==document.body){return false;}
+currentNode=currentNode.parentNode;}
+return true;}
+function escapeHtml(str){return str.replace(/&/g,"&").replace(/[<]/g,"<").replace(/>/g,">");}
+function getWindowWidth(){if(window.innerWidth){return window.innerWidth;}else if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth;}else if(document.body){return document.body.clientWidth;}
+return 0;}
+function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}
+return 0;}
+function getToolBarsHeight(){return $("switches").offsetHeight;}
+function getChromeHeight(){var height=getToolBarsHeight();if(showCommandLine){height+=$("commandLine").offsetHeight;}
+return height;}
+function setLogContainerHeight(){if(logMainContainer){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";logMainContainer.style.height=""+
+Math.max(0,windowHeight-getChromeHeight())+"px";}}
+function setCommandInputWidth(){if(showCommandLine){$("command").style.width=""+Math.max(0,$("commandLineContainer").offsetWidth-
+($("evaluateButton").offsetWidth+13))+"px";}}
+window.onresize=function(){setCommandInputWidth();setLogContainerHeight();};if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}
+return this.length;};}
+if(!Array.prototype.pop){Array.prototype.pop=function(){if(this.length>0){var val=this[this.length-1];this.length=this.length-1;return val;}};}
+if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}
+this.length=this.length-1;return firstItem;}};}
+if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}
+var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}
+return itemsDeleted;};}
+function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}
+if(index>=0){arr.splice(index,1);return index;}else{return false;}}
+function array_removeFromStart(array,numberToRemove){if(Array.prototype.splice){array.splice(0,numberToRemove);}else{for(var i=numberToRemove,len=array.length;i<len;i++){array[i-numberToRemove]=array[i];}
+array.length=array.length-numberToRemove;}
+return array;}
+function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}
+return false;}
+function getErrorMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}
+return""+ex;}
+function moveCaretToEnd(input){if(input.setSelectionRange){input.focus();var length=input.value.length;input.setSelectionRange(length,length);}else if(input.createTextRange){var range=input.createTextRange();range.collapse(false);range.select();}
+input.focus();}
+function stopPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}}
+function getEvent(evt){return evt?evt:event;}
+function getTarget(evt){return evt.target?evt.target:evt.srcElement;}
+function getRelatedTarget(evt){if(evt.relatedTarget){return evt.relatedTarget;}else if(evt.srcElement){switch(evt.type){case"mouseover":return evt.fromElement;case"mouseout":return evt.toElement;default:return evt.srcElement;}}}
+function cancelKeyEvent(evt){evt.returnValue=false;stopPropagation(evt);}
+function evalCommandLine(){var expr=$("command").value;evalCommand(expr);$("command").value="";}
+function evalLastCommand(){if(lastCommand!=null){evalCommand(lastCommand);}}
+var lastCommand=null;var commandHistory=[];var currentCommandIndex=0;function evalCommand(expr){if(appender){appender.evalCommandAndAppend(expr);}else{var prefix=">>> "+expr+"\r\n";try{log("INFO",prefix+eval(expr));}catch(ex){log("ERROR",prefix+"Error: "+getErrorMessage(ex));}}
+if(expr!=commandHistory[commandHistory.length-1]){commandHistory.push(expr);if(appender){appender.storeCommandHistory(commandHistory);}}
+currentCommandIndex=(expr==commandHistory[currentCommandIndex])?currentCommandIndex+1:commandHistory.length;lastCommand=expr;}
+//]]>
+</script>
+<style type="text/css">
+body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#switchesContainer input{margin-bottom:0}div.toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div.toolbar,div#search input{font-family:tahoma,verdana,arial,helvetica,sans-serif}div.toolbar input.button{padding:0 5px;font-size:100%}div.toolbar input.hidden{display:none}div#switches input#clearButton{margin-left:20px}div#levels label{font-weight:bold}div#levels label,div#options label{margin-right:5px}div#levels label#wrapLabel{font-weight:normal}div#search label{margin-right:10px}div#search label.searchboxlabel{margin-right:0}div#search input{font-size:100%}div#search input.validregex{color:green}div#search input.invalidregex{color:red}div#search input.nomatches{color:white;background-color:#ff6666}div#search input.nomatches{color:white;background-color:#ff6666}div#searchNav{display:none}div#commandLine{display:none}div#commandLine input#command{font-size:100%;font-family:Courier New,Courier}div#commandLine input#evaluateButton{}*.greyedout{color:gray !important;border-color:gray !important}*.greyedout *.alwaysenabled{color:black}*.unselectable{-khtml-user-select:none;-moz-user-select:none;user-select:none}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both;position:relative}div.group{border-color:#cccccc;border-style:solid;border-width:1px 0 1px 1px;overflow:visible}div.oldIe div.group,div.oldIe div.group *,div.oldIe *.logentry{height:1%}div.group div.groupheading span.expander{border:solid black 1px;font-family:Courier New,Courier;font-size:0.833em;background-color:#eeeeee;position:relative;top:-1px;color:black;padding:0 2px;cursor:pointer;cursor:hand;height:1%}div.group div.groupcontent{margin-left:10px;padding-bottom:2px;overflow:visible}div.group div.expanded{display:block}div.group div.collapsed{display:none}*.logentry{overflow:visible;display:none;white-space:pre}span.pre{white-space:pre}pre.unwrapped{display:inline !important}pre.unwrapped pre.pre,div.wrapped pre.pre{display:inline}div.wrapped pre.pre{white-space:normal}div.wrapped{display:none}body.searching *.logentry span.currentmatch{color:white !important;background-color:green !important}body.searching div.searchhighlight *.logentry span.searchterm{color:black;background-color:yellow}div.wrap *.logentry{white-space:normal !important;border-width:0 0 1px 0;border-color:#dddddd;border-style:dotted}div.wrap #log_wrapped,#log_unwrapped{display:block}div.wrap #log_unwrapped,#log_wrapped{display:none}div.wrap *.logentry span.pre{overflow:visible;white-space:normal}div.wrap *.logentry pre.unwrapped{display:none}div.wrap *.logentry span.wrapped{display:inline}div.searchfilter *.searchnonmatch{display:none !important}div#log *.TRACE,label#label_TRACE{color:#666666}div#log *.DEBUG,label#label_DEBUG{color:green}div#log *.INFO,label#label_INFO{color:#000099}div#log *.WARN,label#label_WARN{color:#999900}div#log *.ERROR,label#label_ERROR{color:red}div#log *.FATAL,label#label_FATAL{color:#660066}div.TRACE#log *.TRACE,div.DEBUG#log *.DEBUG,div.INFO#log *.INFO,div.WARN#log *.WARN,div.ERROR#log *.ERROR,div.FATAL#log *.FATAL{display:block}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}
+</style>
+</head>
+<body id="body">
+<div id="switchesContainer">
+<div id="switches">
+<div id="levels" class="toolbar">
+Filters:
+<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>
+<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>
+<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>
+<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>
+<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>
+<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>
+<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>
+</div>
+<div id="search" class="toolbar">
+<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />
+<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />
+<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>
+<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>
+<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>
+<div id="searchNav">
+<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />
+<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />
+<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>
+<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>
+</div>
+</div>
+<div id="options" class="toolbar">
+Options:
+<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>
+<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>
+<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>
+<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>
+<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages" />
+<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />
+<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />
+</div>
+</div>
+</div>
+<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>
+<div id="commandLine" class="toolbar">
+<div id="commandLineContainer">
+<input type="text" id="command" title="Enter a JavaScript command here and hit return or press 'Evaluate'" />
+<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />
+</div>
+</div>
+</body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/console_uncompressed.html b/planetstack/core/static/log4javascript-1.4.6/js/console_uncompressed.html
new file mode 100644
index 0000000..55679f8
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/console_uncompressed.html
@@ -0,0 +1,2279 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->
+ <meta http-equiv="X-UA-Compatible" content="IE=7" />
+ <script type="text/javascript">var isIe = false, isIePre7 = false;</script>
+ <!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->
+ <!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->
+ <script type="text/javascript">
+ //<![CDATA[
+ var loggingEnabled = true;
+ var logQueuedEventsTimer = null;
+ var logEntries = [];
+ var logEntriesAndSeparators = [];
+ var logItems = [];
+ var renderDelay = 100;
+ var unrenderedLogItemsExist = false;
+ var rootGroup, currentGroup = null;
+ var loaded = false;
+ var currentLogItem = null;
+ var logMainContainer;
+
+ function copyProperties(obj, props) {
+ for (var i in props) {
+ obj[i] = props[i];
+ }
+ }
+
+ /*----------------------------------------------------------------*/
+
+ function LogItem() {
+ }
+
+ LogItem.prototype = {
+ mainContainer: null,
+ wrappedContainer: null,
+ unwrappedContainer: null,
+ group: null,
+
+ appendToLog: function() {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].appendToLog();
+ }
+ this.group.update();
+ },
+
+ doRemove: function(doUpdate, removeFromGroup) {
+ if (this.rendered) {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].remove();
+ }
+ this.unwrappedElementContainer = null;
+ this.wrappedElementContainer = null;
+ this.mainElementContainer = null;
+ }
+ if (this.group && removeFromGroup) {
+ this.group.removeChild(this, doUpdate);
+ }
+ if (this === currentLogItem) {
+ currentLogItem = null;
+ }
+ },
+
+ remove: function(doUpdate, removeFromGroup) {
+ this.doRemove(doUpdate, removeFromGroup);
+ },
+
+ render: function() {},
+
+ accept: function(visitor) {
+ visitor.visit(this);
+ },
+
+ getUnwrappedDomContainer: function() {
+ return this.group.unwrappedElementContainer.contentDiv;
+ },
+
+ getWrappedDomContainer: function() {
+ return this.group.wrappedElementContainer.contentDiv;
+ },
+
+ getMainDomContainer: function() {
+ return this.group.mainElementContainer.contentDiv;
+ }
+ };
+
+ LogItem.serializedItemKeys = {LOG_ENTRY: 0, GROUP_START: 1, GROUP_END: 2};
+
+ /*----------------------------------------------------------------*/
+
+ function LogItemContainerElement() {
+ }
+
+ LogItemContainerElement.prototype = {
+ appendToLog: function() {
+ var insertBeforeFirst = (newestAtTop && this.containerDomNode.hasChildNodes());
+ if (insertBeforeFirst) {
+ this.containerDomNode.insertBefore(this.mainDiv, this.containerDomNode.firstChild);
+ } else {
+ this.containerDomNode.appendChild(this.mainDiv);
+ }
+ }
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function SeparatorElementContainer(containerDomNode) {
+ this.containerDomNode = containerDomNode;
+ this.mainDiv = document.createElement("div");
+ this.mainDiv.className = "separator";
+ this.mainDiv.innerHTML = " ";
+ }
+
+ SeparatorElementContainer.prototype = new LogItemContainerElement();
+
+ SeparatorElementContainer.prototype.remove = function() {
+ this.mainDiv.parentNode.removeChild(this.mainDiv);
+ this.mainDiv = null;
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function Separator() {
+ this.rendered = false;
+ }
+
+ Separator.prototype = new LogItem();
+
+ copyProperties(Separator.prototype, {
+ render: function() {
+ var containerDomNode = this.group.contentDiv;
+ if (isIe) {
+ this.unwrappedElementContainer = new SeparatorElementContainer(this.getUnwrappedDomContainer());
+ this.wrappedElementContainer = new SeparatorElementContainer(this.getWrappedDomContainer());
+ this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];
+ } else {
+ this.mainElementContainer = new SeparatorElementContainer(this.getMainDomContainer());
+ this.elementContainers = [this.mainElementContainer];
+ }
+ this.content = this.formattedMessage;
+ this.rendered = true;
+ }
+ });
+
+ /*----------------------------------------------------------------*/
+
+ function GroupElementContainer(group, containerDomNode, isRoot, isWrapped) {
+ this.group = group;
+ this.containerDomNode = containerDomNode;
+ this.isRoot = isRoot;
+ this.isWrapped = isWrapped;
+ this.expandable = false;
+
+ if (this.isRoot) {
+ if (isIe) {
+ this.contentDiv = logMainContainer.appendChild(document.createElement("div"));
+ this.contentDiv.id = this.isWrapped ? "log_wrapped" : "log_unwrapped";
+ } else {
+ this.contentDiv = logMainContainer;
+ }
+ } else {
+ var groupElementContainer = this;
+
+ this.mainDiv = document.createElement("div");
+ this.mainDiv.className = "group";
+
+ this.headingDiv = this.mainDiv.appendChild(document.createElement("div"));
+ this.headingDiv.className = "groupheading";
+
+ this.expander = this.headingDiv.appendChild(document.createElement("span"));
+ this.expander.className = "expander unselectable greyedout";
+ this.expander.unselectable = true;
+ var expanderText = this.group.expanded ? "-" : "+";
+ this.expanderTextNode = this.expander.appendChild(document.createTextNode(expanderText));
+
+ this.headingDiv.appendChild(document.createTextNode(" " + this.group.name));
+
+ this.contentDiv = this.mainDiv.appendChild(document.createElement("div"));
+ var contentCssClass = this.group.expanded ? "expanded" : "collapsed";
+ this.contentDiv.className = "groupcontent " + contentCssClass;
+
+ this.expander.onclick = function() {
+ if (groupElementContainer.group.expandable) {
+ groupElementContainer.group.toggleExpanded();
+ }
+ };
+ }
+ }
+
+ GroupElementContainer.prototype = new LogItemContainerElement();
+
+ copyProperties(GroupElementContainer.prototype, {
+ toggleExpanded: function() {
+ if (!this.isRoot) {
+ var oldCssClass, newCssClass, expanderText;
+ if (this.group.expanded) {
+ newCssClass = "expanded";
+ oldCssClass = "collapsed";
+ expanderText = "-";
+ } else {
+ newCssClass = "collapsed";
+ oldCssClass = "expanded";
+ expanderText = "+";
+ }
+ replaceClass(this.contentDiv, newCssClass, oldCssClass);
+ this.expanderTextNode.nodeValue = expanderText;
+ }
+ },
+
+ remove: function() {
+ if (!this.isRoot) {
+ this.headingDiv = null;
+ this.expander.onclick = null;
+ this.expander = null;
+ this.expanderTextNode = null;
+ this.contentDiv = null;
+ this.containerDomNode = null;
+ this.mainDiv.parentNode.removeChild(this.mainDiv);
+ this.mainDiv = null;
+ }
+ },
+
+ reverseChildren: function() {
+ // Invert the order of the log entries
+ var node = null;
+
+ // Remove all the log container nodes
+ var childDomNodes = [];
+ while ((node = this.contentDiv.firstChild)) {
+ this.contentDiv.removeChild(node);
+ childDomNodes.push(node);
+ }
+
+ // Put them all back in reverse order
+ while ((node = childDomNodes.pop())) {
+ this.contentDiv.appendChild(node);
+ }
+ },
+
+ update: function() {
+ if (!this.isRoot) {
+ if (this.group.expandable) {
+ removeClass(this.expander, "greyedout");
+ } else {
+ addClass(this.expander, "greyedout");
+ }
+ }
+ },
+
+ clear: function() {
+ if (this.isRoot) {
+ this.contentDiv.innerHTML = "";
+ }
+ }
+ });
+
+ /*----------------------------------------------------------------*/
+
+ function Group(name, isRoot, initiallyExpanded) {
+ this.name = name;
+ this.group = null;
+ this.isRoot = isRoot;
+ this.initiallyExpanded = initiallyExpanded;
+ this.elementContainers = [];
+ this.children = [];
+ this.expanded = initiallyExpanded;
+ this.rendered = false;
+ this.expandable = false;
+ }
+
+ Group.prototype = new LogItem();
+
+ copyProperties(Group.prototype, {
+ addChild: function(logItem) {
+ this.children.push(logItem);
+ logItem.group = this;
+ },
+
+ render: function() {
+ if (isIe) {
+ var unwrappedDomContainer, wrappedDomContainer;
+ if (this.isRoot) {
+ unwrappedDomContainer = logMainContainer;
+ wrappedDomContainer = logMainContainer;
+ } else {
+ unwrappedDomContainer = this.getUnwrappedDomContainer();
+ wrappedDomContainer = this.getWrappedDomContainer();
+ }
+ this.unwrappedElementContainer = new GroupElementContainer(this, unwrappedDomContainer, this.isRoot, false);
+ this.wrappedElementContainer = new GroupElementContainer(this, wrappedDomContainer, this.isRoot, true);
+ this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];
+ } else {
+ var mainDomContainer = this.isRoot ? logMainContainer : this.getMainDomContainer();
+ this.mainElementContainer = new GroupElementContainer(this, mainDomContainer, this.isRoot, false);
+ this.elementContainers = [this.mainElementContainer];
+ }
+ this.rendered = true;
+ },
+
+ toggleExpanded: function() {
+ this.expanded = !this.expanded;
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].toggleExpanded();
+ }
+ },
+
+ expand: function() {
+ if (!this.expanded) {
+ this.toggleExpanded();
+ }
+ },
+
+ accept: function(visitor) {
+ visitor.visitGroup(this);
+ },
+
+ reverseChildren: function() {
+ if (this.rendered) {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].reverseChildren();
+ }
+ }
+ },
+
+ update: function() {
+ var previouslyExpandable = this.expandable;
+ this.expandable = (this.children.length !== 0);
+ if (this.expandable !== previouslyExpandable) {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].update();
+ }
+ }
+ },
+
+ flatten: function() {
+ var visitor = new GroupFlattener();
+ this.accept(visitor);
+ return visitor.logEntriesAndSeparators;
+ },
+
+ removeChild: function(child, doUpdate) {
+ array_remove(this.children, child);
+ child.group = null;
+ if (doUpdate) {
+ this.update();
+ }
+ },
+
+ remove: function(doUpdate, removeFromGroup) {
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ this.children[i].remove(false, false);
+ }
+ this.children = [];
+ this.update();
+ if (this === currentGroup) {
+ currentGroup = this.group;
+ }
+ this.doRemove(doUpdate, removeFromGroup);
+ },
+
+ serialize: function(items) {
+ items.push([LogItem.serializedItemKeys.GROUP_START, this.name]);
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ this.children[i].serialize(items);
+ }
+ if (this !== currentGroup) {
+ items.push([LogItem.serializedItemKeys.GROUP_END]);
+ }
+ },
+
+ clear: function() {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].clear();
+ }
+ }
+ });
+
+ /*----------------------------------------------------------------*/
+
+ function LogEntryElementContainer() {
+ }
+
+ LogEntryElementContainer.prototype = new LogItemContainerElement();
+
+ copyProperties(LogEntryElementContainer.prototype, {
+ remove: function() {
+ this.doRemove();
+ },
+
+ doRemove: function() {
+ this.mainDiv.parentNode.removeChild(this.mainDiv);
+ this.mainDiv = null;
+ this.contentElement = null;
+ this.containerDomNode = null;
+ },
+
+ setContent: function(content, wrappedContent) {
+ if (content === this.formattedMessage) {
+ this.contentElement.innerHTML = "";
+ this.contentElement.appendChild(document.createTextNode(this.formattedMessage));
+ } else {
+ this.contentElement.innerHTML = content;
+ }
+ },
+
+ setSearchMatch: function(isMatch) {
+ var oldCssClass = isMatch ? "searchnonmatch" : "searchmatch";
+ var newCssClass = isMatch ? "searchmatch" : "searchnonmatch";
+ replaceClass(this.mainDiv, newCssClass, oldCssClass);
+ },
+
+ clearSearch: function() {
+ removeClass(this.mainDiv, "searchmatch");
+ removeClass(this.mainDiv, "searchnonmatch");
+ }
+ });
+
+ /*----------------------------------------------------------------*/
+
+ function LogEntryWrappedElementContainer(logEntry, containerDomNode) {
+ this.logEntry = logEntry;
+ this.containerDomNode = containerDomNode;
+ this.mainDiv = document.createElement("div");
+ this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));
+ this.mainDiv.className = "logentry wrapped " + this.logEntry.level;
+ this.contentElement = this.mainDiv;
+ }
+
+ LogEntryWrappedElementContainer.prototype = new LogEntryElementContainer();
+
+ LogEntryWrappedElementContainer.prototype.setContent = function(content, wrappedContent) {
+ if (content === this.formattedMessage) {
+ this.contentElement.innerHTML = "";
+ this.contentElement.appendChild(document.createTextNode(this.formattedMessage));
+ } else {
+ this.contentElement.innerHTML = wrappedContent;
+ }
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function LogEntryUnwrappedElementContainer(logEntry, containerDomNode) {
+ this.logEntry = logEntry;
+ this.containerDomNode = containerDomNode;
+ this.mainDiv = document.createElement("div");
+ this.mainDiv.className = "logentry unwrapped " + this.logEntry.level;
+ this.pre = this.mainDiv.appendChild(document.createElement("pre"));
+ this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));
+ this.pre.className = "unwrapped";
+ this.contentElement = this.pre;
+ }
+
+ LogEntryUnwrappedElementContainer.prototype = new LogEntryElementContainer();
+
+ LogEntryUnwrappedElementContainer.prototype.remove = function() {
+ this.doRemove();
+ this.pre = null;
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function LogEntryMainElementContainer(logEntry, containerDomNode) {
+ this.logEntry = logEntry;
+ this.containerDomNode = containerDomNode;
+ this.mainDiv = document.createElement("div");
+ this.mainDiv.className = "logentry nonielogentry " + this.logEntry.level;
+ this.contentElement = this.mainDiv.appendChild(document.createElement("span"));
+ this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));
+ }
+
+ LogEntryMainElementContainer.prototype = new LogEntryElementContainer();
+
+ /*----------------------------------------------------------------*/
+
+ function LogEntry(level, formattedMessage) {
+ this.level = level;
+ this.formattedMessage = formattedMessage;
+ this.rendered = false;
+ }
+
+ LogEntry.prototype = new LogItem();
+
+ copyProperties(LogEntry.prototype, {
+ render: function() {
+ var logEntry = this;
+ var containerDomNode = this.group.contentDiv;
+
+ // Support for the CSS attribute white-space in IE for Windows is
+ // non-existent pre version 6 and slightly odd in 6, so instead
+ // use two different HTML elements
+ if (isIe) {
+ this.formattedMessage = this.formattedMessage.replace(/\r\n/g, "\r"); // Workaround for IE's treatment of white space
+ this.unwrappedElementContainer = new LogEntryUnwrappedElementContainer(this, this.getUnwrappedDomContainer());
+ this.wrappedElementContainer = new LogEntryWrappedElementContainer(this, this.getWrappedDomContainer());
+ this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];
+ } else {
+ this.mainElementContainer = new LogEntryMainElementContainer(this, this.getMainDomContainer());
+ this.elementContainers = [this.mainElementContainer];
+ }
+ this.content = this.formattedMessage;
+ this.rendered = true;
+ },
+
+ setContent: function(content, wrappedContent) {
+ if (content != this.content) {
+ if (isIe && (content !== this.formattedMessage)) {
+ content = content.replace(/\r\n/g, "\r"); // Workaround for IE's treatment of white space
+ }
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].setContent(content, wrappedContent);
+ }
+ this.content = content;
+ }
+ },
+
+ getSearchMatches: function() {
+ var matches = [];
+ var i, len;
+ if (isIe) {
+ var unwrappedEls = getElementsByClass(this.unwrappedElementContainer.mainDiv, "searchterm", "span");
+ var wrappedEls = getElementsByClass(this.wrappedElementContainer.mainDiv, "searchterm", "span");
+ for (i = 0, len = unwrappedEls.length; i < len; i++) {
+ matches[i] = new Match(this.level, null, unwrappedEls[i], wrappedEls[i]);
+ }
+ } else {
+ var els = getElementsByClass(this.mainElementContainer.mainDiv, "searchterm", "span");
+ for (i = 0, len = els.length; i < len; i++) {
+ matches[i] = new Match(this.level, els[i]);
+ }
+ }
+ return matches;
+ },
+
+ setSearchMatch: function(isMatch) {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].setSearchMatch(isMatch);
+ }
+ },
+
+ clearSearch: function() {
+ for (var i = 0, len = this.elementContainers.length; i < len; i++) {
+ this.elementContainers[i].clearSearch();
+ }
+ },
+
+ accept: function(visitor) {
+ visitor.visitLogEntry(this);
+ },
+
+ serialize: function(items) {
+ items.push([LogItem.serializedItemKeys.LOG_ENTRY, this.level, this.formattedMessage]);
+ }
+ });
+
+ /*----------------------------------------------------------------*/
+
+ function LogItemVisitor() {
+ }
+
+ LogItemVisitor.prototype = {
+ visit: function(logItem) {
+ },
+
+ visitParent: function(logItem) {
+ if (logItem.group) {
+ logItem.group.accept(this);
+ }
+ },
+
+ visitChildren: function(logItem) {
+ for (var i = 0, len = logItem.children.length; i < len; i++) {
+ logItem.children[i].accept(this);
+ }
+ },
+
+ visitLogEntry: function(logEntry) {
+ this.visit(logEntry);
+ },
+
+ visitSeparator: function(separator) {
+ this.visit(separator);
+ },
+
+ visitGroup: function(group) {
+ this.visit(group);
+ }
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function GroupFlattener() {
+ this.logEntriesAndSeparators = [];
+ }
+
+ GroupFlattener.prototype = new LogItemVisitor();
+
+ GroupFlattener.prototype.visitGroup = function(group) {
+ this.visitChildren(group);
+ };
+
+ GroupFlattener.prototype.visitLogEntry = function(logEntry) {
+ this.logEntriesAndSeparators.push(logEntry);
+ };
+
+ GroupFlattener.prototype.visitSeparator = function(separator) {
+ this.logEntriesAndSeparators.push(separator);
+ };
+
+ /*----------------------------------------------------------------*/
+
+ window.onload = function() {
+ // Sort out document.domain
+ if (location.search) {
+ var queryBits = unescape(location.search).substr(1).split("&"), nameValueBits;
+ for (var i = 0, len = queryBits.length; i < len; i++) {
+ nameValueBits = queryBits[i].split("=");
+ if (nameValueBits[0] == "log4javascript_domain") {
+ document.domain = nameValueBits[1];
+ break;
+ }
+ }
+ }
+
+ // Create DOM objects
+ logMainContainer = $("log");
+ if (isIePre7) {
+ addClass(logMainContainer, "oldIe");
+ }
+
+ rootGroup = new Group("root", true);
+ rootGroup.render();
+ currentGroup = rootGroup;
+
+ setCommandInputWidth();
+ setLogContainerHeight();
+ toggleLoggingEnabled();
+ toggleSearchEnabled();
+ toggleSearchFilter();
+ toggleSearchHighlight();
+ applyFilters();
+ checkAllLevels();
+ toggleWrap();
+ toggleNewestAtTop();
+ toggleScrollToLatest();
+ renderQueuedLogItems();
+ loaded = true;
+ $("command").value = "";
+ $("command").autocomplete = "off";
+ $("command").onkeydown = function(evt) {
+ evt = getEvent(evt);
+ if (evt.keyCode == 10 || evt.keyCode == 13) { // Return/Enter
+ evalCommandLine();
+ stopPropagation(evt);
+ } else if (evt.keyCode == 27) { // Escape
+ this.value = "";
+ this.focus();
+ } else if (evt.keyCode == 38 && commandHistory.length > 0) { // Up
+ currentCommandIndex = Math.max(0, currentCommandIndex - 1);
+ this.value = commandHistory[currentCommandIndex];
+ moveCaretToEnd(this);
+ } else if (evt.keyCode == 40 && commandHistory.length > 0) { // Down
+ currentCommandIndex = Math.min(commandHistory.length - 1, currentCommandIndex + 1);
+ this.value = commandHistory[currentCommandIndex];
+ moveCaretToEnd(this);
+ }
+ };
+
+ // Prevent the keypress moving the caret in Firefox
+ $("command").onkeypress = function(evt) {
+ evt = getEvent(evt);
+ if (evt.keyCode == 38 && commandHistory.length > 0 && evt.preventDefault) { // Up
+ evt.preventDefault();
+ }
+ };
+
+ // Prevent the keyup event blurring the input in Opera
+ $("command").onkeyup = function(evt) {
+ evt = getEvent(evt);
+ if (evt.keyCode == 27 && evt.preventDefault) { // Up
+ evt.preventDefault();
+ this.focus();
+ }
+ };
+
+ // Add document keyboard shortcuts
+ document.onkeydown = function keyEventHandler(evt) {
+ evt = getEvent(evt);
+ switch (evt.keyCode) {
+ case 69: // Ctrl + shift + E: re-execute last command
+ if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {
+ evalLastCommand();
+ cancelKeyEvent(evt);
+ return false;
+ }
+ break;
+ case 75: // Ctrl + shift + K: focus search
+ if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {
+ focusSearch();
+ cancelKeyEvent(evt);
+ return false;
+ }
+ break;
+ case 40: // Ctrl + shift + down arrow: focus command line
+ case 76: // Ctrl + shift + L: focus command line
+ if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {
+ focusCommandLine();
+ cancelKeyEvent(evt);
+ return false;
+ }
+ break;
+ }
+ };
+
+ // Workaround to make sure log div starts at the correct size
+ setTimeout(setLogContainerHeight, 20);
+
+ setShowCommandLine(showCommandLine);
+ doSearch();
+ };
+
+ window.onunload = function() {
+ if (mainWindowExists()) {
+ appender.unload();
+ }
+ appender = null;
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function toggleLoggingEnabled() {
+ setLoggingEnabled($("enableLogging").checked);
+ }
+
+ function setLoggingEnabled(enable) {
+ loggingEnabled = enable;
+ }
+
+ var appender = null;
+
+ function setAppender(appenderParam) {
+ appender = appenderParam;
+ }
+
+ function setShowCloseButton(showCloseButton) {
+ $("closeButton").style.display = showCloseButton ? "inline" : "none";
+ }
+
+ function setShowHideButton(showHideButton) {
+ $("hideButton").style.display = showHideButton ? "inline" : "none";
+ }
+
+ var newestAtTop = false;
+
+ /*----------------------------------------------------------------*/
+
+ function LogItemContentReverser() {
+ }
+
+ LogItemContentReverser.prototype = new LogItemVisitor();
+
+ LogItemContentReverser.prototype.visitGroup = function(group) {
+ group.reverseChildren();
+ this.visitChildren(group);
+ };
+
+ /*----------------------------------------------------------------*/
+
+ function setNewestAtTop(isNewestAtTop) {
+ var oldNewestAtTop = newestAtTop;
+ var i, iLen, j, jLen;
+ newestAtTop = Boolean(isNewestAtTop);
+ if (oldNewestAtTop != newestAtTop) {
+ var visitor = new LogItemContentReverser();
+ rootGroup.accept(visitor);
+
+ // Reassemble the matches array
+ if (currentSearch) {
+ var currentMatch = currentSearch.matches[currentMatchIndex];
+ var matchIndex = 0;
+ var matches = [];
+ var actOnLogEntry = function(logEntry) {
+ var logEntryMatches = logEntry.getSearchMatches();
+ for (j = 0, jLen = logEntryMatches.length; j < jLen; j++) {
+ matches[matchIndex] = logEntryMatches[j];
+ if (currentMatch && logEntryMatches[j].equals(currentMatch)) {
+ currentMatchIndex = matchIndex;
+ }
+ matchIndex++;
+ }
+ };
+ if (newestAtTop) {
+ for (i = logEntries.length - 1; i >= 0; i--) {
+ actOnLogEntry(logEntries[i]);
+ }
+ } else {
+ for (i = 0, iLen = logEntries.length; i < iLen; i++) {
+ actOnLogEntry(logEntries[i]);
+ }
+ }
+ currentSearch.matches = matches;
+ if (currentMatch) {
+ currentMatch.setCurrent();
+ }
+ } else if (scrollToLatest) {
+ doScrollToLatest();
+ }
+ }
+ $("newestAtTop").checked = isNewestAtTop;
+ }
+
+ function toggleNewestAtTop() {
+ var isNewestAtTop = $("newestAtTop").checked;
+ setNewestAtTop(isNewestAtTop);
+ }
+
+ var scrollToLatest = true;
+
+ function setScrollToLatest(isScrollToLatest) {
+ scrollToLatest = isScrollToLatest;
+ if (scrollToLatest) {
+ doScrollToLatest();
+ }
+ $("scrollToLatest").checked = isScrollToLatest;
+ }
+
+ function toggleScrollToLatest() {
+ var isScrollToLatest = $("scrollToLatest").checked;
+ setScrollToLatest(isScrollToLatest);
+ }
+
+ function doScrollToLatest() {
+ var l = logMainContainer;
+ if (typeof l.scrollTop != "undefined") {
+ if (newestAtTop) {
+ l.scrollTop = 0;
+ } else {
+ var latestLogEntry = l.lastChild;
+ if (latestLogEntry) {
+ l.scrollTop = l.scrollHeight;
+ }
+ }
+ }
+ }
+
+ var closeIfOpenerCloses = true;
+
+ function setCloseIfOpenerCloses(isCloseIfOpenerCloses) {
+ closeIfOpenerCloses = isCloseIfOpenerCloses;
+ }
+
+ var maxMessages = null;
+
+ function setMaxMessages(max) {
+ maxMessages = max;
+ pruneLogEntries();
+ }
+
+ var showCommandLine = false;
+
+ function setShowCommandLine(isShowCommandLine) {
+ showCommandLine = isShowCommandLine;
+ if (loaded) {
+ $("commandLine").style.display = showCommandLine ? "block" : "none";
+ setCommandInputWidth();
+ setLogContainerHeight();
+ }
+ }
+
+ function focusCommandLine() {
+ if (loaded) {
+ $("command").focus();
+ }
+ }
+
+ function focusSearch() {
+ if (loaded) {
+ $("searchBox").focus();
+ }
+ }
+
+ function getLogItems() {
+ var items = [];
+ for (var i = 0, len = logItems.length; i < len; i++) {
+ logItems[i].serialize(items);
+ }
+ return items;
+ }
+
+ function setLogItems(items) {
+ var loggingReallyEnabled = loggingEnabled;
+ // Temporarily turn logging on
+ loggingEnabled = true;
+ for (var i = 0, len = items.length; i < len; i++) {
+ switch (items[i][0]) {
+ case LogItem.serializedItemKeys.LOG_ENTRY:
+ log(items[i][1], items[i][2]);
+ break;
+ case LogItem.serializedItemKeys.GROUP_START:
+ group(items[i][1]);
+ break;
+ case LogItem.serializedItemKeys.GROUP_END:
+ groupEnd();
+ break;
+ }
+ }
+ loggingEnabled = loggingReallyEnabled;
+ }
+
+ function log(logLevel, formattedMessage) {
+ if (loggingEnabled) {
+ var logEntry = new LogEntry(logLevel, formattedMessage);
+ logEntries.push(logEntry);
+ logEntriesAndSeparators.push(logEntry);
+ logItems.push(logEntry);
+ currentGroup.addChild(logEntry);
+ if (loaded) {
+ if (logQueuedEventsTimer !== null) {
+ clearTimeout(logQueuedEventsTimer);
+ }
+ logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);
+ unrenderedLogItemsExist = true;
+ }
+ }
+ }
+
+ function renderQueuedLogItems() {
+ logQueuedEventsTimer = null;
+ var pruned = pruneLogEntries();
+
+ // Render any unrendered log entries and apply the current search to them
+ var initiallyHasMatches = currentSearch ? currentSearch.hasMatches() : false;
+ for (var i = 0, len = logItems.length; i < len; i++) {
+ if (!logItems[i].rendered) {
+ logItems[i].render();
+ logItems[i].appendToLog();
+ if (currentSearch && (logItems[i] instanceof LogEntry)) {
+ currentSearch.applyTo(logItems[i]);
+ }
+ }
+ }
+ if (currentSearch) {
+ if (pruned) {
+ if (currentSearch.hasVisibleMatches()) {
+ if (currentMatchIndex === null) {
+ setCurrentMatchIndex(0);
+ }
+ displayMatches();
+ } else {
+ displayNoMatches();
+ }
+ } else if (!initiallyHasMatches && currentSearch.hasVisibleMatches()) {
+ setCurrentMatchIndex(0);
+ displayMatches();
+ }
+ }
+ if (scrollToLatest) {
+ doScrollToLatest();
+ }
+ unrenderedLogItemsExist = false;
+ }
+
+ function pruneLogEntries() {
+ if ((maxMessages !== null) && (logEntriesAndSeparators.length > maxMessages)) {
+ var numberToDelete = logEntriesAndSeparators.length - maxMessages;
+ var prunedLogEntries = logEntriesAndSeparators.slice(0, numberToDelete);
+ if (currentSearch) {
+ currentSearch.removeMatches(prunedLogEntries);
+ }
+ var group;
+ for (var i = 0; i < numberToDelete; i++) {
+ group = logEntriesAndSeparators[i].group;
+ array_remove(logItems, logEntriesAndSeparators[i]);
+ array_remove(logEntries, logEntriesAndSeparators[i]);
+ logEntriesAndSeparators[i].remove(true, true);
+ if (group.children.length === 0 && group !== currentGroup && group !== rootGroup) {
+ array_remove(logItems, group);
+ group.remove(true, true);
+ }
+ }
+ logEntriesAndSeparators = array_removeFromStart(logEntriesAndSeparators, numberToDelete);
+ return true;
+ }
+ return false;
+ }
+
+ function group(name, startExpanded) {
+ if (loggingEnabled) {
+ initiallyExpanded = (typeof startExpanded === "undefined") ? true : Boolean(startExpanded);
+ var newGroup = new Group(name, false, initiallyExpanded);
+ currentGroup.addChild(newGroup);
+ currentGroup = newGroup;
+ logItems.push(newGroup);
+ if (loaded) {
+ if (logQueuedEventsTimer !== null) {
+ clearTimeout(logQueuedEventsTimer);
+ }
+ logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);
+ unrenderedLogItemsExist = true;
+ }
+ }
+ }
+
+ function groupEnd() {
+ currentGroup = (currentGroup === rootGroup) ? rootGroup : currentGroup.group;
+ }
+
+ function mainPageReloaded() {
+ currentGroup = rootGroup;
+ var separator = new Separator();
+ logEntriesAndSeparators.push(separator);
+ logItems.push(separator);
+ currentGroup.addChild(separator);
+ }
+
+ function closeWindow() {
+ if (appender && mainWindowExists()) {
+ appender.close(true);
+ } else {
+ window.close();
+ }
+ }
+
+ function hide() {
+ if (appender && mainWindowExists()) {
+ appender.hide();
+ }
+ }
+
+ var mainWindow = window;
+ var windowId = "log4javascriptConsoleWindow_" + new Date().getTime() + "_" + ("" + Math.random()).substr(2);
+
+ function setMainWindow(win) {
+ mainWindow = win;
+ mainWindow[windowId] = window;
+ // If this is a pop-up, poll the opener to see if it's closed
+ if (opener && closeIfOpenerCloses) {
+ pollOpener();
+ }
+ }
+
+ function pollOpener() {
+ if (closeIfOpenerCloses) {
+ if (mainWindowExists()) {
+ setTimeout(pollOpener, 500);
+ } else {
+ closeWindow();
+ }
+ }
+ }
+
+ function mainWindowExists() {
+ try {
+ return (mainWindow && !mainWindow.closed &&
+ mainWindow[windowId] == window);
+ } catch (ex) {}
+ return false;
+ }
+
+ var logLevels = ["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"];
+
+ function getCheckBox(logLevel) {
+ return $("switch_" + logLevel);
+ }
+
+ function getIeWrappedLogContainer() {
+ return $("log_wrapped");
+ }
+
+ function getIeUnwrappedLogContainer() {
+ return $("log_unwrapped");
+ }
+
+ function applyFilters() {
+ for (var i = 0; i < logLevels.length; i++) {
+ if (getCheckBox(logLevels[i]).checked) {
+ addClass(logMainContainer, logLevels[i]);
+ } else {
+ removeClass(logMainContainer, logLevels[i]);
+ }
+ }
+ updateSearchFromFilters();
+ }
+
+ function toggleAllLevels() {
+ var turnOn = $("switch_ALL").checked;
+ for (var i = 0; i < logLevels.length; i++) {
+ getCheckBox(logLevels[i]).checked = turnOn;
+ if (turnOn) {
+ addClass(logMainContainer, logLevels[i]);
+ } else {
+ removeClass(logMainContainer, logLevels[i]);
+ }
+ }
+ }
+
+ function checkAllLevels() {
+ for (var i = 0; i < logLevels.length; i++) {
+ if (!getCheckBox(logLevels[i]).checked) {
+ getCheckBox("ALL").checked = false;
+ return;
+ }
+ }
+ getCheckBox("ALL").checked = true;
+ }
+
+ function clearLog() {
+ rootGroup.clear();
+ currentGroup = rootGroup;
+ logEntries = [];
+ logItems = [];
+ logEntriesAndSeparators = [];
+ doSearch();
+ }
+
+ function toggleWrap() {
+ var enable = $("wrap").checked;
+ if (enable) {
+ addClass(logMainContainer, "wrap");
+ } else {
+ removeClass(logMainContainer, "wrap");
+ }
+ refreshCurrentMatch();
+ }
+
+ /* ------------------------------------------------------------------- */
+
+ // Search
+
+ var searchTimer = null;
+
+ function scheduleSearch() {
+ try {
+ clearTimeout(searchTimer);
+ } catch (ex) {
+ // Do nothing
+ }
+ searchTimer = setTimeout(doSearch, 500);
+ }
+
+ function Search(searchTerm, isRegex, searchRegex, isCaseSensitive) {
+ this.searchTerm = searchTerm;
+ this.isRegex = isRegex;
+ this.searchRegex = searchRegex;
+ this.isCaseSensitive = isCaseSensitive;
+ this.matches = [];
+ }
+
+ Search.prototype = {
+ hasMatches: function() {
+ return this.matches.length > 0;
+ },
+
+ hasVisibleMatches: function() {
+ if (this.hasMatches()) {
+ for (var i = 0; i < this.matches.length; i++) {
+ if (this.matches[i].isVisible()) {
+ return true;
+ }
+ }
+ }
+ return false;
+ },
+
+ match: function(logEntry) {
+ var entryText = String(logEntry.formattedMessage);
+ var matchesSearch = false;
+ if (this.isRegex) {
+ matchesSearch = this.searchRegex.test(entryText);
+ } else if (this.isCaseSensitive) {
+ matchesSearch = (entryText.indexOf(this.searchTerm) > -1);
+ } else {
+ matchesSearch = (entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1);
+ }
+ return matchesSearch;
+ },
+
+ getNextVisibleMatchIndex: function() {
+ for (var i = currentMatchIndex + 1; i < this.matches.length; i++) {
+ if (this.matches[i].isVisible()) {
+ return i;
+ }
+ }
+ // Start again from the first match
+ for (i = 0; i <= currentMatchIndex; i++) {
+ if (this.matches[i].isVisible()) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ getPreviousVisibleMatchIndex: function() {
+ for (var i = currentMatchIndex - 1; i >= 0; i--) {
+ if (this.matches[i].isVisible()) {
+ return i;
+ }
+ }
+ // Start again from the last match
+ for (var i = this.matches.length - 1; i >= currentMatchIndex; i--) {
+ if (this.matches[i].isVisible()) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ applyTo: function(logEntry) {
+ var doesMatch = this.match(logEntry);
+ if (doesMatch) {
+ logEntry.group.expand();
+ logEntry.setSearchMatch(true);
+ var logEntryContent;
+ var wrappedLogEntryContent;
+ var searchTermReplacementStartTag = "<span class=\"searchterm\">";
+ var searchTermReplacementEndTag = "<" + "/span>";
+ var preTagName = isIe ? "pre" : "span";
+ var preStartTag = "<" + preTagName + " class=\"pre\">";
+ var preEndTag = "<" + "/" + preTagName + ">";
+ var startIndex = 0;
+ var searchIndex, matchedText, textBeforeMatch;
+ if (this.isRegex) {
+ var flags = this.isCaseSensitive ? "g" : "gi";
+ var capturingRegex = new RegExp("(" + this.searchRegex.source + ")", flags);
+
+ // Replace the search term with temporary tokens for the start and end tags
+ var rnd = ("" + Math.random()).substr(2);
+ var startToken = "%%s" + rnd + "%%";
+ var endToken = "%%e" + rnd + "%%";
+ logEntryContent = logEntry.formattedMessage.replace(capturingRegex, startToken + "$1" + endToken);
+
+ // Escape the HTML to get rid of angle brackets
+ logEntryContent = escapeHtml(logEntryContent);
+
+ // Substitute the proper HTML back in for the search match
+ var result;
+ var searchString = logEntryContent;
+ logEntryContent = "";
+ wrappedLogEntryContent = "";
+ while ((searchIndex = searchString.indexOf(startToken, startIndex)) > -1) {
+ var endTokenIndex = searchString.indexOf(endToken, searchIndex);
+ matchedText = searchString.substring(searchIndex + startToken.length, endTokenIndex);
+ textBeforeMatch = searchString.substring(startIndex, searchIndex);
+ logEntryContent += preStartTag + textBeforeMatch + preEndTag;
+ logEntryContent += searchTermReplacementStartTag + preStartTag + matchedText +
+ preEndTag + searchTermReplacementEndTag;
+ if (isIe) {
+ wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +
+ matchedText + searchTermReplacementEndTag;
+ }
+ startIndex = endTokenIndex + endToken.length;
+ }
+ logEntryContent += preStartTag + searchString.substr(startIndex) + preEndTag;
+ if (isIe) {
+ wrappedLogEntryContent += searchString.substr(startIndex);
+ }
+ } else {
+ logEntryContent = "";
+ wrappedLogEntryContent = "";
+ var searchTermReplacementLength = searchTermReplacementStartTag.length +
+ this.searchTerm.length + searchTermReplacementEndTag.length;
+ var searchTermLength = this.searchTerm.length;
+ var searchTermLowerCase = this.searchTerm.toLowerCase();
+ var logTextLowerCase = logEntry.formattedMessage.toLowerCase();
+ while ((searchIndex = logTextLowerCase.indexOf(searchTermLowerCase, startIndex)) > -1) {
+ matchedText = escapeHtml(logEntry.formattedMessage.substr(searchIndex, this.searchTerm.length));
+ textBeforeMatch = escapeHtml(logEntry.formattedMessage.substring(startIndex, searchIndex));
+ var searchTermReplacement = searchTermReplacementStartTag +
+ preStartTag + matchedText + preEndTag + searchTermReplacementEndTag;
+ logEntryContent += preStartTag + textBeforeMatch + preEndTag + searchTermReplacement;
+ if (isIe) {
+ wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +
+ matchedText + searchTermReplacementEndTag;
+ }
+ startIndex = searchIndex + searchTermLength;
+ }
+ var textAfterLastMatch = escapeHtml(logEntry.formattedMessage.substr(startIndex));
+ logEntryContent += preStartTag + textAfterLastMatch + preEndTag;
+ if (isIe) {
+ wrappedLogEntryContent += textAfterLastMatch;
+ }
+ }
+ logEntry.setContent(logEntryContent, wrappedLogEntryContent);
+ var logEntryMatches = logEntry.getSearchMatches();
+ this.matches = this.matches.concat(logEntryMatches);
+ } else {
+ logEntry.setSearchMatch(false);
+ logEntry.setContent(logEntry.formattedMessage, logEntry.formattedMessage);
+ }
+ return doesMatch;
+ },
+
+ removeMatches: function(logEntries) {
+ var matchesToRemoveCount = 0;
+ var currentMatchRemoved = false;
+ var matchesToRemove = [];
+ var i, iLen, j, jLen;
+
+ // Establish the list of matches to be removed
+ for (i = 0, iLen = this.matches.length; i < iLen; i++) {
+ for (j = 0, jLen = logEntries.length; j < jLen; j++) {
+ if (this.matches[i].belongsTo(logEntries[j])) {
+ matchesToRemove.push(this.matches[i]);
+ if (i === currentMatchIndex) {
+ currentMatchRemoved = true;
+ }
+ }
+ }
+ }
+
+ // Set the new current match index if the current match has been deleted
+ // This will be the first match that appears after the first log entry being
+ // deleted, if one exists; otherwise, it's the first match overall
+ var newMatch = currentMatchRemoved ? null : this.matches[currentMatchIndex];
+ if (currentMatchRemoved) {
+ for (i = currentMatchIndex, iLen = this.matches.length; i < iLen; i++) {
+ if (this.matches[i].isVisible() && !array_contains(matchesToRemove, this.matches[i])) {
+ newMatch = this.matches[i];
+ break;
+ }
+ }
+ }
+
+ // Remove the matches
+ for (i = 0, iLen = matchesToRemove.length; i < iLen; i++) {
+ array_remove(this.matches, matchesToRemove[i]);
+ matchesToRemove[i].remove();
+ }
+
+ // Set the new match, if one exists
+ if (this.hasVisibleMatches()) {
+ if (newMatch === null) {
+ setCurrentMatchIndex(0);
+ } else {
+ // Get the index of the new match
+ var newMatchIndex = 0;
+ for (i = 0, iLen = this.matches.length; i < iLen; i++) {
+ if (newMatch === this.matches[i]) {
+ newMatchIndex = i;
+ break;
+ }
+ }
+ setCurrentMatchIndex(newMatchIndex);
+ }
+ } else {
+ currentMatchIndex = null;
+ displayNoMatches();
+ }
+ }
+ };
+
+ function getPageOffsetTop(el, container) {
+ var currentEl = el;
+ var y = 0;
+ while (currentEl && currentEl != container) {
+ y += currentEl.offsetTop;
+ currentEl = currentEl.offsetParent;
+ }
+ return y;
+ }
+
+ function scrollIntoView(el) {
+ var logContainer = logMainContainer;
+ // Check if the whole width of the element is visible and centre if not
+ if (!$("wrap").checked) {
+ var logContainerLeft = logContainer.scrollLeft;
+ var logContainerRight = logContainerLeft + logContainer.offsetWidth;
+ var elLeft = el.offsetLeft;
+ var elRight = elLeft + el.offsetWidth;
+ if (elLeft < logContainerLeft || elRight > logContainerRight) {
+ logContainer.scrollLeft = elLeft - (logContainer.offsetWidth - el.offsetWidth) / 2;
+ }
+ }
+ // Check if the whole height of the element is visible and centre if not
+ var logContainerTop = logContainer.scrollTop;
+ var logContainerBottom = logContainerTop + logContainer.offsetHeight;
+ var elTop = getPageOffsetTop(el) - getToolBarsHeight();
+ var elBottom = elTop + el.offsetHeight;
+ if (elTop < logContainerTop || elBottom > logContainerBottom) {
+ logContainer.scrollTop = elTop - (logContainer.offsetHeight - el.offsetHeight) / 2;
+ }
+ }
+
+ function Match(logEntryLevel, spanInMainDiv, spanInUnwrappedPre, spanInWrappedDiv) {
+ this.logEntryLevel = logEntryLevel;
+ this.spanInMainDiv = spanInMainDiv;
+ if (isIe) {
+ this.spanInUnwrappedPre = spanInUnwrappedPre;
+ this.spanInWrappedDiv = spanInWrappedDiv;
+ }
+ this.mainSpan = isIe ? spanInUnwrappedPre : spanInMainDiv;
+ }
+
+ Match.prototype = {
+ equals: function(match) {
+ return this.mainSpan === match.mainSpan;
+ },
+
+ setCurrent: function() {
+ if (isIe) {
+ addClass(this.spanInUnwrappedPre, "currentmatch");
+ addClass(this.spanInWrappedDiv, "currentmatch");
+ // Scroll the visible one into view
+ var elementToScroll = $("wrap").checked ? this.spanInWrappedDiv : this.spanInUnwrappedPre;
+ scrollIntoView(elementToScroll);
+ } else {
+ addClass(this.spanInMainDiv, "currentmatch");
+ scrollIntoView(this.spanInMainDiv);
+ }
+ },
+
+ belongsTo: function(logEntry) {
+ if (isIe) {
+ return isDescendant(this.spanInUnwrappedPre, logEntry.unwrappedPre);
+ } else {
+ return isDescendant(this.spanInMainDiv, logEntry.mainDiv);
+ }
+ },
+
+ setNotCurrent: function() {
+ if (isIe) {
+ removeClass(this.spanInUnwrappedPre, "currentmatch");
+ removeClass(this.spanInWrappedDiv, "currentmatch");
+ } else {
+ removeClass(this.spanInMainDiv, "currentmatch");
+ }
+ },
+
+ isOrphan: function() {
+ return isOrphan(this.mainSpan);
+ },
+
+ isVisible: function() {
+ return getCheckBox(this.logEntryLevel).checked;
+ },
+
+ remove: function() {
+ if (isIe) {
+ this.spanInUnwrappedPre = null;
+ this.spanInWrappedDiv = null;
+ } else {
+ this.spanInMainDiv = null;
+ }
+ }
+ };
+
+ var currentSearch = null;
+ var currentMatchIndex = null;
+
+ function doSearch() {
+ var searchBox = $("searchBox");
+ var searchTerm = searchBox.value;
+ var isRegex = $("searchRegex").checked;
+ var isCaseSensitive = $("searchCaseSensitive").checked;
+ var i;
+
+ if (searchTerm === "") {
+ $("searchReset").disabled = true;
+ $("searchNav").style.display = "none";
+ removeClass(document.body, "searching");
+ removeClass(searchBox, "hasmatches");
+ removeClass(searchBox, "nomatches");
+ for (i = 0; i < logEntries.length; i++) {
+ logEntries[i].clearSearch();
+ logEntries[i].setContent(logEntries[i].formattedMessage, logEntries[i].formattedMessage);
+ }
+ currentSearch = null;
+ setLogContainerHeight();
+ } else {
+ $("searchReset").disabled = false;
+ $("searchNav").style.display = "block";
+ var searchRegex;
+ var regexValid;
+ if (isRegex) {
+ try {
+ searchRegex = isCaseSensitive ? new RegExp(searchTerm, "g") : new RegExp(searchTerm, "gi");
+ regexValid = true;
+ replaceClass(searchBox, "validregex", "invalidregex");
+ searchBox.title = "Valid regex";
+ } catch (ex) {
+ regexValid = false;
+ replaceClass(searchBox, "invalidregex", "validregex");
+ searchBox.title = "Invalid regex: " + (ex.message ? ex.message : (ex.description ? ex.description : "unknown error"));
+ return;
+ }
+ } else {
+ searchBox.title = "";
+ removeClass(searchBox, "validregex");
+ removeClass(searchBox, "invalidregex");
+ }
+ addClass(document.body, "searching");
+ currentSearch = new Search(searchTerm, isRegex, searchRegex, isCaseSensitive);
+ for (i = 0; i < logEntries.length; i++) {
+ currentSearch.applyTo(logEntries[i]);
+ }
+ setLogContainerHeight();
+
+ // Highlight the first search match
+ if (currentSearch.hasVisibleMatches()) {
+ setCurrentMatchIndex(0);
+ displayMatches();
+ } else {
+ displayNoMatches();
+ }
+ }
+ }
+
+ function updateSearchFromFilters() {
+ if (currentSearch) {
+ if (currentSearch.hasMatches()) {
+ if (currentMatchIndex === null) {
+ currentMatchIndex = 0;
+ }
+ var currentMatch = currentSearch.matches[currentMatchIndex];
+ if (currentMatch.isVisible()) {
+ displayMatches();
+ setCurrentMatchIndex(currentMatchIndex);
+ } else {
+ currentMatch.setNotCurrent();
+ // Find the next visible match, if one exists
+ var nextVisibleMatchIndex = currentSearch.getNextVisibleMatchIndex();
+ if (nextVisibleMatchIndex > -1) {
+ setCurrentMatchIndex(nextVisibleMatchIndex);
+ displayMatches();
+ } else {
+ displayNoMatches();
+ }
+ }
+ } else {
+ displayNoMatches();
+ }
+ }
+ }
+
+ function refreshCurrentMatch() {
+ if (currentSearch && currentSearch.hasVisibleMatches()) {
+ setCurrentMatchIndex(currentMatchIndex);
+ }
+ }
+
+ function displayMatches() {
+ replaceClass($("searchBox"), "hasmatches", "nomatches");
+ $("searchBox").title = "" + currentSearch.matches.length + " matches found";
+ $("searchNav").style.display = "block";
+ setLogContainerHeight();
+ }
+
+ function displayNoMatches() {
+ replaceClass($("searchBox"), "nomatches", "hasmatches");
+ $("searchBox").title = "No matches found";
+ $("searchNav").style.display = "none";
+ setLogContainerHeight();
+ }
+
+ function toggleSearchEnabled(enable) {
+ enable = (typeof enable == "undefined") ? !$("searchDisable").checked : enable;
+ $("searchBox").disabled = !enable;
+ $("searchReset").disabled = !enable;
+ $("searchRegex").disabled = !enable;
+ $("searchNext").disabled = !enable;
+ $("searchPrevious").disabled = !enable;
+ $("searchCaseSensitive").disabled = !enable;
+ $("searchNav").style.display = (enable && ($("searchBox").value !== "") &&
+ currentSearch && currentSearch.hasVisibleMatches()) ?
+ "block" : "none";
+ if (enable) {
+ removeClass($("search"), "greyedout");
+ addClass(document.body, "searching");
+ if ($("searchHighlight").checked) {
+ addClass(logMainContainer, "searchhighlight");
+ } else {
+ removeClass(logMainContainer, "searchhighlight");
+ }
+ if ($("searchFilter").checked) {
+ addClass(logMainContainer, "searchfilter");
+ } else {
+ removeClass(logMainContainer, "searchfilter");
+ }
+ $("searchDisable").checked = !enable;
+ } else {
+ addClass($("search"), "greyedout");
+ removeClass(document.body, "searching");
+ removeClass(logMainContainer, "searchhighlight");
+ removeClass(logMainContainer, "searchfilter");
+ }
+ setLogContainerHeight();
+ }
+
+ function toggleSearchFilter() {
+ var enable = $("searchFilter").checked;
+ if (enable) {
+ addClass(logMainContainer, "searchfilter");
+ } else {
+ removeClass(logMainContainer, "searchfilter");
+ }
+ refreshCurrentMatch();
+ }
+
+ function toggleSearchHighlight() {
+ var enable = $("searchHighlight").checked;
+ if (enable) {
+ addClass(logMainContainer, "searchhighlight");
+ } else {
+ removeClass(logMainContainer, "searchhighlight");
+ }
+ }
+
+ function clearSearch() {
+ $("searchBox").value = "";
+ doSearch();
+ }
+
+ function searchNext() {
+ if (currentSearch !== null && currentMatchIndex !== null) {
+ currentSearch.matches[currentMatchIndex].setNotCurrent();
+ var nextMatchIndex = currentSearch.getNextVisibleMatchIndex();
+ if (nextMatchIndex > currentMatchIndex || confirm("Reached the end of the page. Start from the top?")) {
+ setCurrentMatchIndex(nextMatchIndex);
+ }
+ }
+ }
+
+ function searchPrevious() {
+ if (currentSearch !== null && currentMatchIndex !== null) {
+ currentSearch.matches[currentMatchIndex].setNotCurrent();
+ var previousMatchIndex = currentSearch.getPreviousVisibleMatchIndex();
+ if (previousMatchIndex < currentMatchIndex || confirm("Reached the start of the page. Continue from the bottom?")) {
+ setCurrentMatchIndex(previousMatchIndex);
+ }
+ }
+ }
+
+ function setCurrentMatchIndex(index) {
+ currentMatchIndex = index;
+ currentSearch.matches[currentMatchIndex].setCurrent();
+ }
+
+ /* ------------------------------------------------------------------------- */
+
+ // CSS Utilities
+
+ function addClass(el, cssClass) {
+ if (!hasClass(el, cssClass)) {
+ if (el.className) {
+ el.className += " " + cssClass;
+ } else {
+ el.className = cssClass;
+ }
+ }
+ }
+
+ function hasClass(el, cssClass) {
+ if (el.className) {
+ var classNames = el.className.split(" ");
+ return array_contains(classNames, cssClass);
+ }
+ return false;
+ }
+
+ function removeClass(el, cssClass) {
+ if (hasClass(el, cssClass)) {
+ // Rebuild the className property
+ var existingClasses = el.className.split(" ");
+ var newClasses = [];
+ for (var i = 0, len = existingClasses.length; i < len; i++) {
+ if (existingClasses[i] != cssClass) {
+ newClasses[newClasses.length] = existingClasses[i];
+ }
+ }
+ el.className = newClasses.join(" ");
+ }
+ }
+
+ function replaceClass(el, newCssClass, oldCssClass) {
+ removeClass(el, oldCssClass);
+ addClass(el, newCssClass);
+ }
+
+ /* ------------------------------------------------------------------------- */
+
+ // Other utility functions
+
+ function getElementsByClass(el, cssClass, tagName) {
+ var elements = el.getElementsByTagName(tagName);
+ var matches = [];
+ for (var i = 0, len = elements.length; i < len; i++) {
+ if (hasClass(elements[i], cssClass)) {
+ matches.push(elements[i]);
+ }
+ }
+ return matches;
+ }
+
+ // Syntax borrowed from Prototype library
+ function $(id) {
+ return document.getElementById(id);
+ }
+
+ function isDescendant(node, ancestorNode) {
+ while (node != null) {
+ if (node === ancestorNode) {
+ return true;
+ }
+ node = node.parentNode;
+ }
+ return false;
+ }
+
+ function isOrphan(node) {
+ var currentNode = node;
+ while (currentNode) {
+ if (currentNode == document.body) {
+ return false;
+ }
+ currentNode = currentNode.parentNode;
+ }
+ return true;
+ }
+
+ function escapeHtml(str) {
+ return str.replace(/&/g, "&").replace(/[<]/g, "<").replace(/>/g, ">");
+ }
+
+ function getWindowWidth() {
+ if (window.innerWidth) {
+ return window.innerWidth;
+ } else if (document.documentElement && document.documentElement.clientWidth) {
+ return document.documentElement.clientWidth;
+ } else if (document.body) {
+ return document.body.clientWidth;
+ }
+ return 0;
+ }
+
+ function getWindowHeight() {
+ if (window.innerHeight) {
+ return window.innerHeight;
+ } else if (document.documentElement && document.documentElement.clientHeight) {
+ return document.documentElement.clientHeight;
+ } else if (document.body) {
+ return document.body.clientHeight;
+ }
+ return 0;
+ }
+
+ function getToolBarsHeight() {
+ return $("switches").offsetHeight;
+ }
+
+ function getChromeHeight() {
+ var height = getToolBarsHeight();
+ if (showCommandLine) {
+ height += $("commandLine").offsetHeight;
+ }
+ return height;
+ }
+
+ function setLogContainerHeight() {
+ if (logMainContainer) {
+ var windowHeight = getWindowHeight();
+ $("body").style.height = getWindowHeight() + "px";
+ logMainContainer.style.height = "" +
+ Math.max(0, windowHeight - getChromeHeight()) + "px";
+ }
+ }
+
+ function setCommandInputWidth() {
+ if (showCommandLine) {
+ $("command").style.width = "" + Math.max(0, $("commandLineContainer").offsetWidth -
+ ($("evaluateButton").offsetWidth + 13)) + "px";
+ }
+ }
+
+ window.onresize = function() {
+ setCommandInputWidth();
+ setLogContainerHeight();
+ };
+
+ if (!Array.prototype.push) {
+ Array.prototype.push = function() {
+ for (var i = 0, len = arguments.length; i < len; i++){
+ this[this.length] = arguments[i];
+ }
+ return this.length;
+ };
+ }
+
+ if (!Array.prototype.pop) {
+ Array.prototype.pop = function() {
+ if (this.length > 0) {
+ var val = this[this.length - 1];
+ this.length = this.length - 1;
+ return val;
+ }
+ };
+ }
+
+ if (!Array.prototype.shift) {
+ Array.prototype.shift = function() {
+ if (this.length > 0) {
+ var firstItem = this[0];
+ for (var i = 0, len = this.length - 1; i < len; i++) {
+ this[i] = this[i + 1];
+ }
+ this.length = this.length - 1;
+ return firstItem;
+ }
+ };
+ }
+
+ if (!Array.prototype.splice) {
+ Array.prototype.splice = function(startIndex, deleteCount) {
+ var itemsAfterDeleted = this.slice(startIndex + deleteCount);
+ var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);
+ this.length = startIndex;
+ // Copy the arguments into a proper Array object
+ var argumentsArray = [];
+ for (var i = 0, len = arguments.length; i < len; i++) {
+ argumentsArray[i] = arguments[i];
+ }
+ var itemsToAppend = (argumentsArray.length > 2) ?
+ itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;
+ for (i = 0, len = itemsToAppend.length; i < len; i++) {
+ this.push(itemsToAppend[i]);
+ }
+ return itemsDeleted;
+ };
+ }
+
+ function array_remove(arr, val) {
+ var index = -1;
+ for (var i = 0, len = arr.length; i < len; i++) {
+ if (arr[i] === val) {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0) {
+ arr.splice(index, 1);
+ return index;
+ } else {
+ return false;
+ }
+ }
+
+ function array_removeFromStart(array, numberToRemove) {
+ if (Array.prototype.splice) {
+ array.splice(0, numberToRemove);
+ } else {
+ for (var i = numberToRemove, len = array.length; i < len; i++) {
+ array[i - numberToRemove] = array[i];
+ }
+ array.length = array.length - numberToRemove;
+ }
+ return array;
+ }
+
+ function array_contains(arr, val) {
+ for (var i = 0, len = arr.length; i < len; i++) {
+ if (arr[i] == val) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function getErrorMessage(ex) {
+ if (ex.message) {
+ return ex.message;
+ } else if (ex.description) {
+ return ex.description;
+ }
+ return "" + ex;
+ }
+
+ function moveCaretToEnd(input) {
+ if (input.setSelectionRange) {
+ input.focus();
+ var length = input.value.length;
+ input.setSelectionRange(length, length);
+ } else if (input.createTextRange) {
+ var range = input.createTextRange();
+ range.collapse(false);
+ range.select();
+ }
+ input.focus();
+ }
+
+ function stopPropagation(evt) {
+ if (evt.stopPropagation) {
+ evt.stopPropagation();
+ } else if (typeof evt.cancelBubble != "undefined") {
+ evt.cancelBubble = true;
+ }
+ }
+
+ function getEvent(evt) {
+ return evt ? evt : event;
+ }
+
+ function getTarget(evt) {
+ return evt.target ? evt.target : evt.srcElement;
+ }
+
+ function getRelatedTarget(evt) {
+ if (evt.relatedTarget) {
+ return evt.relatedTarget;
+ } else if (evt.srcElement) {
+ switch(evt.type) {
+ case "mouseover":
+ return evt.fromElement;
+ case "mouseout":
+ return evt.toElement;
+ default:
+ return evt.srcElement;
+ }
+ }
+ }
+
+ function cancelKeyEvent(evt) {
+ evt.returnValue = false;
+ stopPropagation(evt);
+ }
+
+ function evalCommandLine() {
+ var expr = $("command").value;
+ evalCommand(expr);
+ $("command").value = "";
+ }
+
+ function evalLastCommand() {
+ if (lastCommand != null) {
+ evalCommand(lastCommand);
+ }
+ }
+
+ var lastCommand = null;
+ var commandHistory = [];
+ var currentCommandIndex = 0;
+
+ function evalCommand(expr) {
+ if (appender) {
+ appender.evalCommandAndAppend(expr);
+ } else {
+ var prefix = ">>> " + expr + "\r\n";
+ try {
+ log("INFO", prefix + eval(expr));
+ } catch (ex) {
+ log("ERROR", prefix + "Error: " + getErrorMessage(ex));
+ }
+ }
+ // Update command history
+ if (expr != commandHistory[commandHistory.length - 1]) {
+ commandHistory.push(expr);
+ // Update the appender
+ if (appender) {
+ appender.storeCommandHistory(commandHistory);
+ }
+ }
+ currentCommandIndex = (expr == commandHistory[currentCommandIndex]) ? currentCommandIndex + 1 : commandHistory.length;
+ lastCommand = expr;
+ }
+ //]]>
+ </script>
+ <style type="text/css">
+ body {
+ background-color: white;
+ color: black;
+ padding: 0;
+ margin: 0;
+ font-family: tahoma, verdana, arial, helvetica, sans-serif;
+ overflow: hidden;
+ }
+
+ div#switchesContainer input {
+ margin-bottom: 0;
+ }
+
+ div.toolbar {
+ border-top: solid #ffffff 1px;
+ border-bottom: solid #aca899 1px;
+ background-color: #f1efe7;
+ padding: 3px 5px;
+ font-size: 68.75%;
+ }
+
+ div.toolbar, div#search input {
+ font-family: tahoma, verdana, arial, helvetica, sans-serif;
+ }
+
+ div.toolbar input.button {
+ padding: 0 5px;
+ font-size: 100%;
+ }
+
+ div.toolbar input.hidden {
+ display: none;
+ }
+
+ div#switches input#clearButton {
+ margin-left: 20px;
+ }
+
+ div#levels label {
+ font-weight: bold;
+ }
+
+ div#levels label, div#options label {
+ margin-right: 5px;
+ }
+
+ div#levels label#wrapLabel {
+ font-weight: normal;
+ }
+
+ div#search label {
+ margin-right: 10px;
+ }
+
+ div#search label.searchboxlabel {
+ margin-right: 0;
+ }
+
+ div#search input {
+ font-size: 100%;
+ }
+
+ div#search input.validregex {
+ color: green;
+ }
+
+ div#search input.invalidregex {
+ color: red;
+ }
+
+ div#search input.nomatches {
+ color: white;
+ background-color: #ff6666;
+ }
+
+ div#search input.nomatches {
+ color: white;
+ background-color: #ff6666;
+ }
+
+ div#searchNav {
+ display: none;
+ }
+
+ div#commandLine {
+ display: none;
+ }
+
+ div#commandLine input#command {
+ font-size: 100%;
+ font-family: Courier New, Courier;
+ }
+
+ div#commandLine input#evaluateButton {
+ }
+
+ *.greyedout {
+ color: gray !important;
+ border-color: gray !important;
+ }
+
+ *.greyedout *.alwaysenabled { color: black; }
+
+ *.unselectable {
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ }
+
+ div#log {
+ font-family: Courier New, Courier;
+ font-size: 75%;
+ width: 100%;
+ overflow: auto;
+ clear: both;
+ position: relative;
+ }
+
+ div.group {
+ border-color: #cccccc;
+ border-style: solid;
+ border-width: 1px 0 1px 1px;
+ overflow: visible;
+ }
+
+ div.oldIe div.group, div.oldIe div.group *, div.oldIe *.logentry {
+ height: 1%;
+ }
+
+ div.group div.groupheading span.expander {
+ border: solid black 1px;
+ font-family: Courier New, Courier;
+ font-size: 0.833em;
+ background-color: #eeeeee;
+ position: relative;
+ top: -1px;
+ color: black;
+ padding: 0 2px;
+ cursor: pointer;
+ cursor: hand;
+ height: 1%;
+ }
+
+ div.group div.groupcontent {
+ margin-left: 10px;
+ padding-bottom: 2px;
+ overflow: visible;
+ }
+
+ div.group div.expanded {
+ display: block;
+ }
+
+ div.group div.collapsed {
+ display: none;
+ }
+
+ *.logentry {
+ overflow: visible;
+ display: none;
+ white-space: pre;
+ }
+
+ span.pre {
+ white-space: pre;
+ }
+
+ pre.unwrapped {
+ display: inline !important;
+ }
+
+ pre.unwrapped pre.pre, div.wrapped pre.pre {
+ display: inline;
+ }
+
+ div.wrapped pre.pre {
+ white-space: normal;
+ }
+
+ div.wrapped {
+ display: none;
+ }
+
+ body.searching *.logentry span.currentmatch {
+ color: white !important;
+ background-color: green !important;
+ }
+
+ body.searching div.searchhighlight *.logentry span.searchterm {
+ color: black;
+ background-color: yellow;
+ }
+
+ div.wrap *.logentry {
+ white-space: normal !important;
+ border-width: 0 0 1px 0;
+ border-color: #dddddd;
+ border-style: dotted;
+ }
+
+ div.wrap #log_wrapped, #log_unwrapped {
+ display: block;
+ }
+
+ div.wrap #log_unwrapped, #log_wrapped {
+ display: none;
+ }
+
+ div.wrap *.logentry span.pre {
+ overflow: visible;
+ white-space: normal;
+ }
+
+ div.wrap *.logentry pre.unwrapped {
+ display: none;
+ }
+
+ div.wrap *.logentry span.wrapped {
+ display: inline;
+ }
+
+ div.searchfilter *.searchnonmatch {
+ display: none !important;
+ }
+
+ div#log *.TRACE, label#label_TRACE {
+ color: #666666;
+ }
+
+ div#log *.DEBUG, label#label_DEBUG {
+ color: green;
+ }
+
+ div#log *.INFO, label#label_INFO {
+ color: #000099;
+ }
+
+ div#log *.WARN, label#label_WARN {
+ color: #999900;
+ }
+
+ div#log *.ERROR, label#label_ERROR {
+ color: red;
+ }
+
+ div#log *.FATAL, label#label_FATAL {
+ color: #660066;
+ }
+
+ div.TRACE#log *.TRACE,
+ div.DEBUG#log *.DEBUG,
+ div.INFO#log *.INFO,
+ div.WARN#log *.WARN,
+ div.ERROR#log *.ERROR,
+ div.FATAL#log *.FATAL {
+ display: block;
+ }
+
+ div#log div.separator {
+ background-color: #cccccc;
+ margin: 5px 0;
+ line-height: 1px;
+ }
+ </style>
+ </head>
+
+ <body id="body">
+ <div id="switchesContainer">
+ <div id="switches">
+ <div id="levels" class="toolbar">
+ Filters:
+ <input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>
+ <input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>
+ <input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>
+ <input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>
+ <input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>
+ <input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>
+ <input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>
+ </div>
+ <div id="search" class="toolbar">
+ <label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />
+ <input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />
+ <input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>
+ <input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>
+ <input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>
+ <div id="searchNav">
+ <input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />
+ <input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />
+ <input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>
+ <input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>
+ </div>
+ </div>
+ <div id="options" class="toolbar">
+ Options:
+ <input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>
+ <input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>
+ <input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>
+ <input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>
+ <input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages" />
+ <input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />
+ <input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />
+ </div>
+ </div>
+ </div>
+ <div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>
+ <div id="commandLine" class="toolbar">
+ <div id="commandLineContainer">
+ <input type="text" id="command" title="Enter a JavaScript command here and hit return or press 'Evaluate'" />
+ <input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/liteconsole.html b/planetstack/core/static/log4javascript-1.4.6/js/liteconsole.html
new file mode 100644
index 0000000..840a59b
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/liteconsole.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<title>log4javascript</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->
+<meta http-equiv="X-UA-Compatible" content="IE=7" />
+<script type="text/javascript">
+//<![CDATA[
+var loggingEnabled=true;var messagesBeforeDocLoaded=[];function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}
+function setLoggingEnabled(enable){loggingEnabled=enable;}
+function scrollToLatestEntry(){var l=getLogContainer();if(typeof l.scrollTop!="undefined"){var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}
+function log(logLevel,formattedMessage){if(loggingEnabled){if(loaded){doLog(logLevel,formattedMessage);}else{messagesBeforeDocLoaded.push([logLevel,formattedMessage]);}}}
+function doLog(logLevel,formattedMessage){var logEntry=document.createElement("div");logEntry.appendChild(document.createTextNode(formattedMessage));logEntry.className="logentry "+logLevel.name;getLogContainer().appendChild(logEntry);scrollToLatestEntry();}
+function mainPageReloaded(){var separator=document.createElement("div");separator.className="separator";separator.innerHTML=" ";getLogContainer().appendChild(separator);}
+var loaded=false;var logLevels=["DEBUG","INFO","WARN","ERROR","FATAL"];window.onload=function(){setLogContainerHeight();toggleLoggingEnabled();for(var i=0;i<messagesBeforeDocLoaded.length;i++){doLog(messagesBeforeDocLoaded[i][0],messagesBeforeDocLoaded[i][1]);}
+messagesBeforeDocLoaded=[];loaded=true;setTimeout(setLogContainerHeight,20);};function getLogContainer(){return $("log");}
+function clearLog(){getLogContainer().innerHTML="";}
+function $(id){return document.getElementById(id);}
+function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}
+return 0;}
+function getChromeHeight(){return $("toolbar").offsetHeight;}
+function setLogContainerHeight(){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";getLogContainer().style.height=""+
+Math.max(0,windowHeight-getChromeHeight())+"px";}
+window.onresize=function(){setLogContainerHeight();};
+//]]>
+</script>
+<style type="text/css">
+body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div#toolbar input.button{padding:0 5px;font-size:100%}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both}*.logentry{overflow:visible;white-space:pre}*.TRACE{color:#666666}*.DEBUG{color:green}*.INFO{color:#000099}*.WARN{color:#999900}*.ERROR{color:red}*.FATAL{color:#660066}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}
+</style>
+</head>
+<body id="body">
+<div id="toolbar">
+Options:
+<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" class="stateful" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Enable logging</label>
+<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="stateful button" title="Clear all log messages" />
+<input type="button" id="closeButton" value="Close" onclick="window.close()" class="stateful button" title="Close the window" />
+</div>
+<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/liteconsole_uncompressed.html b/planetstack/core/static/log4javascript-1.4.6/js/liteconsole_uncompressed.html
new file mode 100644
index 0000000..df5275f
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/liteconsole_uncompressed.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->
+ <meta http-equiv="X-UA-Compatible" content="IE=7" />
+ <script type="text/javascript">
+ //<![CDATA[
+ var loggingEnabled = true;
+ var messagesBeforeDocLoaded = [];
+
+ function toggleLoggingEnabled() {
+ setLoggingEnabled($("enableLogging").checked);
+ }
+
+ function setLoggingEnabled(enable) {
+ loggingEnabled = enable;
+ }
+
+ function scrollToLatestEntry() {
+ var l = getLogContainer();
+ if (typeof l.scrollTop != "undefined") {
+ var latestLogEntry = l.lastChild;
+ if (latestLogEntry) {
+ l.scrollTop = l.scrollHeight;
+ }
+ }
+ }
+
+ function log(logLevel, formattedMessage) {
+ if (loggingEnabled) {
+ if (loaded) {
+ doLog(logLevel, formattedMessage);
+ } else {
+ messagesBeforeDocLoaded.push([logLevel, formattedMessage]);
+ }
+ }
+ }
+
+ function doLog(logLevel, formattedMessage) {
+ var logEntry = document.createElement("div");
+ logEntry.appendChild(document.createTextNode(formattedMessage));
+ logEntry.className = "logentry " + logLevel.name;
+ getLogContainer().appendChild(logEntry);
+ scrollToLatestEntry();
+ }
+
+ function mainPageReloaded() {
+ var separator = document.createElement("div");
+ separator.className = "separator";
+ separator.innerHTML = " ";
+ getLogContainer().appendChild(separator);
+ }
+
+ var loaded = false;
+ var logLevels = ["DEBUG", "INFO", "WARN", "ERROR", "FATAL"];
+
+ window.onload = function() {
+ setLogContainerHeight();
+ toggleLoggingEnabled();
+ for (var i = 0; i < messagesBeforeDocLoaded.length; i++) {
+ doLog(messagesBeforeDocLoaded[i][0], messagesBeforeDocLoaded[i][1]);
+ }
+ messagesBeforeDocLoaded = [];
+ loaded = true;
+
+ // Workaround to make sure log div starts at the correct size
+ setTimeout(setLogContainerHeight, 20);
+ };
+
+ function getLogContainer() {
+ return $("log");
+ }
+
+ function clearLog() {
+ getLogContainer().innerHTML = "";
+ }
+
+ /* ------------------------------------------------------------------------- */
+
+ // Other utility functions
+
+ // Syntax borrowed from Prototype library
+ function $(id) {
+ return document.getElementById(id);
+ }
+
+ function getWindowHeight() {
+ if (window.innerHeight) {
+ return window.innerHeight;
+ } else if (document.documentElement && document.documentElement.clientHeight) {
+ return document.documentElement.clientHeight;
+ } else if (document.body) {
+ return document.body.clientHeight;
+ }
+ return 0;
+ }
+
+ function getChromeHeight() {
+ return $("toolbar").offsetHeight;
+ }
+
+ function setLogContainerHeight() {
+ var windowHeight = getWindowHeight();
+ $("body").style.height = getWindowHeight() + "px";
+ getLogContainer().style.height = "" +
+ Math.max(0, windowHeight - getChromeHeight()) + "px";
+ }
+
+ window.onresize = function() {
+ setLogContainerHeight();
+ };
+
+ //]]>
+ </script>
+ <style type="text/css">
+ body {
+ background-color: white;
+ color: black;
+ padding: 0;
+ margin: 0;
+ font-family: tahoma, verdana, arial, helvetica, sans-serif;
+ overflow: hidden;
+ }
+
+ div#toolbar {
+ border-top: solid #ffffff 1px;
+ border-bottom: solid #aca899 1px;
+ background-color: #f1efe7;
+ padding: 3px 5px;
+ font-size: 68.75%;
+ }
+
+ div#toolbar input.button {
+ padding: 0 5px;
+ font-size: 100%;
+ }
+
+ div#log {
+ font-family: Courier New, Courier;
+ font-size: 75%;
+ width: 100%;
+ overflow: auto;
+ clear: both;
+ }
+
+ *.logentry {
+ overflow: visible;
+ white-space: pre;
+ }
+
+ *.TRACE {
+ color: #666666;
+ }
+
+ *.DEBUG {
+ color: green;
+ }
+
+ *.INFO {
+ color: #000099;
+ }
+
+ *.WARN {
+ color: #999900;
+ }
+
+ *.ERROR {
+ color: red;
+ }
+
+ *.FATAL {
+ color: #660066;
+ }
+
+ div#log div.separator {
+ background-color: #cccccc;
+ margin: 5px 0;
+ line-height: 1px;
+ }
+ </style>
+ </head>
+
+ <body id="body">
+ <div id="toolbar">
+ Options:
+ <input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" class="stateful" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Enable logging</label>
+ <input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="stateful button" title="Clear all log messages" />
+ <input type="button" id="closeButton" value="Close" onclick="window.close()" class="stateful button" title="Close the window" />
+ </div>
+ <div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>
+ </body>
+</html>
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/log4javascript.js b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript.js
new file mode 100644
index 0000000..042daa9
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript.js
@@ -0,0 +1,274 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+
+if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}
+return this.length;};}
+if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}
+this.length=this.length-1;return firstItem;}};}
+if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}
+var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}
+return itemsDeleted;};}
+var log4javascript=(function(){function isUndefined(obj){return typeof obj=="undefined";}
+function EventSupport(){}
+EventSupport.prototype={eventTypes:[],eventListeners:{},setEventTypes:function(eventTypesParam){if(eventTypesParam instanceof Array){this.eventTypes=eventTypesParam;this.eventListeners={};for(var i=0,len=this.eventTypes.length;i<len;i++){this.eventListeners[this.eventTypes[i]]=[];}}else{handleError("log4javascript.EventSupport ["+this+"]: setEventTypes: eventTypes parameter must be an Array");}},addEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: addEventListener: no event called '"+eventType+"'");}
+this.eventListeners[eventType].push(listener);}else{handleError("log4javascript.EventSupport ["+this+"]: addEventListener: listener must be a function");}},removeEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: no event called '"+eventType+"'");}
+array_remove(this.eventListeners[eventType],listener);}else{handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: listener must be a function");}},dispatchEvent:function(eventType,eventArgs){if(array_contains(this.eventTypes,eventType)){var listeners=this.eventListeners[eventType];for(var i=0,len=listeners.length;i<len;i++){listeners[i](this,eventType,eventArgs);}}else{handleError("log4javascript.EventSupport ["+this+"]: dispatchEvent: no event called '"+eventType+"'");}}};var applicationStartDate=new Date();var uniqueId="log4javascript_"+applicationStartDate.getTime()+"_"+
+Math.floor(Math.random()*100000000);var emptyFunction=function(){};var newLine="\r\n";var pageLoaded=false;function Log4JavaScript(){}
+Log4JavaScript.prototype=new EventSupport();log4javascript=new Log4JavaScript();log4javascript.version="1.4.6";log4javascript.edition="log4javascript";function toStr(obj){if(obj&&obj.toString){return obj.toString();}else{return String(obj);}}
+function getExceptionMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}else{return toStr(ex);}}
+function getUrlFileName(url){var lastSlashIndex=Math.max(url.lastIndexOf("/"),url.lastIndexOf("\\"));return url.substr(lastSlashIndex+1);}
+function getExceptionStringRep(ex){if(ex){var exStr="Exception: "+getExceptionMessage(ex);try{if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber;}
+if(ex.fileName){exStr+=" in file "+getUrlFileName(ex.fileName);}}catch(localEx){logLog.warn("Unable to obtain file and line information for error");}
+if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack;}
+return exStr;}
+return null;}
+function bool(obj){return Boolean(obj);}
+function trim(str){return str.replace(/^\s+/,"").replace(/\s+$/,"");}
+function splitIntoLines(text){var text2=text.replace(/\r\n/g,"\n").replace(/\r/g,"\n");return text2.split("\n");}
+var urlEncode=(typeof window.encodeURIComponent!="undefined")?function(str){return encodeURIComponent(str);}:function(str){return escape(str).replace(/\+/g,"%2B").replace(/"/g,"%22").replace(/'/g,"%27").replace(/\//g,"%2F").replace(/=/g,"%3D");};var urlDecode=(typeof window.decodeURIComponent!="undefined")?function(str){return decodeURIComponent(str);}:function(str){return unescape(str).replace(/%2B/g,"+").replace(/%22/g,"\"").replace(/%27/g,"'").replace(/%2F/g,"/").replace(/%3D/g,"=");};function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}
+if(index>=0){arr.splice(index,1);return true;}else{return false;}}
+function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}
+return false;}
+function extractBooleanFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return bool(param);}}
+function extractStringFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return String(param);}}
+function extractIntFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{try{var value=parseInt(param,10);return isNaN(value)?defaultValue:value;}catch(ex){logLog.warn("Invalid int param "+param,ex);return defaultValue;}}}
+function extractFunctionFromParam(param,defaultValue){if(typeof param=="function"){return param;}else{return defaultValue;}}
+function isError(err){return(err instanceof Error);}
+if(!Function.prototype.apply){Function.prototype.apply=function(obj,args){var methodName="__apply__";if(typeof obj[methodName]!="undefined"){methodName+=String(Math.random()).substr(2);}
+obj[methodName]=this;var argsStrings=[];for(var i=0,len=args.length;i<len;i++){argsStrings[i]="args["+i+"]";}
+var script="obj."+methodName+"("+argsStrings.join(",")+")";var returnValue=eval(script);delete obj[methodName];return returnValue;};}
+if(!Function.prototype.call){Function.prototype.call=function(obj){var args=[];for(var i=1,len=arguments.length;i<len;i++){args[i-1]=arguments[i];}
+return this.apply(obj,args);};}
+function getListenersPropertyName(eventName){return"__log4javascript_listeners__"+eventName;}
+function addEvent(node,eventName,listener,useCapture,win){win=win?win:window;if(node.addEventListener){node.addEventListener(eventName,listener,useCapture);}else if(node.attachEvent){node.attachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(!node[propertyName]){node[propertyName]=[];node["on"+eventName]=function(evt){evt=getEvent(evt,win);var listenersPropertyName=getListenersPropertyName(eventName);var listeners=this[listenersPropertyName].concat([]);var currentListener;while((currentListener=listeners.shift())){currentListener.call(this,evt);}};}
+node[propertyName].push(listener);}}
+function removeEvent(node,eventName,listener,useCapture){if(node.removeEventListener){node.removeEventListener(eventName,listener,useCapture);}else if(node.detachEvent){node.detachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(node[propertyName]){array_remove(node[propertyName],listener);}}}
+function getEvent(evt,win){win=win?win:window;return evt?evt:win.event;}
+function stopEventPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}
+evt.returnValue=false;}
+var logLog={quietMode:false,debugMessages:[],setQuietMode:function(quietMode){this.quietMode=bool(quietMode);},numberOfErrors:0,alertAllErrors:false,setAlertAllErrors:function(alertAllErrors){this.alertAllErrors=alertAllErrors;},debug:function(message){this.debugMessages.push(message);},displayDebug:function(){alert(this.debugMessages.join(newLine));},warn:function(message,exception){},error:function(message,exception){if(++this.numberOfErrors==1||this.alertAllErrors){if(!this.quietMode){var alertMessage="log4javascript error: "+message;if(exception){alertMessage+=newLine+newLine+"Original error: "+getExceptionStringRep(exception);}
+alert(alertMessage);}}}};log4javascript.logLog=logLog;log4javascript.setEventTypes(["load","error"]);function handleError(message,exception){logLog.error(message,exception);log4javascript.dispatchEvent("error",{"message":message,"exception":exception});}
+log4javascript.handleError=handleError;var enabled=!((typeof log4javascript_disabled!="undefined")&&log4javascript_disabled);log4javascript.setEnabled=function(enable){enabled=bool(enable);};log4javascript.isEnabled=function(){return enabled;};var useTimeStampsInMilliseconds=true;log4javascript.setTimeStampsInMilliseconds=function(timeStampsInMilliseconds){useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);};log4javascript.isTimeStampsInMilliseconds=function(){return useTimeStampsInMilliseconds;};log4javascript.evalInScope=function(expr){return eval(expr);};var showStackTraces=false;log4javascript.setShowStackTraces=function(show){showStackTraces=bool(show);};var Level=function(level,name){this.level=level;this.name=name;};Level.prototype={toString:function(){return this.name;},equals:function(level){return this.level==level.level;},isGreaterOrEqual:function(level){return this.level>=level.level;}};Level.ALL=new Level(Number.MIN_VALUE,"ALL");Level.TRACE=new Level(10000,"TRACE");Level.DEBUG=new Level(20000,"DEBUG");Level.INFO=new Level(30000,"INFO");Level.WARN=new Level(40000,"WARN");Level.ERROR=new Level(50000,"ERROR");Level.FATAL=new Level(60000,"FATAL");Level.OFF=new Level(Number.MAX_VALUE,"OFF");log4javascript.Level=Level;function Timer(name,level){this.name=name;this.level=isUndefined(level)?Level.INFO:level;this.start=new Date();}
+Timer.prototype.getElapsedTime=function(){return new Date().getTime()-this.start.getTime();};var anonymousLoggerName="[anonymous]";var defaultLoggerName="[default]";var nullLoggerName="[null]";var rootLoggerName="root";function Logger(name){this.name=name;this.parent=null;this.children=[];var appenders=[];var loggerLevel=null;var isRoot=(this.name===rootLoggerName);var isNull=(this.name===nullLoggerName);var appenderCache=null;var appenderCacheInvalidated=false;this.addChild=function(childLogger){this.children.push(childLogger);childLogger.parent=this;childLogger.invalidateAppenderCache();};var additive=true;this.getAdditivity=function(){return additive;};this.setAdditivity=function(additivity){var valueChanged=(additive!=additivity);additive=additivity;if(valueChanged){this.invalidateAppenderCache();}};this.addAppender=function(appender){if(isNull){handleError("Logger.addAppender: you may not add an appender to the null logger");}else{if(appender instanceof log4javascript.Appender){if(!array_contains(appenders,appender)){appenders.push(appender);appender.setAddedToLogger(this);this.invalidateAppenderCache();}}else{handleError("Logger.addAppender: appender supplied ('"+
+toStr(appender)+"') is not a subclass of Appender");}}};this.removeAppender=function(appender){array_remove(appenders,appender);appender.setRemovedFromLogger(this);this.invalidateAppenderCache();};this.removeAllAppenders=function(){var appenderCount=appenders.length;if(appenderCount>0){for(var i=0;i<appenderCount;i++){appenders[i].setRemovedFromLogger(this);}
+appenders.length=0;this.invalidateAppenderCache();}};this.getEffectiveAppenders=function(){if(appenderCache===null||appenderCacheInvalidated){var parentEffectiveAppenders=(isRoot||!this.getAdditivity())?[]:this.parent.getEffectiveAppenders();appenderCache=parentEffectiveAppenders.concat(appenders);appenderCacheInvalidated=false;}
+return appenderCache;};this.invalidateAppenderCache=function(){appenderCacheInvalidated=true;for(var i=0,len=this.children.length;i<len;i++){this.children[i].invalidateAppenderCache();}};this.log=function(level,params){if(enabled&&level.isGreaterOrEqual(this.getEffectiveLevel())){var exception;var finalParamIndex=params.length-1;var lastParam=params[finalParamIndex];if(params.length>1&&isError(lastParam)){exception=lastParam;finalParamIndex--;}
+var messages=[];for(var i=0;i<=finalParamIndex;i++){messages[i]=params[i];}
+var loggingEvent=new LoggingEvent(this,new Date(),level,messages,exception);this.callAppenders(loggingEvent);}};this.callAppenders=function(loggingEvent){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].doAppend(loggingEvent);}};this.setLevel=function(level){if(isRoot&&level===null){handleError("Logger.setLevel: you cannot set the level of the root logger to null");}else if(level instanceof Level){loggerLevel=level;}else{handleError("Logger.setLevel: level supplied to logger "+
+this.name+" is not an instance of log4javascript.Level");}};this.getLevel=function(){return loggerLevel;};this.getEffectiveLevel=function(){for(var logger=this;logger!==null;logger=logger.parent){var level=logger.getLevel();if(level!==null){return level;}}};this.group=function(name,initiallyExpanded){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].group(name,initiallyExpanded);}}};this.groupEnd=function(){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].groupEnd();}}};var timers={};this.time=function(name,level){if(enabled){if(isUndefined(name)){handleError("Logger.time: a name for the timer must be supplied");}else if(level&&!(level instanceof Level)){handleError("Logger.time: level supplied to timer "+
+name+" is not an instance of log4javascript.Level");}else{timers[name]=new Timer(name,level);}}};this.timeEnd=function(name){if(enabled){if(isUndefined(name)){handleError("Logger.timeEnd: a name for the timer must be supplied");}else if(timers[name]){var timer=timers[name];var milliseconds=timer.getElapsedTime();this.log(timer.level,["Timer "+toStr(name)+" completed in "+milliseconds+"ms"]);delete timers[name];}else{logLog.warn("Logger.timeEnd: no timer found with name "+name);}}};this.assert=function(expr){if(enabled&&!expr){var args=[];for(var i=1,len=arguments.length;i<len;i++){args.push(arguments[i]);}
+args=(args.length>0)?args:["Assertion Failure"];args.push(newLine);args.push(expr);this.log(Level.ERROR,args);}};this.toString=function(){return"Logger["+this.name+"]";};}
+Logger.prototype={trace:function(){this.log(Level.TRACE,arguments);},debug:function(){this.log(Level.DEBUG,arguments);},info:function(){this.log(Level.INFO,arguments);},warn:function(){this.log(Level.WARN,arguments);},error:function(){this.log(Level.ERROR,arguments);},fatal:function(){this.log(Level.FATAL,arguments);},isEnabledFor:function(level){return level.isGreaterOrEqual(this.getEffectiveLevel());},isTraceEnabled:function(){return this.isEnabledFor(Level.TRACE);},isDebugEnabled:function(){return this.isEnabledFor(Level.DEBUG);},isInfoEnabled:function(){return this.isEnabledFor(Level.INFO);},isWarnEnabled:function(){return this.isEnabledFor(Level.WARN);},isErrorEnabled:function(){return this.isEnabledFor(Level.ERROR);},isFatalEnabled:function(){return this.isEnabledFor(Level.FATAL);}};Logger.prototype.trace.isEntryPoint=true;Logger.prototype.debug.isEntryPoint=true;Logger.prototype.info.isEntryPoint=true;Logger.prototype.warn.isEntryPoint=true;Logger.prototype.error.isEntryPoint=true;Logger.prototype.fatal.isEntryPoint=true;var loggers={};var loggerNames=[];var ROOT_LOGGER_DEFAULT_LEVEL=Level.DEBUG;var rootLogger=new Logger(rootLoggerName);rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);log4javascript.getRootLogger=function(){return rootLogger;};log4javascript.getLogger=function(loggerName){if(!(typeof loggerName=="string")){loggerName=anonymousLoggerName;logLog.warn("log4javascript.getLogger: non-string logger name "+
+toStr(loggerName)+" supplied, returning anonymous logger");}
+if(loggerName==rootLoggerName){handleError("log4javascript.getLogger: root logger may not be obtained by name");}
+if(!loggers[loggerName]){var logger=new Logger(loggerName);loggers[loggerName]=logger;loggerNames.push(loggerName);var lastDotIndex=loggerName.lastIndexOf(".");var parentLogger;if(lastDotIndex>-1){var parentLoggerName=loggerName.substring(0,lastDotIndex);parentLogger=log4javascript.getLogger(parentLoggerName);}else{parentLogger=rootLogger;}
+parentLogger.addChild(logger);}
+return loggers[loggerName];};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=log4javascript.getLogger(defaultLoggerName);var a=new log4javascript.PopUpAppender();defaultLogger.addAppender(a);}
+return defaultLogger;};var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=new Logger(nullLoggerName);nullLogger.setLevel(Level.OFF);}
+return nullLogger;};log4javascript.resetConfiguration=function(){rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);loggers={};};var LoggingEvent=function(logger,timeStamp,level,messages,exception){this.logger=logger;this.timeStamp=timeStamp;this.timeStampInMilliseconds=timeStamp.getTime();this.timeStampInSeconds=Math.floor(this.timeStampInMilliseconds/1000);this.milliseconds=this.timeStamp.getMilliseconds();this.level=level;this.messages=messages;this.exception=exception;};LoggingEvent.prototype={getThrowableStrRep:function(){return this.exception?getExceptionStringRep(this.exception):"";},getCombinedMessages:function(){return(this.messages.length==1)?this.messages[0]:this.messages.join(newLine);},toString:function(){return"LoggingEvent["+this.level+"]";}};log4javascript.LoggingEvent=LoggingEvent;var Layout=function(){};Layout.prototype={defaults:{loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url"},loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url",batchHeader:"",batchFooter:"",batchSeparator:"",returnsPostData:false,overrideTimeStampsSetting:false,useTimeStampsInMilliseconds:null,format:function(){handleError("Layout.format: layout supplied has no format() method");},ignoresThrowable:function(){handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");},getContentType:function(){return"text/plain";},allowBatching:function(){return true;},setTimeStampsInMilliseconds:function(timeStampsInMilliseconds){this.overrideTimeStampsSetting=true;this.useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);},isTimeStampsInMilliseconds:function(){return this.overrideTimeStampsSetting?this.useTimeStampsInMilliseconds:useTimeStampsInMilliseconds;},getTimeStampValue:function(loggingEvent){return this.isTimeStampsInMilliseconds()?loggingEvent.timeStampInMilliseconds:loggingEvent.timeStampInSeconds;},getDataValues:function(loggingEvent,combineMessages){var dataValues=[[this.loggerKey,loggingEvent.logger.name],[this.timeStampKey,this.getTimeStampValue(loggingEvent)],[this.levelKey,loggingEvent.level.name],[this.urlKey,window.location.href],[this.messageKey,combineMessages?loggingEvent.getCombinedMessages():loggingEvent.messages]];if(!this.isTimeStampsInMilliseconds()){dataValues.push([this.millisecondsKey,loggingEvent.milliseconds]);}
+if(loggingEvent.exception){dataValues.push([this.exceptionKey,getExceptionStringRep(loggingEvent.exception)]);}
+if(this.hasCustomFields()){for(var i=0,len=this.customFields.length;i<len;i++){var val=this.customFields[i].value;if(typeof val==="function"){val=val(this,loggingEvent);}
+dataValues.push([this.customFields[i].name,val]);}}
+return dataValues;},setKeys:function(loggerKey,timeStampKey,levelKey,messageKey,exceptionKey,urlKey,millisecondsKey){this.loggerKey=extractStringFromParam(loggerKey,this.defaults.loggerKey);this.timeStampKey=extractStringFromParam(timeStampKey,this.defaults.timeStampKey);this.levelKey=extractStringFromParam(levelKey,this.defaults.levelKey);this.messageKey=extractStringFromParam(messageKey,this.defaults.messageKey);this.exceptionKey=extractStringFromParam(exceptionKey,this.defaults.exceptionKey);this.urlKey=extractStringFromParam(urlKey,this.defaults.urlKey);this.millisecondsKey=extractStringFromParam(millisecondsKey,this.defaults.millisecondsKey);},setCustomField:function(name,value){var fieldUpdated=false;for(var i=0,len=this.customFields.length;i<len;i++){if(this.customFields[i].name===name){this.customFields[i].value=value;fieldUpdated=true;}}
+if(!fieldUpdated){this.customFields.push({"name":name,"value":value});}},hasCustomFields:function(){return(this.customFields.length>0);},toString:function(){handleError("Layout.toString: all layouts must override this method");}};log4javascript.Layout=Layout;var Appender=function(){};Appender.prototype=new EventSupport();Appender.prototype.layout=new PatternLayout();Appender.prototype.threshold=Level.ALL;Appender.prototype.loggers=[];Appender.prototype.doAppend=function(loggingEvent){if(enabled&&loggingEvent.level.level>=this.threshold.level){this.append(loggingEvent);}};Appender.prototype.append=function(loggingEvent){};Appender.prototype.setLayout=function(layout){if(layout instanceof Layout){this.layout=layout;}else{handleError("Appender.setLayout: layout supplied to "+
+this.toString()+" is not a subclass of Layout");}};Appender.prototype.getLayout=function(){return this.layout;};Appender.prototype.setThreshold=function(threshold){if(threshold instanceof Level){this.threshold=threshold;}else{handleError("Appender.setThreshold: threshold supplied to "+
+this.toString()+" is not a subclass of Level");}};Appender.prototype.getThreshold=function(){return this.threshold;};Appender.prototype.setAddedToLogger=function(logger){this.loggers.push(logger);};Appender.prototype.setRemovedFromLogger=function(logger){array_remove(this.loggers,logger);};Appender.prototype.group=emptyFunction;Appender.prototype.groupEnd=emptyFunction;Appender.prototype.toString=function(){handleError("Appender.toString: all appenders must override this method");};log4javascript.Appender=Appender;function SimpleLayout(){this.customFields=[];}
+SimpleLayout.prototype=new Layout();SimpleLayout.prototype.format=function(loggingEvent){return loggingEvent.level.name+" - "+loggingEvent.getCombinedMessages();};SimpleLayout.prototype.ignoresThrowable=function(){return true;};SimpleLayout.prototype.toString=function(){return"SimpleLayout";};log4javascript.SimpleLayout=SimpleLayout;function NullLayout(){this.customFields=[];}
+NullLayout.prototype=new Layout();NullLayout.prototype.format=function(loggingEvent){return loggingEvent.messages;};NullLayout.prototype.ignoresThrowable=function(){return true;};NullLayout.prototype.toString=function(){return"NullLayout";};log4javascript.NullLayout=NullLayout;function XmlLayout(combineMessages){this.combineMessages=extractBooleanFromParam(combineMessages,true);this.customFields=[];}
+XmlLayout.prototype=new Layout();XmlLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};XmlLayout.prototype.getContentType=function(){return"text/xml";};XmlLayout.prototype.escapeCdata=function(str){return str.replace(/\]\]>/,"]]>]]><![CDATA[");};XmlLayout.prototype.format=function(loggingEvent){var layout=this;var i,len;function formatMessage(message){message=(typeof message==="string")?message:toStr(message);return"<log4javascript:message><![CDATA["+
+layout.escapeCdata(message)+"]]></log4javascript:message>";}
+var str="<log4javascript:event logger=\""+loggingEvent.logger.name+"\" timestamp=\""+this.getTimeStampValue(loggingEvent)+"\"";if(!this.isTimeStampsInMilliseconds()){str+=" milliseconds=\""+loggingEvent.milliseconds+"\"";}
+str+=" level=\""+loggingEvent.level.name+"\">"+newLine;if(this.combineMessages){str+=formatMessage(loggingEvent.getCombinedMessages());}else{str+="<log4javascript:messages>"+newLine;for(i=0,len=loggingEvent.messages.length;i<len;i++){str+=formatMessage(loggingEvent.messages[i])+newLine;}
+str+="</log4javascript:messages>"+newLine;}
+if(this.hasCustomFields()){for(i=0,len=this.customFields.length;i<len;i++){str+="<log4javascript:customfield name=\""+
+this.customFields[i].name+"\"><![CDATA["+
+this.customFields[i].value.toString()+"]]></log4javascript:customfield>"+newLine;}}
+if(loggingEvent.exception){str+="<log4javascript:exception><![CDATA["+
+getExceptionStringRep(loggingEvent.exception)+"]]></log4javascript:exception>"+newLine;}
+str+="</log4javascript:event>"+newLine+newLine;return str;};XmlLayout.prototype.ignoresThrowable=function(){return false;};XmlLayout.prototype.toString=function(){return"XmlLayout";};log4javascript.XmlLayout=XmlLayout;function escapeNewLines(str){return str.replace(/\r\n|\r|\n/g,"\\r\\n");}
+function JsonLayout(readable,combineMessages){this.readable=extractBooleanFromParam(readable,false);this.combineMessages=extractBooleanFromParam(combineMessages,true);this.batchHeader=this.readable?"["+newLine:"[";this.batchFooter=this.readable?"]"+newLine:"]";this.batchSeparator=this.readable?","+newLine:",";this.setKeys();this.colon=this.readable?": ":":";this.tab=this.readable?"\t":"";this.lineBreak=this.readable?newLine:"";this.customFields=[];}
+JsonLayout.prototype=new Layout();JsonLayout.prototype.isReadable=function(){return this.readable;};JsonLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};JsonLayout.prototype.format=function(loggingEvent){var layout=this;var dataValues=this.getDataValues(loggingEvent,this.combineMessages);var str="{"+this.lineBreak;var i,len;function formatValue(val,prefix,expand){var formattedValue;var valType=typeof val;if(val instanceof Date){formattedValue=String(val.getTime());}else if(expand&&(val instanceof Array)){formattedValue="["+layout.lineBreak;for(var i=0,len=val.length;i<len;i++){var childPrefix=prefix+layout.tab;formattedValue+=childPrefix+formatValue(val[i],childPrefix,false);if(i<val.length-1){formattedValue+=",";}
+formattedValue+=layout.lineBreak;}
+formattedValue+=prefix+"]";}else if(valType!=="number"&&valType!=="boolean"){formattedValue="\""+escapeNewLines(toStr(val).replace(/\"/g,"\\\""))+"\"";}else{formattedValue=val;}
+return formattedValue;}
+for(i=0,len=dataValues.length-1;i<=len;i++){str+=this.tab+"\""+dataValues[i][0]+"\""+this.colon+formatValue(dataValues[i][1],this.tab,true);if(i<len){str+=",";}
+str+=this.lineBreak;}
+str+="}"+this.lineBreak;return str;};JsonLayout.prototype.ignoresThrowable=function(){return false;};JsonLayout.prototype.toString=function(){return"JsonLayout";};JsonLayout.prototype.getContentType=function(){return"application/json";};log4javascript.JsonLayout=JsonLayout;function HttpPostDataLayout(){this.setKeys();this.customFields=[];this.returnsPostData=true;}
+HttpPostDataLayout.prototype=new Layout();HttpPostDataLayout.prototype.allowBatching=function(){return false;};HttpPostDataLayout.prototype.format=function(loggingEvent){var dataValues=this.getDataValues(loggingEvent);var queryBits=[];for(var i=0,len=dataValues.length;i<len;i++){var val=(dataValues[i][1]instanceof Date)?String(dataValues[i][1].getTime()):dataValues[i][1];queryBits.push(urlEncode(dataValues[i][0])+"="+urlEncode(val));}
+return queryBits.join("&");};HttpPostDataLayout.prototype.ignoresThrowable=function(loggingEvent){return false;};HttpPostDataLayout.prototype.toString=function(){return"HttpPostDataLayout";};log4javascript.HttpPostDataLayout=HttpPostDataLayout;function formatObjectExpansion(obj,depth,indentation){var objectsExpanded=[];function doFormat(obj,depth,indentation){var i,j,len,childDepth,childIndentation,childLines,expansion,childExpansion;if(!indentation){indentation="";}
+function formatString(text){var lines=splitIntoLines(text);for(var j=1,jLen=lines.length;j<jLen;j++){lines[j]=indentation+lines[j];}
+return lines.join(newLine);}
+if(obj===null){return"null";}else if(typeof obj=="undefined"){return"undefined";}else if(typeof obj=="string"){return formatString(obj);}else if(typeof obj=="object"&&array_contains(objectsExpanded,obj)){try{expansion=toStr(obj);}catch(ex){expansion="Error formatting property. Details: "+getExceptionStringRep(ex);}
+return expansion+" [already expanded]";}else if((obj instanceof Array)&&depth>0){objectsExpanded.push(obj);expansion="["+newLine;childDepth=depth-1;childIndentation=indentation+" ";childLines=[];for(i=0,len=obj.length;i<len;i++){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+childExpansion);}catch(ex){childLines.push(childIndentation+"Error formatting array member. Details: "+
+getExceptionStringRep(ex)+"");}}
+expansion+=childLines.join(","+newLine)+newLine+indentation+"]";return expansion;}else if(Object.prototype.toString.call(obj)=="[object Date]"){return obj.toString();}else if(typeof obj=="object"&&depth>0){objectsExpanded.push(obj);expansion="{"+newLine;childDepth=depth-1;childIndentation=indentation+" ";childLines=[];for(i in obj){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+i+": "+childExpansion);}catch(ex){childLines.push(childIndentation+i+": Error formatting property. Details: "+
+getExceptionStringRep(ex));}}
+expansion+=childLines.join(","+newLine)+newLine+indentation+"}";return expansion;}else{return formatString(toStr(obj));}}
+return doFormat(obj,depth,indentation);}
+var SimpleDateFormat;(function(){var regex=/('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;var monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];var dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var TEXT2=0,TEXT3=1,NUMBER=2,YEAR=3,MONTH=4,TIMEZONE=5;var types={G:TEXT2,y:YEAR,M:MONTH,w:NUMBER,W:NUMBER,D:NUMBER,d:NUMBER,F:NUMBER,E:TEXT3,a:TEXT2,H:NUMBER,k:NUMBER,K:NUMBER,h:NUMBER,m:NUMBER,s:NUMBER,S:NUMBER,Z:TIMEZONE};var ONE_DAY=24*60*60*1000;var ONE_WEEK=7*ONE_DAY;var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK=1;var newDateAtMidnight=function(year,month,day){var d=new Date(year,month,day,0,0,0);d.setMilliseconds(0);return d;};Date.prototype.getDifference=function(date){return this.getTime()-date.getTime();};Date.prototype.isBefore=function(d){return this.getTime()<d.getTime();};Date.prototype.getUTCTime=function(){return Date.UTC(this.getFullYear(),this.getMonth(),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds(),this.getMilliseconds());};Date.prototype.getTimeSince=function(d){return this.getUTCTime()-d.getUTCTime();};Date.prototype.getPreviousSunday=function(){var midday=new Date(this.getFullYear(),this.getMonth(),this.getDate(),12,0,0);var previousSunday=new Date(midday.getTime()-this.getDay()*ONE_DAY);return newDateAtMidnight(previousSunday.getFullYear(),previousSunday.getMonth(),previousSunday.getDate());};Date.prototype.getWeekInYear=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}
+var previousSunday=this.getPreviousSunday();var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);var numberOfSundays=previousSunday.isBefore(startOfYear)?0:1+Math.floor(previousSunday.getTimeSince(startOfYear)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfYear.getDay();var weekInYear=numberOfSundays;if(numberOfDaysInFirstWeek<minimalDaysInFirstWeek){weekInYear--;}
+return weekInYear;};Date.prototype.getWeekInMonth=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}
+var previousSunday=this.getPreviousSunday();var startOfMonth=newDateAtMidnight(this.getFullYear(),this.getMonth(),1);var numberOfSundays=previousSunday.isBefore(startOfMonth)?0:1+Math.floor(previousSunday.getTimeSince(startOfMonth)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfMonth.getDay();var weekInMonth=numberOfSundays;if(numberOfDaysInFirstWeek>=minimalDaysInFirstWeek){weekInMonth++;}
+return weekInMonth;};Date.prototype.getDayInYear=function(){var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);return 1+Math.floor(this.getTimeSince(startOfYear)/ONE_DAY);};SimpleDateFormat=function(formatString){this.formatString=formatString;};SimpleDateFormat.prototype.setMinimalDaysInFirstWeek=function(days){this.minimalDaysInFirstWeek=days;};SimpleDateFormat.prototype.getMinimalDaysInFirstWeek=function(){return isUndefined(this.minimalDaysInFirstWeek)?DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK:this.minimalDaysInFirstWeek;};var padWithZeroes=function(str,len){while(str.length<len){str="0"+str;}
+return str;};var formatText=function(data,numberOfLetters,minLength){return(numberOfLetters>=4)?data:data.substr(0,Math.max(minLength,numberOfLetters));};var formatNumber=function(data,numberOfLetters){var dataString=""+data;return padWithZeroes(dataString,numberOfLetters);};SimpleDateFormat.prototype.format=function(date){var formattedString="";var result;var searchString=this.formatString;while((result=regex.exec(searchString))){var quotedString=result[1];var patternLetters=result[2];var otherLetters=result[3];var otherCharacters=result[4];if(quotedString){if(quotedString=="''"){formattedString+="'";}else{formattedString+=quotedString.substring(1,quotedString.length-1);}}else if(otherLetters){}else if(otherCharacters){formattedString+=otherCharacters;}else if(patternLetters){var patternLetter=patternLetters.charAt(0);var numberOfLetters=patternLetters.length;var rawData="";switch(patternLetter){case"G":rawData="AD";break;case"y":rawData=date.getFullYear();break;case"M":rawData=date.getMonth();break;case"w":rawData=date.getWeekInYear(this.getMinimalDaysInFirstWeek());break;case"W":rawData=date.getWeekInMonth(this.getMinimalDaysInFirstWeek());break;case"D":rawData=date.getDayInYear();break;case"d":rawData=date.getDate();break;case"F":rawData=1+Math.floor((date.getDate()-1)/7);break;case"E":rawData=dayNames[date.getDay()];break;case"a":rawData=(date.getHours()>=12)?"PM":"AM";break;case"H":rawData=date.getHours();break;case"k":rawData=date.getHours()||24;break;case"K":rawData=date.getHours()%12;break;case"h":rawData=(date.getHours()%12)||12;break;case"m":rawData=date.getMinutes();break;case"s":rawData=date.getSeconds();break;case"S":rawData=date.getMilliseconds();break;case"Z":rawData=date.getTimezoneOffset();break;}
+switch(types[patternLetter]){case TEXT2:formattedString+=formatText(rawData,numberOfLetters,2);break;case TEXT3:formattedString+=formatText(rawData,numberOfLetters,3);break;case NUMBER:formattedString+=formatNumber(rawData,numberOfLetters);break;case YEAR:if(numberOfLetters<=3){var dataString=""+rawData;formattedString+=dataString.substr(2,2);}else{formattedString+=formatNumber(rawData,numberOfLetters);}
+break;case MONTH:if(numberOfLetters>=3){formattedString+=formatText(monthNames[rawData],numberOfLetters,numberOfLetters);}else{formattedString+=formatNumber(rawData+1,numberOfLetters);}
+break;case TIMEZONE:var isPositive=(rawData>0);var prefix=isPositive?"-":"+";var absData=Math.abs(rawData);var hours=""+Math.floor(absData/60);hours=padWithZeroes(hours,2);var minutes=""+(absData%60);minutes=padWithZeroes(minutes,2);formattedString+=prefix+hours+minutes;break;}}
+searchString=searchString.substr(result.index+result[0].length);}
+return formattedString;};})();log4javascript.SimpleDateFormat=SimpleDateFormat;function PatternLayout(pattern){if(pattern){this.pattern=pattern;}else{this.pattern=PatternLayout.DEFAULT_CONVERSION_PATTERN;}
+this.customFields=[];}
+PatternLayout.TTCC_CONVERSION_PATTERN="%r %p %c - %m%n";PatternLayout.DEFAULT_CONVERSION_PATTERN="%m%n";PatternLayout.ISO8601_DATEFORMAT="yyyy-MM-dd HH:mm:ss,SSS";PatternLayout.DATETIME_DATEFORMAT="dd MMM yyyy HH:mm:ss,SSS";PatternLayout.ABSOLUTETIME_DATEFORMAT="HH:mm:ss,SSS";PatternLayout.prototype=new Layout();PatternLayout.prototype.format=function(loggingEvent){var regex=/%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;var formattedString="";var result;var searchString=this.pattern;while((result=regex.exec(searchString))){var matchedString=result[0];var padding=result[1];var truncation=result[2];var conversionCharacter=result[3];var specifier=result[5];var text=result[6];if(text){formattedString+=""+text;}else{var replacement="";switch(conversionCharacter){case"a":case"m":var depth=0;if(specifier){depth=parseInt(specifier,10);if(isNaN(depth)){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character '"+conversionCharacter+"' - should be a number");depth=0;}}
+var messages=(conversionCharacter==="a")?loggingEvent.messages[0]:loggingEvent.messages;for(var i=0,len=messages.length;i<len;i++){if(i>0&&(replacement.charAt(replacement.length-1)!==" ")){replacement+=" ";}
+if(depth===0){replacement+=messages[i];}else{replacement+=formatObjectExpansion(messages[i],depth);}}
+break;case"c":var loggerName=loggingEvent.logger.name;if(specifier){var precision=parseInt(specifier,10);var loggerNameBits=loggingEvent.logger.name.split(".");if(precision>=loggerNameBits.length){replacement=loggerName;}else{replacement=loggerNameBits.slice(loggerNameBits.length-precision).join(".");}}else{replacement=loggerName;}
+break;case"d":var dateFormat=PatternLayout.ISO8601_DATEFORMAT;if(specifier){dateFormat=specifier;if(dateFormat=="ISO8601"){dateFormat=PatternLayout.ISO8601_DATEFORMAT;}else if(dateFormat=="ABSOLUTE"){dateFormat=PatternLayout.ABSOLUTETIME_DATEFORMAT;}else if(dateFormat=="DATE"){dateFormat=PatternLayout.DATETIME_DATEFORMAT;}}
+replacement=(new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);break;case"f":if(this.hasCustomFields()){var fieldIndex=0;if(specifier){fieldIndex=parseInt(specifier,10);if(isNaN(fieldIndex)){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character 'f' - should be a number");}else if(fieldIndex===0){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character 'f' - must be greater than zero");}else if(fieldIndex>this.customFields.length){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character 'f' - there aren't that many custom fields");}else{fieldIndex=fieldIndex-1;}}
+var val=this.customFields[fieldIndex].value;if(typeof val=="function"){val=val(this,loggingEvent);}
+replacement=val;}
+break;case"n":replacement=newLine;break;case"p":replacement=loggingEvent.level.name;break;case"r":replacement=""+loggingEvent.timeStamp.getDifference(applicationStartDate);break;case"%":replacement="%";break;default:replacement=matchedString;break;}
+var l;if(truncation){l=parseInt(truncation.substr(1),10);var strLen=replacement.length;if(l<strLen){replacement=replacement.substring(strLen-l,strLen);}}
+if(padding){if(padding.charAt(0)=="-"){l=parseInt(padding.substr(1),10);while(replacement.length<l){replacement+=" ";}}else{l=parseInt(padding,10);while(replacement.length<l){replacement=" "+replacement;}}}
+formattedString+=replacement;}
+searchString=searchString.substr(result.index+result[0].length);}
+return formattedString;};PatternLayout.prototype.ignoresThrowable=function(){return true;};PatternLayout.prototype.toString=function(){return"PatternLayout";};log4javascript.PatternLayout=PatternLayout;function AlertAppender(){}
+AlertAppender.prototype=new Appender();AlertAppender.prototype.layout=new SimpleLayout();AlertAppender.prototype.append=function(loggingEvent){var formattedMessage=this.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}
+alert(formattedMessage);};AlertAppender.prototype.toString=function(){return"AlertAppender";};log4javascript.AlertAppender=AlertAppender;function BrowserConsoleAppender(){}
+BrowserConsoleAppender.prototype=new log4javascript.Appender();BrowserConsoleAppender.prototype.layout=new NullLayout();BrowserConsoleAppender.prototype.threshold=Level.DEBUG;BrowserConsoleAppender.prototype.append=function(loggingEvent){var appender=this;var getFormattedMessage=function(){var layout=appender.getLayout();var formattedMessage=layout.format(loggingEvent);if(layout.ignoresThrowable()&&loggingEvent.exception){formattedMessage+=loggingEvent.getThrowableStrRep();}
+return formattedMessage;};if((typeof opera!="undefined")&&opera.postError){opera.postError(getFormattedMessage());}else if(window.console&&window.console.log){var formattedMesage=getFormattedMessage();if(window.console.debug&&Level.DEBUG.isGreaterOrEqual(loggingEvent.level)){window.console.debug(formattedMesage);}else if(window.console.info&&Level.INFO.equals(loggingEvent.level)){window.console.info(formattedMesage);}else if(window.console.warn&&Level.WARN.equals(loggingEvent.level)){window.console.warn(formattedMesage);}else if(window.console.error&&loggingEvent.level.isGreaterOrEqual(Level.ERROR)){window.console.error(formattedMesage);}else{window.console.log(formattedMesage);}}};BrowserConsoleAppender.prototype.group=function(name){if(window.console&&window.console.group){window.console.group(name);}};BrowserConsoleAppender.prototype.groupEnd=function(){if(window.console&&window.console.groupEnd){window.console.groupEnd();}};BrowserConsoleAppender.prototype.toString=function(){return"BrowserConsoleAppender";};log4javascript.BrowserConsoleAppender=BrowserConsoleAppender;var xmlHttpFactories=[function(){return new XMLHttpRequest();},function(){return new ActiveXObject("Msxml2.XMLHTTP");},function(){return new ActiveXObject("Microsoft.XMLHTTP");}];var getXmlHttp=function(errorHandler){var xmlHttp=null,factory;for(var i=0,len=xmlHttpFactories.length;i<len;i++){factory=xmlHttpFactories[i];try{xmlHttp=factory();getXmlHttp=factory;return xmlHttp;}catch(e){}}
+if(errorHandler){errorHandler();}else{handleError("getXmlHttp: unable to obtain XMLHttpRequest object");}};function isHttpRequestSuccessful(xmlHttp){return isUndefined(xmlHttp.status)||xmlHttp.status===0||(xmlHttp.status>=200&&xmlHttp.status<300)||xmlHttp.status==1223;}
+function AjaxAppender(url){var appender=this;var isSupported=true;if(!url){handleError("AjaxAppender: URL must be specified in constructor");isSupported=false;}
+var timed=this.defaults.timed;var waitForResponse=this.defaults.waitForResponse;var batchSize=this.defaults.batchSize;var timerInterval=this.defaults.timerInterval;var requestSuccessCallback=this.defaults.requestSuccessCallback;var failCallback=this.defaults.failCallback;var postVarName=this.defaults.postVarName;var sendAllOnUnload=this.defaults.sendAllOnUnload;var contentType=this.defaults.contentType;var sessionId=null;var queuedLoggingEvents=[];var queuedRequests=[];var headers=[];var sending=false;var initialized=false;function checkCanConfigure(configOptionName){if(initialized){handleError("AjaxAppender: configuration option '"+
+configOptionName+"' may not be set after the appender has been initialized");return false;}
+return true;}
+this.getSessionId=function(){return sessionId;};this.setSessionId=function(sessionIdParam){sessionId=extractStringFromParam(sessionIdParam,null);this.layout.setCustomField("sessionid",sessionId);};this.setLayout=function(layoutParam){if(checkCanConfigure("layout")){this.layout=layoutParam;if(sessionId!==null){this.setSessionId(sessionId);}}};this.isTimed=function(){return timed;};this.setTimed=function(timedParam){if(checkCanConfigure("timed")){timed=bool(timedParam);}};this.getTimerInterval=function(){return timerInterval;};this.setTimerInterval=function(timerIntervalParam){if(checkCanConfigure("timerInterval")){timerInterval=extractIntFromParam(timerIntervalParam,timerInterval);}};this.isWaitForResponse=function(){return waitForResponse;};this.setWaitForResponse=function(waitForResponseParam){if(checkCanConfigure("waitForResponse")){waitForResponse=bool(waitForResponseParam);}};this.getBatchSize=function(){return batchSize;};this.setBatchSize=function(batchSizeParam){if(checkCanConfigure("batchSize")){batchSize=extractIntFromParam(batchSizeParam,batchSize);}};this.isSendAllOnUnload=function(){return sendAllOnUnload;};this.setSendAllOnUnload=function(sendAllOnUnloadParam){if(checkCanConfigure("sendAllOnUnload")){sendAllOnUnload=extractBooleanFromParam(sendAllOnUnloadParam,sendAllOnUnload);}};this.setRequestSuccessCallback=function(requestSuccessCallbackParam){requestSuccessCallback=extractFunctionFromParam(requestSuccessCallbackParam,requestSuccessCallback);};this.setFailCallback=function(failCallbackParam){failCallback=extractFunctionFromParam(failCallbackParam,failCallback);};this.getPostVarName=function(){return postVarName;};this.setPostVarName=function(postVarNameParam){if(checkCanConfigure("postVarName")){postVarName=extractStringFromParam(postVarNameParam,postVarName);}};this.getHeaders=function(){return headers;};this.addHeader=function(name,value){if(name.toLowerCase()=="content-type"){contentType=value;}else{headers.push({name:name,value:value});}};function sendAll(){if(isSupported&&enabled){sending=true;var currentRequestBatch;if(waitForResponse){if(queuedRequests.length>0){currentRequestBatch=queuedRequests.shift();sendRequest(preparePostData(currentRequestBatch),sendAll);}else{sending=false;if(timed){scheduleSending();}}}else{while((currentRequestBatch=queuedRequests.shift())){sendRequest(preparePostData(currentRequestBatch));}
+sending=false;if(timed){scheduleSending();}}}}
+this.sendAll=sendAll;function sendAllRemaining(){var sendingAnything=false;if(isSupported&&enabled){var actualBatchSize=appender.getLayout().allowBatching()?batchSize:1;var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);if(queuedLoggingEvents.length>=actualBatchSize){queuedRequests.push(batchedLoggingEvents);batchedLoggingEvents=[];}}
+if(batchedLoggingEvents.length>0){queuedRequests.push(batchedLoggingEvents);}
+sendingAnything=(queuedRequests.length>0);waitForResponse=false;timed=false;sendAll();}
+return sendingAnything;}
+this.sendAllRemaining=sendAllRemaining;function preparePostData(batchedLoggingEvents){var formattedMessages=[];var currentLoggingEvent;var postData="";while((currentLoggingEvent=batchedLoggingEvents.shift())){var currentFormattedMessage=appender.getLayout().format(currentLoggingEvent);if(appender.getLayout().ignoresThrowable()){currentFormattedMessage+=currentLoggingEvent.getThrowableStrRep();}
+formattedMessages.push(currentFormattedMessage);}
+if(batchedLoggingEvents.length==1){postData=formattedMessages.join("");}else{postData=appender.getLayout().batchHeader+
+formattedMessages.join(appender.getLayout().batchSeparator)+
+appender.getLayout().batchFooter;}
+if(contentType==appender.defaults.contentType){postData=appender.getLayout().returnsPostData?postData:urlEncode(postVarName)+"="+urlEncode(postData);if(postData.length>0){postData+="&";}
+postData+="layout="+urlEncode(appender.getLayout().toString());}
+return postData;}
+function scheduleSending(){window.setTimeout(sendAll,timerInterval);}
+function xmlHttpErrorHandler(){var msg="AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}}
+function sendRequest(postData,successCallback){try{var xmlHttp=getXmlHttp(xmlHttpErrorHandler);if(isSupported){if(xmlHttp.overrideMimeType){xmlHttp.overrideMimeType(appender.getLayout().getContentType());}
+xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4){if(isHttpRequestSuccessful(xmlHttp)){if(requestSuccessCallback){requestSuccessCallback(xmlHttp);}
+if(successCallback){successCallback(xmlHttp);}}else{var msg="AjaxAppender.append: XMLHttpRequest request to URL "+
+url+" returned status code "+xmlHttp.status;handleError(msg);if(failCallback){failCallback(msg);}}
+xmlHttp.onreadystatechange=emptyFunction;xmlHttp=null;}};xmlHttp.open("POST",url,true);try{for(var i=0,header;header=headers[i++];){xmlHttp.setRequestHeader(header.name,header.value);}
+xmlHttp.setRequestHeader("Content-Type",contentType);}catch(headerEx){var msg="AjaxAppender.append: your browser's XMLHttpRequest implementation"+" does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}
+return;}
+xmlHttp.send(postData);}}catch(ex){var errMsg="AjaxAppender.append: error sending log message to "+url;handleError(errMsg,ex);isSupported=false;if(failCallback){failCallback(errMsg+". Details: "+getExceptionStringRep(ex));}}}
+this.append=function(loggingEvent){if(isSupported){if(!initialized){init();}
+queuedLoggingEvents.push(loggingEvent);var actualBatchSize=this.getLayout().allowBatching()?batchSize:1;if(queuedLoggingEvents.length>=actualBatchSize){var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);}
+queuedRequests.push(batchedLoggingEvents);if(!timed&&(!waitForResponse||(waitForResponse&&!sending))){sendAll();}}}};function init(){initialized=true;if(sendAllOnUnload){var oldBeforeUnload=window.onbeforeunload;window.onbeforeunload=function(){if(oldBeforeUnload){oldBeforeUnload();}
+if(sendAllRemaining()){return"Sending log messages";}};}
+if(timed){scheduleSending();}}}
+AjaxAppender.prototype=new Appender();AjaxAppender.prototype.defaults={waitForResponse:false,timed:false,timerInterval:1000,batchSize:1,sendAllOnUnload:false,requestSuccessCallback:null,failCallback:null,postVarName:"data",contentType:"application/x-www-form-urlencoded"};AjaxAppender.prototype.layout=new HttpPostDataLayout();AjaxAppender.prototype.toString=function(){return"AjaxAppender";};log4javascript.AjaxAppender=AjaxAppender;function setCookie(name,value,days,path){var expires;path=path?"; path="+path:"";if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));expires="; expires="+date.toGMTString();}else{expires="";}
+document.cookie=escape(name)+"="+escape(value)+expires+path;}
+function getCookie(name){var nameEquals=escape(name)+"=";var ca=document.cookie.split(";");for(var i=0,len=ca.length;i<len;i++){var c=ca[i];while(c.charAt(0)===" "){c=c.substring(1,c.length);}
+if(c.indexOf(nameEquals)===0){return unescape(c.substring(nameEquals.length,c.length));}}
+return null;}
+function getBaseUrl(){var scripts=document.getElementsByTagName("script");for(var i=0,len=scripts.length;i<len;++i){if(scripts[i].src.indexOf("log4javascript")!=-1){var lastSlash=scripts[i].src.lastIndexOf("/");return(lastSlash==-1)?"":scripts[i].src.substr(0,lastSlash+1);}}
+return null;}
+function isLoaded(win){try{return bool(win.loaded);}catch(ex){return false;}}
+var ConsoleAppender;(function(){var getConsoleHtmlLines=function(){return['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">','<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">','<head>','<title>log4javascript</title>','<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />','<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->','<meta http-equiv="X-UA-Compatible" content="IE=7" />','<script type="text/javascript">var isIe = false, isIePre7 = false;</script>','<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->','<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->','<script type="text/javascript">','//<![CDATA[','var loggingEnabled=true;var logQueuedEventsTimer=null;var logEntries=[];var logEntriesAndSeparators=[];var logItems=[];var renderDelay=100;var unrenderedLogItemsExist=false;var rootGroup,currentGroup=null;var loaded=false;var currentLogItem=null;var logMainContainer;function copyProperties(obj,props){for(var i in props){obj[i]=props[i];}}','function LogItem(){}','LogItem.prototype={mainContainer:null,wrappedContainer:null,unwrappedContainer:null,group:null,appendToLog:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].appendToLog();}','this.group.update();},doRemove:function(doUpdate,removeFromGroup){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].remove();}','this.unwrappedElementContainer=null;this.wrappedElementContainer=null;this.mainElementContainer=null;}','if(this.group&&removeFromGroup){this.group.removeChild(this,doUpdate);}','if(this===currentLogItem){currentLogItem=null;}},remove:function(doUpdate,removeFromGroup){this.doRemove(doUpdate,removeFromGroup);},render:function(){},accept:function(visitor){visitor.visit(this);},getUnwrappedDomContainer:function(){return this.group.unwrappedElementContainer.contentDiv;},getWrappedDomContainer:function(){return this.group.wrappedElementContainer.contentDiv;},getMainDomContainer:function(){return this.group.mainElementContainer.contentDiv;}};LogItem.serializedItemKeys={LOG_ENTRY:0,GROUP_START:1,GROUP_END:2};function LogItemContainerElement(){}','LogItemContainerElement.prototype={appendToLog:function(){var insertBeforeFirst=(newestAtTop&&this.containerDomNode.hasChildNodes());if(insertBeforeFirst){this.containerDomNode.insertBefore(this.mainDiv,this.containerDomNode.firstChild);}else{this.containerDomNode.appendChild(this.mainDiv);}}};function SeparatorElementContainer(containerDomNode){this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="separator";this.mainDiv.innerHTML=" ";}','SeparatorElementContainer.prototype=new LogItemContainerElement();SeparatorElementContainer.prototype.remove=function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;};function Separator(){this.rendered=false;}','Separator.prototype=new LogItem();copyProperties(Separator.prototype,{render:function(){var containerDomNode=this.group.contentDiv;if(isIe){this.unwrappedElementContainer=new SeparatorElementContainer(this.getUnwrappedDomContainer());this.wrappedElementContainer=new SeparatorElementContainer(this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new SeparatorElementContainer(this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}','this.content=this.formattedMessage;this.rendered=true;}});function GroupElementContainer(group,containerDomNode,isRoot,isWrapped){this.group=group;this.containerDomNode=containerDomNode;this.isRoot=isRoot;this.isWrapped=isWrapped;this.expandable=false;if(this.isRoot){if(isIe){this.contentDiv=logMainContainer.appendChild(document.createElement("div"));this.contentDiv.id=this.isWrapped?"log_wrapped":"log_unwrapped";}else{this.contentDiv=logMainContainer;}}else{var groupElementContainer=this;this.mainDiv=document.createElement("div");this.mainDiv.className="group";this.headingDiv=this.mainDiv.appendChild(document.createElement("div"));this.headingDiv.className="groupheading";this.expander=this.headingDiv.appendChild(document.createElement("span"));this.expander.className="expander unselectable greyedout";this.expander.unselectable=true;var expanderText=this.group.expanded?"-":"+";this.expanderTextNode=this.expander.appendChild(document.createTextNode(expanderText));this.headingDiv.appendChild(document.createTextNode(" "+this.group.name));this.contentDiv=this.mainDiv.appendChild(document.createElement("div"));var contentCssClass=this.group.expanded?"expanded":"collapsed";this.contentDiv.className="groupcontent "+contentCssClass;this.expander.onclick=function(){if(groupElementContainer.group.expandable){groupElementContainer.group.toggleExpanded();}};}}','GroupElementContainer.prototype=new LogItemContainerElement();copyProperties(GroupElementContainer.prototype,{toggleExpanded:function(){if(!this.isRoot){var oldCssClass,newCssClass,expanderText;if(this.group.expanded){newCssClass="expanded";oldCssClass="collapsed";expanderText="-";}else{newCssClass="collapsed";oldCssClass="expanded";expanderText="+";}','replaceClass(this.contentDiv,newCssClass,oldCssClass);this.expanderTextNode.nodeValue=expanderText;}},remove:function(){if(!this.isRoot){this.headingDiv=null;this.expander.onclick=null;this.expander=null;this.expanderTextNode=null;this.contentDiv=null;this.containerDomNode=null;this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;}},reverseChildren:function(){var node=null;var childDomNodes=[];while((node=this.contentDiv.firstChild)){this.contentDiv.removeChild(node);childDomNodes.push(node);}','while((node=childDomNodes.pop())){this.contentDiv.appendChild(node);}},update:function(){if(!this.isRoot){if(this.group.expandable){removeClass(this.expander,"greyedout");}else{addClass(this.expander,"greyedout");}}},clear:function(){if(this.isRoot){this.contentDiv.innerHTML="";}}});function Group(name,isRoot,initiallyExpanded){this.name=name;this.group=null;this.isRoot=isRoot;this.initiallyExpanded=initiallyExpanded;this.elementContainers=[];this.children=[];this.expanded=initiallyExpanded;this.rendered=false;this.expandable=false;}','Group.prototype=new LogItem();copyProperties(Group.prototype,{addChild:function(logItem){this.children.push(logItem);logItem.group=this;},render:function(){if(isIe){var unwrappedDomContainer,wrappedDomContainer;if(this.isRoot){unwrappedDomContainer=logMainContainer;wrappedDomContainer=logMainContainer;}else{unwrappedDomContainer=this.getUnwrappedDomContainer();wrappedDomContainer=this.getWrappedDomContainer();}','this.unwrappedElementContainer=new GroupElementContainer(this,unwrappedDomContainer,this.isRoot,false);this.wrappedElementContainer=new GroupElementContainer(this,wrappedDomContainer,this.isRoot,true);this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{var mainDomContainer=this.isRoot?logMainContainer:this.getMainDomContainer();this.mainElementContainer=new GroupElementContainer(this,mainDomContainer,this.isRoot,false);this.elementContainers=[this.mainElementContainer];}','this.rendered=true;},toggleExpanded:function(){this.expanded=!this.expanded;for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].toggleExpanded();}},expand:function(){if(!this.expanded){this.toggleExpanded();}},accept:function(visitor){visitor.visitGroup(this);},reverseChildren:function(){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].reverseChildren();}}},update:function(){var previouslyExpandable=this.expandable;this.expandable=(this.children.length!==0);if(this.expandable!==previouslyExpandable){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].update();}}},flatten:function(){var visitor=new GroupFlattener();this.accept(visitor);return visitor.logEntriesAndSeparators;},removeChild:function(child,doUpdate){array_remove(this.children,child);child.group=null;if(doUpdate){this.update();}},remove:function(doUpdate,removeFromGroup){for(var i=0,len=this.children.length;i<len;i++){this.children[i].remove(false,false);}','this.children=[];this.update();if(this===currentGroup){currentGroup=this.group;}','this.doRemove(doUpdate,removeFromGroup);},serialize:function(items){items.push([LogItem.serializedItemKeys.GROUP_START,this.name]);for(var i=0,len=this.children.length;i<len;i++){this.children[i].serialize(items);}','if(this!==currentGroup){items.push([LogItem.serializedItemKeys.GROUP_END]);}},clear:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clear();}}});function LogEntryElementContainer(){}','LogEntryElementContainer.prototype=new LogItemContainerElement();copyProperties(LogEntryElementContainer.prototype,{remove:function(){this.doRemove();},doRemove:function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;this.contentElement=null;this.containerDomNode=null;},setContent:function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=content;}},setSearchMatch:function(isMatch){var oldCssClass=isMatch?"searchnonmatch":"searchmatch";var newCssClass=isMatch?"searchmatch":"searchnonmatch";replaceClass(this.mainDiv,newCssClass,oldCssClass);},clearSearch:function(){removeClass(this.mainDiv,"searchmatch");removeClass(this.mainDiv,"searchnonmatch");}});function LogEntryWrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.mainDiv.className="logentry wrapped "+this.logEntry.level;this.contentElement=this.mainDiv;}','LogEntryWrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryWrappedElementContainer.prototype.setContent=function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=wrappedContent;}};function LogEntryUnwrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry unwrapped "+this.logEntry.level;this.pre=this.mainDiv.appendChild(document.createElement("pre"));this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.pre.className="unwrapped";this.contentElement=this.pre;}','LogEntryUnwrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryUnwrappedElementContainer.prototype.remove=function(){this.doRemove();this.pre=null;};function LogEntryMainElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry nonielogentry "+this.logEntry.level;this.contentElement=this.mainDiv.appendChild(document.createElement("span"));this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));}','LogEntryMainElementContainer.prototype=new LogEntryElementContainer();function LogEntry(level,formattedMessage){this.level=level;this.formattedMessage=formattedMessage;this.rendered=false;}','LogEntry.prototype=new LogItem();copyProperties(LogEntry.prototype,{render:function(){var logEntry=this;var containerDomNode=this.group.contentDiv;if(isIe){this.formattedMessage=this.formattedMessage.replace(/\\r\\n/g,"\\r");this.unwrappedElementContainer=new LogEntryUnwrappedElementContainer(this,this.getUnwrappedDomContainer());this.wrappedElementContainer=new LogEntryWrappedElementContainer(this,this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new LogEntryMainElementContainer(this,this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}','this.content=this.formattedMessage;this.rendered=true;},setContent:function(content,wrappedContent){if(content!=this.content){if(isIe&&(content!==this.formattedMessage)){content=content.replace(/\\r\\n/g,"\\r");}','for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setContent(content,wrappedContent);}','this.content=content;}},getSearchMatches:function(){var matches=[];var i,len;if(isIe){var unwrappedEls=getElementsByClass(this.unwrappedElementContainer.mainDiv,"searchterm","span");var wrappedEls=getElementsByClass(this.wrappedElementContainer.mainDiv,"searchterm","span");for(i=0,len=unwrappedEls.length;i<len;i++){matches[i]=new Match(this.level,null,unwrappedEls[i],wrappedEls[i]);}}else{var els=getElementsByClass(this.mainElementContainer.mainDiv,"searchterm","span");for(i=0,len=els.length;i<len;i++){matches[i]=new Match(this.level,els[i]);}}','return matches;},setSearchMatch:function(isMatch){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setSearchMatch(isMatch);}},clearSearch:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clearSearch();}},accept:function(visitor){visitor.visitLogEntry(this);},serialize:function(items){items.push([LogItem.serializedItemKeys.LOG_ENTRY,this.level,this.formattedMessage]);}});function LogItemVisitor(){}','LogItemVisitor.prototype={visit:function(logItem){},visitParent:function(logItem){if(logItem.group){logItem.group.accept(this);}},visitChildren:function(logItem){for(var i=0,len=logItem.children.length;i<len;i++){logItem.children[i].accept(this);}},visitLogEntry:function(logEntry){this.visit(logEntry);},visitSeparator:function(separator){this.visit(separator);},visitGroup:function(group){this.visit(group);}};function GroupFlattener(){this.logEntriesAndSeparators=[];}','GroupFlattener.prototype=new LogItemVisitor();GroupFlattener.prototype.visitGroup=function(group){this.visitChildren(group);};GroupFlattener.prototype.visitLogEntry=function(logEntry){this.logEntriesAndSeparators.push(logEntry);};GroupFlattener.prototype.visitSeparator=function(separator){this.logEntriesAndSeparators.push(separator);};window.onload=function(){if(location.search){var queryBits=unescape(location.search).substr(1).split("&"),nameValueBits;for(var i=0,len=queryBits.length;i<len;i++){nameValueBits=queryBits[i].split("=");if(nameValueBits[0]=="log4javascript_domain"){document.domain=nameValueBits[1];break;}}}','logMainContainer=$("log");if(isIePre7){addClass(logMainContainer,"oldIe");}','rootGroup=new Group("root",true);rootGroup.render();currentGroup=rootGroup;setCommandInputWidth();setLogContainerHeight();toggleLoggingEnabled();toggleSearchEnabled();toggleSearchFilter();toggleSearchHighlight();applyFilters();checkAllLevels();toggleWrap();toggleNewestAtTop();toggleScrollToLatest();renderQueuedLogItems();loaded=true;$("command").value="";$("command").autocomplete="off";$("command").onkeydown=function(evt){evt=getEvent(evt);if(evt.keyCode==10||evt.keyCode==13){evalCommandLine();stopPropagation(evt);}else if(evt.keyCode==27){this.value="";this.focus();}else if(evt.keyCode==38&&commandHistory.length>0){currentCommandIndex=Math.max(0,currentCommandIndex-1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}else if(evt.keyCode==40&&commandHistory.length>0){currentCommandIndex=Math.min(commandHistory.length-1,currentCommandIndex+1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}};$("command").onkeypress=function(evt){evt=getEvent(evt);if(evt.keyCode==38&&commandHistory.length>0&&evt.preventDefault){evt.preventDefault();}};$("command").onkeyup=function(evt){evt=getEvent(evt);if(evt.keyCode==27&&evt.preventDefault){evt.preventDefault();this.focus();}};document.onkeydown=function keyEventHandler(evt){evt=getEvent(evt);switch(evt.keyCode){case 69:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){evalLastCommand();cancelKeyEvent(evt);return false;}','break;case 75:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusSearch();cancelKeyEvent(evt);return false;}','break;case 40:case 76:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusCommandLine();cancelKeyEvent(evt);return false;}','break;}};setTimeout(setLogContainerHeight,20);setShowCommandLine(showCommandLine);doSearch();};window.onunload=function(){if(mainWindowExists()){appender.unload();}','appender=null;};function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}','function setLoggingEnabled(enable){loggingEnabled=enable;}','var appender=null;function setAppender(appenderParam){appender=appenderParam;}','function setShowCloseButton(showCloseButton){$("closeButton").style.display=showCloseButton?"inline":"none";}','function setShowHideButton(showHideButton){$("hideButton").style.display=showHideButton?"inline":"none";}','var newestAtTop=false;function LogItemContentReverser(){}','LogItemContentReverser.prototype=new LogItemVisitor();LogItemContentReverser.prototype.visitGroup=function(group){group.reverseChildren();this.visitChildren(group);};function setNewestAtTop(isNewestAtTop){var oldNewestAtTop=newestAtTop;var i,iLen,j,jLen;newestAtTop=Boolean(isNewestAtTop);if(oldNewestAtTop!=newestAtTop){var visitor=new LogItemContentReverser();rootGroup.accept(visitor);if(currentSearch){var currentMatch=currentSearch.matches[currentMatchIndex];var matchIndex=0;var matches=[];var actOnLogEntry=function(logEntry){var logEntryMatches=logEntry.getSearchMatches();for(j=0,jLen=logEntryMatches.length;j<jLen;j++){matches[matchIndex]=logEntryMatches[j];if(currentMatch&&logEntryMatches[j].equals(currentMatch)){currentMatchIndex=matchIndex;}','matchIndex++;}};if(newestAtTop){for(i=logEntries.length-1;i>=0;i--){actOnLogEntry(logEntries[i]);}}else{for(i=0,iLen=logEntries.length;i<iLen;i++){actOnLogEntry(logEntries[i]);}}','currentSearch.matches=matches;if(currentMatch){currentMatch.setCurrent();}}else if(scrollToLatest){doScrollToLatest();}}','$("newestAtTop").checked=isNewestAtTop;}','function toggleNewestAtTop(){var isNewestAtTop=$("newestAtTop").checked;setNewestAtTop(isNewestAtTop);}','var scrollToLatest=true;function setScrollToLatest(isScrollToLatest){scrollToLatest=isScrollToLatest;if(scrollToLatest){doScrollToLatest();}','$("scrollToLatest").checked=isScrollToLatest;}','function toggleScrollToLatest(){var isScrollToLatest=$("scrollToLatest").checked;setScrollToLatest(isScrollToLatest);}','function doScrollToLatest(){var l=logMainContainer;if(typeof l.scrollTop!="undefined"){if(newestAtTop){l.scrollTop=0;}else{var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}}','var closeIfOpenerCloses=true;function setCloseIfOpenerCloses(isCloseIfOpenerCloses){closeIfOpenerCloses=isCloseIfOpenerCloses;}','var maxMessages=null;function setMaxMessages(max){maxMessages=max;pruneLogEntries();}','var showCommandLine=false;function setShowCommandLine(isShowCommandLine){showCommandLine=isShowCommandLine;if(loaded){$("commandLine").style.display=showCommandLine?"block":"none";setCommandInputWidth();setLogContainerHeight();}}','function focusCommandLine(){if(loaded){$("command").focus();}}','function focusSearch(){if(loaded){$("searchBox").focus();}}','function getLogItems(){var items=[];for(var i=0,len=logItems.length;i<len;i++){logItems[i].serialize(items);}','return items;}','function setLogItems(items){var loggingReallyEnabled=loggingEnabled;loggingEnabled=true;for(var i=0,len=items.length;i<len;i++){switch(items[i][0]){case LogItem.serializedItemKeys.LOG_ENTRY:log(items[i][1],items[i][2]);break;case LogItem.serializedItemKeys.GROUP_START:group(items[i][1]);break;case LogItem.serializedItemKeys.GROUP_END:groupEnd();break;}}','loggingEnabled=loggingReallyEnabled;}','function log(logLevel,formattedMessage){if(loggingEnabled){var logEntry=new LogEntry(logLevel,formattedMessage);logEntries.push(logEntry);logEntriesAndSeparators.push(logEntry);logItems.push(logEntry);currentGroup.addChild(logEntry);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}','logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}','function renderQueuedLogItems(){logQueuedEventsTimer=null;var pruned=pruneLogEntries();var initiallyHasMatches=currentSearch?currentSearch.hasMatches():false;for(var i=0,len=logItems.length;i<len;i++){if(!logItems[i].rendered){logItems[i].render();logItems[i].appendToLog();if(currentSearch&&(logItems[i]instanceof LogEntry)){currentSearch.applyTo(logItems[i]);}}}','if(currentSearch){if(pruned){if(currentSearch.hasVisibleMatches()){if(currentMatchIndex===null){setCurrentMatchIndex(0);}','displayMatches();}else{displayNoMatches();}}else if(!initiallyHasMatches&¤tSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}}','if(scrollToLatest){doScrollToLatest();}','unrenderedLogItemsExist=false;}','function pruneLogEntries(){if((maxMessages!==null)&&(logEntriesAndSeparators.length>maxMessages)){var numberToDelete=logEntriesAndSeparators.length-maxMessages;var prunedLogEntries=logEntriesAndSeparators.slice(0,numberToDelete);if(currentSearch){currentSearch.removeMatches(prunedLogEntries);}','var group;for(var i=0;i<numberToDelete;i++){group=logEntriesAndSeparators[i].group;array_remove(logItems,logEntriesAndSeparators[i]);array_remove(logEntries,logEntriesAndSeparators[i]);logEntriesAndSeparators[i].remove(true,true);if(group.children.length===0&&group!==currentGroup&&group!==rootGroup){array_remove(logItems,group);group.remove(true,true);}}','logEntriesAndSeparators=array_removeFromStart(logEntriesAndSeparators,numberToDelete);return true;}','return false;}','function group(name,startExpanded){if(loggingEnabled){initiallyExpanded=(typeof startExpanded==="undefined")?true:Boolean(startExpanded);var newGroup=new Group(name,false,initiallyExpanded);currentGroup.addChild(newGroup);currentGroup=newGroup;logItems.push(newGroup);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}','logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}','function groupEnd(){currentGroup=(currentGroup===rootGroup)?rootGroup:currentGroup.group;}','function mainPageReloaded(){currentGroup=rootGroup;var separator=new Separator();logEntriesAndSeparators.push(separator);logItems.push(separator);currentGroup.addChild(separator);}','function closeWindow(){if(appender&&mainWindowExists()){appender.close(true);}else{window.close();}}','function hide(){if(appender&&mainWindowExists()){appender.hide();}}','var mainWindow=window;var windowId="log4javascriptConsoleWindow_"+new Date().getTime()+"_"+(""+Math.random()).substr(2);function setMainWindow(win){mainWindow=win;mainWindow[windowId]=window;if(opener&&closeIfOpenerCloses){pollOpener();}}','function pollOpener(){if(closeIfOpenerCloses){if(mainWindowExists()){setTimeout(pollOpener,500);}else{closeWindow();}}}','function mainWindowExists(){try{return(mainWindow&&!mainWindow.closed&&mainWindow[windowId]==window);}catch(ex){}','return false;}','var logLevels=["TRACE","DEBUG","INFO","WARN","ERROR","FATAL"];function getCheckBox(logLevel){return $("switch_"+logLevel);}','function getIeWrappedLogContainer(){return $("log_wrapped");}','function getIeUnwrappedLogContainer(){return $("log_unwrapped");}','function applyFilters(){for(var i=0;i<logLevels.length;i++){if(getCheckBox(logLevels[i]).checked){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}','updateSearchFromFilters();}','function toggleAllLevels(){var turnOn=$("switch_ALL").checked;for(var i=0;i<logLevels.length;i++){getCheckBox(logLevels[i]).checked=turnOn;if(turnOn){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}}','function checkAllLevels(){for(var i=0;i<logLevels.length;i++){if(!getCheckBox(logLevels[i]).checked){getCheckBox("ALL").checked=false;return;}}','getCheckBox("ALL").checked=true;}','function clearLog(){rootGroup.clear();currentGroup=rootGroup;logEntries=[];logItems=[];logEntriesAndSeparators=[];doSearch();}','function toggleWrap(){var enable=$("wrap").checked;if(enable){addClass(logMainContainer,"wrap");}else{removeClass(logMainContainer,"wrap");}','refreshCurrentMatch();}','var searchTimer=null;function scheduleSearch(){try{clearTimeout(searchTimer);}catch(ex){}','searchTimer=setTimeout(doSearch,500);}','function Search(searchTerm,isRegex,searchRegex,isCaseSensitive){this.searchTerm=searchTerm;this.isRegex=isRegex;this.searchRegex=searchRegex;this.isCaseSensitive=isCaseSensitive;this.matches=[];}','Search.prototype={hasMatches:function(){return this.matches.length>0;},hasVisibleMatches:function(){if(this.hasMatches()){for(var i=0;i<this.matches.length;i++){if(this.matches[i].isVisible()){return true;}}}','return false;},match:function(logEntry){var entryText=String(logEntry.formattedMessage);var matchesSearch=false;if(this.isRegex){matchesSearch=this.searchRegex.test(entryText);}else if(this.isCaseSensitive){matchesSearch=(entryText.indexOf(this.searchTerm)>-1);}else{matchesSearch=(entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase())>-1);}','return matchesSearch;},getNextVisibleMatchIndex:function(){for(var i=currentMatchIndex+1;i<this.matches.length;i++){if(this.matches[i].isVisible()){return i;}}','for(i=0;i<=currentMatchIndex;i++){if(this.matches[i].isVisible()){return i;}}','return-1;},getPreviousVisibleMatchIndex:function(){for(var i=currentMatchIndex-1;i>=0;i--){if(this.matches[i].isVisible()){return i;}}','for(var i=this.matches.length-1;i>=currentMatchIndex;i--){if(this.matches[i].isVisible()){return i;}}','return-1;},applyTo:function(logEntry){var doesMatch=this.match(logEntry);if(doesMatch){logEntry.group.expand();logEntry.setSearchMatch(true);var logEntryContent;var wrappedLogEntryContent;var searchTermReplacementStartTag="<span class=\\\"searchterm\\\">";var searchTermReplacementEndTag="<"+"/span>";var preTagName=isIe?"pre":"span";var preStartTag="<"+preTagName+" class=\\\"pre\\\">";var preEndTag="<"+"/"+preTagName+">";var startIndex=0;var searchIndex,matchedText,textBeforeMatch;if(this.isRegex){var flags=this.isCaseSensitive?"g":"gi";var capturingRegex=new RegExp("("+this.searchRegex.source+")",flags);var rnd=(""+Math.random()).substr(2);var startToken="%%s"+rnd+"%%";var endToken="%%e"+rnd+"%%";logEntryContent=logEntry.formattedMessage.replace(capturingRegex,startToken+"$1"+endToken);logEntryContent=escapeHtml(logEntryContent);var result;var searchString=logEntryContent;logEntryContent="";wrappedLogEntryContent="";while((searchIndex=searchString.indexOf(startToken,startIndex))>-1){var endTokenIndex=searchString.indexOf(endToken,searchIndex);matchedText=searchString.substring(searchIndex+startToken.length,endTokenIndex);textBeforeMatch=searchString.substring(startIndex,searchIndex);logEntryContent+=preStartTag+textBeforeMatch+preEndTag;logEntryContent+=searchTermReplacementStartTag+preStartTag+matchedText+','preEndTag+searchTermReplacementEndTag;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+','matchedText+searchTermReplacementEndTag;}','startIndex=endTokenIndex+endToken.length;}','logEntryContent+=preStartTag+searchString.substr(startIndex)+preEndTag;if(isIe){wrappedLogEntryContent+=searchString.substr(startIndex);}}else{logEntryContent="";wrappedLogEntryContent="";var searchTermReplacementLength=searchTermReplacementStartTag.length+','this.searchTerm.length+searchTermReplacementEndTag.length;var searchTermLength=this.searchTerm.length;var searchTermLowerCase=this.searchTerm.toLowerCase();var logTextLowerCase=logEntry.formattedMessage.toLowerCase();while((searchIndex=logTextLowerCase.indexOf(searchTermLowerCase,startIndex))>-1){matchedText=escapeHtml(logEntry.formattedMessage.substr(searchIndex,this.searchTerm.length));textBeforeMatch=escapeHtml(logEntry.formattedMessage.substring(startIndex,searchIndex));var searchTermReplacement=searchTermReplacementStartTag+','preStartTag+matchedText+preEndTag+searchTermReplacementEndTag;logEntryContent+=preStartTag+textBeforeMatch+preEndTag+searchTermReplacement;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+','matchedText+searchTermReplacementEndTag;}','startIndex=searchIndex+searchTermLength;}','var textAfterLastMatch=escapeHtml(logEntry.formattedMessage.substr(startIndex));logEntryContent+=preStartTag+textAfterLastMatch+preEndTag;if(isIe){wrappedLogEntryContent+=textAfterLastMatch;}}','logEntry.setContent(logEntryContent,wrappedLogEntryContent);var logEntryMatches=logEntry.getSearchMatches();this.matches=this.matches.concat(logEntryMatches);}else{logEntry.setSearchMatch(false);logEntry.setContent(logEntry.formattedMessage,logEntry.formattedMessage);}','return doesMatch;},removeMatches:function(logEntries){var matchesToRemoveCount=0;var currentMatchRemoved=false;var matchesToRemove=[];var i,iLen,j,jLen;for(i=0,iLen=this.matches.length;i<iLen;i++){for(j=0,jLen=logEntries.length;j<jLen;j++){if(this.matches[i].belongsTo(logEntries[j])){matchesToRemove.push(this.matches[i]);if(i===currentMatchIndex){currentMatchRemoved=true;}}}}','var newMatch=currentMatchRemoved?null:this.matches[currentMatchIndex];if(currentMatchRemoved){for(i=currentMatchIndex,iLen=this.matches.length;i<iLen;i++){if(this.matches[i].isVisible()&&!array_contains(matchesToRemove,this.matches[i])){newMatch=this.matches[i];break;}}}','for(i=0,iLen=matchesToRemove.length;i<iLen;i++){array_remove(this.matches,matchesToRemove[i]);matchesToRemove[i].remove();}','if(this.hasVisibleMatches()){if(newMatch===null){setCurrentMatchIndex(0);}else{var newMatchIndex=0;for(i=0,iLen=this.matches.length;i<iLen;i++){if(newMatch===this.matches[i]){newMatchIndex=i;break;}}','setCurrentMatchIndex(newMatchIndex);}}else{currentMatchIndex=null;displayNoMatches();}}};function getPageOffsetTop(el,container){var currentEl=el;var y=0;while(currentEl&¤tEl!=container){y+=currentEl.offsetTop;currentEl=currentEl.offsetParent;}','return y;}','function scrollIntoView(el){var logContainer=logMainContainer;if(!$("wrap").checked){var logContainerLeft=logContainer.scrollLeft;var logContainerRight=logContainerLeft+logContainer.offsetWidth;var elLeft=el.offsetLeft;var elRight=elLeft+el.offsetWidth;if(elLeft<logContainerLeft||elRight>logContainerRight){logContainer.scrollLeft=elLeft-(logContainer.offsetWidth-el.offsetWidth)/2;}}','var logContainerTop=logContainer.scrollTop;var logContainerBottom=logContainerTop+logContainer.offsetHeight;var elTop=getPageOffsetTop(el)-getToolBarsHeight();var elBottom=elTop+el.offsetHeight;if(elTop<logContainerTop||elBottom>logContainerBottom){logContainer.scrollTop=elTop-(logContainer.offsetHeight-el.offsetHeight)/2;}}','function Match(logEntryLevel,spanInMainDiv,spanInUnwrappedPre,spanInWrappedDiv){this.logEntryLevel=logEntryLevel;this.spanInMainDiv=spanInMainDiv;if(isIe){this.spanInUnwrappedPre=spanInUnwrappedPre;this.spanInWrappedDiv=spanInWrappedDiv;}','this.mainSpan=isIe?spanInUnwrappedPre:spanInMainDiv;}','Match.prototype={equals:function(match){return this.mainSpan===match.mainSpan;},setCurrent:function(){if(isIe){addClass(this.spanInUnwrappedPre,"currentmatch");addClass(this.spanInWrappedDiv,"currentmatch");var elementToScroll=$("wrap").checked?this.spanInWrappedDiv:this.spanInUnwrappedPre;scrollIntoView(elementToScroll);}else{addClass(this.spanInMainDiv,"currentmatch");scrollIntoView(this.spanInMainDiv);}},belongsTo:function(logEntry){if(isIe){return isDescendant(this.spanInUnwrappedPre,logEntry.unwrappedPre);}else{return isDescendant(this.spanInMainDiv,logEntry.mainDiv);}},setNotCurrent:function(){if(isIe){removeClass(this.spanInUnwrappedPre,"currentmatch");removeClass(this.spanInWrappedDiv,"currentmatch");}else{removeClass(this.spanInMainDiv,"currentmatch");}},isOrphan:function(){return isOrphan(this.mainSpan);},isVisible:function(){return getCheckBox(this.logEntryLevel).checked;},remove:function(){if(isIe){this.spanInUnwrappedPre=null;this.spanInWrappedDiv=null;}else{this.spanInMainDiv=null;}}};var currentSearch=null;var currentMatchIndex=null;function doSearch(){var searchBox=$("searchBox");var searchTerm=searchBox.value;var isRegex=$("searchRegex").checked;var isCaseSensitive=$("searchCaseSensitive").checked;var i;if(searchTerm===""){$("searchReset").disabled=true;$("searchNav").style.display="none";removeClass(document.body,"searching");removeClass(searchBox,"hasmatches");removeClass(searchBox,"nomatches");for(i=0;i<logEntries.length;i++){logEntries[i].clearSearch();logEntries[i].setContent(logEntries[i].formattedMessage,logEntries[i].formattedMessage);}','currentSearch=null;setLogContainerHeight();}else{$("searchReset").disabled=false;$("searchNav").style.display="block";var searchRegex;var regexValid;if(isRegex){try{searchRegex=isCaseSensitive?new RegExp(searchTerm,"g"):new RegExp(searchTerm,"gi");regexValid=true;replaceClass(searchBox,"validregex","invalidregex");searchBox.title="Valid regex";}catch(ex){regexValid=false;replaceClass(searchBox,"invalidregex","validregex");searchBox.title="Invalid regex: "+(ex.message?ex.message:(ex.description?ex.description:"unknown error"));return;}}else{searchBox.title="";removeClass(searchBox,"validregex");removeClass(searchBox,"invalidregex");}','addClass(document.body,"searching");currentSearch=new Search(searchTerm,isRegex,searchRegex,isCaseSensitive);for(i=0;i<logEntries.length;i++){currentSearch.applyTo(logEntries[i]);}','setLogContainerHeight();if(currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}else{displayNoMatches();}}}','function updateSearchFromFilters(){if(currentSearch){if(currentSearch.hasMatches()){if(currentMatchIndex===null){currentMatchIndex=0;}','var currentMatch=currentSearch.matches[currentMatchIndex];if(currentMatch.isVisible()){displayMatches();setCurrentMatchIndex(currentMatchIndex);}else{currentMatch.setNotCurrent();var nextVisibleMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextVisibleMatchIndex>-1){setCurrentMatchIndex(nextVisibleMatchIndex);displayMatches();}else{displayNoMatches();}}}else{displayNoMatches();}}}','function refreshCurrentMatch(){if(currentSearch&¤tSearch.hasVisibleMatches()){setCurrentMatchIndex(currentMatchIndex);}}','function displayMatches(){replaceClass($("searchBox"),"hasmatches","nomatches");$("searchBox").title=""+currentSearch.matches.length+" matches found";$("searchNav").style.display="block";setLogContainerHeight();}','function displayNoMatches(){replaceClass($("searchBox"),"nomatches","hasmatches");$("searchBox").title="No matches found";$("searchNav").style.display="none";setLogContainerHeight();}','function toggleSearchEnabled(enable){enable=(typeof enable=="undefined")?!$("searchDisable").checked:enable;$("searchBox").disabled=!enable;$("searchReset").disabled=!enable;$("searchRegex").disabled=!enable;$("searchNext").disabled=!enable;$("searchPrevious").disabled=!enable;$("searchCaseSensitive").disabled=!enable;$("searchNav").style.display=(enable&&($("searchBox").value!=="")&¤tSearch&¤tSearch.hasVisibleMatches())?"block":"none";if(enable){removeClass($("search"),"greyedout");addClass(document.body,"searching");if($("searchHighlight").checked){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}','if($("searchFilter").checked){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}','$("searchDisable").checked=!enable;}else{addClass($("search"),"greyedout");removeClass(document.body,"searching");removeClass(logMainContainer,"searchhighlight");removeClass(logMainContainer,"searchfilter");}','setLogContainerHeight();}','function toggleSearchFilter(){var enable=$("searchFilter").checked;if(enable){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}','refreshCurrentMatch();}','function toggleSearchHighlight(){var enable=$("searchHighlight").checked;if(enable){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}}','function clearSearch(){$("searchBox").value="";doSearch();}','function searchNext(){if(currentSearch!==null&¤tMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var nextMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextMatchIndex>currentMatchIndex||confirm("Reached the end of the page. Start from the top?")){setCurrentMatchIndex(nextMatchIndex);}}}','function searchPrevious(){if(currentSearch!==null&¤tMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var previousMatchIndex=currentSearch.getPreviousVisibleMatchIndex();if(previousMatchIndex<currentMatchIndex||confirm("Reached the start of the page. Continue from the bottom?")){setCurrentMatchIndex(previousMatchIndex);}}}','function setCurrentMatchIndex(index){currentMatchIndex=index;currentSearch.matches[currentMatchIndex].setCurrent();}','function addClass(el,cssClass){if(!hasClass(el,cssClass)){if(el.className){el.className+=" "+cssClass;}else{el.className=cssClass;}}}','function hasClass(el,cssClass){if(el.className){var classNames=el.className.split(" ");return array_contains(classNames,cssClass);}','return false;}','function removeClass(el,cssClass){if(hasClass(el,cssClass)){var existingClasses=el.className.split(" ");var newClasses=[];for(var i=0,len=existingClasses.length;i<len;i++){if(existingClasses[i]!=cssClass){newClasses[newClasses.length]=existingClasses[i];}}','el.className=newClasses.join(" ");}}','function replaceClass(el,newCssClass,oldCssClass){removeClass(el,oldCssClass);addClass(el,newCssClass);}','function getElementsByClass(el,cssClass,tagName){var elements=el.getElementsByTagName(tagName);var matches=[];for(var i=0,len=elements.length;i<len;i++){if(hasClass(elements[i],cssClass)){matches.push(elements[i]);}}','return matches;}','function $(id){return document.getElementById(id);}','function isDescendant(node,ancestorNode){while(node!=null){if(node===ancestorNode){return true;}','node=node.parentNode;}','return false;}','function isOrphan(node){var currentNode=node;while(currentNode){if(currentNode==document.body){return false;}','currentNode=currentNode.parentNode;}','return true;}','function escapeHtml(str){return str.replace(/&/g,"&").replace(/[<]/g,"<").replace(/>/g,">");}','function getWindowWidth(){if(window.innerWidth){return window.innerWidth;}else if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth;}else if(document.body){return document.body.clientWidth;}','return 0;}','function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}','return 0;}','function getToolBarsHeight(){return $("switches").offsetHeight;}','function getChromeHeight(){var height=getToolBarsHeight();if(showCommandLine){height+=$("commandLine").offsetHeight;}','return height;}','function setLogContainerHeight(){if(logMainContainer){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";logMainContainer.style.height=""+','Math.max(0,windowHeight-getChromeHeight())+"px";}}','function setCommandInputWidth(){if(showCommandLine){$("command").style.width=""+Math.max(0,$("commandLineContainer").offsetWidth-','($("evaluateButton").offsetWidth+13))+"px";}}','window.onresize=function(){setCommandInputWidth();setLogContainerHeight();};if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}','return this.length;};}','if(!Array.prototype.pop){Array.prototype.pop=function(){if(this.length>0){var val=this[this.length-1];this.length=this.length-1;return val;}};}','if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}','this.length=this.length-1;return firstItem;}};}','if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}','var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}','return itemsDeleted;};}','function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}','if(index>=0){arr.splice(index,1);return index;}else{return false;}}','function array_removeFromStart(array,numberToRemove){if(Array.prototype.splice){array.splice(0,numberToRemove);}else{for(var i=numberToRemove,len=array.length;i<len;i++){array[i-numberToRemove]=array[i];}','array.length=array.length-numberToRemove;}','return array;}','function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}','return false;}','function getErrorMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}','return""+ex;}','function moveCaretToEnd(input){if(input.setSelectionRange){input.focus();var length=input.value.length;input.setSelectionRange(length,length);}else if(input.createTextRange){var range=input.createTextRange();range.collapse(false);range.select();}','input.focus();}','function stopPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}}','function getEvent(evt){return evt?evt:event;}','function getTarget(evt){return evt.target?evt.target:evt.srcElement;}','function getRelatedTarget(evt){if(evt.relatedTarget){return evt.relatedTarget;}else if(evt.srcElement){switch(evt.type){case"mouseover":return evt.fromElement;case"mouseout":return evt.toElement;default:return evt.srcElement;}}}','function cancelKeyEvent(evt){evt.returnValue=false;stopPropagation(evt);}','function evalCommandLine(){var expr=$("command").value;evalCommand(expr);$("command").value="";}','function evalLastCommand(){if(lastCommand!=null){evalCommand(lastCommand);}}','var lastCommand=null;var commandHistory=[];var currentCommandIndex=0;function evalCommand(expr){if(appender){appender.evalCommandAndAppend(expr);}else{var prefix=">>> "+expr+"\\r\\n";try{log("INFO",prefix+eval(expr));}catch(ex){log("ERROR",prefix+"Error: "+getErrorMessage(ex));}}','if(expr!=commandHistory[commandHistory.length-1]){commandHistory.push(expr);if(appender){appender.storeCommandHistory(commandHistory);}}','currentCommandIndex=(expr==commandHistory[currentCommandIndex])?currentCommandIndex+1:commandHistory.length;lastCommand=expr;}','//]]>','</script>','<style type="text/css">','body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#switchesContainer input{margin-bottom:0}div.toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div.toolbar,div#search input{font-family:tahoma,verdana,arial,helvetica,sans-serif}div.toolbar input.button{padding:0 5px;font-size:100%}div.toolbar input.hidden{display:none}div#switches input#clearButton{margin-left:20px}div#levels label{font-weight:bold}div#levels label,div#options label{margin-right:5px}div#levels label#wrapLabel{font-weight:normal}div#search label{margin-right:10px}div#search label.searchboxlabel{margin-right:0}div#search input{font-size:100%}div#search input.validregex{color:green}div#search input.invalidregex{color:red}div#search input.nomatches{color:white;background-color:#ff6666}div#search input.nomatches{color:white;background-color:#ff6666}div#searchNav{display:none}div#commandLine{display:none}div#commandLine input#command{font-size:100%;font-family:Courier New,Courier}div#commandLine input#evaluateButton{}*.greyedout{color:gray !important;border-color:gray !important}*.greyedout *.alwaysenabled{color:black}*.unselectable{-khtml-user-select:none;-moz-user-select:none;user-select:none}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both;position:relative}div.group{border-color:#cccccc;border-style:solid;border-width:1px 0 1px 1px;overflow:visible}div.oldIe div.group,div.oldIe div.group *,div.oldIe *.logentry{height:1%}div.group div.groupheading span.expander{border:solid black 1px;font-family:Courier New,Courier;font-size:0.833em;background-color:#eeeeee;position:relative;top:-1px;color:black;padding:0 2px;cursor:pointer;cursor:hand;height:1%}div.group div.groupcontent{margin-left:10px;padding-bottom:2px;overflow:visible}div.group div.expanded{display:block}div.group div.collapsed{display:none}*.logentry{overflow:visible;display:none;white-space:pre}span.pre{white-space:pre}pre.unwrapped{display:inline !important}pre.unwrapped pre.pre,div.wrapped pre.pre{display:inline}div.wrapped pre.pre{white-space:normal}div.wrapped{display:none}body.searching *.logentry span.currentmatch{color:white !important;background-color:green !important}body.searching div.searchhighlight *.logentry span.searchterm{color:black;background-color:yellow}div.wrap *.logentry{white-space:normal !important;border-width:0 0 1px 0;border-color:#dddddd;border-style:dotted}div.wrap #log_wrapped,#log_unwrapped{display:block}div.wrap #log_unwrapped,#log_wrapped{display:none}div.wrap *.logentry span.pre{overflow:visible;white-space:normal}div.wrap *.logentry pre.unwrapped{display:none}div.wrap *.logentry span.wrapped{display:inline}div.searchfilter *.searchnonmatch{display:none !important}div#log *.TRACE,label#label_TRACE{color:#666666}div#log *.DEBUG,label#label_DEBUG{color:green}div#log *.INFO,label#label_INFO{color:#000099}div#log *.WARN,label#label_WARN{color:#999900}div#log *.ERROR,label#label_ERROR{color:red}div#log *.FATAL,label#label_FATAL{color:#660066}div.TRACE#log *.TRACE,div.DEBUG#log *.DEBUG,div.INFO#log *.INFO,div.WARN#log *.WARN,div.ERROR#log *.ERROR,div.FATAL#log *.FATAL{display:block}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}','</style>','</head>','<body id="body">','<div id="switchesContainer">','<div id="switches">','<div id="levels" class="toolbar">','Filters:','<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>','<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>','<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>','<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>','<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>','<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>','<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>','</div>','<div id="search" class="toolbar">','<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />','<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />','<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>','<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>','<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>','<div id="searchNav">','<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />','<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />','<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>','<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>','</div>','</div>','<div id="options" class="toolbar">','Options:','<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>','<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>','<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>','<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>','<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages" />','<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />','<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />','</div>','</div>','</div>','<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>','<div id="commandLine" class="toolbar">','<div id="commandLineContainer">','<input type="text" id="command" title="Enter a JavaScript command here and hit return or press \'Evaluate\'" />','<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />','</div>','</div>','</body>','</html>',''];};var defaultCommandLineFunctions=[];ConsoleAppender=function(){};var consoleAppenderIdCounter=1;ConsoleAppender.prototype=new Appender();ConsoleAppender.prototype.create=function(inPage,container,lazyInit,initiallyMinimized,useDocumentWrite,width,height,focusConsoleWindow){var appender=this;var initialized=false;var consoleWindowCreated=false;var consoleWindowLoaded=false;var consoleClosed=false;var queuedLoggingEvents=[];var isSupported=true;var consoleAppenderId=consoleAppenderIdCounter++;initiallyMinimized=extractBooleanFromParam(initiallyMinimized,this.defaults.initiallyMinimized);lazyInit=extractBooleanFromParam(lazyInit,this.defaults.lazyInit);useDocumentWrite=extractBooleanFromParam(useDocumentWrite,this.defaults.useDocumentWrite);var newestMessageAtTop=this.defaults.newestMessageAtTop;var scrollToLatestMessage=this.defaults.scrollToLatestMessage;width=width?width:this.defaults.width;height=height?height:this.defaults.height;var maxMessages=this.defaults.maxMessages;var showCommandLine=this.defaults.showCommandLine;var commandLineObjectExpansionDepth=this.defaults.commandLineObjectExpansionDepth;var showHideButton=this.defaults.showHideButton;var showCloseButton=this.defaults.showCloseButton;var showLogEntryDeleteButtons=this.defaults.showLogEntryDeleteButtons;this.setLayout(this.defaults.layout);var init,createWindow,safeToAppend,getConsoleWindow,open;var appenderName=inPage?"InPageAppender":"PopUpAppender";var checkCanConfigure=function(configOptionName){if(consoleWindowCreated){handleError(appenderName+": configuration option '"+configOptionName+"' may not be set after the appender has been initialized");return false;}
+return true;};var consoleWindowExists=function(){return(consoleWindowLoaded&&isSupported&&!consoleClosed);};this.isNewestMessageAtTop=function(){return newestMessageAtTop;};this.setNewestMessageAtTop=function(newestMessageAtTopParam){newestMessageAtTop=bool(newestMessageAtTopParam);if(consoleWindowExists()){getConsoleWindow().setNewestAtTop(newestMessageAtTop);}};this.isScrollToLatestMessage=function(){return scrollToLatestMessage;};this.setScrollToLatestMessage=function(scrollToLatestMessageParam){scrollToLatestMessage=bool(scrollToLatestMessageParam);if(consoleWindowExists()){getConsoleWindow().setScrollToLatest(scrollToLatestMessage);}};this.getWidth=function(){return width;};this.setWidth=function(widthParam){if(checkCanConfigure("width")){width=extractStringFromParam(widthParam,width);}};this.getHeight=function(){return height;};this.setHeight=function(heightParam){if(checkCanConfigure("height")){height=extractStringFromParam(heightParam,height);}};this.getMaxMessages=function(){return maxMessages;};this.setMaxMessages=function(maxMessagesParam){maxMessages=extractIntFromParam(maxMessagesParam,maxMessages);if(consoleWindowExists()){getConsoleWindow().setMaxMessages(maxMessages);}};this.isShowCommandLine=function(){return showCommandLine;};this.setShowCommandLine=function(showCommandLineParam){showCommandLine=bool(showCommandLineParam);if(consoleWindowExists()){getConsoleWindow().setShowCommandLine(showCommandLine);}};this.isShowHideButton=function(){return showHideButton;};this.setShowHideButton=function(showHideButtonParam){showHideButton=bool(showHideButtonParam);if(consoleWindowExists()){getConsoleWindow().setShowHideButton(showHideButton);}};this.isShowCloseButton=function(){return showCloseButton;};this.setShowCloseButton=function(showCloseButtonParam){showCloseButton=bool(showCloseButtonParam);if(consoleWindowExists()){getConsoleWindow().setShowCloseButton(showCloseButton);}};this.getCommandLineObjectExpansionDepth=function(){return commandLineObjectExpansionDepth;};this.setCommandLineObjectExpansionDepth=function(commandLineObjectExpansionDepthParam){commandLineObjectExpansionDepth=extractIntFromParam(commandLineObjectExpansionDepthParam,commandLineObjectExpansionDepth);};var minimized=initiallyMinimized;this.isInitiallyMinimized=function(){return initiallyMinimized;};this.setInitiallyMinimized=function(initiallyMinimizedParam){if(checkCanConfigure("initiallyMinimized")){initiallyMinimized=bool(initiallyMinimizedParam);minimized=initiallyMinimized;}};this.isUseDocumentWrite=function(){return useDocumentWrite;};this.setUseDocumentWrite=function(useDocumentWriteParam){if(checkCanConfigure("useDocumentWrite")){useDocumentWrite=bool(useDocumentWriteParam);}};function QueuedLoggingEvent(loggingEvent,formattedMessage){this.loggingEvent=loggingEvent;this.levelName=loggingEvent.level.name;this.formattedMessage=formattedMessage;}
+QueuedLoggingEvent.prototype.append=function(){getConsoleWindow().log(this.levelName,this.formattedMessage);};function QueuedGroup(name,initiallyExpanded){this.name=name;this.initiallyExpanded=initiallyExpanded;}
+QueuedGroup.prototype.append=function(){getConsoleWindow().group(this.name,this.initiallyExpanded);};function QueuedGroupEnd(){}
+QueuedGroupEnd.prototype.append=function(){getConsoleWindow().groupEnd();};var checkAndAppend=function(){safeToAppend();if(!initialized){init();}else if(consoleClosed&&reopenWhenClosed){createWindow();}
+if(safeToAppend()){appendQueuedLoggingEvents();}};this.append=function(loggingEvent){if(isSupported){var formattedMessage=appender.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}
+queuedLoggingEvents.push(new QueuedLoggingEvent(loggingEvent,formattedMessage));checkAndAppend();}};this.group=function(name,initiallyExpanded){if(isSupported){queuedLoggingEvents.push(new QueuedGroup(name,initiallyExpanded));checkAndAppend();}};this.groupEnd=function(){if(isSupported){queuedLoggingEvents.push(new QueuedGroupEnd());checkAndAppend();}};var appendQueuedLoggingEvents=function(){var currentLoggingEvent;while(queuedLoggingEvents.length>0){queuedLoggingEvents.shift().append();}
+if(focusConsoleWindow){getConsoleWindow().focus();}};this.setAddedToLogger=function(logger){this.loggers.push(logger);if(enabled&&!lazyInit){init();}};this.clear=function(){if(consoleWindowExists()){getConsoleWindow().clearLog();}
+queuedLoggingEvents.length=0;};this.focus=function(){if(consoleWindowExists()){getConsoleWindow().focus();}};this.focusCommandLine=function(){if(consoleWindowExists()){getConsoleWindow().focusCommandLine();}};this.focusSearch=function(){if(consoleWindowExists()){getConsoleWindow().focusSearch();}};var commandWindow=window;this.getCommandWindow=function(){return commandWindow;};this.setCommandWindow=function(commandWindowParam){commandWindow=commandWindowParam;};this.executeLastCommand=function(){if(consoleWindowExists()){getConsoleWindow().evalLastCommand();}};var commandLayout=new PatternLayout("%m");this.getCommandLayout=function(){return commandLayout;};this.setCommandLayout=function(commandLayoutParam){commandLayout=commandLayoutParam;};this.evalCommandAndAppend=function(expr){var commandReturnValue={appendResult:true,isError:false};var commandOutput="";try{var result,i;if(!commandWindow.eval&&commandWindow.execScript){commandWindow.execScript("null");}
+var commandLineFunctionsHash={};for(i=0,len=commandLineFunctions.length;i<len;i++){commandLineFunctionsHash[commandLineFunctions[i][0]]=commandLineFunctions[i][1];}
+var objectsToRestore=[];var addObjectToRestore=function(name){objectsToRestore.push([name,commandWindow[name]]);};addObjectToRestore("appender");commandWindow.appender=appender;addObjectToRestore("commandReturnValue");commandWindow.commandReturnValue=commandReturnValue;addObjectToRestore("commandLineFunctionsHash");commandWindow.commandLineFunctionsHash=commandLineFunctionsHash;var addFunctionToWindow=function(name){addObjectToRestore(name);commandWindow[name]=function(){return this.commandLineFunctionsHash[name](appender,arguments,commandReturnValue);};};for(i=0,len=commandLineFunctions.length;i<len;i++){addFunctionToWindow(commandLineFunctions[i][0]);}
+if(commandWindow===window&&commandWindow.execScript){addObjectToRestore("evalExpr");addObjectToRestore("result");window.evalExpr=expr;commandWindow.execScript("window.result=eval(window.evalExpr);");result=window.result;}else{result=commandWindow.eval(expr);}
+commandOutput=isUndefined(result)?result:formatObjectExpansion(result,commandLineObjectExpansionDepth);for(i=0,len=objectsToRestore.length;i<len;i++){commandWindow[objectsToRestore[i][0]]=objectsToRestore[i][1];}}catch(ex){commandOutput="Error evaluating command: "+getExceptionStringRep(ex);commandReturnValue.isError=true;}
+if(commandReturnValue.appendResult){var message=">>> "+expr;if(!isUndefined(commandOutput)){message+=newLine+commandOutput;}
+var level=commandReturnValue.isError?Level.ERROR:Level.INFO;var loggingEvent=new LoggingEvent(null,new Date(),level,[message],null);var mainLayout=this.getLayout();this.setLayout(commandLayout);this.append(loggingEvent);this.setLayout(mainLayout);}};var commandLineFunctions=defaultCommandLineFunctions.concat([]);this.addCommandLineFunction=function(functionName,commandLineFunction){commandLineFunctions.push([functionName,commandLineFunction]);};var commandHistoryCookieName="log4javascriptCommandHistory";this.storeCommandHistory=function(commandHistory){setCookie(commandHistoryCookieName,commandHistory.join(","));};var writeHtml=function(doc){var lines=getConsoleHtmlLines();doc.open();for(var i=0,len=lines.length;i<len;i++){doc.writeln(lines[i]);}
+doc.close();};this.setEventTypes(["load","unload"]);var consoleWindowLoadHandler=function(){var win=getConsoleWindow();win.setAppender(appender);win.setNewestAtTop(newestMessageAtTop);win.setScrollToLatest(scrollToLatestMessage);win.setMaxMessages(maxMessages);win.setShowCommandLine(showCommandLine);win.setShowHideButton(showHideButton);win.setShowCloseButton(showCloseButton);win.setMainWindow(window);var storedValue=getCookie(commandHistoryCookieName);if(storedValue){win.commandHistory=storedValue.split(",");win.currentCommandIndex=win.commandHistory.length;}
+appender.dispatchEvent("load",{"win":win});};this.unload=function(){logLog.debug("unload "+this+", caller: "+this.unload.caller);if(!consoleClosed){logLog.debug("really doing unload "+this);consoleClosed=true;consoleWindowLoaded=false;consoleWindowCreated=false;appender.dispatchEvent("unload",{});}};var pollConsoleWindow=function(windowTest,interval,successCallback,errorMessage){function doPoll(){try{if(consoleClosed){clearInterval(poll);}
+if(windowTest(getConsoleWindow())){clearInterval(poll);successCallback();}}catch(ex){clearInterval(poll);isSupported=false;handleError(errorMessage,ex);}}
+var poll=setInterval(doPoll,interval);};var getConsoleUrl=function(){var documentDomainSet=(document.domain!=location.hostname);return useDocumentWrite?"":getBaseUrl()+"console.html"+
+(documentDomainSet?"?log4javascript_domain="+escape(document.domain):"");};if(inPage){var containerElement=null;var cssProperties=[];this.addCssProperty=function(name,value){if(checkCanConfigure("cssProperties")){cssProperties.push([name,value]);}};var windowCreationStarted=false;var iframeContainerDiv;var iframeId=uniqueId+"_InPageAppender_"+consoleAppenderId;this.hide=function(){if(initialized&&consoleWindowCreated){if(consoleWindowExists()){getConsoleWindow().$("command").blur();}
+iframeContainerDiv.style.display="none";minimized=true;}};this.show=function(){if(initialized){if(consoleWindowCreated){iframeContainerDiv.style.display="block";this.setShowCommandLine(showCommandLine);minimized=false;}else if(!windowCreationStarted){createWindow(true);}}};this.isVisible=function(){return!minimized&&!consoleClosed;};this.close=function(fromButton){if(!consoleClosed&&(!fromButton||confirm("This will permanently remove the console from the page. No more messages will be logged. Do you wish to continue?"))){iframeContainerDiv.parentNode.removeChild(iframeContainerDiv);this.unload();}};open=function(){var initErrorMessage="InPageAppender.open: unable to create console iframe";function finalInit(){try{if(!initiallyMinimized){appender.show();}
+consoleWindowLoadHandler();consoleWindowLoaded=true;appendQueuedLoggingEvents();}catch(ex){isSupported=false;handleError(initErrorMessage,ex);}}
+function writeToDocument(){try{var windowTest=function(win){return isLoaded(win);};if(useDocumentWrite){writeHtml(getConsoleWindow().document);}
+if(windowTest(getConsoleWindow())){finalInit();}else{pollConsoleWindow(windowTest,100,finalInit,initErrorMessage);}}catch(ex){isSupported=false;handleError(initErrorMessage,ex);}}
+minimized=false;iframeContainerDiv=containerElement.appendChild(document.createElement("div"));iframeContainerDiv.style.width=width;iframeContainerDiv.style.height=height;iframeContainerDiv.style.border="solid gray 1px";for(var i=0,len=cssProperties.length;i<len;i++){iframeContainerDiv.style[cssProperties[i][0]]=cssProperties[i][1];}
+var iframeSrc=useDocumentWrite?"":" src='"+getConsoleUrl()+"'";iframeContainerDiv.innerHTML="<iframe id='"+iframeId+"' name='"+iframeId+"' width='100%' height='100%' frameborder='0'"+iframeSrc+" scrolling='no'></iframe>";consoleClosed=false;var iframeDocumentExistsTest=function(win){try{return bool(win)&&bool(win.document);}catch(ex){return false;}};if(iframeDocumentExistsTest(getConsoleWindow())){writeToDocument();}else{pollConsoleWindow(iframeDocumentExistsTest,100,writeToDocument,initErrorMessage);}
+consoleWindowCreated=true;};createWindow=function(show){if(show||!initiallyMinimized){var pageLoadHandler=function(){if(!container){containerElement=document.createElement("div");containerElement.style.position="fixed";containerElement.style.left="0";containerElement.style.right="0";containerElement.style.bottom="0";document.body.appendChild(containerElement);appender.addCssProperty("borderWidth","1px 0 0 0");appender.addCssProperty("zIndex",1000000);open();}else{try{var el=document.getElementById(container);if(el.nodeType==1){containerElement=el;}
+open();}catch(ex){handleError("InPageAppender.init: invalid container element '"+container+"' supplied",ex);}}};if(pageLoaded&&container&&container.appendChild){containerElement=container;open();}else if(pageLoaded){pageLoadHandler();}else{log4javascript.addEventListener("load",pageLoadHandler);}
+windowCreationStarted=true;}};init=function(){createWindow();initialized=true;};getConsoleWindow=function(){var iframe=window.frames[iframeId];if(iframe){return iframe;}};safeToAppend=function(){if(isSupported&&!consoleClosed){if(consoleWindowCreated&&!consoleWindowLoaded&&getConsoleWindow()&&isLoaded(getConsoleWindow())){consoleWindowLoaded=true;}
+return consoleWindowLoaded;}
+return false;};}else{var useOldPopUp=appender.defaults.useOldPopUp;var complainAboutPopUpBlocking=appender.defaults.complainAboutPopUpBlocking;var reopenWhenClosed=this.defaults.reopenWhenClosed;this.isUseOldPopUp=function(){return useOldPopUp;};this.setUseOldPopUp=function(useOldPopUpParam){if(checkCanConfigure("useOldPopUp")){useOldPopUp=bool(useOldPopUpParam);}};this.isComplainAboutPopUpBlocking=function(){return complainAboutPopUpBlocking;};this.setComplainAboutPopUpBlocking=function(complainAboutPopUpBlockingParam){if(checkCanConfigure("complainAboutPopUpBlocking")){complainAboutPopUpBlocking=bool(complainAboutPopUpBlockingParam);}};this.isFocusPopUp=function(){return focusConsoleWindow;};this.setFocusPopUp=function(focusPopUpParam){focusConsoleWindow=bool(focusPopUpParam);};this.isReopenWhenClosed=function(){return reopenWhenClosed;};this.setReopenWhenClosed=function(reopenWhenClosedParam){reopenWhenClosed=bool(reopenWhenClosedParam);};this.close=function(){logLog.debug("close "+this);try{popUp.close();this.unload();}catch(ex){}};this.hide=function(){logLog.debug("hide "+this);if(consoleWindowExists()){this.close();}};this.show=function(){logLog.debug("show "+this);if(!consoleWindowCreated){open();}};this.isVisible=function(){return safeToAppend();};var popUp;open=function(){var windowProperties="width="+width+",height="+height+",status,resizable";var frameInfo="";try{var frameEl=window.frameElement;if(frameEl){frameInfo="_"+frameEl.tagName+"_"+(frameEl.name||frameEl.id||"");}}catch(e){frameInfo="_inaccessibleParentFrame";}
+var windowName="PopUp_"+location.host.replace(/[^a-z0-9]/gi,"_")+"_"+consoleAppenderId+frameInfo;if(!useOldPopUp||!useDocumentWrite){windowName=windowName+"_"+uniqueId;}
+var checkPopUpClosed=function(win){if(consoleClosed){return true;}else{try{return bool(win)&&win.closed;}catch(ex){}}
+return false;};var popUpClosedCallback=function(){if(!consoleClosed){appender.unload();}};function finalInit(){getConsoleWindow().setCloseIfOpenerCloses(!useOldPopUp||!useDocumentWrite);consoleWindowLoadHandler();consoleWindowLoaded=true;appendQueuedLoggingEvents();pollConsoleWindow(checkPopUpClosed,500,popUpClosedCallback,"PopUpAppender.checkPopUpClosed: error checking pop-up window");}
+try{popUp=window.open(getConsoleUrl(),windowName,windowProperties);consoleClosed=false;consoleWindowCreated=true;if(popUp&&popUp.document){if(useDocumentWrite&&useOldPopUp&&isLoaded(popUp)){popUp.mainPageReloaded();finalInit();}else{if(useDocumentWrite){writeHtml(popUp.document);}
+var popUpLoadedTest=function(win){return bool(win)&&isLoaded(win);};if(isLoaded(popUp)){finalInit();}else{pollConsoleWindow(popUpLoadedTest,100,finalInit,"PopUpAppender.init: unable to create console window");}}}else{isSupported=false;logLog.warn("PopUpAppender.init: pop-ups blocked, please unblock to use PopUpAppender");if(complainAboutPopUpBlocking){handleError("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");}}}catch(ex){handleError("PopUpAppender.init: error creating pop-up",ex);}};createWindow=function(){if(!initiallyMinimized){open();}};init=function(){createWindow();initialized=true;};getConsoleWindow=function(){return popUp;};safeToAppend=function(){if(isSupported&&!isUndefined(popUp)&&!consoleClosed){if(popUp.closed||(consoleWindowLoaded&&isUndefined(popUp.closed))){appender.unload();logLog.debug("PopUpAppender: pop-up closed");return false;}
+if(!consoleWindowLoaded&&isLoaded(popUp)){consoleWindowLoaded=true;}}
+return isSupported&&consoleWindowLoaded&&!consoleClosed;};}
+this.getConsoleWindow=getConsoleWindow;};ConsoleAppender.addGlobalCommandLineFunction=function(functionName,commandLineFunction){defaultCommandLineFunctions.push([functionName,commandLineFunction]);};function PopUpAppender(lazyInit,initiallyMinimized,useDocumentWrite,width,height){this.create(false,null,lazyInit,initiallyMinimized,useDocumentWrite,width,height,this.defaults.focusPopUp);}
+PopUpAppender.prototype=new ConsoleAppender();PopUpAppender.prototype.defaults={layout:new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),initiallyMinimized:false,focusPopUp:false,lazyInit:true,useOldPopUp:true,complainAboutPopUpBlocking:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:"600",height:"400",reopenWhenClosed:false,maxMessages:null,showCommandLine:true,commandLineObjectExpansionDepth:1,showHideButton:false,showCloseButton:true,showLogEntryDeleteButtons:true,useDocumentWrite:true};PopUpAppender.prototype.toString=function(){return"PopUpAppender";};log4javascript.PopUpAppender=PopUpAppender;function InPageAppender(container,lazyInit,initiallyMinimized,useDocumentWrite,width,height){this.create(true,container,lazyInit,initiallyMinimized,useDocumentWrite,width,height,false);}
+InPageAppender.prototype=new ConsoleAppender();InPageAppender.prototype.defaults={layout:new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),initiallyMinimized:false,lazyInit:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:"100%",height:"220px",maxMessages:null,showCommandLine:true,commandLineObjectExpansionDepth:1,showHideButton:false,showCloseButton:false,showLogEntryDeleteButtons:true,useDocumentWrite:true};InPageAppender.prototype.toString=function(){return"InPageAppender";};log4javascript.InPageAppender=InPageAppender;log4javascript.InlineAppender=InPageAppender;})();function padWithSpaces(str,len){if(str.length<len){var spaces=[];var numberOfSpaces=Math.max(0,len-str.length);for(var i=0;i<numberOfSpaces;i++){spaces[i]=" ";}
+str+=spaces.join("");}
+return str;}
+(function(){function dir(obj){var maxLen=0;for(var p in obj){maxLen=Math.max(toStr(p).length,maxLen);}
+var propList=[];for(p in obj){var propNameStr=" "+padWithSpaces(toStr(p),maxLen+2);var propVal;try{propVal=splitIntoLines(toStr(obj[p])).join(padWithSpaces(newLine,maxLen+6));}catch(ex){propVal="[Error obtaining property. Details: "+getExceptionMessage(ex)+"]";}
+propList.push(propNameStr+propVal);}
+return propList.join(newLine);}
+var nodeTypes={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12};var preFormattedElements=["script","pre"];var emptyElements=["br","img","hr","param","link","area","input","col","base","meta"];var indentationUnit=" ";function getXhtml(rootNode,includeRootNode,indentation,startNewLine,preformatted){includeRootNode=(typeof includeRootNode=="undefined")?true:!!includeRootNode;if(typeof indentation!="string"){indentation="";}
+startNewLine=!!startNewLine;preformatted=!!preformatted;var xhtml;function isWhitespace(node){return((node.nodeType==nodeTypes.TEXT_NODE)&&/^[ \t\r\n]*$/.test(node.nodeValue));}
+function fixAttributeValue(attrValue){return attrValue.toString().replace(/&/g,"&").replace(/</g,"<").replace(/"/g,""");}
+function getStyleAttributeValue(el){var stylePairs=el.style.cssText.split(";");var styleValue="";var isFirst=true;for(var j=0,len=stylePairs.length;j<len;j++){var nameValueBits=stylePairs[j].split(":");var props=[];if(!/^\s*$/.test(nameValueBits[0])){props.push(trim(nameValueBits[0]).toLowerCase()+":"+trim(nameValueBits[1]));}
+styleValue=props.join(";");}
+return styleValue;}
+function getNamespace(el){if(el.prefix){return el.prefix;}else if(el.outerHTML){var regex=new RegExp("<([^:]+):"+el.tagName+"[^>]*>","i");if(regex.test(el.outerHTML)){return RegExp.$1.toLowerCase();}}
+return"";}
+var lt="<";var gt=">";if(includeRootNode&&rootNode.nodeType!=nodeTypes.DOCUMENT_FRAGMENT_NODE){switch(rootNode.nodeType){case nodeTypes.ELEMENT_NODE:var tagName=rootNode.tagName.toLowerCase();xhtml=startNewLine?newLine+indentation:"";xhtml+=lt;var prefix=getNamespace(rootNode);var hasPrefix=!!prefix;if(hasPrefix){xhtml+=prefix+":";}
+xhtml+=tagName;for(i=0,len=rootNode.attributes.length;i<len;i++){var currentAttr=rootNode.attributes[i];if(!currentAttr.specified||currentAttr.nodeValue===null||currentAttr.nodeName.toLowerCase()==="style"||typeof currentAttr.nodeValue!=="string"||currentAttr.nodeName.indexOf("_moz")===0){continue;}
+xhtml+=" "+currentAttr.nodeName.toLowerCase()+"=\"";xhtml+=fixAttributeValue(currentAttr.nodeValue);xhtml+="\"";}
+if(rootNode.style.cssText){var styleValue=getStyleAttributeValue(rootNode);if(styleValue!==""){xhtml+=" style=\""+getStyleAttributeValue(rootNode)+"\"";}}
+if(array_contains(emptyElements,tagName)||(hasPrefix&&!rootNode.hasChildNodes())){xhtml+="/"+gt;}else{xhtml+=gt;var childStartNewLine=!(rootNode.childNodes.length===1&&rootNode.childNodes[0].nodeType===nodeTypes.TEXT_NODE);var childPreformatted=array_contains(preFormattedElements,tagName);for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation+indentationUnit,childStartNewLine,childPreformatted);}
+var endTag=lt+"/"+tagName+gt;xhtml+=childStartNewLine?newLine+indentation+endTag:endTag;}
+return xhtml;case nodeTypes.TEXT_NODE:if(isWhitespace(rootNode)){xhtml="";}else{if(preformatted){xhtml=rootNode.nodeValue;}else{var lines=splitIntoLines(trim(rootNode.nodeValue));var trimmedLines=[];for(var i=0,len=lines.length;i<len;i++){trimmedLines[i]=trim(lines[i]);}
+xhtml=trimmedLines.join(newLine+indentation);}
+if(startNewLine){xhtml=newLine+indentation+xhtml;}}
+return xhtml;case nodeTypes.CDATA_SECTION_NODE:return"<![CDA"+"TA["+rootNode.nodeValue+"]"+"]>"+newLine;case nodeTypes.DOCUMENT_NODE:xhtml="";for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation);}
+return xhtml;default:return"";}}else{xhtml="";for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation+indentationUnit);}
+return xhtml;}}
+function createCommandLineFunctions(){ConsoleAppender.addGlobalCommandLineFunction("$",function(appender,args,returnValue){return document.getElementById(args[0]);});ConsoleAppender.addGlobalCommandLineFunction("dir",function(appender,args,returnValue){var lines=[];for(var i=0,len=args.length;i<len;i++){lines[i]=dir(args[i]);}
+return lines.join(newLine+newLine);});ConsoleAppender.addGlobalCommandLineFunction("dirxml",function(appender,args,returnValue){var lines=[];for(var i=0,len=args.length;i<len;i++){var win=appender.getCommandWindow();lines[i]=getXhtml(args[i]);}
+return lines.join(newLine+newLine);});ConsoleAppender.addGlobalCommandLineFunction("cd",function(appender,args,returnValue){var win,message;if(args.length===0||args[0]===""){win=window;message="Command line set to run in main window";}else{if(args[0].window==args[0]){win=args[0];message="Command line set to run in frame '"+args[0].name+"'";}else{win=window.frames[args[0]];if(win){message="Command line set to run in frame '"+args[0]+"'";}else{returnValue.isError=true;message="Frame '"+args[0]+"' does not exist";win=appender.getCommandWindow();}}}
+appender.setCommandWindow(win);return message;});ConsoleAppender.addGlobalCommandLineFunction("clear",function(appender,args,returnValue){returnValue.appendResult=false;appender.clear();});ConsoleAppender.addGlobalCommandLineFunction("keys",function(appender,args,returnValue){var keys=[];for(var k in args[0]){keys.push(k);}
+return keys;});ConsoleAppender.addGlobalCommandLineFunction("values",function(appender,args,returnValue){var values=[];for(var k in args[0]){try{values.push(args[0][k]);}catch(ex){logLog.warn("values(): Unable to obtain value for key "+k+". Details: "+getExceptionMessage(ex));}}
+return values;});ConsoleAppender.addGlobalCommandLineFunction("expansionDepth",function(appender,args,returnValue){var expansionDepth=parseInt(args[0],10);if(isNaN(expansionDepth)||expansionDepth<0){returnValue.isError=true;return""+args[0]+" is not a valid expansion depth";}else{appender.setCommandLineObjectExpansionDepth(expansionDepth);return"Object expansion depth set to "+expansionDepth;}});}
+function init(){createCommandLineFunctions();}
+init();})();log4javascript.setDocumentReady=function(){pageLoaded=true;log4javascript.dispatchEvent("load",{});};if(window.addEventListener){window.addEventListener("load",log4javascript.setDocumentReady,false);}else if(window.attachEvent){window.attachEvent("onload",log4javascript.setDocumentReady);}else{var oldOnload=window.onload;if(typeof window.onload!="function"){window.onload=log4javascript.setDocumentReady;}else{window.onload=function(evt){if(oldOnload){oldOnload(evt);}
+log4javascript.setDocumentReady();};}}
+window.log4javascript=log4javascript;return log4javascript;})();
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_lite.js b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_lite.js
new file mode 100644
index 0000000..b04ce8e
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_lite.js
@@ -0,0 +1,55 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+
+if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}
+this.length--;return firstItem;}};}
+var log4javascript;(function(){var newLine="\r\n";function Log4JavaScript(){}
+log4javascript=new Log4JavaScript();log4javascript.version="1.4.6";log4javascript.edition="log4javascript_lite";function getExceptionMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}else{return String(ex);}}
+function getUrlFileName(url){var lastSlashIndex=Math.max(url.lastIndexOf("/"),url.lastIndexOf("\\"));return url.substr(lastSlashIndex+1);}
+function getExceptionStringRep(ex){if(ex){var exStr="Exception: "+getExceptionMessage(ex);try{if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber;}
+if(ex.fileName){exStr+=" in file "+getUrlFileName(ex.fileName);}}catch(localEx){}
+if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack;}
+return exStr;}
+return null;}
+function isError(err){return(err instanceof Error);}
+function bool(obj){return Boolean(obj);}
+var enabled=(typeof log4javascript_disabled!="undefined")&&log4javascript_disabled?false:true;log4javascript.setEnabled=function(enable){enabled=bool(enable);};log4javascript.isEnabled=function(){return enabled;};var showStackTraces=false;log4javascript.setShowStackTraces=function(show){showStackTraces=bool(show);};var Level=function(level,name){this.level=level;this.name=name;};Level.prototype={toString:function(){return this.name;},equals:function(level){return this.level==level.level;},isGreaterOrEqual:function(level){return this.level>=level.level;}};Level.ALL=new Level(Number.MIN_VALUE,"ALL");Level.TRACE=new Level(10000,"TRACE");Level.DEBUG=new Level(20000,"DEBUG");Level.INFO=new Level(30000,"INFO");Level.WARN=new Level(40000,"WARN");Level.ERROR=new Level(50000,"ERROR");Level.FATAL=new Level(60000,"FATAL");Level.OFF=new Level(Number.MAX_VALUE,"OFF");log4javascript.Level=Level;function Appender(){var getConsoleHtmlLines=function(){return['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">','<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">','<head>','<title>log4javascript</title>','<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />','<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->','<meta http-equiv="X-UA-Compatible" content="IE=7" />','<script type="text/javascript">','//<![CDATA[','var loggingEnabled=true;var messagesBeforeDocLoaded=[];function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}','function setLoggingEnabled(enable){loggingEnabled=enable;}','function scrollToLatestEntry(){var l=getLogContainer();if(typeof l.scrollTop!="undefined"){var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}','function log(logLevel,formattedMessage){if(loggingEnabled){if(loaded){doLog(logLevel,formattedMessage);}else{messagesBeforeDocLoaded.push([logLevel,formattedMessage]);}}}','function doLog(logLevel,formattedMessage){var logEntry=document.createElement("div");logEntry.appendChild(document.createTextNode(formattedMessage));logEntry.className="logentry "+logLevel.name;getLogContainer().appendChild(logEntry);scrollToLatestEntry();}','function mainPageReloaded(){var separator=document.createElement("div");separator.className="separator";separator.innerHTML=" ";getLogContainer().appendChild(separator);}','var loaded=false;var logLevels=["DEBUG","INFO","WARN","ERROR","FATAL"];window.onload=function(){setLogContainerHeight();toggleLoggingEnabled();for(var i=0;i<messagesBeforeDocLoaded.length;i++){doLog(messagesBeforeDocLoaded[i][0],messagesBeforeDocLoaded[i][1]);}','messagesBeforeDocLoaded=[];loaded=true;setTimeout(setLogContainerHeight,20);};function getLogContainer(){return $("log");}','function clearLog(){getLogContainer().innerHTML="";}','function $(id){return document.getElementById(id);}','function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}','return 0;}','function getChromeHeight(){return $("toolbar").offsetHeight;}','function setLogContainerHeight(){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";getLogContainer().style.height=""+','Math.max(0,windowHeight-getChromeHeight())+"px";}','window.onresize=function(){setLogContainerHeight();};','//]]>','</script>','<style type="text/css">','body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div#toolbar input.button{padding:0 5px;font-size:100%}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both}*.logentry{overflow:visible;white-space:pre}*.TRACE{color:#666666}*.DEBUG{color:green}*.INFO{color:#000099}*.WARN{color:#999900}*.ERROR{color:red}*.FATAL{color:#660066}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}','</style>','</head>','<body id="body">','<div id="toolbar">','Options:','<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" class="stateful" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Enable logging</label>','<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="stateful button" title="Clear all log messages" />','<input type="button" id="closeButton" value="Close" onclick="window.close()" class="stateful button" title="Close the window" />','</div>','<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>','</body>','</html>'];};var popUp=null;var popUpsBlocked=false;var popUpClosed=false;var popUpLoaded=false;var complainAboutPopUpBlocking=true;var initialized=false;var isSupported=true;var width=600;var height=400;var focusPopUp=false;var queuedLoggingEvents=new Array();function isLoaded(win){try{return bool(win.loaded);}catch(ex){return false;}}
+function finalInit(){popUpLoaded=true;appendQueuedLoggingEvents();}
+function writeHtml(doc){var lines=getConsoleHtmlLines();doc.open();for(var i=0,len=lines.length;i<len;i++){doc.writeln(lines[i]);}
+doc.close();}
+function pollConsoleWindow(){function pollConsoleWindowLoaded(){if(popUpLoaded){clearInterval(poll);}else if(bool(popUp)&&isLoaded(popUp)){clearInterval(poll);finalInit();}}
+var poll=setInterval(pollConsoleWindowLoaded,100);}
+function init(){var windowProperties="width="+width+",height="+height+",status,resizable";var windowName="log4javascriptLitePopUp"+location.host.replace(/[^a-z0-9]/gi,"_");popUp=window.open("",windowName,windowProperties);popUpClosed=false;if(popUp){if(isLoaded(popUp)){popUp.mainPageReloaded();finalInit();}else{writeHtml(popUp.document);if(isLoaded(popUp)){finalInit();}else{pollConsoleWindow();}}}else{isSupported=false;if(complainAboutPopUpBlocking){alert("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");}}
+initialized=true;}
+function safeToAppend(){if(!popUpsBlocked&&!popUpClosed){if(popUp.closed){popUpClosed=true;return false;}
+if(!popUpLoaded&&popUp.loaded){popUpLoaded=true;}}
+return!popUpsBlocked&&popUpLoaded&&!popUpClosed;}
+function padWithZeroes(num,len){var str=""+num;while(str.length<len){str="0"+str;}
+return str;}
+function padWithSpaces(str,len){while(str.length<len){str+=" ";}
+return str;}
+this.append=function(loggingEvent){if(!initialized){init();}
+queuedLoggingEvents.push(loggingEvent);if(safeToAppend()){appendQueuedLoggingEvents();}};function appendQueuedLoggingEvents(){if(safeToAppend()){while(queuedLoggingEvents.length>0){var currentLoggingEvent=queuedLoggingEvents.shift();var date=currentLoggingEvent.timeStamp;var formattedDate=padWithZeroes(date.getHours(),2)+":"+
+padWithZeroes(date.getMinutes(),2)+":"+padWithZeroes(date.getSeconds(),2);var formattedMessage=formattedDate+" "+padWithSpaces(currentLoggingEvent.level.name,5)+" - "+currentLoggingEvent.getCombinedMessages();var throwableStringRep=currentLoggingEvent.getThrowableStrRep();if(throwableStringRep){formattedMessage+=newLine+throwableStringRep;}
+popUp.log(currentLoggingEvent.level,formattedMessage);}
+if(focusPopUp){popUp.focus();}}}}
+log4javascript.Appender=Appender;function Logger(){var appender=new Appender();var loggerLevel=Level.ALL;this.log=function(level,params){if(enabled&&level.isGreaterOrEqual(this.getLevel())){var exception;var finalParamIndex=params.length-1;var lastParam=params[params.length-1];if(params.length>1&&isError(lastParam)){exception=lastParam;finalParamIndex--;}
+var messages=[];for(var i=0;i<=finalParamIndex;i++){messages[i]=params[i];}
+var loggingEvent=new LoggingEvent(this,new Date(),level,messages,exception);appender.append(loggingEvent);}};this.setLevel=function(level){loggerLevel=level;};this.getLevel=function(){return loggerLevel;};}
+Logger.prototype={trace:function(){this.log(Level.TRACE,arguments);},debug:function(){this.log(Level.DEBUG,arguments);},info:function(){this.log(Level.INFO,arguments);},warn:function(){this.log(Level.WARN,arguments);},error:function(){this.log(Level.ERROR,arguments);},fatal:function(){this.log(Level.FATAL,arguments);},isEnabledFor:function(level){return level.isGreaterOrEqual(this.getLevel());},isTraceEnabled:function(){return this.isEnabledFor(Level.TRACE);},isDebugEnabled:function(){return this.isEnabledFor(Level.DEBUG);},isInfoEnabled:function(){return this.isEnabledFor(Level.INFO);},isWarnEnabled:function(){return this.isEnabledFor(Level.WARN);},isErrorEnabled:function(){return this.isEnabledFor(Level.ERROR);},isFatalEnabled:function(){return this.isEnabledFor(Level.FATAL);}};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=new Logger();}
+return defaultLogger;};log4javascript.getLogger=log4javascript.getDefaultLogger;var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=new Logger();nullLogger.setLevel(Level.OFF);}
+return nullLogger;};var LoggingEvent=function(logger,timeStamp,level,messages,exception){this.logger=logger;this.timeStamp=timeStamp;this.level=level;this.messages=messages;this.exception=exception;};LoggingEvent.prototype={getThrowableStrRep:function(){return this.exception?getExceptionStringRep(this.exception):"";},getCombinedMessages:function(){return(this.messages.length===1)?this.messages[0]:this.messages.join(newLine);}};log4javascript.LoggingEvent=LoggingEvent;window.log4javascript=log4javascript;})();
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_lite_uncompressed.js b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_lite_uncompressed.js
new file mode 100644
index 0000000..12e97d8
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_lite_uncompressed.js
@@ -0,0 +1,620 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+if (!Array.prototype.shift) {
+ Array.prototype.shift = function() {
+ if (this.length > 0) {
+ var firstItem = this[0];
+ for (var i = 0, len = this.length - 1; i < len; i++) {
+ this[i] = this[i + 1];
+ }
+ this.length--;
+ return firstItem;
+ }
+ };
+}
+
+var log4javascript;
+
+(function() {
+ var newLine = "\r\n";
+ function Log4JavaScript() {}
+ log4javascript = new Log4JavaScript();
+ log4javascript.version = "1.4.6";
+ log4javascript.edition = "log4javascript_lite";
+
+ function getExceptionMessage(ex) {
+ if (ex.message) {
+ return ex.message;
+ } else if (ex.description) {
+ return ex.description;
+ } else {
+ return String(ex);
+ }
+ }
+
+ // Gets the portion of the URL after the last slash
+ function getUrlFileName(url) {
+ var lastSlashIndex = Math.max(url.lastIndexOf("/"), url.lastIndexOf("\\"));
+ return url.substr(lastSlashIndex + 1);
+ }
+
+ // Returns a nicely formatted representation of an error
+ function getExceptionStringRep(ex) {
+ if (ex) {
+ var exStr = "Exception: " + getExceptionMessage(ex);
+ try {
+ if (ex.lineNumber) {
+ exStr += " on line number " + ex.lineNumber;
+ }
+ if (ex.fileName) {
+ exStr += " in file " + getUrlFileName(ex.fileName);
+ }
+ } catch (localEx) {
+ }
+ if (showStackTraces && ex.stack) {
+ exStr += newLine + "Stack trace:" + newLine + ex.stack;
+ }
+ return exStr;
+ }
+ return null;
+ }
+
+ function isError(err) {
+ return (err instanceof Error);
+ }
+
+ function bool(obj) {
+ return Boolean(obj);
+ }
+
+ var enabled = (typeof log4javascript_disabled != "undefined") &&
+ log4javascript_disabled ? false : true;
+
+ log4javascript.setEnabled = function(enable) {
+ enabled = bool(enable);
+ };
+
+ log4javascript.isEnabled = function() {
+ return enabled;
+ };
+
+ var showStackTraces = false;
+
+ log4javascript.setShowStackTraces = function(show) {
+ showStackTraces = bool(show);
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Levels
+
+ var Level = function(level, name) {
+ this.level = level;
+ this.name = name;
+ };
+
+ Level.prototype = {
+ toString: function() {
+ return this.name;
+ },
+ equals: function(level) {
+ return this.level == level.level;
+ },
+ isGreaterOrEqual: function(level) {
+ return this.level >= level.level;
+ }
+ };
+
+ Level.ALL = new Level(Number.MIN_VALUE, "ALL");
+ Level.TRACE = new Level(10000, "TRACE");
+ Level.DEBUG = new Level(20000, "DEBUG");
+ Level.INFO = new Level(30000, "INFO");
+ Level.WARN = new Level(40000, "WARN");
+ Level.ERROR = new Level(50000, "ERROR");
+ Level.FATAL = new Level(60000, "FATAL");
+ Level.OFF = new Level(Number.MAX_VALUE, "OFF");
+
+ log4javascript.Level = Level;
+
+ /* ---------------------------------------------------------------------- */
+ // Appenders
+
+ function Appender() {
+ var getConsoleHtmlLines = function() {
+ return [
+'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
+'<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">',
+' <head>',
+' <title>log4javascript</title>',
+' <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />',
+' <!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->',
+' <meta http-equiv="X-UA-Compatible" content="IE=7" />',
+' <script type="text/javascript">',
+' //<![CDATA[',
+' var loggingEnabled = true;',
+' var messagesBeforeDocLoaded = [];',
+'',
+' function toggleLoggingEnabled() {',
+' setLoggingEnabled($("enableLogging").checked);',
+' }',
+'',
+' function setLoggingEnabled(enable) {',
+' loggingEnabled = enable;',
+' }',
+'',
+' function scrollToLatestEntry() {',
+' var l = getLogContainer();',
+' if (typeof l.scrollTop != "undefined") {',
+' var latestLogEntry = l.lastChild;',
+' if (latestLogEntry) {',
+' l.scrollTop = l.scrollHeight;',
+' }',
+' }',
+' }',
+'',
+' function log(logLevel, formattedMessage) {',
+' if (loggingEnabled) {',
+' if (loaded) {',
+' doLog(logLevel, formattedMessage);',
+' } else {',
+' messagesBeforeDocLoaded.push([logLevel, formattedMessage]);',
+' }',
+' }',
+' }',
+'',
+' function doLog(logLevel, formattedMessage) {',
+' var logEntry = document.createElement("div");',
+' logEntry.appendChild(document.createTextNode(formattedMessage));',
+' logEntry.className = "logentry " + logLevel.name;',
+' getLogContainer().appendChild(logEntry);',
+' scrollToLatestEntry();',
+' }',
+'',
+' function mainPageReloaded() {',
+' var separator = document.createElement("div");',
+' separator.className = "separator";',
+' separator.innerHTML = " ";',
+' getLogContainer().appendChild(separator);',
+' }',
+'',
+' var loaded = false;',
+' var logLevels = ["DEBUG", "INFO", "WARN", "ERROR", "FATAL"];',
+'',
+' window.onload = function() {',
+' setLogContainerHeight();',
+' toggleLoggingEnabled();',
+' for (var i = 0; i < messagesBeforeDocLoaded.length; i++) {',
+' doLog(messagesBeforeDocLoaded[i][0], messagesBeforeDocLoaded[i][1]);',
+' }',
+' messagesBeforeDocLoaded = [];',
+' loaded = true;',
+'',
+' // Workaround to make sure log div starts at the correct size',
+' setTimeout(setLogContainerHeight, 20);',
+' };',
+'',
+' function getLogContainer() {',
+' return $("log");',
+' }',
+'',
+' function clearLog() {',
+' getLogContainer().innerHTML = "";',
+' }',
+'',
+' /* ------------------------------------------------------------------------- */',
+'',
+' // Other utility functions',
+'',
+' // Syntax borrowed from Prototype library',
+' function $(id) {',
+' return document.getElementById(id);',
+' }',
+'',
+' function getWindowHeight() {',
+' if (window.innerHeight) {',
+' return window.innerHeight;',
+' } else if (document.documentElement && document.documentElement.clientHeight) {',
+' return document.documentElement.clientHeight;',
+' } else if (document.body) {',
+' return document.body.clientHeight;',
+' }',
+' return 0;',
+' }',
+'',
+' function getChromeHeight() {',
+' return $("toolbar").offsetHeight;',
+' }',
+'',
+' function setLogContainerHeight() {',
+' var windowHeight = getWindowHeight();',
+' $("body").style.height = getWindowHeight() + "px";',
+' getLogContainer().style.height = "" +',
+' Math.max(0, windowHeight - getChromeHeight()) + "px";',
+' }',
+'',
+' window.onresize = function() {',
+' setLogContainerHeight();',
+' };',
+'',
+' //]]>',
+' </script>',
+' <style type="text/css">',
+' body {',
+' background-color: white;',
+' color: black;',
+' padding: 0;',
+' margin: 0;',
+' font-family: tahoma, verdana, arial, helvetica, sans-serif;',
+' overflow: hidden;',
+' }',
+' ',
+' div#toolbar {',
+' border-top: solid #ffffff 1px;',
+' border-bottom: solid #aca899 1px;',
+' background-color: #f1efe7;',
+' padding: 3px 5px;',
+' font-size: 68.75%;',
+' }',
+'',
+' div#toolbar input.button {',
+' padding: 0 5px;',
+' font-size: 100%;',
+' }',
+'',
+' div#log {',
+' font-family: Courier New, Courier;',
+' font-size: 75%;',
+' width: 100%;',
+' overflow: auto;',
+' clear: both;',
+' }',
+'',
+' *.logentry {',
+' overflow: visible;',
+' white-space: pre;',
+' }',
+'',
+' *.TRACE {',
+' color: #666666;',
+' }',
+'',
+' *.DEBUG {',
+' color: green;',
+' }',
+'',
+' *.INFO {',
+' color: #000099;',
+' }',
+'',
+' *.WARN {',
+' color: #999900;',
+' }',
+'',
+' *.ERROR {',
+' color: red;',
+' }',
+'',
+' *.FATAL {',
+' color: #660066;',
+' }',
+'',
+' div#log div.separator {',
+' background-color: #cccccc;',
+' margin: 5px 0;',
+' line-height: 1px;',
+' }',
+' </style>',
+' </head>',
+'',
+' <body id="body">',
+' <div id="toolbar">',
+' Options:',
+' <input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" class="stateful" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Enable logging</label>',
+' <input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="stateful button" title="Clear all log messages" />',
+' <input type="button" id="closeButton" value="Close" onclick="window.close()" class="stateful button" title="Close the window" />',
+' </div>',
+' <div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>',
+' </body>',
+'</html>'
+];
+ };
+
+ var popUp = null;
+ var popUpsBlocked = false;
+ var popUpClosed = false;
+ var popUpLoaded = false;
+ var complainAboutPopUpBlocking = true;
+ var initialized = false;
+ var isSupported = true;
+ var width = 600;
+ var height = 400;
+ var focusPopUp = false;
+ var queuedLoggingEvents = new Array();
+
+ function isLoaded(win) {
+ try {
+ return bool(win.loaded);
+ } catch (ex) {
+ return false;
+ }
+ }
+
+ function finalInit() {
+ popUpLoaded = true;
+ appendQueuedLoggingEvents();
+ }
+
+ function writeHtml(doc) {
+ var lines = getConsoleHtmlLines();
+ doc.open();
+ for (var i = 0, len = lines.length; i < len; i++) {
+ doc.writeln(lines[i]);
+ }
+ doc.close();
+ }
+
+ function pollConsoleWindow() {
+ function pollConsoleWindowLoaded() {
+ if (popUpLoaded) {
+ clearInterval(poll);
+ } else if (bool(popUp) && isLoaded(popUp)) {
+ clearInterval(poll);
+ finalInit();
+ }
+ }
+
+ // Poll the pop-up since the onload event is not reliable
+ var poll = setInterval(pollConsoleWindowLoaded, 100);
+ }
+
+ function init() {
+ var windowProperties = "width=" + width + ",height=" + height + ",status,resizable";
+ var windowName = "log4javascriptLitePopUp" + location.host.replace(/[^a-z0-9]/gi, "_");
+
+ popUp = window.open("", windowName, windowProperties);
+ popUpClosed = false;
+ if (popUp) {
+ if (isLoaded(popUp)) {
+ popUp.mainPageReloaded();
+ finalInit();
+ } else {
+ writeHtml(popUp.document);
+
+ // Check if the pop-up window object is available
+ if (isLoaded(popUp)) {
+ finalInit();
+ } else {
+ pollConsoleWindow();
+ }
+ }
+ } else {
+ isSupported = false;
+ if (complainAboutPopUpBlocking) {
+ alert("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");
+ }
+ }
+ initialized = true;
+ }
+
+ function safeToAppend() {
+ if (!popUpsBlocked && !popUpClosed) {
+ if (popUp.closed) {
+ popUpClosed = true;
+ return false;
+ }
+ if (!popUpLoaded && popUp.loaded) {
+ popUpLoaded = true;
+ }
+ }
+ return !popUpsBlocked && popUpLoaded && !popUpClosed;
+ }
+
+ function padWithZeroes(num, len) {
+ var str = "" + num;
+ while (str.length < len) {
+ str = "0" + str;
+ }
+ return str;
+ }
+
+ function padWithSpaces(str, len) {
+ while (str.length < len) {
+ str += " ";
+ }
+ return str;
+ }
+
+ this.append = function(loggingEvent) {
+ if (!initialized) {
+ init();
+ }
+ queuedLoggingEvents.push(loggingEvent);
+ if (safeToAppend()) {
+ appendQueuedLoggingEvents();
+ }
+ };
+
+ function appendQueuedLoggingEvents() {
+ if (safeToAppend()) {
+ while (queuedLoggingEvents.length > 0) {
+ var currentLoggingEvent = queuedLoggingEvents.shift();
+ var date = currentLoggingEvent.timeStamp;
+ var formattedDate = padWithZeroes(date.getHours(), 2) + ":" +
+ padWithZeroes(date.getMinutes(), 2) + ":" + padWithZeroes(date.getSeconds(), 2);
+ var formattedMessage = formattedDate + " " + padWithSpaces(currentLoggingEvent.level.name, 5) +
+ " - " + currentLoggingEvent.getCombinedMessages();
+ var throwableStringRep = currentLoggingEvent.getThrowableStrRep();
+ if (throwableStringRep) {
+ formattedMessage += newLine + throwableStringRep;
+ }
+ popUp.log(currentLoggingEvent.level, formattedMessage);
+ }
+ if (focusPopUp) {
+ popUp.focus();
+ }
+ }
+ }
+ }
+
+ log4javascript.Appender = Appender;
+
+ /* ---------------------------------------------------------------------- */
+ // Loggers
+
+ function Logger() {
+ var appender = new Appender();
+ var loggerLevel = Level.ALL;
+
+ this.log = function(level, params) {
+ if (enabled && level.isGreaterOrEqual(this.getLevel())) {
+ // Check whether last param is an exception
+ var exception;
+ var finalParamIndex = params.length - 1;
+ var lastParam = params[params.length - 1];
+ if (params.length > 1 && isError(lastParam)) {
+ exception = lastParam;
+ finalParamIndex--;
+ }
+
+ // Construct genuine array for the params
+ var messages = [];
+ for (var i = 0; i <= finalParamIndex; i++) {
+ messages[i] = params[i];
+ }
+
+ var loggingEvent = new LoggingEvent(
+ this, new Date(), level, messages, exception);
+
+ appender.append(loggingEvent);
+ }
+ };
+
+ this.setLevel = function(level) {
+ loggerLevel = level;
+ };
+
+ this.getLevel = function() {
+ return loggerLevel;
+ };
+ }
+
+ Logger.prototype = {
+ trace: function() {
+ this.log(Level.TRACE, arguments);
+ },
+
+ debug: function() {
+ this.log(Level.DEBUG, arguments);
+ },
+
+ info: function() {
+ this.log(Level.INFO, arguments);
+ },
+
+ warn: function() {
+ this.log(Level.WARN, arguments);
+ },
+
+ error: function() {
+ this.log(Level.ERROR, arguments);
+ },
+
+ fatal: function() {
+ this.log(Level.FATAL, arguments);
+ },
+
+ isEnabledFor: function(level) {
+ return level.isGreaterOrEqual(this.getLevel());
+ },
+
+ isTraceEnabled: function() {
+ return this.isEnabledFor(Level.TRACE);
+ },
+
+ isDebugEnabled: function() {
+ return this.isEnabledFor(Level.DEBUG);
+ },
+
+ isInfoEnabled: function() {
+ return this.isEnabledFor(Level.INFO);
+ },
+
+ isWarnEnabled: function() {
+ return this.isEnabledFor(Level.WARN);
+ },
+
+ isErrorEnabled: function() {
+ return this.isEnabledFor(Level.ERROR);
+ },
+
+ isFatalEnabled: function() {
+ return this.isEnabledFor(Level.FATAL);
+ }
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Logger access methods
+
+ var defaultLogger = null;
+ log4javascript.getDefaultLogger = function() {
+ if (!defaultLogger) {
+ defaultLogger = new Logger();
+ }
+ return defaultLogger;
+ };
+
+ log4javascript.getLogger = log4javascript.getDefaultLogger;
+
+ var nullLogger = null;
+ log4javascript.getNullLogger = function() {
+ if (!nullLogger) {
+ nullLogger = new Logger();
+ nullLogger.setLevel(Level.OFF);
+ }
+ return nullLogger;
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Logging events
+
+ var LoggingEvent = function(logger, timeStamp, level, messages,
+ exception) {
+ this.logger = logger;
+ this.timeStamp = timeStamp;
+ this.level = level;
+ this.messages = messages;
+ this.exception = exception;
+ };
+
+ LoggingEvent.prototype = {
+ getThrowableStrRep: function() {
+ return this.exception ?
+ getExceptionStringRep(this.exception) : "";
+ },
+
+ getCombinedMessages: function() {
+ return (this.messages.length === 1) ? this.messages[0] :
+ this.messages.join(newLine);
+ }
+ };
+
+ log4javascript.LoggingEvent = LoggingEvent;
+
+ // Ensure that the log4javascript object is available in the window. This
+ // is necessary for log4javascript to be available in IE if loaded using
+ // Dojo's module system
+ window.log4javascript = log4javascript;
+})();
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_production.js b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_production.js
new file mode 100644
index 0000000..1a31299
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_production.js
@@ -0,0 +1,188 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+
+if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}
+return this.length;};}
+if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}
+this.length=this.length-1;return firstItem;}};}
+if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}
+var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}
+return itemsDeleted;};}
+var log4javascript=(function(){function isUndefined(obj){return typeof obj=="undefined";}
+function EventSupport(){}
+EventSupport.prototype={eventTypes:[],eventListeners:{},setEventTypes:function(eventTypesParam){if(eventTypesParam instanceof Array){this.eventTypes=eventTypesParam;this.eventListeners={};for(var i=0,len=this.eventTypes.length;i<len;i++){this.eventListeners[this.eventTypes[i]]=[];}}else{handleError("log4javascript.EventSupport ["+this+"]: setEventTypes: eventTypes parameter must be an Array");}},addEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: addEventListener: no event called '"+eventType+"'");}
+this.eventListeners[eventType].push(listener);}else{handleError("log4javascript.EventSupport ["+this+"]: addEventListener: listener must be a function");}},removeEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: no event called '"+eventType+"'");}
+array_remove(this.eventListeners[eventType],listener);}else{handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: listener must be a function");}},dispatchEvent:function(eventType,eventArgs){if(array_contains(this.eventTypes,eventType)){var listeners=this.eventListeners[eventType];for(var i=0,len=listeners.length;i<len;i++){listeners[i](this,eventType,eventArgs);}}else{handleError("log4javascript.EventSupport ["+this+"]: dispatchEvent: no event called '"+eventType+"'");}}};var applicationStartDate=new Date();var uniqueId="log4javascript_"+applicationStartDate.getTime()+"_"+
+Math.floor(Math.random()*100000000);var emptyFunction=function(){};var newLine="\r\n";var pageLoaded=false;function Log4JavaScript(){}
+Log4JavaScript.prototype=new EventSupport();log4javascript=new Log4JavaScript();log4javascript.version="1.4.6";log4javascript.edition="log4javascript_production";function toStr(obj){if(obj&&obj.toString){return obj.toString();}else{return String(obj);}}
+function getExceptionMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}else{return toStr(ex);}}
+function getUrlFileName(url){var lastSlashIndex=Math.max(url.lastIndexOf("/"),url.lastIndexOf("\\"));return url.substr(lastSlashIndex+1);}
+function getExceptionStringRep(ex){if(ex){var exStr="Exception: "+getExceptionMessage(ex);try{if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber;}
+if(ex.fileName){exStr+=" in file "+getUrlFileName(ex.fileName);}}catch(localEx){logLog.warn("Unable to obtain file and line information for error");}
+if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack;}
+return exStr;}
+return null;}
+function bool(obj){return Boolean(obj);}
+function trim(str){return str.replace(/^\s+/,"").replace(/\s+$/,"");}
+function splitIntoLines(text){var text2=text.replace(/\r\n/g,"\n").replace(/\r/g,"\n");return text2.split("\n");}
+var urlEncode=(typeof window.encodeURIComponent!="undefined")?function(str){return encodeURIComponent(str);}:function(str){return escape(str).replace(/\+/g,"%2B").replace(/"/g,"%22").replace(/'/g,"%27").replace(/\//g,"%2F").replace(/=/g,"%3D");};var urlDecode=(typeof window.decodeURIComponent!="undefined")?function(str){return decodeURIComponent(str);}:function(str){return unescape(str).replace(/%2B/g,"+").replace(/%22/g,"\"").replace(/%27/g,"'").replace(/%2F/g,"/").replace(/%3D/g,"=");};function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}
+if(index>=0){arr.splice(index,1);return true;}else{return false;}}
+function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}
+return false;}
+function extractBooleanFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return bool(param);}}
+function extractStringFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return String(param);}}
+function extractIntFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{try{var value=parseInt(param,10);return isNaN(value)?defaultValue:value;}catch(ex){logLog.warn("Invalid int param "+param,ex);return defaultValue;}}}
+function extractFunctionFromParam(param,defaultValue){if(typeof param=="function"){return param;}else{return defaultValue;}}
+function isError(err){return(err instanceof Error);}
+if(!Function.prototype.apply){Function.prototype.apply=function(obj,args){var methodName="__apply__";if(typeof obj[methodName]!="undefined"){methodName+=String(Math.random()).substr(2);}
+obj[methodName]=this;var argsStrings=[];for(var i=0,len=args.length;i<len;i++){argsStrings[i]="args["+i+"]";}
+var script="obj."+methodName+"("+argsStrings.join(",")+")";var returnValue=eval(script);delete obj[methodName];return returnValue;};}
+if(!Function.prototype.call){Function.prototype.call=function(obj){var args=[];for(var i=1,len=arguments.length;i<len;i++){args[i-1]=arguments[i];}
+return this.apply(obj,args);};}
+function getListenersPropertyName(eventName){return"__log4javascript_listeners__"+eventName;}
+function addEvent(node,eventName,listener,useCapture,win){win=win?win:window;if(node.addEventListener){node.addEventListener(eventName,listener,useCapture);}else if(node.attachEvent){node.attachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(!node[propertyName]){node[propertyName]=[];node["on"+eventName]=function(evt){evt=getEvent(evt,win);var listenersPropertyName=getListenersPropertyName(eventName);var listeners=this[listenersPropertyName].concat([]);var currentListener;while((currentListener=listeners.shift())){currentListener.call(this,evt);}};}
+node[propertyName].push(listener);}}
+function removeEvent(node,eventName,listener,useCapture){if(node.removeEventListener){node.removeEventListener(eventName,listener,useCapture);}else if(node.detachEvent){node.detachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(node[propertyName]){array_remove(node[propertyName],listener);}}}
+function getEvent(evt,win){win=win?win:window;return evt?evt:win.event;}
+function stopEventPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}
+evt.returnValue=false;}
+var logLog={quietMode:false,debugMessages:[],setQuietMode:function(quietMode){this.quietMode=bool(quietMode);},numberOfErrors:0,alertAllErrors:false,setAlertAllErrors:function(alertAllErrors){this.alertAllErrors=alertAllErrors;},debug:function(message){this.debugMessages.push(message);},displayDebug:function(){alert(this.debugMessages.join(newLine));},warn:function(message,exception){},error:function(message,exception){if(++this.numberOfErrors==1||this.alertAllErrors){if(!this.quietMode){var alertMessage="log4javascript error: "+message;if(exception){alertMessage+=newLine+newLine+"Original error: "+getExceptionStringRep(exception);}
+alert(alertMessage);}}}};log4javascript.logLog=logLog;log4javascript.setEventTypes(["load","error"]);function handleError(message,exception){logLog.error(message,exception);log4javascript.dispatchEvent("error",{"message":message,"exception":exception});}
+log4javascript.handleError=handleError;var enabled=!((typeof log4javascript_disabled!="undefined")&&log4javascript_disabled);log4javascript.setEnabled=function(enable){enabled=bool(enable);};log4javascript.isEnabled=function(){return enabled;};var useTimeStampsInMilliseconds=true;log4javascript.setTimeStampsInMilliseconds=function(timeStampsInMilliseconds){useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);};log4javascript.isTimeStampsInMilliseconds=function(){return useTimeStampsInMilliseconds;};log4javascript.evalInScope=function(expr){return eval(expr);};var showStackTraces=false;log4javascript.setShowStackTraces=function(show){showStackTraces=bool(show);};var Level=function(level,name){this.level=level;this.name=name;};Level.prototype={toString:function(){return this.name;},equals:function(level){return this.level==level.level;},isGreaterOrEqual:function(level){return this.level>=level.level;}};Level.ALL=new Level(Number.MIN_VALUE,"ALL");Level.TRACE=new Level(10000,"TRACE");Level.DEBUG=new Level(20000,"DEBUG");Level.INFO=new Level(30000,"INFO");Level.WARN=new Level(40000,"WARN");Level.ERROR=new Level(50000,"ERROR");Level.FATAL=new Level(60000,"FATAL");Level.OFF=new Level(Number.MAX_VALUE,"OFF");log4javascript.Level=Level;function Timer(name,level){this.name=name;this.level=isUndefined(level)?Level.INFO:level;this.start=new Date();}
+Timer.prototype.getElapsedTime=function(){return new Date().getTime()-this.start.getTime();};var anonymousLoggerName="[anonymous]";var defaultLoggerName="[default]";var nullLoggerName="[null]";var rootLoggerName="root";function Logger(name){this.name=name;this.parent=null;this.children=[];var appenders=[];var loggerLevel=null;var isRoot=(this.name===rootLoggerName);var isNull=(this.name===nullLoggerName);var appenderCache=null;var appenderCacheInvalidated=false;this.addChild=function(childLogger){this.children.push(childLogger);childLogger.parent=this;childLogger.invalidateAppenderCache();};var additive=true;this.getAdditivity=function(){return additive;};this.setAdditivity=function(additivity){var valueChanged=(additive!=additivity);additive=additivity;if(valueChanged){this.invalidateAppenderCache();}};this.addAppender=function(appender){if(isNull){handleError("Logger.addAppender: you may not add an appender to the null logger");}else{if(appender instanceof log4javascript.Appender){if(!array_contains(appenders,appender)){appenders.push(appender);appender.setAddedToLogger(this);this.invalidateAppenderCache();}}else{handleError("Logger.addAppender: appender supplied ('"+
+toStr(appender)+"') is not a subclass of Appender");}}};this.removeAppender=function(appender){array_remove(appenders,appender);appender.setRemovedFromLogger(this);this.invalidateAppenderCache();};this.removeAllAppenders=function(){var appenderCount=appenders.length;if(appenderCount>0){for(var i=0;i<appenderCount;i++){appenders[i].setRemovedFromLogger(this);}
+appenders.length=0;this.invalidateAppenderCache();}};this.getEffectiveAppenders=function(){if(appenderCache===null||appenderCacheInvalidated){var parentEffectiveAppenders=(isRoot||!this.getAdditivity())?[]:this.parent.getEffectiveAppenders();appenderCache=parentEffectiveAppenders.concat(appenders);appenderCacheInvalidated=false;}
+return appenderCache;};this.invalidateAppenderCache=function(){appenderCacheInvalidated=true;for(var i=0,len=this.children.length;i<len;i++){this.children[i].invalidateAppenderCache();}};this.log=function(level,params){if(enabled&&level.isGreaterOrEqual(this.getEffectiveLevel())){var exception;var finalParamIndex=params.length-1;var lastParam=params[finalParamIndex];if(params.length>1&&isError(lastParam)){exception=lastParam;finalParamIndex--;}
+var messages=[];for(var i=0;i<=finalParamIndex;i++){messages[i]=params[i];}
+var loggingEvent=new LoggingEvent(this,new Date(),level,messages,exception);this.callAppenders(loggingEvent);}};this.callAppenders=function(loggingEvent){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].doAppend(loggingEvent);}};this.setLevel=function(level){if(isRoot&&level===null){handleError("Logger.setLevel: you cannot set the level of the root logger to null");}else if(level instanceof Level){loggerLevel=level;}else{handleError("Logger.setLevel: level supplied to logger "+
+this.name+" is not an instance of log4javascript.Level");}};this.getLevel=function(){return loggerLevel;};this.getEffectiveLevel=function(){for(var logger=this;logger!==null;logger=logger.parent){var level=logger.getLevel();if(level!==null){return level;}}};this.group=function(name,initiallyExpanded){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].group(name,initiallyExpanded);}}};this.groupEnd=function(){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].groupEnd();}}};var timers={};this.time=function(name,level){if(enabled){if(isUndefined(name)){handleError("Logger.time: a name for the timer must be supplied");}else if(level&&!(level instanceof Level)){handleError("Logger.time: level supplied to timer "+
+name+" is not an instance of log4javascript.Level");}else{timers[name]=new Timer(name,level);}}};this.timeEnd=function(name){if(enabled){if(isUndefined(name)){handleError("Logger.timeEnd: a name for the timer must be supplied");}else if(timers[name]){var timer=timers[name];var milliseconds=timer.getElapsedTime();this.log(timer.level,["Timer "+toStr(name)+" completed in "+milliseconds+"ms"]);delete timers[name];}else{logLog.warn("Logger.timeEnd: no timer found with name "+name);}}};this.assert=function(expr){if(enabled&&!expr){var args=[];for(var i=1,len=arguments.length;i<len;i++){args.push(arguments[i]);}
+args=(args.length>0)?args:["Assertion Failure"];args.push(newLine);args.push(expr);this.log(Level.ERROR,args);}};this.toString=function(){return"Logger["+this.name+"]";};}
+Logger.prototype={trace:function(){this.log(Level.TRACE,arguments);},debug:function(){this.log(Level.DEBUG,arguments);},info:function(){this.log(Level.INFO,arguments);},warn:function(){this.log(Level.WARN,arguments);},error:function(){this.log(Level.ERROR,arguments);},fatal:function(){this.log(Level.FATAL,arguments);},isEnabledFor:function(level){return level.isGreaterOrEqual(this.getEffectiveLevel());},isTraceEnabled:function(){return this.isEnabledFor(Level.TRACE);},isDebugEnabled:function(){return this.isEnabledFor(Level.DEBUG);},isInfoEnabled:function(){return this.isEnabledFor(Level.INFO);},isWarnEnabled:function(){return this.isEnabledFor(Level.WARN);},isErrorEnabled:function(){return this.isEnabledFor(Level.ERROR);},isFatalEnabled:function(){return this.isEnabledFor(Level.FATAL);}};Logger.prototype.trace.isEntryPoint=true;Logger.prototype.debug.isEntryPoint=true;Logger.prototype.info.isEntryPoint=true;Logger.prototype.warn.isEntryPoint=true;Logger.prototype.error.isEntryPoint=true;Logger.prototype.fatal.isEntryPoint=true;var loggers={};var loggerNames=[];var ROOT_LOGGER_DEFAULT_LEVEL=Level.DEBUG;var rootLogger=new Logger(rootLoggerName);rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);log4javascript.getRootLogger=function(){return rootLogger;};log4javascript.getLogger=function(loggerName){if(!(typeof loggerName=="string")){loggerName=anonymousLoggerName;logLog.warn("log4javascript.getLogger: non-string logger name "+
+toStr(loggerName)+" supplied, returning anonymous logger");}
+if(loggerName==rootLoggerName){handleError("log4javascript.getLogger: root logger may not be obtained by name");}
+if(!loggers[loggerName]){var logger=new Logger(loggerName);loggers[loggerName]=logger;loggerNames.push(loggerName);var lastDotIndex=loggerName.lastIndexOf(".");var parentLogger;if(lastDotIndex>-1){var parentLoggerName=loggerName.substring(0,lastDotIndex);parentLogger=log4javascript.getLogger(parentLoggerName);}else{parentLogger=rootLogger;}
+parentLogger.addChild(logger);}
+return loggers[loggerName];};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=log4javascript.getLogger(defaultLoggerName);var a=new log4javascript.PopUpAppender();defaultLogger.addAppender(a);}
+return defaultLogger;};var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=new Logger(nullLoggerName);nullLogger.setLevel(Level.OFF);}
+return nullLogger;};log4javascript.resetConfiguration=function(){rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);loggers={};};var LoggingEvent=function(logger,timeStamp,level,messages,exception){this.logger=logger;this.timeStamp=timeStamp;this.timeStampInMilliseconds=timeStamp.getTime();this.timeStampInSeconds=Math.floor(this.timeStampInMilliseconds/1000);this.milliseconds=this.timeStamp.getMilliseconds();this.level=level;this.messages=messages;this.exception=exception;};LoggingEvent.prototype={getThrowableStrRep:function(){return this.exception?getExceptionStringRep(this.exception):"";},getCombinedMessages:function(){return(this.messages.length==1)?this.messages[0]:this.messages.join(newLine);},toString:function(){return"LoggingEvent["+this.level+"]";}};log4javascript.LoggingEvent=LoggingEvent;var Layout=function(){};Layout.prototype={defaults:{loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url"},loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url",batchHeader:"",batchFooter:"",batchSeparator:"",returnsPostData:false,overrideTimeStampsSetting:false,useTimeStampsInMilliseconds:null,format:function(){handleError("Layout.format: layout supplied has no format() method");},ignoresThrowable:function(){handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");},getContentType:function(){return"text/plain";},allowBatching:function(){return true;},setTimeStampsInMilliseconds:function(timeStampsInMilliseconds){this.overrideTimeStampsSetting=true;this.useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);},isTimeStampsInMilliseconds:function(){return this.overrideTimeStampsSetting?this.useTimeStampsInMilliseconds:useTimeStampsInMilliseconds;},getTimeStampValue:function(loggingEvent){return this.isTimeStampsInMilliseconds()?loggingEvent.timeStampInMilliseconds:loggingEvent.timeStampInSeconds;},getDataValues:function(loggingEvent,combineMessages){var dataValues=[[this.loggerKey,loggingEvent.logger.name],[this.timeStampKey,this.getTimeStampValue(loggingEvent)],[this.levelKey,loggingEvent.level.name],[this.urlKey,window.location.href],[this.messageKey,combineMessages?loggingEvent.getCombinedMessages():loggingEvent.messages]];if(!this.isTimeStampsInMilliseconds()){dataValues.push([this.millisecondsKey,loggingEvent.milliseconds]);}
+if(loggingEvent.exception){dataValues.push([this.exceptionKey,getExceptionStringRep(loggingEvent.exception)]);}
+if(this.hasCustomFields()){for(var i=0,len=this.customFields.length;i<len;i++){var val=this.customFields[i].value;if(typeof val==="function"){val=val(this,loggingEvent);}
+dataValues.push([this.customFields[i].name,val]);}}
+return dataValues;},setKeys:function(loggerKey,timeStampKey,levelKey,messageKey,exceptionKey,urlKey,millisecondsKey){this.loggerKey=extractStringFromParam(loggerKey,this.defaults.loggerKey);this.timeStampKey=extractStringFromParam(timeStampKey,this.defaults.timeStampKey);this.levelKey=extractStringFromParam(levelKey,this.defaults.levelKey);this.messageKey=extractStringFromParam(messageKey,this.defaults.messageKey);this.exceptionKey=extractStringFromParam(exceptionKey,this.defaults.exceptionKey);this.urlKey=extractStringFromParam(urlKey,this.defaults.urlKey);this.millisecondsKey=extractStringFromParam(millisecondsKey,this.defaults.millisecondsKey);},setCustomField:function(name,value){var fieldUpdated=false;for(var i=0,len=this.customFields.length;i<len;i++){if(this.customFields[i].name===name){this.customFields[i].value=value;fieldUpdated=true;}}
+if(!fieldUpdated){this.customFields.push({"name":name,"value":value});}},hasCustomFields:function(){return(this.customFields.length>0);},toString:function(){handleError("Layout.toString: all layouts must override this method");}};log4javascript.Layout=Layout;var Appender=function(){};Appender.prototype=new EventSupport();Appender.prototype.layout=new PatternLayout();Appender.prototype.threshold=Level.ALL;Appender.prototype.loggers=[];Appender.prototype.doAppend=function(loggingEvent){if(enabled&&loggingEvent.level.level>=this.threshold.level){this.append(loggingEvent);}};Appender.prototype.append=function(loggingEvent){};Appender.prototype.setLayout=function(layout){if(layout instanceof Layout){this.layout=layout;}else{handleError("Appender.setLayout: layout supplied to "+
+this.toString()+" is not a subclass of Layout");}};Appender.prototype.getLayout=function(){return this.layout;};Appender.prototype.setThreshold=function(threshold){if(threshold instanceof Level){this.threshold=threshold;}else{handleError("Appender.setThreshold: threshold supplied to "+
+this.toString()+" is not a subclass of Level");}};Appender.prototype.getThreshold=function(){return this.threshold;};Appender.prototype.setAddedToLogger=function(logger){this.loggers.push(logger);};Appender.prototype.setRemovedFromLogger=function(logger){array_remove(this.loggers,logger);};Appender.prototype.group=emptyFunction;Appender.prototype.groupEnd=emptyFunction;Appender.prototype.toString=function(){handleError("Appender.toString: all appenders must override this method");};log4javascript.Appender=Appender;function SimpleLayout(){this.customFields=[];}
+SimpleLayout.prototype=new Layout();SimpleLayout.prototype.format=function(loggingEvent){return loggingEvent.level.name+" - "+loggingEvent.getCombinedMessages();};SimpleLayout.prototype.ignoresThrowable=function(){return true;};SimpleLayout.prototype.toString=function(){return"SimpleLayout";};log4javascript.SimpleLayout=SimpleLayout;function NullLayout(){this.customFields=[];}
+NullLayout.prototype=new Layout();NullLayout.prototype.format=function(loggingEvent){return loggingEvent.messages;};NullLayout.prototype.ignoresThrowable=function(){return true;};NullLayout.prototype.toString=function(){return"NullLayout";};log4javascript.NullLayout=NullLayout;function XmlLayout(combineMessages){this.combineMessages=extractBooleanFromParam(combineMessages,true);this.customFields=[];}
+XmlLayout.prototype=new Layout();XmlLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};XmlLayout.prototype.getContentType=function(){return"text/xml";};XmlLayout.prototype.escapeCdata=function(str){return str.replace(/\]\]>/,"]]>]]><![CDATA[");};XmlLayout.prototype.format=function(loggingEvent){var layout=this;var i,len;function formatMessage(message){message=(typeof message==="string")?message:toStr(message);return"<log4javascript:message><![CDATA["+
+layout.escapeCdata(message)+"]]></log4javascript:message>";}
+var str="<log4javascript:event logger=\""+loggingEvent.logger.name+"\" timestamp=\""+this.getTimeStampValue(loggingEvent)+"\"";if(!this.isTimeStampsInMilliseconds()){str+=" milliseconds=\""+loggingEvent.milliseconds+"\"";}
+str+=" level=\""+loggingEvent.level.name+"\">"+newLine;if(this.combineMessages){str+=formatMessage(loggingEvent.getCombinedMessages());}else{str+="<log4javascript:messages>"+newLine;for(i=0,len=loggingEvent.messages.length;i<len;i++){str+=formatMessage(loggingEvent.messages[i])+newLine;}
+str+="</log4javascript:messages>"+newLine;}
+if(this.hasCustomFields()){for(i=0,len=this.customFields.length;i<len;i++){str+="<log4javascript:customfield name=\""+
+this.customFields[i].name+"\"><![CDATA["+
+this.customFields[i].value.toString()+"]]></log4javascript:customfield>"+newLine;}}
+if(loggingEvent.exception){str+="<log4javascript:exception><![CDATA["+
+getExceptionStringRep(loggingEvent.exception)+"]]></log4javascript:exception>"+newLine;}
+str+="</log4javascript:event>"+newLine+newLine;return str;};XmlLayout.prototype.ignoresThrowable=function(){return false;};XmlLayout.prototype.toString=function(){return"XmlLayout";};log4javascript.XmlLayout=XmlLayout;function escapeNewLines(str){return str.replace(/\r\n|\r|\n/g,"\\r\\n");}
+function JsonLayout(readable,combineMessages){this.readable=extractBooleanFromParam(readable,false);this.combineMessages=extractBooleanFromParam(combineMessages,true);this.batchHeader=this.readable?"["+newLine:"[";this.batchFooter=this.readable?"]"+newLine:"]";this.batchSeparator=this.readable?","+newLine:",";this.setKeys();this.colon=this.readable?": ":":";this.tab=this.readable?"\t":"";this.lineBreak=this.readable?newLine:"";this.customFields=[];}
+JsonLayout.prototype=new Layout();JsonLayout.prototype.isReadable=function(){return this.readable;};JsonLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};JsonLayout.prototype.format=function(loggingEvent){var layout=this;var dataValues=this.getDataValues(loggingEvent,this.combineMessages);var str="{"+this.lineBreak;var i,len;function formatValue(val,prefix,expand){var formattedValue;var valType=typeof val;if(val instanceof Date){formattedValue=String(val.getTime());}else if(expand&&(val instanceof Array)){formattedValue="["+layout.lineBreak;for(var i=0,len=val.length;i<len;i++){var childPrefix=prefix+layout.tab;formattedValue+=childPrefix+formatValue(val[i],childPrefix,false);if(i<val.length-1){formattedValue+=",";}
+formattedValue+=layout.lineBreak;}
+formattedValue+=prefix+"]";}else if(valType!=="number"&&valType!=="boolean"){formattedValue="\""+escapeNewLines(toStr(val).replace(/\"/g,"\\\""))+"\"";}else{formattedValue=val;}
+return formattedValue;}
+for(i=0,len=dataValues.length-1;i<=len;i++){str+=this.tab+"\""+dataValues[i][0]+"\""+this.colon+formatValue(dataValues[i][1],this.tab,true);if(i<len){str+=",";}
+str+=this.lineBreak;}
+str+="}"+this.lineBreak;return str;};JsonLayout.prototype.ignoresThrowable=function(){return false;};JsonLayout.prototype.toString=function(){return"JsonLayout";};JsonLayout.prototype.getContentType=function(){return"application/json";};log4javascript.JsonLayout=JsonLayout;function HttpPostDataLayout(){this.setKeys();this.customFields=[];this.returnsPostData=true;}
+HttpPostDataLayout.prototype=new Layout();HttpPostDataLayout.prototype.allowBatching=function(){return false;};HttpPostDataLayout.prototype.format=function(loggingEvent){var dataValues=this.getDataValues(loggingEvent);var queryBits=[];for(var i=0,len=dataValues.length;i<len;i++){var val=(dataValues[i][1]instanceof Date)?String(dataValues[i][1].getTime()):dataValues[i][1];queryBits.push(urlEncode(dataValues[i][0])+"="+urlEncode(val));}
+return queryBits.join("&");};HttpPostDataLayout.prototype.ignoresThrowable=function(loggingEvent){return false;};HttpPostDataLayout.prototype.toString=function(){return"HttpPostDataLayout";};log4javascript.HttpPostDataLayout=HttpPostDataLayout;function formatObjectExpansion(obj,depth,indentation){var objectsExpanded=[];function doFormat(obj,depth,indentation){var i,j,len,childDepth,childIndentation,childLines,expansion,childExpansion;if(!indentation){indentation="";}
+function formatString(text){var lines=splitIntoLines(text);for(var j=1,jLen=lines.length;j<jLen;j++){lines[j]=indentation+lines[j];}
+return lines.join(newLine);}
+if(obj===null){return"null";}else if(typeof obj=="undefined"){return"undefined";}else if(typeof obj=="string"){return formatString(obj);}else if(typeof obj=="object"&&array_contains(objectsExpanded,obj)){try{expansion=toStr(obj);}catch(ex){expansion="Error formatting property. Details: "+getExceptionStringRep(ex);}
+return expansion+" [already expanded]";}else if((obj instanceof Array)&&depth>0){objectsExpanded.push(obj);expansion="["+newLine;childDepth=depth-1;childIndentation=indentation+" ";childLines=[];for(i=0,len=obj.length;i<len;i++){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+childExpansion);}catch(ex){childLines.push(childIndentation+"Error formatting array member. Details: "+
+getExceptionStringRep(ex)+"");}}
+expansion+=childLines.join(","+newLine)+newLine+indentation+"]";return expansion;}else if(Object.prototype.toString.call(obj)=="[object Date]"){return obj.toString();}else if(typeof obj=="object"&&depth>0){objectsExpanded.push(obj);expansion="{"+newLine;childDepth=depth-1;childIndentation=indentation+" ";childLines=[];for(i in obj){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+i+": "+childExpansion);}catch(ex){childLines.push(childIndentation+i+": Error formatting property. Details: "+
+getExceptionStringRep(ex));}}
+expansion+=childLines.join(","+newLine)+newLine+indentation+"}";return expansion;}else{return formatString(toStr(obj));}}
+return doFormat(obj,depth,indentation);}
+var SimpleDateFormat;(function(){var regex=/('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;var monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];var dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var TEXT2=0,TEXT3=1,NUMBER=2,YEAR=3,MONTH=4,TIMEZONE=5;var types={G:TEXT2,y:YEAR,M:MONTH,w:NUMBER,W:NUMBER,D:NUMBER,d:NUMBER,F:NUMBER,E:TEXT3,a:TEXT2,H:NUMBER,k:NUMBER,K:NUMBER,h:NUMBER,m:NUMBER,s:NUMBER,S:NUMBER,Z:TIMEZONE};var ONE_DAY=24*60*60*1000;var ONE_WEEK=7*ONE_DAY;var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK=1;var newDateAtMidnight=function(year,month,day){var d=new Date(year,month,day,0,0,0);d.setMilliseconds(0);return d;};Date.prototype.getDifference=function(date){return this.getTime()-date.getTime();};Date.prototype.isBefore=function(d){return this.getTime()<d.getTime();};Date.prototype.getUTCTime=function(){return Date.UTC(this.getFullYear(),this.getMonth(),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds(),this.getMilliseconds());};Date.prototype.getTimeSince=function(d){return this.getUTCTime()-d.getUTCTime();};Date.prototype.getPreviousSunday=function(){var midday=new Date(this.getFullYear(),this.getMonth(),this.getDate(),12,0,0);var previousSunday=new Date(midday.getTime()-this.getDay()*ONE_DAY);return newDateAtMidnight(previousSunday.getFullYear(),previousSunday.getMonth(),previousSunday.getDate());};Date.prototype.getWeekInYear=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}
+var previousSunday=this.getPreviousSunday();var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);var numberOfSundays=previousSunday.isBefore(startOfYear)?0:1+Math.floor(previousSunday.getTimeSince(startOfYear)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfYear.getDay();var weekInYear=numberOfSundays;if(numberOfDaysInFirstWeek<minimalDaysInFirstWeek){weekInYear--;}
+return weekInYear;};Date.prototype.getWeekInMonth=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}
+var previousSunday=this.getPreviousSunday();var startOfMonth=newDateAtMidnight(this.getFullYear(),this.getMonth(),1);var numberOfSundays=previousSunday.isBefore(startOfMonth)?0:1+Math.floor(previousSunday.getTimeSince(startOfMonth)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfMonth.getDay();var weekInMonth=numberOfSundays;if(numberOfDaysInFirstWeek>=minimalDaysInFirstWeek){weekInMonth++;}
+return weekInMonth;};Date.prototype.getDayInYear=function(){var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);return 1+Math.floor(this.getTimeSince(startOfYear)/ONE_DAY);};SimpleDateFormat=function(formatString){this.formatString=formatString;};SimpleDateFormat.prototype.setMinimalDaysInFirstWeek=function(days){this.minimalDaysInFirstWeek=days;};SimpleDateFormat.prototype.getMinimalDaysInFirstWeek=function(){return isUndefined(this.minimalDaysInFirstWeek)?DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK:this.minimalDaysInFirstWeek;};var padWithZeroes=function(str,len){while(str.length<len){str="0"+str;}
+return str;};var formatText=function(data,numberOfLetters,minLength){return(numberOfLetters>=4)?data:data.substr(0,Math.max(minLength,numberOfLetters));};var formatNumber=function(data,numberOfLetters){var dataString=""+data;return padWithZeroes(dataString,numberOfLetters);};SimpleDateFormat.prototype.format=function(date){var formattedString="";var result;var searchString=this.formatString;while((result=regex.exec(searchString))){var quotedString=result[1];var patternLetters=result[2];var otherLetters=result[3];var otherCharacters=result[4];if(quotedString){if(quotedString=="''"){formattedString+="'";}else{formattedString+=quotedString.substring(1,quotedString.length-1);}}else if(otherLetters){}else if(otherCharacters){formattedString+=otherCharacters;}else if(patternLetters){var patternLetter=patternLetters.charAt(0);var numberOfLetters=patternLetters.length;var rawData="";switch(patternLetter){case"G":rawData="AD";break;case"y":rawData=date.getFullYear();break;case"M":rawData=date.getMonth();break;case"w":rawData=date.getWeekInYear(this.getMinimalDaysInFirstWeek());break;case"W":rawData=date.getWeekInMonth(this.getMinimalDaysInFirstWeek());break;case"D":rawData=date.getDayInYear();break;case"d":rawData=date.getDate();break;case"F":rawData=1+Math.floor((date.getDate()-1)/7);break;case"E":rawData=dayNames[date.getDay()];break;case"a":rawData=(date.getHours()>=12)?"PM":"AM";break;case"H":rawData=date.getHours();break;case"k":rawData=date.getHours()||24;break;case"K":rawData=date.getHours()%12;break;case"h":rawData=(date.getHours()%12)||12;break;case"m":rawData=date.getMinutes();break;case"s":rawData=date.getSeconds();break;case"S":rawData=date.getMilliseconds();break;case"Z":rawData=date.getTimezoneOffset();break;}
+switch(types[patternLetter]){case TEXT2:formattedString+=formatText(rawData,numberOfLetters,2);break;case TEXT3:formattedString+=formatText(rawData,numberOfLetters,3);break;case NUMBER:formattedString+=formatNumber(rawData,numberOfLetters);break;case YEAR:if(numberOfLetters<=3){var dataString=""+rawData;formattedString+=dataString.substr(2,2);}else{formattedString+=formatNumber(rawData,numberOfLetters);}
+break;case MONTH:if(numberOfLetters>=3){formattedString+=formatText(monthNames[rawData],numberOfLetters,numberOfLetters);}else{formattedString+=formatNumber(rawData+1,numberOfLetters);}
+break;case TIMEZONE:var isPositive=(rawData>0);var prefix=isPositive?"-":"+";var absData=Math.abs(rawData);var hours=""+Math.floor(absData/60);hours=padWithZeroes(hours,2);var minutes=""+(absData%60);minutes=padWithZeroes(minutes,2);formattedString+=prefix+hours+minutes;break;}}
+searchString=searchString.substr(result.index+result[0].length);}
+return formattedString;};})();log4javascript.SimpleDateFormat=SimpleDateFormat;function PatternLayout(pattern){if(pattern){this.pattern=pattern;}else{this.pattern=PatternLayout.DEFAULT_CONVERSION_PATTERN;}
+this.customFields=[];}
+PatternLayout.TTCC_CONVERSION_PATTERN="%r %p %c - %m%n";PatternLayout.DEFAULT_CONVERSION_PATTERN="%m%n";PatternLayout.ISO8601_DATEFORMAT="yyyy-MM-dd HH:mm:ss,SSS";PatternLayout.DATETIME_DATEFORMAT="dd MMM yyyy HH:mm:ss,SSS";PatternLayout.ABSOLUTETIME_DATEFORMAT="HH:mm:ss,SSS";PatternLayout.prototype=new Layout();PatternLayout.prototype.format=function(loggingEvent){var regex=/%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;var formattedString="";var result;var searchString=this.pattern;while((result=regex.exec(searchString))){var matchedString=result[0];var padding=result[1];var truncation=result[2];var conversionCharacter=result[3];var specifier=result[5];var text=result[6];if(text){formattedString+=""+text;}else{var replacement="";switch(conversionCharacter){case"a":case"m":var depth=0;if(specifier){depth=parseInt(specifier,10);if(isNaN(depth)){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character '"+conversionCharacter+"' - should be a number");depth=0;}}
+var messages=(conversionCharacter==="a")?loggingEvent.messages[0]:loggingEvent.messages;for(var i=0,len=messages.length;i<len;i++){if(i>0&&(replacement.charAt(replacement.length-1)!==" ")){replacement+=" ";}
+if(depth===0){replacement+=messages[i];}else{replacement+=formatObjectExpansion(messages[i],depth);}}
+break;case"c":var loggerName=loggingEvent.logger.name;if(specifier){var precision=parseInt(specifier,10);var loggerNameBits=loggingEvent.logger.name.split(".");if(precision>=loggerNameBits.length){replacement=loggerName;}else{replacement=loggerNameBits.slice(loggerNameBits.length-precision).join(".");}}else{replacement=loggerName;}
+break;case"d":var dateFormat=PatternLayout.ISO8601_DATEFORMAT;if(specifier){dateFormat=specifier;if(dateFormat=="ISO8601"){dateFormat=PatternLayout.ISO8601_DATEFORMAT;}else if(dateFormat=="ABSOLUTE"){dateFormat=PatternLayout.ABSOLUTETIME_DATEFORMAT;}else if(dateFormat=="DATE"){dateFormat=PatternLayout.DATETIME_DATEFORMAT;}}
+replacement=(new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);break;case"f":if(this.hasCustomFields()){var fieldIndex=0;if(specifier){fieldIndex=parseInt(specifier,10);if(isNaN(fieldIndex)){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character 'f' - should be a number");}else if(fieldIndex===0){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character 'f' - must be greater than zero");}else if(fieldIndex>this.customFields.length){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character 'f' - there aren't that many custom fields");}else{fieldIndex=fieldIndex-1;}}
+var val=this.customFields[fieldIndex].value;if(typeof val=="function"){val=val(this,loggingEvent);}
+replacement=val;}
+break;case"n":replacement=newLine;break;case"p":replacement=loggingEvent.level.name;break;case"r":replacement=""+loggingEvent.timeStamp.getDifference(applicationStartDate);break;case"%":replacement="%";break;default:replacement=matchedString;break;}
+var l;if(truncation){l=parseInt(truncation.substr(1),10);var strLen=replacement.length;if(l<strLen){replacement=replacement.substring(strLen-l,strLen);}}
+if(padding){if(padding.charAt(0)=="-"){l=parseInt(padding.substr(1),10);while(replacement.length<l){replacement+=" ";}}else{l=parseInt(padding,10);while(replacement.length<l){replacement=" "+replacement;}}}
+formattedString+=replacement;}
+searchString=searchString.substr(result.index+result[0].length);}
+return formattedString;};PatternLayout.prototype.ignoresThrowable=function(){return true;};PatternLayout.prototype.toString=function(){return"PatternLayout";};log4javascript.PatternLayout=PatternLayout;var xmlHttpFactories=[function(){return new XMLHttpRequest();},function(){return new ActiveXObject("Msxml2.XMLHTTP");},function(){return new ActiveXObject("Microsoft.XMLHTTP");}];var getXmlHttp=function(errorHandler){var xmlHttp=null,factory;for(var i=0,len=xmlHttpFactories.length;i<len;i++){factory=xmlHttpFactories[i];try{xmlHttp=factory();getXmlHttp=factory;return xmlHttp;}catch(e){}}
+if(errorHandler){errorHandler();}else{handleError("getXmlHttp: unable to obtain XMLHttpRequest object");}};function isHttpRequestSuccessful(xmlHttp){return isUndefined(xmlHttp.status)||xmlHttp.status===0||(xmlHttp.status>=200&&xmlHttp.status<300)||xmlHttp.status==1223;}
+function AjaxAppender(url){var appender=this;var isSupported=true;if(!url){handleError("AjaxAppender: URL must be specified in constructor");isSupported=false;}
+var timed=this.defaults.timed;var waitForResponse=this.defaults.waitForResponse;var batchSize=this.defaults.batchSize;var timerInterval=this.defaults.timerInterval;var requestSuccessCallback=this.defaults.requestSuccessCallback;var failCallback=this.defaults.failCallback;var postVarName=this.defaults.postVarName;var sendAllOnUnload=this.defaults.sendAllOnUnload;var contentType=this.defaults.contentType;var sessionId=null;var queuedLoggingEvents=[];var queuedRequests=[];var headers=[];var sending=false;var initialized=false;function checkCanConfigure(configOptionName){if(initialized){handleError("AjaxAppender: configuration option '"+
+configOptionName+"' may not be set after the appender has been initialized");return false;}
+return true;}
+this.getSessionId=function(){return sessionId;};this.setSessionId=function(sessionIdParam){sessionId=extractStringFromParam(sessionIdParam,null);this.layout.setCustomField("sessionid",sessionId);};this.setLayout=function(layoutParam){if(checkCanConfigure("layout")){this.layout=layoutParam;if(sessionId!==null){this.setSessionId(sessionId);}}};this.isTimed=function(){return timed;};this.setTimed=function(timedParam){if(checkCanConfigure("timed")){timed=bool(timedParam);}};this.getTimerInterval=function(){return timerInterval;};this.setTimerInterval=function(timerIntervalParam){if(checkCanConfigure("timerInterval")){timerInterval=extractIntFromParam(timerIntervalParam,timerInterval);}};this.isWaitForResponse=function(){return waitForResponse;};this.setWaitForResponse=function(waitForResponseParam){if(checkCanConfigure("waitForResponse")){waitForResponse=bool(waitForResponseParam);}};this.getBatchSize=function(){return batchSize;};this.setBatchSize=function(batchSizeParam){if(checkCanConfigure("batchSize")){batchSize=extractIntFromParam(batchSizeParam,batchSize);}};this.isSendAllOnUnload=function(){return sendAllOnUnload;};this.setSendAllOnUnload=function(sendAllOnUnloadParam){if(checkCanConfigure("sendAllOnUnload")){sendAllOnUnload=extractBooleanFromParam(sendAllOnUnloadParam,sendAllOnUnload);}};this.setRequestSuccessCallback=function(requestSuccessCallbackParam){requestSuccessCallback=extractFunctionFromParam(requestSuccessCallbackParam,requestSuccessCallback);};this.setFailCallback=function(failCallbackParam){failCallback=extractFunctionFromParam(failCallbackParam,failCallback);};this.getPostVarName=function(){return postVarName;};this.setPostVarName=function(postVarNameParam){if(checkCanConfigure("postVarName")){postVarName=extractStringFromParam(postVarNameParam,postVarName);}};this.getHeaders=function(){return headers;};this.addHeader=function(name,value){if(name.toLowerCase()=="content-type"){contentType=value;}else{headers.push({name:name,value:value});}};function sendAll(){if(isSupported&&enabled){sending=true;var currentRequestBatch;if(waitForResponse){if(queuedRequests.length>0){currentRequestBatch=queuedRequests.shift();sendRequest(preparePostData(currentRequestBatch),sendAll);}else{sending=false;if(timed){scheduleSending();}}}else{while((currentRequestBatch=queuedRequests.shift())){sendRequest(preparePostData(currentRequestBatch));}
+sending=false;if(timed){scheduleSending();}}}}
+this.sendAll=sendAll;function sendAllRemaining(){var sendingAnything=false;if(isSupported&&enabled){var actualBatchSize=appender.getLayout().allowBatching()?batchSize:1;var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);if(queuedLoggingEvents.length>=actualBatchSize){queuedRequests.push(batchedLoggingEvents);batchedLoggingEvents=[];}}
+if(batchedLoggingEvents.length>0){queuedRequests.push(batchedLoggingEvents);}
+sendingAnything=(queuedRequests.length>0);waitForResponse=false;timed=false;sendAll();}
+return sendingAnything;}
+this.sendAllRemaining=sendAllRemaining;function preparePostData(batchedLoggingEvents){var formattedMessages=[];var currentLoggingEvent;var postData="";while((currentLoggingEvent=batchedLoggingEvents.shift())){var currentFormattedMessage=appender.getLayout().format(currentLoggingEvent);if(appender.getLayout().ignoresThrowable()){currentFormattedMessage+=currentLoggingEvent.getThrowableStrRep();}
+formattedMessages.push(currentFormattedMessage);}
+if(batchedLoggingEvents.length==1){postData=formattedMessages.join("");}else{postData=appender.getLayout().batchHeader+
+formattedMessages.join(appender.getLayout().batchSeparator)+
+appender.getLayout().batchFooter;}
+if(contentType==appender.defaults.contentType){postData=appender.getLayout().returnsPostData?postData:urlEncode(postVarName)+"="+urlEncode(postData);if(postData.length>0){postData+="&";}
+postData+="layout="+urlEncode(appender.getLayout().toString());}
+return postData;}
+function scheduleSending(){window.setTimeout(sendAll,timerInterval);}
+function xmlHttpErrorHandler(){var msg="AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}}
+function sendRequest(postData,successCallback){try{var xmlHttp=getXmlHttp(xmlHttpErrorHandler);if(isSupported){if(xmlHttp.overrideMimeType){xmlHttp.overrideMimeType(appender.getLayout().getContentType());}
+xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4){if(isHttpRequestSuccessful(xmlHttp)){if(requestSuccessCallback){requestSuccessCallback(xmlHttp);}
+if(successCallback){successCallback(xmlHttp);}}else{var msg="AjaxAppender.append: XMLHttpRequest request to URL "+
+url+" returned status code "+xmlHttp.status;handleError(msg);if(failCallback){failCallback(msg);}}
+xmlHttp.onreadystatechange=emptyFunction;xmlHttp=null;}};xmlHttp.open("POST",url,true);try{for(var i=0,header;header=headers[i++];){xmlHttp.setRequestHeader(header.name,header.value);}
+xmlHttp.setRequestHeader("Content-Type",contentType);}catch(headerEx){var msg="AjaxAppender.append: your browser's XMLHttpRequest implementation"+" does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}
+return;}
+xmlHttp.send(postData);}}catch(ex){var errMsg="AjaxAppender.append: error sending log message to "+url;handleError(errMsg,ex);isSupported=false;if(failCallback){failCallback(errMsg+". Details: "+getExceptionStringRep(ex));}}}
+this.append=function(loggingEvent){if(isSupported){if(!initialized){init();}
+queuedLoggingEvents.push(loggingEvent);var actualBatchSize=this.getLayout().allowBatching()?batchSize:1;if(queuedLoggingEvents.length>=actualBatchSize){var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);}
+queuedRequests.push(batchedLoggingEvents);if(!timed&&(!waitForResponse||(waitForResponse&&!sending))){sendAll();}}}};function init(){initialized=true;if(sendAllOnUnload){var oldBeforeUnload=window.onbeforeunload;window.onbeforeunload=function(){if(oldBeforeUnload){oldBeforeUnload();}
+if(sendAllRemaining()){return"Sending log messages";}};}
+if(timed){scheduleSending();}}}
+AjaxAppender.prototype=new Appender();AjaxAppender.prototype.defaults={waitForResponse:false,timed:false,timerInterval:1000,batchSize:1,sendAllOnUnload:false,requestSuccessCallback:null,failCallback:null,postVarName:"data",contentType:"application/x-www-form-urlencoded"};AjaxAppender.prototype.layout=new HttpPostDataLayout();AjaxAppender.prototype.toString=function(){return"AjaxAppender";};log4javascript.AjaxAppender=AjaxAppender;log4javascript.setDocumentReady=function(){pageLoaded=true;log4javascript.dispatchEvent("load",{});};if(window.addEventListener){window.addEventListener("load",log4javascript.setDocumentReady,false);}else if(window.attachEvent){window.attachEvent("onload",log4javascript.setDocumentReady);}else{var oldOnload=window.onload;if(typeof window.onload!="function"){window.onload=log4javascript.setDocumentReady;}else{window.onload=function(evt){if(oldOnload){oldOnload(evt);}
+log4javascript.setDocumentReady();};}}
+window.log4javascript=log4javascript;return log4javascript;})();
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_production_uncompressed.js b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_production_uncompressed.js
new file mode 100644
index 0000000..1a29621
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_production_uncompressed.js
@@ -0,0 +1,2290 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+/**
+ * log4javascript
+ *
+ * log4javascript is a logging framework for JavaScript based on log4j
+ * for Java. This file contains all core log4javascript code and is the only
+ * file required to use log4javascript, unless you require support for
+ * document.domain, in which case you will also need console.html, which must be
+ * stored in the same directory as the main log4javascript.js file.
+ *
+ * Author: Tim Down <tim@log4javascript.org>
+ * Version: 1.4.6
+ * Edition: log4javascript_production
+ * Build date: 19 March 2013
+ * Website: http://log4javascript.org
+ */
+
+/* -------------------------------------------------------------------------- */
+// Array-related stuff
+
+// Next three methods are solely for IE5, which is missing them
+if (!Array.prototype.push) {
+ Array.prototype.push = function() {
+ for (var i = 0, len = arguments.length; i < len; i++){
+ this[this.length] = arguments[i];
+ }
+ return this.length;
+ };
+}
+
+if (!Array.prototype.shift) {
+ Array.prototype.shift = function() {
+ if (this.length > 0) {
+ var firstItem = this[0];
+ for (var i = 0, len = this.length - 1; i < len; i++) {
+ this[i] = this[i + 1];
+ }
+ this.length = this.length - 1;
+ return firstItem;
+ }
+ };
+}
+
+if (!Array.prototype.splice) {
+ Array.prototype.splice = function(startIndex, deleteCount) {
+ var itemsAfterDeleted = this.slice(startIndex + deleteCount);
+ var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);
+ this.length = startIndex;
+ // Copy the arguments into a proper Array object
+ var argumentsArray = [];
+ for (var i = 0, len = arguments.length; i < len; i++) {
+ argumentsArray[i] = arguments[i];
+ }
+ var itemsToAppend = (argumentsArray.length > 2) ?
+ itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;
+ for (i = 0, len = itemsToAppend.length; i < len; i++) {
+ this.push(itemsToAppend[i]);
+ }
+ return itemsDeleted;
+ };
+}
+
+/* -------------------------------------------------------------------------- */
+
+var log4javascript = (function() {
+
+ function isUndefined(obj) {
+ return typeof obj == "undefined";
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // Custom event support
+
+ function EventSupport() {}
+
+ EventSupport.prototype = {
+ eventTypes: [],
+ eventListeners: {},
+ setEventTypes: function(eventTypesParam) {
+ if (eventTypesParam instanceof Array) {
+ this.eventTypes = eventTypesParam;
+ this.eventListeners = {};
+ for (var i = 0, len = this.eventTypes.length; i < len; i++) {
+ this.eventListeners[this.eventTypes[i]] = [];
+ }
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: setEventTypes: eventTypes parameter must be an Array");
+ }
+ },
+
+ addEventListener: function(eventType, listener) {
+ if (typeof listener == "function") {
+ if (!array_contains(this.eventTypes, eventType)) {
+ handleError("log4javascript.EventSupport [" + this + "]: addEventListener: no event called '" + eventType + "'");
+ }
+ this.eventListeners[eventType].push(listener);
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: addEventListener: listener must be a function");
+ }
+ },
+
+ removeEventListener: function(eventType, listener) {
+ if (typeof listener == "function") {
+ if (!array_contains(this.eventTypes, eventType)) {
+ handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: no event called '" + eventType + "'");
+ }
+ array_remove(this.eventListeners[eventType], listener);
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: listener must be a function");
+ }
+ },
+
+ dispatchEvent: function(eventType, eventArgs) {
+ if (array_contains(this.eventTypes, eventType)) {
+ var listeners = this.eventListeners[eventType];
+ for (var i = 0, len = listeners.length; i < len; i++) {
+ listeners[i](this, eventType, eventArgs);
+ }
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: dispatchEvent: no event called '" + eventType + "'");
+ }
+ }
+ };
+
+ /* -------------------------------------------------------------------------- */
+
+ var applicationStartDate = new Date();
+ var uniqueId = "log4javascript_" + applicationStartDate.getTime() + "_" +
+ Math.floor(Math.random() * 100000000);
+ var emptyFunction = function() {};
+ var newLine = "\r\n";
+ var pageLoaded = false;
+
+ // Create main log4javascript object; this will be assigned public properties
+ function Log4JavaScript() {}
+ Log4JavaScript.prototype = new EventSupport();
+
+ log4javascript = new Log4JavaScript();
+ log4javascript.version = "1.4.6";
+ log4javascript.edition = "log4javascript_production";
+
+ /* -------------------------------------------------------------------------- */
+ // Utility functions
+
+ function toStr(obj) {
+ if (obj && obj.toString) {
+ return obj.toString();
+ } else {
+ return String(obj);
+ }
+ }
+
+ function getExceptionMessage(ex) {
+ if (ex.message) {
+ return ex.message;
+ } else if (ex.description) {
+ return ex.description;
+ } else {
+ return toStr(ex);
+ }
+ }
+
+ // Gets the portion of the URL after the last slash
+ function getUrlFileName(url) {
+ var lastSlashIndex = Math.max(url.lastIndexOf("/"), url.lastIndexOf("\\"));
+ return url.substr(lastSlashIndex + 1);
+ }
+
+ // Returns a nicely formatted representation of an error
+ function getExceptionStringRep(ex) {
+ if (ex) {
+ var exStr = "Exception: " + getExceptionMessage(ex);
+ try {
+ if (ex.lineNumber) {
+ exStr += " on line number " + ex.lineNumber;
+ }
+ if (ex.fileName) {
+ exStr += " in file " + getUrlFileName(ex.fileName);
+ }
+ } catch (localEx) {
+ logLog.warn("Unable to obtain file and line information for error");
+ }
+ if (showStackTraces && ex.stack) {
+ exStr += newLine + "Stack trace:" + newLine + ex.stack;
+ }
+ return exStr;
+ }
+ return null;
+ }
+
+ function bool(obj) {
+ return Boolean(obj);
+ }
+
+ function trim(str) {
+ return str.replace(/^\s+/, "").replace(/\s+$/, "");
+ }
+
+ function splitIntoLines(text) {
+ // Ensure all line breaks are \n only
+ var text2 = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
+ return text2.split("\n");
+ }
+
+ var urlEncode = (typeof window.encodeURIComponent != "undefined") ?
+ function(str) {
+ return encodeURIComponent(str);
+ }:
+ function(str) {
+ return escape(str).replace(/\+/g, "%2B").replace(/"/g, "%22").replace(/'/g, "%27").replace(/\//g, "%2F").replace(/=/g, "%3D");
+ };
+
+ var urlDecode = (typeof window.decodeURIComponent != "undefined") ?
+ function(str) {
+ return decodeURIComponent(str);
+ }:
+ function(str) {
+ return unescape(str).replace(/%2B/g, "+").replace(/%22/g, "\"").replace(/%27/g, "'").replace(/%2F/g, "/").replace(/%3D/g, "=");
+ };
+
+ function array_remove(arr, val) {
+ var index = -1;
+ for (var i = 0, len = arr.length; i < len; i++) {
+ if (arr[i] === val) {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0) {
+ arr.splice(index, 1);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function array_contains(arr, val) {
+ for(var i = 0, len = arr.length; i < len; i++) {
+ if (arr[i] == val) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function extractBooleanFromParam(param, defaultValue) {
+ if (isUndefined(param)) {
+ return defaultValue;
+ } else {
+ return bool(param);
+ }
+ }
+
+ function extractStringFromParam(param, defaultValue) {
+ if (isUndefined(param)) {
+ return defaultValue;
+ } else {
+ return String(param);
+ }
+ }
+
+ function extractIntFromParam(param, defaultValue) {
+ if (isUndefined(param)) {
+ return defaultValue;
+ } else {
+ try {
+ var value = parseInt(param, 10);
+ return isNaN(value) ? defaultValue : value;
+ } catch (ex) {
+ logLog.warn("Invalid int param " + param, ex);
+ return defaultValue;
+ }
+ }
+ }
+
+ function extractFunctionFromParam(param, defaultValue) {
+ if (typeof param == "function") {
+ return param;
+ } else {
+ return defaultValue;
+ }
+ }
+
+ function isError(err) {
+ return (err instanceof Error);
+ }
+
+ if (!Function.prototype.apply){
+ Function.prototype.apply = function(obj, args) {
+ var methodName = "__apply__";
+ if (typeof obj[methodName] != "undefined") {
+ methodName += String(Math.random()).substr(2);
+ }
+ obj[methodName] = this;
+
+ var argsStrings = [];
+ for (var i = 0, len = args.length; i < len; i++) {
+ argsStrings[i] = "args[" + i + "]";
+ }
+ var script = "obj." + methodName + "(" + argsStrings.join(",") + ")";
+ var returnValue = eval(script);
+ delete obj[methodName];
+ return returnValue;
+ };
+ }
+
+ if (!Function.prototype.call){
+ Function.prototype.call = function(obj) {
+ var args = [];
+ for (var i = 1, len = arguments.length; i < len; i++) {
+ args[i - 1] = arguments[i];
+ }
+ return this.apply(obj, args);
+ };
+ }
+
+ function getListenersPropertyName(eventName) {
+ return "__log4javascript_listeners__" + eventName;
+ }
+
+ function addEvent(node, eventName, listener, useCapture, win) {
+ win = win ? win : window;
+ if (node.addEventListener) {
+ node.addEventListener(eventName, listener, useCapture);
+ } else if (node.attachEvent) {
+ node.attachEvent("on" + eventName, listener);
+ } else {
+ var propertyName = getListenersPropertyName(eventName);
+ if (!node[propertyName]) {
+ node[propertyName] = [];
+ // Set event handler
+ node["on" + eventName] = function(evt) {
+ evt = getEvent(evt, win);
+ var listenersPropertyName = getListenersPropertyName(eventName);
+
+ // Clone the array of listeners to leave the original untouched
+ var listeners = this[listenersPropertyName].concat([]);
+ var currentListener;
+
+ // Call each listener in turn
+ while ((currentListener = listeners.shift())) {
+ currentListener.call(this, evt);
+ }
+ };
+ }
+ node[propertyName].push(listener);
+ }
+ }
+
+ function removeEvent(node, eventName, listener, useCapture) {
+ if (node.removeEventListener) {
+ node.removeEventListener(eventName, listener, useCapture);
+ } else if (node.detachEvent) {
+ node.detachEvent("on" + eventName, listener);
+ } else {
+ var propertyName = getListenersPropertyName(eventName);
+ if (node[propertyName]) {
+ array_remove(node[propertyName], listener);
+ }
+ }
+ }
+
+ function getEvent(evt, win) {
+ win = win ? win : window;
+ return evt ? evt : win.event;
+ }
+
+ function stopEventPropagation(evt) {
+ if (evt.stopPropagation) {
+ evt.stopPropagation();
+ } else if (typeof evt.cancelBubble != "undefined") {
+ evt.cancelBubble = true;
+ }
+ evt.returnValue = false;
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // Simple logging for log4javascript itself
+
+ var logLog = {
+ quietMode: false,
+
+ debugMessages: [],
+
+ setQuietMode: function(quietMode) {
+ this.quietMode = bool(quietMode);
+ },
+
+ numberOfErrors: 0,
+
+ alertAllErrors: false,
+
+ setAlertAllErrors: function(alertAllErrors) {
+ this.alertAllErrors = alertAllErrors;
+ },
+
+ debug: function(message) {
+ this.debugMessages.push(message);
+ },
+
+ displayDebug: function() {
+ alert(this.debugMessages.join(newLine));
+ },
+
+ warn: function(message, exception) {
+ },
+
+ error: function(message, exception) {
+ if (++this.numberOfErrors == 1 || this.alertAllErrors) {
+ if (!this.quietMode) {
+ var alertMessage = "log4javascript error: " + message;
+ if (exception) {
+ alertMessage += newLine + newLine + "Original error: " + getExceptionStringRep(exception);
+ }
+ alert(alertMessage);
+ }
+ }
+ }
+ };
+ log4javascript.logLog = logLog;
+
+ log4javascript.setEventTypes(["load", "error"]);
+
+ function handleError(message, exception) {
+ logLog.error(message, exception);
+ log4javascript.dispatchEvent("error", { "message": message, "exception": exception });
+ }
+
+ log4javascript.handleError = handleError;
+
+ /* ---------------------------------------------------------------------- */
+
+ var enabled = !((typeof log4javascript_disabled != "undefined") &&
+ log4javascript_disabled);
+
+ log4javascript.setEnabled = function(enable) {
+ enabled = bool(enable);
+ };
+
+ log4javascript.isEnabled = function() {
+ return enabled;
+ };
+
+ var useTimeStampsInMilliseconds = true;
+
+ log4javascript.setTimeStampsInMilliseconds = function(timeStampsInMilliseconds) {
+ useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);
+ };
+
+ log4javascript.isTimeStampsInMilliseconds = function() {
+ return useTimeStampsInMilliseconds;
+ };
+
+
+ // This evaluates the given expression in the current scope, thus allowing
+ // scripts to access private variables. Particularly useful for testing
+ log4javascript.evalInScope = function(expr) {
+ return eval(expr);
+ };
+
+ var showStackTraces = false;
+
+ log4javascript.setShowStackTraces = function(show) {
+ showStackTraces = bool(show);
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Levels
+
+ var Level = function(level, name) {
+ this.level = level;
+ this.name = name;
+ };
+
+ Level.prototype = {
+ toString: function() {
+ return this.name;
+ },
+ equals: function(level) {
+ return this.level == level.level;
+ },
+ isGreaterOrEqual: function(level) {
+ return this.level >= level.level;
+ }
+ };
+
+ Level.ALL = new Level(Number.MIN_VALUE, "ALL");
+ Level.TRACE = new Level(10000, "TRACE");
+ Level.DEBUG = new Level(20000, "DEBUG");
+ Level.INFO = new Level(30000, "INFO");
+ Level.WARN = new Level(40000, "WARN");
+ Level.ERROR = new Level(50000, "ERROR");
+ Level.FATAL = new Level(60000, "FATAL");
+ Level.OFF = new Level(Number.MAX_VALUE, "OFF");
+
+ log4javascript.Level = Level;
+
+ /* ---------------------------------------------------------------------- */
+ // Timers
+
+ function Timer(name, level) {
+ this.name = name;
+ this.level = isUndefined(level) ? Level.INFO : level;
+ this.start = new Date();
+ }
+
+ Timer.prototype.getElapsedTime = function() {
+ return new Date().getTime() - this.start.getTime();
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Loggers
+
+ var anonymousLoggerName = "[anonymous]";
+ var defaultLoggerName = "[default]";
+ var nullLoggerName = "[null]";
+ var rootLoggerName = "root";
+
+ function Logger(name) {
+ this.name = name;
+ this.parent = null;
+ this.children = [];
+
+ var appenders = [];
+ var loggerLevel = null;
+ var isRoot = (this.name === rootLoggerName);
+ var isNull = (this.name === nullLoggerName);
+
+ var appenderCache = null;
+ var appenderCacheInvalidated = false;
+
+ this.addChild = function(childLogger) {
+ this.children.push(childLogger);
+ childLogger.parent = this;
+ childLogger.invalidateAppenderCache();
+ };
+
+ // Additivity
+ var additive = true;
+ this.getAdditivity = function() {
+ return additive;
+ };
+
+ this.setAdditivity = function(additivity) {
+ var valueChanged = (additive != additivity);
+ additive = additivity;
+ if (valueChanged) {
+ this.invalidateAppenderCache();
+ }
+ };
+
+ // Create methods that use the appenders variable in this scope
+ this.addAppender = function(appender) {
+ if (isNull) {
+ handleError("Logger.addAppender: you may not add an appender to the null logger");
+ } else {
+ if (appender instanceof log4javascript.Appender) {
+ if (!array_contains(appenders, appender)) {
+ appenders.push(appender);
+ appender.setAddedToLogger(this);
+ this.invalidateAppenderCache();
+ }
+ } else {
+ handleError("Logger.addAppender: appender supplied ('" +
+ toStr(appender) + "') is not a subclass of Appender");
+ }
+ }
+ };
+
+ this.removeAppender = function(appender) {
+ array_remove(appenders, appender);
+ appender.setRemovedFromLogger(this);
+ this.invalidateAppenderCache();
+ };
+
+ this.removeAllAppenders = function() {
+ var appenderCount = appenders.length;
+ if (appenderCount > 0) {
+ for (var i = 0; i < appenderCount; i++) {
+ appenders[i].setRemovedFromLogger(this);
+ }
+ appenders.length = 0;
+ this.invalidateAppenderCache();
+ }
+ };
+
+ this.getEffectiveAppenders = function() {
+ if (appenderCache === null || appenderCacheInvalidated) {
+ // Build appender cache
+ var parentEffectiveAppenders = (isRoot || !this.getAdditivity()) ?
+ [] : this.parent.getEffectiveAppenders();
+ appenderCache = parentEffectiveAppenders.concat(appenders);
+ appenderCacheInvalidated = false;
+ }
+ return appenderCache;
+ };
+
+ this.invalidateAppenderCache = function() {
+ appenderCacheInvalidated = true;
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ this.children[i].invalidateAppenderCache();
+ }
+ };
+
+ this.log = function(level, params) {
+ if (enabled && level.isGreaterOrEqual(this.getEffectiveLevel())) {
+ // Check whether last param is an exception
+ var exception;
+ var finalParamIndex = params.length - 1;
+ var lastParam = params[finalParamIndex];
+ if (params.length > 1 && isError(lastParam)) {
+ exception = lastParam;
+ finalParamIndex--;
+ }
+
+ // Construct genuine array for the params
+ var messages = [];
+ for (var i = 0; i <= finalParamIndex; i++) {
+ messages[i] = params[i];
+ }
+
+ var loggingEvent = new LoggingEvent(
+ this, new Date(), level, messages, exception);
+
+ this.callAppenders(loggingEvent);
+ }
+ };
+
+ this.callAppenders = function(loggingEvent) {
+ var effectiveAppenders = this.getEffectiveAppenders();
+ for (var i = 0, len = effectiveAppenders.length; i < len; i++) {
+ effectiveAppenders[i].doAppend(loggingEvent);
+ }
+ };
+
+ this.setLevel = function(level) {
+ // Having a level of null on the root logger would be very bad.
+ if (isRoot && level === null) {
+ handleError("Logger.setLevel: you cannot set the level of the root logger to null");
+ } else if (level instanceof Level) {
+ loggerLevel = level;
+ } else {
+ handleError("Logger.setLevel: level supplied to logger " +
+ this.name + " is not an instance of log4javascript.Level");
+ }
+ };
+
+ this.getLevel = function() {
+ return loggerLevel;
+ };
+
+ this.getEffectiveLevel = function() {
+ for (var logger = this; logger !== null; logger = logger.parent) {
+ var level = logger.getLevel();
+ if (level !== null) {
+ return level;
+ }
+ }
+ };
+
+ this.group = function(name, initiallyExpanded) {
+ if (enabled) {
+ var effectiveAppenders = this.getEffectiveAppenders();
+ for (var i = 0, len = effectiveAppenders.length; i < len; i++) {
+ effectiveAppenders[i].group(name, initiallyExpanded);
+ }
+ }
+ };
+
+ this.groupEnd = function() {
+ if (enabled) {
+ var effectiveAppenders = this.getEffectiveAppenders();
+ for (var i = 0, len = effectiveAppenders.length; i < len; i++) {
+ effectiveAppenders[i].groupEnd();
+ }
+ }
+ };
+
+ var timers = {};
+
+ this.time = function(name, level) {
+ if (enabled) {
+ if (isUndefined(name)) {
+ handleError("Logger.time: a name for the timer must be supplied");
+ } else if (level && !(level instanceof Level)) {
+ handleError("Logger.time: level supplied to timer " +
+ name + " is not an instance of log4javascript.Level");
+ } else {
+ timers[name] = new Timer(name, level);
+ }
+ }
+ };
+
+ this.timeEnd = function(name) {
+ if (enabled) {
+ if (isUndefined(name)) {
+ handleError("Logger.timeEnd: a name for the timer must be supplied");
+ } else if (timers[name]) {
+ var timer = timers[name];
+ var milliseconds = timer.getElapsedTime();
+ this.log(timer.level, ["Timer " + toStr(name) + " completed in " + milliseconds + "ms"]);
+ delete timers[name];
+ } else {
+ logLog.warn("Logger.timeEnd: no timer found with name " + name);
+ }
+ }
+ };
+
+ this.assert = function(expr) {
+ if (enabled && !expr) {
+ var args = [];
+ for (var i = 1, len = arguments.length; i < len; i++) {
+ args.push(arguments[i]);
+ }
+ args = (args.length > 0) ? args : ["Assertion Failure"];
+ args.push(newLine);
+ args.push(expr);
+ this.log(Level.ERROR, args);
+ }
+ };
+
+ this.toString = function() {
+ return "Logger[" + this.name + "]";
+ };
+ }
+
+ Logger.prototype = {
+ trace: function() {
+ this.log(Level.TRACE, arguments);
+ },
+
+ debug: function() {
+ this.log(Level.DEBUG, arguments);
+ },
+
+ info: function() {
+ this.log(Level.INFO, arguments);
+ },
+
+ warn: function() {
+ this.log(Level.WARN, arguments);
+ },
+
+ error: function() {
+ this.log(Level.ERROR, arguments);
+ },
+
+ fatal: function() {
+ this.log(Level.FATAL, arguments);
+ },
+
+ isEnabledFor: function(level) {
+ return level.isGreaterOrEqual(this.getEffectiveLevel());
+ },
+
+ isTraceEnabled: function() {
+ return this.isEnabledFor(Level.TRACE);
+ },
+
+ isDebugEnabled: function() {
+ return this.isEnabledFor(Level.DEBUG);
+ },
+
+ isInfoEnabled: function() {
+ return this.isEnabledFor(Level.INFO);
+ },
+
+ isWarnEnabled: function() {
+ return this.isEnabledFor(Level.WARN);
+ },
+
+ isErrorEnabled: function() {
+ return this.isEnabledFor(Level.ERROR);
+ },
+
+ isFatalEnabled: function() {
+ return this.isEnabledFor(Level.FATAL);
+ }
+ };
+
+ Logger.prototype.trace.isEntryPoint = true;
+ Logger.prototype.debug.isEntryPoint = true;
+ Logger.prototype.info.isEntryPoint = true;
+ Logger.prototype.warn.isEntryPoint = true;
+ Logger.prototype.error.isEntryPoint = true;
+ Logger.prototype.fatal.isEntryPoint = true;
+
+ /* ---------------------------------------------------------------------- */
+ // Logger access methods
+
+ // Hashtable of loggers keyed by logger name
+ var loggers = {};
+ var loggerNames = [];
+
+ var ROOT_LOGGER_DEFAULT_LEVEL = Level.DEBUG;
+ var rootLogger = new Logger(rootLoggerName);
+ rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);
+
+ log4javascript.getRootLogger = function() {
+ return rootLogger;
+ };
+
+ log4javascript.getLogger = function(loggerName) {
+ // Use default logger if loggerName is not specified or invalid
+ if (!(typeof loggerName == "string")) {
+ loggerName = anonymousLoggerName;
+ logLog.warn("log4javascript.getLogger: non-string logger name " +
+ toStr(loggerName) + " supplied, returning anonymous logger");
+ }
+
+ // Do not allow retrieval of the root logger by name
+ if (loggerName == rootLoggerName) {
+ handleError("log4javascript.getLogger: root logger may not be obtained by name");
+ }
+
+ // Create the logger for this name if it doesn't already exist
+ if (!loggers[loggerName]) {
+ var logger = new Logger(loggerName);
+ loggers[loggerName] = logger;
+ loggerNames.push(loggerName);
+
+ // Set up parent logger, if it doesn't exist
+ var lastDotIndex = loggerName.lastIndexOf(".");
+ var parentLogger;
+ if (lastDotIndex > -1) {
+ var parentLoggerName = loggerName.substring(0, lastDotIndex);
+ parentLogger = log4javascript.getLogger(parentLoggerName); // Recursively sets up grandparents etc.
+ } else {
+ parentLogger = rootLogger;
+ }
+ parentLogger.addChild(logger);
+ }
+ return loggers[loggerName];
+ };
+
+ var defaultLogger = null;
+ log4javascript.getDefaultLogger = function() {
+ if (!defaultLogger) {
+ defaultLogger = log4javascript.getLogger(defaultLoggerName);
+ var a = new log4javascript.PopUpAppender();
+ defaultLogger.addAppender(a);
+ }
+ return defaultLogger;
+ };
+
+ var nullLogger = null;
+ log4javascript.getNullLogger = function() {
+ if (!nullLogger) {
+ nullLogger = new Logger(nullLoggerName);
+ nullLogger.setLevel(Level.OFF);
+ }
+ return nullLogger;
+ };
+
+ // Destroys all loggers
+ log4javascript.resetConfiguration = function() {
+ rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);
+ loggers = {};
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Logging events
+
+ var LoggingEvent = function(logger, timeStamp, level, messages,
+ exception) {
+ this.logger = logger;
+ this.timeStamp = timeStamp;
+ this.timeStampInMilliseconds = timeStamp.getTime();
+ this.timeStampInSeconds = Math.floor(this.timeStampInMilliseconds / 1000);
+ this.milliseconds = this.timeStamp.getMilliseconds();
+ this.level = level;
+ this.messages = messages;
+ this.exception = exception;
+ };
+
+ LoggingEvent.prototype = {
+ getThrowableStrRep: function() {
+ return this.exception ?
+ getExceptionStringRep(this.exception) : "";
+ },
+ getCombinedMessages: function() {
+ return (this.messages.length == 1) ? this.messages[0] :
+ this.messages.join(newLine);
+ },
+ toString: function() {
+ return "LoggingEvent[" + this.level + "]";
+ }
+ };
+
+ log4javascript.LoggingEvent = LoggingEvent;
+
+ /* ---------------------------------------------------------------------- */
+ // Layout prototype
+
+ var Layout = function() {
+ };
+
+ Layout.prototype = {
+ defaults: {
+ loggerKey: "logger",
+ timeStampKey: "timestamp",
+ millisecondsKey: "milliseconds",
+ levelKey: "level",
+ messageKey: "message",
+ exceptionKey: "exception",
+ urlKey: "url"
+ },
+ loggerKey: "logger",
+ timeStampKey: "timestamp",
+ millisecondsKey: "milliseconds",
+ levelKey: "level",
+ messageKey: "message",
+ exceptionKey: "exception",
+ urlKey: "url",
+ batchHeader: "",
+ batchFooter: "",
+ batchSeparator: "",
+ returnsPostData: false,
+ overrideTimeStampsSetting: false,
+ useTimeStampsInMilliseconds: null,
+
+ format: function() {
+ handleError("Layout.format: layout supplied has no format() method");
+ },
+
+ ignoresThrowable: function() {
+ handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");
+ },
+
+ getContentType: function() {
+ return "text/plain";
+ },
+
+ allowBatching: function() {
+ return true;
+ },
+
+ setTimeStampsInMilliseconds: function(timeStampsInMilliseconds) {
+ this.overrideTimeStampsSetting = true;
+ this.useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);
+ },
+
+ isTimeStampsInMilliseconds: function() {
+ return this.overrideTimeStampsSetting ?
+ this.useTimeStampsInMilliseconds : useTimeStampsInMilliseconds;
+ },
+
+ getTimeStampValue: function(loggingEvent) {
+ return this.isTimeStampsInMilliseconds() ?
+ loggingEvent.timeStampInMilliseconds : loggingEvent.timeStampInSeconds;
+ },
+
+ getDataValues: function(loggingEvent, combineMessages) {
+ var dataValues = [
+ [this.loggerKey, loggingEvent.logger.name],
+ [this.timeStampKey, this.getTimeStampValue(loggingEvent)],
+ [this.levelKey, loggingEvent.level.name],
+ [this.urlKey, window.location.href],
+ [this.messageKey, combineMessages ? loggingEvent.getCombinedMessages() : loggingEvent.messages]
+ ];
+ if (!this.isTimeStampsInMilliseconds()) {
+ dataValues.push([this.millisecondsKey, loggingEvent.milliseconds]);
+ }
+ if (loggingEvent.exception) {
+ dataValues.push([this.exceptionKey, getExceptionStringRep(loggingEvent.exception)]);
+ }
+ if (this.hasCustomFields()) {
+ for (var i = 0, len = this.customFields.length; i < len; i++) {
+ var val = this.customFields[i].value;
+
+ // Check if the value is a function. If so, execute it, passing it the
+ // current layout and the logging event
+ if (typeof val === "function") {
+ val = val(this, loggingEvent);
+ }
+ dataValues.push([this.customFields[i].name, val]);
+ }
+ }
+ return dataValues;
+ },
+
+ setKeys: function(loggerKey, timeStampKey, levelKey, messageKey,
+ exceptionKey, urlKey, millisecondsKey) {
+ this.loggerKey = extractStringFromParam(loggerKey, this.defaults.loggerKey);
+ this.timeStampKey = extractStringFromParam(timeStampKey, this.defaults.timeStampKey);
+ this.levelKey = extractStringFromParam(levelKey, this.defaults.levelKey);
+ this.messageKey = extractStringFromParam(messageKey, this.defaults.messageKey);
+ this.exceptionKey = extractStringFromParam(exceptionKey, this.defaults.exceptionKey);
+ this.urlKey = extractStringFromParam(urlKey, this.defaults.urlKey);
+ this.millisecondsKey = extractStringFromParam(millisecondsKey, this.defaults.millisecondsKey);
+ },
+
+ setCustomField: function(name, value) {
+ var fieldUpdated = false;
+ for (var i = 0, len = this.customFields.length; i < len; i++) {
+ if (this.customFields[i].name === name) {
+ this.customFields[i].value = value;
+ fieldUpdated = true;
+ }
+ }
+ if (!fieldUpdated) {
+ this.customFields.push({"name": name, "value": value});
+ }
+ },
+
+ hasCustomFields: function() {
+ return (this.customFields.length > 0);
+ },
+
+ toString: function() {
+ handleError("Layout.toString: all layouts must override this method");
+ }
+ };
+
+ log4javascript.Layout = Layout;
+
+ /* ---------------------------------------------------------------------- */
+ // Appender prototype
+
+ var Appender = function() {};
+
+ Appender.prototype = new EventSupport();
+
+ Appender.prototype.layout = new PatternLayout();
+ Appender.prototype.threshold = Level.ALL;
+ Appender.prototype.loggers = [];
+
+ // Performs threshold checks before delegating actual logging to the
+ // subclass's specific append method.
+ Appender.prototype.doAppend = function(loggingEvent) {
+ if (enabled && loggingEvent.level.level >= this.threshold.level) {
+ this.append(loggingEvent);
+ }
+ };
+
+ Appender.prototype.append = function(loggingEvent) {};
+
+ Appender.prototype.setLayout = function(layout) {
+ if (layout instanceof Layout) {
+ this.layout = layout;
+ } else {
+ handleError("Appender.setLayout: layout supplied to " +
+ this.toString() + " is not a subclass of Layout");
+ }
+ };
+
+ Appender.prototype.getLayout = function() {
+ return this.layout;
+ };
+
+ Appender.prototype.setThreshold = function(threshold) {
+ if (threshold instanceof Level) {
+ this.threshold = threshold;
+ } else {
+ handleError("Appender.setThreshold: threshold supplied to " +
+ this.toString() + " is not a subclass of Level");
+ }
+ };
+
+ Appender.prototype.getThreshold = function() {
+ return this.threshold;
+ };
+
+ Appender.prototype.setAddedToLogger = function(logger) {
+ this.loggers.push(logger);
+ };
+
+ Appender.prototype.setRemovedFromLogger = function(logger) {
+ array_remove(this.loggers, logger);
+ };
+
+ Appender.prototype.group = emptyFunction;
+ Appender.prototype.groupEnd = emptyFunction;
+
+ Appender.prototype.toString = function() {
+ handleError("Appender.toString: all appenders must override this method");
+ };
+
+ log4javascript.Appender = Appender;
+
+ /* ---------------------------------------------------------------------- */
+ // SimpleLayout
+
+ function SimpleLayout() {
+ this.customFields = [];
+ }
+
+ SimpleLayout.prototype = new Layout();
+
+ SimpleLayout.prototype.format = function(loggingEvent) {
+ return loggingEvent.level.name + " - " + loggingEvent.getCombinedMessages();
+ };
+
+ SimpleLayout.prototype.ignoresThrowable = function() {
+ return true;
+ };
+
+ SimpleLayout.prototype.toString = function() {
+ return "SimpleLayout";
+ };
+
+ log4javascript.SimpleLayout = SimpleLayout;
+ /* ----------------------------------------------------------------------- */
+ // NullLayout
+
+ function NullLayout() {
+ this.customFields = [];
+ }
+
+ NullLayout.prototype = new Layout();
+
+ NullLayout.prototype.format = function(loggingEvent) {
+ return loggingEvent.messages;
+ };
+
+ NullLayout.prototype.ignoresThrowable = function() {
+ return true;
+ };
+
+ NullLayout.prototype.toString = function() {
+ return "NullLayout";
+ };
+
+ log4javascript.NullLayout = NullLayout;
+/* ---------------------------------------------------------------------- */
+ // XmlLayout
+
+ function XmlLayout(combineMessages) {
+ this.combineMessages = extractBooleanFromParam(combineMessages, true);
+ this.customFields = [];
+ }
+
+ XmlLayout.prototype = new Layout();
+
+ XmlLayout.prototype.isCombinedMessages = function() {
+ return this.combineMessages;
+ };
+
+ XmlLayout.prototype.getContentType = function() {
+ return "text/xml";
+ };
+
+ XmlLayout.prototype.escapeCdata = function(str) {
+ return str.replace(/\]\]>/, "]]>]]><![CDATA[");
+ };
+
+ XmlLayout.prototype.format = function(loggingEvent) {
+ var layout = this;
+ var i, len;
+ function formatMessage(message) {
+ message = (typeof message === "string") ? message : toStr(message);
+ return "<log4javascript:message><![CDATA[" +
+ layout.escapeCdata(message) + "]]></log4javascript:message>";
+ }
+
+ var str = "<log4javascript:event logger=\"" + loggingEvent.logger.name +
+ "\" timestamp=\"" + this.getTimeStampValue(loggingEvent) + "\"";
+ if (!this.isTimeStampsInMilliseconds()) {
+ str += " milliseconds=\"" + loggingEvent.milliseconds + "\"";
+ }
+ str += " level=\"" + loggingEvent.level.name + "\">" + newLine;
+ if (this.combineMessages) {
+ str += formatMessage(loggingEvent.getCombinedMessages());
+ } else {
+ str += "<log4javascript:messages>" + newLine;
+ for (i = 0, len = loggingEvent.messages.length; i < len; i++) {
+ str += formatMessage(loggingEvent.messages[i]) + newLine;
+ }
+ str += "</log4javascript:messages>" + newLine;
+ }
+ if (this.hasCustomFields()) {
+ for (i = 0, len = this.customFields.length; i < len; i++) {
+ str += "<log4javascript:customfield name=\"" +
+ this.customFields[i].name + "\"><![CDATA[" +
+ this.customFields[i].value.toString() +
+ "]]></log4javascript:customfield>" + newLine;
+ }
+ }
+ if (loggingEvent.exception) {
+ str += "<log4javascript:exception><![CDATA[" +
+ getExceptionStringRep(loggingEvent.exception) +
+ "]]></log4javascript:exception>" + newLine;
+ }
+ str += "</log4javascript:event>" + newLine + newLine;
+ return str;
+ };
+
+ XmlLayout.prototype.ignoresThrowable = function() {
+ return false;
+ };
+
+ XmlLayout.prototype.toString = function() {
+ return "XmlLayout";
+ };
+
+ log4javascript.XmlLayout = XmlLayout;
+ /* ---------------------------------------------------------------------- */
+ // JsonLayout related
+
+ function escapeNewLines(str) {
+ return str.replace(/\r\n|\r|\n/g, "\\r\\n");
+ }
+
+ function JsonLayout(readable, combineMessages) {
+ this.readable = extractBooleanFromParam(readable, false);
+ this.combineMessages = extractBooleanFromParam(combineMessages, true);
+ this.batchHeader = this.readable ? "[" + newLine : "[";
+ this.batchFooter = this.readable ? "]" + newLine : "]";
+ this.batchSeparator = this.readable ? "," + newLine : ",";
+ this.setKeys();
+ this.colon = this.readable ? ": " : ":";
+ this.tab = this.readable ? "\t" : "";
+ this.lineBreak = this.readable ? newLine : "";
+ this.customFields = [];
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // JsonLayout
+
+ JsonLayout.prototype = new Layout();
+
+ JsonLayout.prototype.isReadable = function() {
+ return this.readable;
+ };
+
+ JsonLayout.prototype.isCombinedMessages = function() {
+ return this.combineMessages;
+ };
+
+ JsonLayout.prototype.format = function(loggingEvent) {
+ var layout = this;
+ var dataValues = this.getDataValues(loggingEvent, this.combineMessages);
+ var str = "{" + this.lineBreak;
+ var i, len;
+
+ function formatValue(val, prefix, expand) {
+ // Check the type of the data value to decide whether quotation marks
+ // or expansion are required
+ var formattedValue;
+ var valType = typeof val;
+ if (val instanceof Date) {
+ formattedValue = String(val.getTime());
+ } else if (expand && (val instanceof Array)) {
+ formattedValue = "[" + layout.lineBreak;
+ for (var i = 0, len = val.length; i < len; i++) {
+ var childPrefix = prefix + layout.tab;
+ formattedValue += childPrefix + formatValue(val[i], childPrefix, false);
+ if (i < val.length - 1) {
+ formattedValue += ",";
+ }
+ formattedValue += layout.lineBreak;
+ }
+ formattedValue += prefix + "]";
+ } else if (valType !== "number" && valType !== "boolean") {
+ formattedValue = "\"" + escapeNewLines(toStr(val).replace(/\"/g, "\\\"")) + "\"";
+ } else {
+ formattedValue = val;
+ }
+ return formattedValue;
+ }
+
+ for (i = 0, len = dataValues.length - 1; i <= len; i++) {
+ str += this.tab + "\"" + dataValues[i][0] + "\"" + this.colon + formatValue(dataValues[i][1], this.tab, true);
+ if (i < len) {
+ str += ",";
+ }
+ str += this.lineBreak;
+ }
+
+ str += "}" + this.lineBreak;
+ return str;
+ };
+
+ JsonLayout.prototype.ignoresThrowable = function() {
+ return false;
+ };
+
+ JsonLayout.prototype.toString = function() {
+ return "JsonLayout";
+ };
+
+ JsonLayout.prototype.getContentType = function() {
+ return "application/json";
+ };
+
+ log4javascript.JsonLayout = JsonLayout;
+ /* ---------------------------------------------------------------------- */
+ // HttpPostDataLayout
+
+ function HttpPostDataLayout() {
+ this.setKeys();
+ this.customFields = [];
+ this.returnsPostData = true;
+ }
+
+ HttpPostDataLayout.prototype = new Layout();
+
+ // Disable batching
+ HttpPostDataLayout.prototype.allowBatching = function() {
+ return false;
+ };
+
+ HttpPostDataLayout.prototype.format = function(loggingEvent) {
+ var dataValues = this.getDataValues(loggingEvent);
+ var queryBits = [];
+ for (var i = 0, len = dataValues.length; i < len; i++) {
+ var val = (dataValues[i][1] instanceof Date) ?
+ String(dataValues[i][1].getTime()) : dataValues[i][1];
+ queryBits.push(urlEncode(dataValues[i][0]) + "=" + urlEncode(val));
+ }
+ return queryBits.join("&");
+ };
+
+ HttpPostDataLayout.prototype.ignoresThrowable = function(loggingEvent) {
+ return false;
+ };
+
+ HttpPostDataLayout.prototype.toString = function() {
+ return "HttpPostDataLayout";
+ };
+
+ log4javascript.HttpPostDataLayout = HttpPostDataLayout;
+ /* ---------------------------------------------------------------------- */
+ // formatObjectExpansion
+
+ function formatObjectExpansion(obj, depth, indentation) {
+ var objectsExpanded = [];
+
+ function doFormat(obj, depth, indentation) {
+ var i, j, len, childDepth, childIndentation, childLines, expansion,
+ childExpansion;
+
+ if (!indentation) {
+ indentation = "";
+ }
+
+ function formatString(text) {
+ var lines = splitIntoLines(text);
+ for (var j = 1, jLen = lines.length; j < jLen; j++) {
+ lines[j] = indentation + lines[j];
+ }
+ return lines.join(newLine);
+ }
+
+ if (obj === null) {
+ return "null";
+ } else if (typeof obj == "undefined") {
+ return "undefined";
+ } else if (typeof obj == "string") {
+ return formatString(obj);
+ } else if (typeof obj == "object" && array_contains(objectsExpanded, obj)) {
+ try {
+ expansion = toStr(obj);
+ } catch (ex) {
+ expansion = "Error formatting property. Details: " + getExceptionStringRep(ex);
+ }
+ return expansion + " [already expanded]";
+ } else if ((obj instanceof Array) && depth > 0) {
+ objectsExpanded.push(obj);
+ expansion = "[" + newLine;
+ childDepth = depth - 1;
+ childIndentation = indentation + " ";
+ childLines = [];
+ for (i = 0, len = obj.length; i < len; i++) {
+ try {
+ childExpansion = doFormat(obj[i], childDepth, childIndentation);
+ childLines.push(childIndentation + childExpansion);
+ } catch (ex) {
+ childLines.push(childIndentation + "Error formatting array member. Details: " +
+ getExceptionStringRep(ex) + "");
+ }
+ }
+ expansion += childLines.join("," + newLine) + newLine + indentation + "]";
+ return expansion;
+ } else if (Object.prototype.toString.call(obj) == "[object Date]") {
+ return obj.toString();
+ } else if (typeof obj == "object" && depth > 0) {
+ objectsExpanded.push(obj);
+ expansion = "{" + newLine;
+ childDepth = depth - 1;
+ childIndentation = indentation + " ";
+ childLines = [];
+ for (i in obj) {
+ try {
+ childExpansion = doFormat(obj[i], childDepth, childIndentation);
+ childLines.push(childIndentation + i + ": " + childExpansion);
+ } catch (ex) {
+ childLines.push(childIndentation + i + ": Error formatting property. Details: " +
+ getExceptionStringRep(ex));
+ }
+ }
+ expansion += childLines.join("," + newLine) + newLine + indentation + "}";
+ return expansion;
+ } else {
+ return formatString(toStr(obj));
+ }
+ }
+ return doFormat(obj, depth, indentation);
+ }
+ /* ---------------------------------------------------------------------- */
+ // Date-related stuff
+
+ var SimpleDateFormat;
+
+ (function() {
+ var regex = /('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;
+ var monthNames = ["January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"];
+ var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
+ var TEXT2 = 0, TEXT3 = 1, NUMBER = 2, YEAR = 3, MONTH = 4, TIMEZONE = 5;
+ var types = {
+ G : TEXT2,
+ y : YEAR,
+ M : MONTH,
+ w : NUMBER,
+ W : NUMBER,
+ D : NUMBER,
+ d : NUMBER,
+ F : NUMBER,
+ E : TEXT3,
+ a : TEXT2,
+ H : NUMBER,
+ k : NUMBER,
+ K : NUMBER,
+ h : NUMBER,
+ m : NUMBER,
+ s : NUMBER,
+ S : NUMBER,
+ Z : TIMEZONE
+ };
+ var ONE_DAY = 24 * 60 * 60 * 1000;
+ var ONE_WEEK = 7 * ONE_DAY;
+ var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK = 1;
+
+ var newDateAtMidnight = function(year, month, day) {
+ var d = new Date(year, month, day, 0, 0, 0);
+ d.setMilliseconds(0);
+ return d;
+ };
+
+ Date.prototype.getDifference = function(date) {
+ return this.getTime() - date.getTime();
+ };
+
+ Date.prototype.isBefore = function(d) {
+ return this.getTime() < d.getTime();
+ };
+
+ Date.prototype.getUTCTime = function() {
+ return Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(),
+ this.getSeconds(), this.getMilliseconds());
+ };
+
+ Date.prototype.getTimeSince = function(d) {
+ return this.getUTCTime() - d.getUTCTime();
+ };
+
+ Date.prototype.getPreviousSunday = function() {
+ // Using midday avoids any possibility of DST messing things up
+ var midday = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 12, 0, 0);
+ var previousSunday = new Date(midday.getTime() - this.getDay() * ONE_DAY);
+ return newDateAtMidnight(previousSunday.getFullYear(), previousSunday.getMonth(),
+ previousSunday.getDate());
+ };
+
+ Date.prototype.getWeekInYear = function(minimalDaysInFirstWeek) {
+ if (isUndefined(this.minimalDaysInFirstWeek)) {
+ minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;
+ }
+ var previousSunday = this.getPreviousSunday();
+ var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);
+ var numberOfSundays = previousSunday.isBefore(startOfYear) ?
+ 0 : 1 + Math.floor(previousSunday.getTimeSince(startOfYear) / ONE_WEEK);
+ var numberOfDaysInFirstWeek = 7 - startOfYear.getDay();
+ var weekInYear = numberOfSundays;
+ if (numberOfDaysInFirstWeek < minimalDaysInFirstWeek) {
+ weekInYear--;
+ }
+ return weekInYear;
+ };
+
+ Date.prototype.getWeekInMonth = function(minimalDaysInFirstWeek) {
+ if (isUndefined(this.minimalDaysInFirstWeek)) {
+ minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;
+ }
+ var previousSunday = this.getPreviousSunday();
+ var startOfMonth = newDateAtMidnight(this.getFullYear(), this.getMonth(), 1);
+ var numberOfSundays = previousSunday.isBefore(startOfMonth) ?
+ 0 : 1 + Math.floor(previousSunday.getTimeSince(startOfMonth) / ONE_WEEK);
+ var numberOfDaysInFirstWeek = 7 - startOfMonth.getDay();
+ var weekInMonth = numberOfSundays;
+ if (numberOfDaysInFirstWeek >= minimalDaysInFirstWeek) {
+ weekInMonth++;
+ }
+ return weekInMonth;
+ };
+
+ Date.prototype.getDayInYear = function() {
+ var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);
+ return 1 + Math.floor(this.getTimeSince(startOfYear) / ONE_DAY);
+ };
+
+ /* ------------------------------------------------------------------ */
+
+ SimpleDateFormat = function(formatString) {
+ this.formatString = formatString;
+ };
+
+ /**
+ * Sets the minimum number of days in a week in order for that week to
+ * be considered as belonging to a particular month or year
+ */
+ SimpleDateFormat.prototype.setMinimalDaysInFirstWeek = function(days) {
+ this.minimalDaysInFirstWeek = days;
+ };
+
+ SimpleDateFormat.prototype.getMinimalDaysInFirstWeek = function() {
+ return isUndefined(this.minimalDaysInFirstWeek) ?
+ DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK : this.minimalDaysInFirstWeek;
+ };
+
+ var padWithZeroes = function(str, len) {
+ while (str.length < len) {
+ str = "0" + str;
+ }
+ return str;
+ };
+
+ var formatText = function(data, numberOfLetters, minLength) {
+ return (numberOfLetters >= 4) ? data : data.substr(0, Math.max(minLength, numberOfLetters));
+ };
+
+ var formatNumber = function(data, numberOfLetters) {
+ var dataString = "" + data;
+ // Pad with 0s as necessary
+ return padWithZeroes(dataString, numberOfLetters);
+ };
+
+ SimpleDateFormat.prototype.format = function(date) {
+ var formattedString = "";
+ var result;
+ var searchString = this.formatString;
+ while ((result = regex.exec(searchString))) {
+ var quotedString = result[1];
+ var patternLetters = result[2];
+ var otherLetters = result[3];
+ var otherCharacters = result[4];
+
+ // If the pattern matched is quoted string, output the text between the quotes
+ if (quotedString) {
+ if (quotedString == "''") {
+ formattedString += "'";
+ } else {
+ formattedString += quotedString.substring(1, quotedString.length - 1);
+ }
+ } else if (otherLetters) {
+ // Swallow non-pattern letters by doing nothing here
+ } else if (otherCharacters) {
+ // Simply output other characters
+ formattedString += otherCharacters;
+ } else if (patternLetters) {
+ // Replace pattern letters
+ var patternLetter = patternLetters.charAt(0);
+ var numberOfLetters = patternLetters.length;
+ var rawData = "";
+ switch(patternLetter) {
+ case "G":
+ rawData = "AD";
+ break;
+ case "y":
+ rawData = date.getFullYear();
+ break;
+ case "M":
+ rawData = date.getMonth();
+ break;
+ case "w":
+ rawData = date.getWeekInYear(this.getMinimalDaysInFirstWeek());
+ break;
+ case "W":
+ rawData = date.getWeekInMonth(this.getMinimalDaysInFirstWeek());
+ break;
+ case "D":
+ rawData = date.getDayInYear();
+ break;
+ case "d":
+ rawData = date.getDate();
+ break;
+ case "F":
+ rawData = 1 + Math.floor((date.getDate() - 1) / 7);
+ break;
+ case "E":
+ rawData = dayNames[date.getDay()];
+ break;
+ case "a":
+ rawData = (date.getHours() >= 12) ? "PM" : "AM";
+ break;
+ case "H":
+ rawData = date.getHours();
+ break;
+ case "k":
+ rawData = date.getHours() || 24;
+ break;
+ case "K":
+ rawData = date.getHours() % 12;
+ break;
+ case "h":
+ rawData = (date.getHours() % 12) || 12;
+ break;
+ case "m":
+ rawData = date.getMinutes();
+ break;
+ case "s":
+ rawData = date.getSeconds();
+ break;
+ case "S":
+ rawData = date.getMilliseconds();
+ break;
+ case "Z":
+ rawData = date.getTimezoneOffset(); // This returns the number of minutes since GMT was this time.
+ break;
+ }
+ // Format the raw data depending on the type
+ switch(types[patternLetter]) {
+ case TEXT2:
+ formattedString += formatText(rawData, numberOfLetters, 2);
+ break;
+ case TEXT3:
+ formattedString += formatText(rawData, numberOfLetters, 3);
+ break;
+ case NUMBER:
+ formattedString += formatNumber(rawData, numberOfLetters);
+ break;
+ case YEAR:
+ if (numberOfLetters <= 3) {
+ // Output a 2-digit year
+ var dataString = "" + rawData;
+ formattedString += dataString.substr(2, 2);
+ } else {
+ formattedString += formatNumber(rawData, numberOfLetters);
+ }
+ break;
+ case MONTH:
+ if (numberOfLetters >= 3) {
+ formattedString += formatText(monthNames[rawData], numberOfLetters, numberOfLetters);
+ } else {
+ // NB. Months returned by getMonth are zero-based
+ formattedString += formatNumber(rawData + 1, numberOfLetters);
+ }
+ break;
+ case TIMEZONE:
+ var isPositive = (rawData > 0);
+ // The following line looks like a mistake but isn't
+ // because of the way getTimezoneOffset measures.
+ var prefix = isPositive ? "-" : "+";
+ var absData = Math.abs(rawData);
+
+ // Hours
+ var hours = "" + Math.floor(absData / 60);
+ hours = padWithZeroes(hours, 2);
+ // Minutes
+ var minutes = "" + (absData % 60);
+ minutes = padWithZeroes(minutes, 2);
+
+ formattedString += prefix + hours + minutes;
+ break;
+ }
+ }
+ searchString = searchString.substr(result.index + result[0].length);
+ }
+ return formattedString;
+ };
+ })();
+
+ log4javascript.SimpleDateFormat = SimpleDateFormat;
+
+ /* ---------------------------------------------------------------------- */
+ // PatternLayout
+
+ function PatternLayout(pattern) {
+ if (pattern) {
+ this.pattern = pattern;
+ } else {
+ this.pattern = PatternLayout.DEFAULT_CONVERSION_PATTERN;
+ }
+ this.customFields = [];
+ }
+
+ PatternLayout.TTCC_CONVERSION_PATTERN = "%r %p %c - %m%n";
+ PatternLayout.DEFAULT_CONVERSION_PATTERN = "%m%n";
+ PatternLayout.ISO8601_DATEFORMAT = "yyyy-MM-dd HH:mm:ss,SSS";
+ PatternLayout.DATETIME_DATEFORMAT = "dd MMM yyyy HH:mm:ss,SSS";
+ PatternLayout.ABSOLUTETIME_DATEFORMAT = "HH:mm:ss,SSS";
+
+ PatternLayout.prototype = new Layout();
+
+ PatternLayout.prototype.format = function(loggingEvent) {
+ var regex = /%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;
+ var formattedString = "";
+ var result;
+ var searchString = this.pattern;
+
+ // Cannot use regex global flag since it doesn't work with exec in IE5
+ while ((result = regex.exec(searchString))) {
+ var matchedString = result[0];
+ var padding = result[1];
+ var truncation = result[2];
+ var conversionCharacter = result[3];
+ var specifier = result[5];
+ var text = result[6];
+
+ // Check if the pattern matched was just normal text
+ if (text) {
+ formattedString += "" + text;
+ } else {
+ // Create a raw replacement string based on the conversion
+ // character and specifier
+ var replacement = "";
+ switch(conversionCharacter) {
+ case "a": // Array of messages
+ case "m": // Message
+ var depth = 0;
+ if (specifier) {
+ depth = parseInt(specifier, 10);
+ if (isNaN(depth)) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character '" + conversionCharacter +
+ "' - should be a number");
+ depth = 0;
+ }
+ }
+ var messages = (conversionCharacter === "a") ? loggingEvent.messages[0] : loggingEvent.messages;
+ for (var i = 0, len = messages.length; i < len; i++) {
+ if (i > 0 && (replacement.charAt(replacement.length - 1) !== " ")) {
+ replacement += " ";
+ }
+ if (depth === 0) {
+ replacement += messages[i];
+ } else {
+ replacement += formatObjectExpansion(messages[i], depth);
+ }
+ }
+ break;
+ case "c": // Logger name
+ var loggerName = loggingEvent.logger.name;
+ if (specifier) {
+ var precision = parseInt(specifier, 10);
+ var loggerNameBits = loggingEvent.logger.name.split(".");
+ if (precision >= loggerNameBits.length) {
+ replacement = loggerName;
+ } else {
+ replacement = loggerNameBits.slice(loggerNameBits.length - precision).join(".");
+ }
+ } else {
+ replacement = loggerName;
+ }
+ break;
+ case "d": // Date
+ var dateFormat = PatternLayout.ISO8601_DATEFORMAT;
+ if (specifier) {
+ dateFormat = specifier;
+ // Pick up special cases
+ if (dateFormat == "ISO8601") {
+ dateFormat = PatternLayout.ISO8601_DATEFORMAT;
+ } else if (dateFormat == "ABSOLUTE") {
+ dateFormat = PatternLayout.ABSOLUTETIME_DATEFORMAT;
+ } else if (dateFormat == "DATE") {
+ dateFormat = PatternLayout.DATETIME_DATEFORMAT;
+ }
+ }
+ // Format the date
+ replacement = (new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);
+ break;
+ case "f": // Custom field
+ if (this.hasCustomFields()) {
+ var fieldIndex = 0;
+ if (specifier) {
+ fieldIndex = parseInt(specifier, 10);
+ if (isNaN(fieldIndex)) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character 'f' - should be a number");
+ } else if (fieldIndex === 0) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character 'f' - must be greater than zero");
+ } else if (fieldIndex > this.customFields.length) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character 'f' - there aren't that many custom fields");
+ } else {
+ fieldIndex = fieldIndex - 1;
+ }
+ }
+ var val = this.customFields[fieldIndex].value;
+ if (typeof val == "function") {
+ val = val(this, loggingEvent);
+ }
+ replacement = val;
+ }
+ break;
+ case "n": // New line
+ replacement = newLine;
+ break;
+ case "p": // Level
+ replacement = loggingEvent.level.name;
+ break;
+ case "r": // Milliseconds since log4javascript startup
+ replacement = "" + loggingEvent.timeStamp.getDifference(applicationStartDate);
+ break;
+ case "%": // Literal % sign
+ replacement = "%";
+ break;
+ default:
+ replacement = matchedString;
+ break;
+ }
+ // Format the replacement according to any padding or
+ // truncation specified
+ var l;
+
+ // First, truncation
+ if (truncation) {
+ l = parseInt(truncation.substr(1), 10);
+ var strLen = replacement.length;
+ if (l < strLen) {
+ replacement = replacement.substring(strLen - l, strLen);
+ }
+ }
+ // Next, padding
+ if (padding) {
+ if (padding.charAt(0) == "-") {
+ l = parseInt(padding.substr(1), 10);
+ // Right pad with spaces
+ while (replacement.length < l) {
+ replacement += " ";
+ }
+ } else {
+ l = parseInt(padding, 10);
+ // Left pad with spaces
+ while (replacement.length < l) {
+ replacement = " " + replacement;
+ }
+ }
+ }
+ formattedString += replacement;
+ }
+ searchString = searchString.substr(result.index + result[0].length);
+ }
+ return formattedString;
+ };
+
+ PatternLayout.prototype.ignoresThrowable = function() {
+ return true;
+ };
+
+ PatternLayout.prototype.toString = function() {
+ return "PatternLayout";
+ };
+
+ log4javascript.PatternLayout = PatternLayout;
+ /* ---------------------------------------------------------------------- */
+ // AjaxAppender related
+
+ var xmlHttpFactories = [
+ function() { return new XMLHttpRequest(); },
+ function() { return new ActiveXObject("Msxml2.XMLHTTP"); },
+ function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
+ ];
+
+ var getXmlHttp = function(errorHandler) {
+ // This is only run the first time; the value of getXmlHttp gets
+ // replaced with the factory that succeeds on the first run
+ var xmlHttp = null, factory;
+ for (var i = 0, len = xmlHttpFactories.length; i < len; i++) {
+ factory = xmlHttpFactories[i];
+ try {
+ xmlHttp = factory();
+ getXmlHttp = factory;
+ return xmlHttp;
+ } catch (e) {
+ }
+ }
+ // If we're here, all factories have failed, so throw an error
+ if (errorHandler) {
+ errorHandler();
+ } else {
+ handleError("getXmlHttp: unable to obtain XMLHttpRequest object");
+ }
+ };
+
+ function isHttpRequestSuccessful(xmlHttp) {
+ return isUndefined(xmlHttp.status) || xmlHttp.status === 0 ||
+ (xmlHttp.status >= 200 && xmlHttp.status < 300) ||
+ xmlHttp.status == 1223 /* Fix for IE */;
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // AjaxAppender
+
+ function AjaxAppender(url) {
+ var appender = this;
+ var isSupported = true;
+ if (!url) {
+ handleError("AjaxAppender: URL must be specified in constructor");
+ isSupported = false;
+ }
+
+ var timed = this.defaults.timed;
+ var waitForResponse = this.defaults.waitForResponse;
+ var batchSize = this.defaults.batchSize;
+ var timerInterval = this.defaults.timerInterval;
+ var requestSuccessCallback = this.defaults.requestSuccessCallback;
+ var failCallback = this.defaults.failCallback;
+ var postVarName = this.defaults.postVarName;
+ var sendAllOnUnload = this.defaults.sendAllOnUnload;
+ var contentType = this.defaults.contentType;
+ var sessionId = null;
+
+ var queuedLoggingEvents = [];
+ var queuedRequests = [];
+ var headers = [];
+ var sending = false;
+ var initialized = false;
+
+ // Configuration methods. The function scope is used to prevent
+ // direct alteration to the appender configuration properties.
+ function checkCanConfigure(configOptionName) {
+ if (initialized) {
+ handleError("AjaxAppender: configuration option '" +
+ configOptionName +
+ "' may not be set after the appender has been initialized");
+ return false;
+ }
+ return true;
+ }
+
+ this.getSessionId = function() { return sessionId; };
+ this.setSessionId = function(sessionIdParam) {
+ sessionId = extractStringFromParam(sessionIdParam, null);
+ this.layout.setCustomField("sessionid", sessionId);
+ };
+
+ this.setLayout = function(layoutParam) {
+ if (checkCanConfigure("layout")) {
+ this.layout = layoutParam;
+ // Set the session id as a custom field on the layout, if not already present
+ if (sessionId !== null) {
+ this.setSessionId(sessionId);
+ }
+ }
+ };
+
+ this.isTimed = function() { return timed; };
+ this.setTimed = function(timedParam) {
+ if (checkCanConfigure("timed")) {
+ timed = bool(timedParam);
+ }
+ };
+
+ this.getTimerInterval = function() { return timerInterval; };
+ this.setTimerInterval = function(timerIntervalParam) {
+ if (checkCanConfigure("timerInterval")) {
+ timerInterval = extractIntFromParam(timerIntervalParam, timerInterval);
+ }
+ };
+
+ this.isWaitForResponse = function() { return waitForResponse; };
+ this.setWaitForResponse = function(waitForResponseParam) {
+ if (checkCanConfigure("waitForResponse")) {
+ waitForResponse = bool(waitForResponseParam);
+ }
+ };
+
+ this.getBatchSize = function() { return batchSize; };
+ this.setBatchSize = function(batchSizeParam) {
+ if (checkCanConfigure("batchSize")) {
+ batchSize = extractIntFromParam(batchSizeParam, batchSize);
+ }
+ };
+
+ this.isSendAllOnUnload = function() { return sendAllOnUnload; };
+ this.setSendAllOnUnload = function(sendAllOnUnloadParam) {
+ if (checkCanConfigure("sendAllOnUnload")) {
+ sendAllOnUnload = extractBooleanFromParam(sendAllOnUnloadParam, sendAllOnUnload);
+ }
+ };
+
+ this.setRequestSuccessCallback = function(requestSuccessCallbackParam) {
+ requestSuccessCallback = extractFunctionFromParam(requestSuccessCallbackParam, requestSuccessCallback);
+ };
+
+ this.setFailCallback = function(failCallbackParam) {
+ failCallback = extractFunctionFromParam(failCallbackParam, failCallback);
+ };
+
+ this.getPostVarName = function() { return postVarName; };
+ this.setPostVarName = function(postVarNameParam) {
+ if (checkCanConfigure("postVarName")) {
+ postVarName = extractStringFromParam(postVarNameParam, postVarName);
+ }
+ };
+
+ this.getHeaders = function() { return headers; };
+ this.addHeader = function(name, value) {
+ if (name.toLowerCase() == "content-type") {
+ contentType = value;
+ } else {
+ headers.push( { name: name, value: value } );
+ }
+ };
+
+ // Internal functions
+ function sendAll() {
+ if (isSupported && enabled) {
+ sending = true;
+ var currentRequestBatch;
+ if (waitForResponse) {
+ // Send the first request then use this function as the callback once
+ // the response comes back
+ if (queuedRequests.length > 0) {
+ currentRequestBatch = queuedRequests.shift();
+ sendRequest(preparePostData(currentRequestBatch), sendAll);
+ } else {
+ sending = false;
+ if (timed) {
+ scheduleSending();
+ }
+ }
+ } else {
+ // Rattle off all the requests without waiting to see the response
+ while ((currentRequestBatch = queuedRequests.shift())) {
+ sendRequest(preparePostData(currentRequestBatch));
+ }
+ sending = false;
+ if (timed) {
+ scheduleSending();
+ }
+ }
+ }
+ }
+
+ this.sendAll = sendAll;
+
+ // Called when the window unloads. At this point we're past caring about
+ // waiting for responses or timers or incomplete batches - everything
+ // must go, now
+ function sendAllRemaining() {
+ var sendingAnything = false;
+ if (isSupported && enabled) {
+ // Create requests for everything left over, batched as normal
+ var actualBatchSize = appender.getLayout().allowBatching() ? batchSize : 1;
+ var currentLoggingEvent;
+ var batchedLoggingEvents = [];
+ while ((currentLoggingEvent = queuedLoggingEvents.shift())) {
+ batchedLoggingEvents.push(currentLoggingEvent);
+ if (queuedLoggingEvents.length >= actualBatchSize) {
+ // Queue this batch of log entries
+ queuedRequests.push(batchedLoggingEvents);
+ batchedLoggingEvents = [];
+ }
+ }
+ // If there's a partially completed batch, add it
+ if (batchedLoggingEvents.length > 0) {
+ queuedRequests.push(batchedLoggingEvents);
+ }
+ sendingAnything = (queuedRequests.length > 0);
+ waitForResponse = false;
+ timed = false;
+ sendAll();
+ }
+ return sendingAnything;
+ }
+
+ this.sendAllRemaining = sendAllRemaining;
+
+ function preparePostData(batchedLoggingEvents) {
+ // Format the logging events
+ var formattedMessages = [];
+ var currentLoggingEvent;
+ var postData = "";
+ while ((currentLoggingEvent = batchedLoggingEvents.shift())) {
+ var currentFormattedMessage = appender.getLayout().format(currentLoggingEvent);
+ if (appender.getLayout().ignoresThrowable()) {
+ currentFormattedMessage += currentLoggingEvent.getThrowableStrRep();
+ }
+ formattedMessages.push(currentFormattedMessage);
+ }
+ // Create the post data string
+ if (batchedLoggingEvents.length == 1) {
+ postData = formattedMessages.join("");
+ } else {
+ postData = appender.getLayout().batchHeader +
+ formattedMessages.join(appender.getLayout().batchSeparator) +
+ appender.getLayout().batchFooter;
+ }
+ if (contentType == appender.defaults.contentType) {
+ postData = appender.getLayout().returnsPostData ? postData :
+ urlEncode(postVarName) + "=" + urlEncode(postData);
+ // Add the layout name to the post data
+ if (postData.length > 0) {
+ postData += "&";
+ }
+ postData += "layout=" + urlEncode(appender.getLayout().toString());
+ }
+ return postData;
+ }
+
+ function scheduleSending() {
+ window.setTimeout(sendAll, timerInterval);
+ }
+
+ function xmlHttpErrorHandler() {
+ var msg = "AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";
+ handleError(msg);
+ isSupported = false;
+ if (failCallback) {
+ failCallback(msg);
+ }
+ }
+
+ function sendRequest(postData, successCallback) {
+ try {
+ var xmlHttp = getXmlHttp(xmlHttpErrorHandler);
+ if (isSupported) {
+ if (xmlHttp.overrideMimeType) {
+ xmlHttp.overrideMimeType(appender.getLayout().getContentType());
+ }
+ xmlHttp.onreadystatechange = function() {
+ if (xmlHttp.readyState == 4) {
+ if (isHttpRequestSuccessful(xmlHttp)) {
+ if (requestSuccessCallback) {
+ requestSuccessCallback(xmlHttp);
+ }
+ if (successCallback) {
+ successCallback(xmlHttp);
+ }
+ } else {
+ var msg = "AjaxAppender.append: XMLHttpRequest request to URL " +
+ url + " returned status code " + xmlHttp.status;
+ handleError(msg);
+ if (failCallback) {
+ failCallback(msg);
+ }
+ }
+ xmlHttp.onreadystatechange = emptyFunction;
+ xmlHttp = null;
+ }
+ };
+ xmlHttp.open("POST", url, true);
+ try {
+ for (var i = 0, header; header = headers[i++]; ) {
+ xmlHttp.setRequestHeader(header.name, header.value);
+ }
+ xmlHttp.setRequestHeader("Content-Type", contentType);
+ } catch (headerEx) {
+ var msg = "AjaxAppender.append: your browser's XMLHttpRequest implementation" +
+ " does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";
+ handleError(msg);
+ isSupported = false;
+ if (failCallback) {
+ failCallback(msg);
+ }
+ return;
+ }
+ xmlHttp.send(postData);
+ }
+ } catch (ex) {
+ var errMsg = "AjaxAppender.append: error sending log message to " + url;
+ handleError(errMsg, ex);
+ isSupported = false;
+ if (failCallback) {
+ failCallback(errMsg + ". Details: " + getExceptionStringRep(ex));
+ }
+ }
+ }
+
+ this.append = function(loggingEvent) {
+ if (isSupported) {
+ if (!initialized) {
+ init();
+ }
+ queuedLoggingEvents.push(loggingEvent);
+ var actualBatchSize = this.getLayout().allowBatching() ? batchSize : 1;
+
+ if (queuedLoggingEvents.length >= actualBatchSize) {
+ var currentLoggingEvent;
+ var batchedLoggingEvents = [];
+ while ((currentLoggingEvent = queuedLoggingEvents.shift())) {
+ batchedLoggingEvents.push(currentLoggingEvent);
+ }
+ // Queue this batch of log entries
+ queuedRequests.push(batchedLoggingEvents);
+
+ // If using a timer, the queue of requests will be processed by the
+ // timer function, so nothing needs to be done here.
+ if (!timed && (!waitForResponse || (waitForResponse && !sending))) {
+ sendAll();
+ }
+ }
+ }
+ };
+
+ function init() {
+ initialized = true;
+ // Add unload event to send outstanding messages
+ if (sendAllOnUnload) {
+ var oldBeforeUnload = window.onbeforeunload;
+ window.onbeforeunload = function() {
+ if (oldBeforeUnload) {
+ oldBeforeUnload();
+ }
+ if (sendAllRemaining()) {
+ return "Sending log messages";
+ }
+ };
+ }
+ // Start timer
+ if (timed) {
+ scheduleSending();
+ }
+ }
+ }
+
+ AjaxAppender.prototype = new Appender();
+
+ AjaxAppender.prototype.defaults = {
+ waitForResponse: false,
+ timed: false,
+ timerInterval: 1000,
+ batchSize: 1,
+ sendAllOnUnload: false,
+ requestSuccessCallback: null,
+ failCallback: null,
+ postVarName: "data",
+ contentType: "application/x-www-form-urlencoded"
+ };
+
+ AjaxAppender.prototype.layout = new HttpPostDataLayout();
+
+ AjaxAppender.prototype.toString = function() {
+ return "AjaxAppender";
+ };
+
+ log4javascript.AjaxAppender = AjaxAppender;
+
+ /* ---------------------------------------------------------------------- */
+ // Main load
+
+ log4javascript.setDocumentReady = function() {
+ pageLoaded = true;
+ log4javascript.dispatchEvent("load", {});
+ };
+
+ if (window.addEventListener) {
+ window.addEventListener("load", log4javascript.setDocumentReady, false);
+ } else if (window.attachEvent) {
+ window.attachEvent("onload", log4javascript.setDocumentReady);
+ } else {
+ var oldOnload = window.onload;
+ if (typeof window.onload != "function") {
+ window.onload = log4javascript.setDocumentReady;
+ } else {
+ window.onload = function(evt) {
+ if (oldOnload) {
+ oldOnload(evt);
+ }
+ log4javascript.setDocumentReady();
+ };
+ }
+ }
+
+ // Ensure that the log4javascript object is available in the window. This
+ // is necessary for log4javascript to be available in IE if loaded using
+ // Dojo's module system
+ window.log4javascript = log4javascript;
+
+ return log4javascript;
+})();
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_uncompressed.js b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_uncompressed.js
new file mode 100644
index 0000000..a644e3b
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/log4javascript_uncompressed.js
@@ -0,0 +1,5879 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+/**
+ * log4javascript
+ *
+ * log4javascript is a logging framework for JavaScript based on log4j
+ * for Java. This file contains all core log4javascript code and is the only
+ * file required to use log4javascript, unless you require support for
+ * document.domain, in which case you will also need console.html, which must be
+ * stored in the same directory as the main log4javascript.js file.
+ *
+ * Author: Tim Down <tim@log4javascript.org>
+ * Version: 1.4.6
+ * Edition: log4javascript
+ * Build date: 19 March 2013
+ * Website: http://log4javascript.org
+ */
+
+/* -------------------------------------------------------------------------- */
+// Array-related stuff
+
+// Next three methods are solely for IE5, which is missing them
+if (!Array.prototype.push) {
+ Array.prototype.push = function() {
+ for (var i = 0, len = arguments.length; i < len; i++){
+ this[this.length] = arguments[i];
+ }
+ return this.length;
+ };
+}
+
+if (!Array.prototype.shift) {
+ Array.prototype.shift = function() {
+ if (this.length > 0) {
+ var firstItem = this[0];
+ for (var i = 0, len = this.length - 1; i < len; i++) {
+ this[i] = this[i + 1];
+ }
+ this.length = this.length - 1;
+ return firstItem;
+ }
+ };
+}
+
+if (!Array.prototype.splice) {
+ Array.prototype.splice = function(startIndex, deleteCount) {
+ var itemsAfterDeleted = this.slice(startIndex + deleteCount);
+ var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);
+ this.length = startIndex;
+ // Copy the arguments into a proper Array object
+ var argumentsArray = [];
+ for (var i = 0, len = arguments.length; i < len; i++) {
+ argumentsArray[i] = arguments[i];
+ }
+ var itemsToAppend = (argumentsArray.length > 2) ?
+ itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;
+ for (i = 0, len = itemsToAppend.length; i < len; i++) {
+ this.push(itemsToAppend[i]);
+ }
+ return itemsDeleted;
+ };
+}
+
+/* -------------------------------------------------------------------------- */
+
+var log4javascript = (function() {
+
+ function isUndefined(obj) {
+ return typeof obj == "undefined";
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // Custom event support
+
+ function EventSupport() {}
+
+ EventSupport.prototype = {
+ eventTypes: [],
+ eventListeners: {},
+ setEventTypes: function(eventTypesParam) {
+ if (eventTypesParam instanceof Array) {
+ this.eventTypes = eventTypesParam;
+ this.eventListeners = {};
+ for (var i = 0, len = this.eventTypes.length; i < len; i++) {
+ this.eventListeners[this.eventTypes[i]] = [];
+ }
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: setEventTypes: eventTypes parameter must be an Array");
+ }
+ },
+
+ addEventListener: function(eventType, listener) {
+ if (typeof listener == "function") {
+ if (!array_contains(this.eventTypes, eventType)) {
+ handleError("log4javascript.EventSupport [" + this + "]: addEventListener: no event called '" + eventType + "'");
+ }
+ this.eventListeners[eventType].push(listener);
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: addEventListener: listener must be a function");
+ }
+ },
+
+ removeEventListener: function(eventType, listener) {
+ if (typeof listener == "function") {
+ if (!array_contains(this.eventTypes, eventType)) {
+ handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: no event called '" + eventType + "'");
+ }
+ array_remove(this.eventListeners[eventType], listener);
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: listener must be a function");
+ }
+ },
+
+ dispatchEvent: function(eventType, eventArgs) {
+ if (array_contains(this.eventTypes, eventType)) {
+ var listeners = this.eventListeners[eventType];
+ for (var i = 0, len = listeners.length; i < len; i++) {
+ listeners[i](this, eventType, eventArgs);
+ }
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: dispatchEvent: no event called '" + eventType + "'");
+ }
+ }
+ };
+
+ /* -------------------------------------------------------------------------- */
+
+ var applicationStartDate = new Date();
+ var uniqueId = "log4javascript_" + applicationStartDate.getTime() + "_" +
+ Math.floor(Math.random() * 100000000);
+ var emptyFunction = function() {};
+ var newLine = "\r\n";
+ var pageLoaded = false;
+
+ // Create main log4javascript object; this will be assigned public properties
+ function Log4JavaScript() {}
+ Log4JavaScript.prototype = new EventSupport();
+
+ log4javascript = new Log4JavaScript();
+ log4javascript.version = "1.4.6";
+ log4javascript.edition = "log4javascript";
+
+ /* -------------------------------------------------------------------------- */
+ // Utility functions
+
+ function toStr(obj) {
+ if (obj && obj.toString) {
+ return obj.toString();
+ } else {
+ return String(obj);
+ }
+ }
+
+ function getExceptionMessage(ex) {
+ if (ex.message) {
+ return ex.message;
+ } else if (ex.description) {
+ return ex.description;
+ } else {
+ return toStr(ex);
+ }
+ }
+
+ // Gets the portion of the URL after the last slash
+ function getUrlFileName(url) {
+ var lastSlashIndex = Math.max(url.lastIndexOf("/"), url.lastIndexOf("\\"));
+ return url.substr(lastSlashIndex + 1);
+ }
+
+ // Returns a nicely formatted representation of an error
+ function getExceptionStringRep(ex) {
+ if (ex) {
+ var exStr = "Exception: " + getExceptionMessage(ex);
+ try {
+ if (ex.lineNumber) {
+ exStr += " on line number " + ex.lineNumber;
+ }
+ if (ex.fileName) {
+ exStr += " in file " + getUrlFileName(ex.fileName);
+ }
+ } catch (localEx) {
+ logLog.warn("Unable to obtain file and line information for error");
+ }
+ if (showStackTraces && ex.stack) {
+ exStr += newLine + "Stack trace:" + newLine + ex.stack;
+ }
+ return exStr;
+ }
+ return null;
+ }
+
+ function bool(obj) {
+ return Boolean(obj);
+ }
+
+ function trim(str) {
+ return str.replace(/^\s+/, "").replace(/\s+$/, "");
+ }
+
+ function splitIntoLines(text) {
+ // Ensure all line breaks are \n only
+ var text2 = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
+ return text2.split("\n");
+ }
+
+ var urlEncode = (typeof window.encodeURIComponent != "undefined") ?
+ function(str) {
+ return encodeURIComponent(str);
+ }:
+ function(str) {
+ return escape(str).replace(/\+/g, "%2B").replace(/"/g, "%22").replace(/'/g, "%27").replace(/\//g, "%2F").replace(/=/g, "%3D");
+ };
+
+ var urlDecode = (typeof window.decodeURIComponent != "undefined") ?
+ function(str) {
+ return decodeURIComponent(str);
+ }:
+ function(str) {
+ return unescape(str).replace(/%2B/g, "+").replace(/%22/g, "\"").replace(/%27/g, "'").replace(/%2F/g, "/").replace(/%3D/g, "=");
+ };
+
+ function array_remove(arr, val) {
+ var index = -1;
+ for (var i = 0, len = arr.length; i < len; i++) {
+ if (arr[i] === val) {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0) {
+ arr.splice(index, 1);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function array_contains(arr, val) {
+ for(var i = 0, len = arr.length; i < len; i++) {
+ if (arr[i] == val) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function extractBooleanFromParam(param, defaultValue) {
+ if (isUndefined(param)) {
+ return defaultValue;
+ } else {
+ return bool(param);
+ }
+ }
+
+ function extractStringFromParam(param, defaultValue) {
+ if (isUndefined(param)) {
+ return defaultValue;
+ } else {
+ return String(param);
+ }
+ }
+
+ function extractIntFromParam(param, defaultValue) {
+ if (isUndefined(param)) {
+ return defaultValue;
+ } else {
+ try {
+ var value = parseInt(param, 10);
+ return isNaN(value) ? defaultValue : value;
+ } catch (ex) {
+ logLog.warn("Invalid int param " + param, ex);
+ return defaultValue;
+ }
+ }
+ }
+
+ function extractFunctionFromParam(param, defaultValue) {
+ if (typeof param == "function") {
+ return param;
+ } else {
+ return defaultValue;
+ }
+ }
+
+ function isError(err) {
+ return (err instanceof Error);
+ }
+
+ if (!Function.prototype.apply){
+ Function.prototype.apply = function(obj, args) {
+ var methodName = "__apply__";
+ if (typeof obj[methodName] != "undefined") {
+ methodName += String(Math.random()).substr(2);
+ }
+ obj[methodName] = this;
+
+ var argsStrings = [];
+ for (var i = 0, len = args.length; i < len; i++) {
+ argsStrings[i] = "args[" + i + "]";
+ }
+ var script = "obj." + methodName + "(" + argsStrings.join(",") + ")";
+ var returnValue = eval(script);
+ delete obj[methodName];
+ return returnValue;
+ };
+ }
+
+ if (!Function.prototype.call){
+ Function.prototype.call = function(obj) {
+ var args = [];
+ for (var i = 1, len = arguments.length; i < len; i++) {
+ args[i - 1] = arguments[i];
+ }
+ return this.apply(obj, args);
+ };
+ }
+
+ function getListenersPropertyName(eventName) {
+ return "__log4javascript_listeners__" + eventName;
+ }
+
+ function addEvent(node, eventName, listener, useCapture, win) {
+ win = win ? win : window;
+ if (node.addEventListener) {
+ node.addEventListener(eventName, listener, useCapture);
+ } else if (node.attachEvent) {
+ node.attachEvent("on" + eventName, listener);
+ } else {
+ var propertyName = getListenersPropertyName(eventName);
+ if (!node[propertyName]) {
+ node[propertyName] = [];
+ // Set event handler
+ node["on" + eventName] = function(evt) {
+ evt = getEvent(evt, win);
+ var listenersPropertyName = getListenersPropertyName(eventName);
+
+ // Clone the array of listeners to leave the original untouched
+ var listeners = this[listenersPropertyName].concat([]);
+ var currentListener;
+
+ // Call each listener in turn
+ while ((currentListener = listeners.shift())) {
+ currentListener.call(this, evt);
+ }
+ };
+ }
+ node[propertyName].push(listener);
+ }
+ }
+
+ function removeEvent(node, eventName, listener, useCapture) {
+ if (node.removeEventListener) {
+ node.removeEventListener(eventName, listener, useCapture);
+ } else if (node.detachEvent) {
+ node.detachEvent("on" + eventName, listener);
+ } else {
+ var propertyName = getListenersPropertyName(eventName);
+ if (node[propertyName]) {
+ array_remove(node[propertyName], listener);
+ }
+ }
+ }
+
+ function getEvent(evt, win) {
+ win = win ? win : window;
+ return evt ? evt : win.event;
+ }
+
+ function stopEventPropagation(evt) {
+ if (evt.stopPropagation) {
+ evt.stopPropagation();
+ } else if (typeof evt.cancelBubble != "undefined") {
+ evt.cancelBubble = true;
+ }
+ evt.returnValue = false;
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // Simple logging for log4javascript itself
+
+ var logLog = {
+ quietMode: false,
+
+ debugMessages: [],
+
+ setQuietMode: function(quietMode) {
+ this.quietMode = bool(quietMode);
+ },
+
+ numberOfErrors: 0,
+
+ alertAllErrors: false,
+
+ setAlertAllErrors: function(alertAllErrors) {
+ this.alertAllErrors = alertAllErrors;
+ },
+
+ debug: function(message) {
+ this.debugMessages.push(message);
+ },
+
+ displayDebug: function() {
+ alert(this.debugMessages.join(newLine));
+ },
+
+ warn: function(message, exception) {
+ },
+
+ error: function(message, exception) {
+ if (++this.numberOfErrors == 1 || this.alertAllErrors) {
+ if (!this.quietMode) {
+ var alertMessage = "log4javascript error: " + message;
+ if (exception) {
+ alertMessage += newLine + newLine + "Original error: " + getExceptionStringRep(exception);
+ }
+ alert(alertMessage);
+ }
+ }
+ }
+ };
+ log4javascript.logLog = logLog;
+
+ log4javascript.setEventTypes(["load", "error"]);
+
+ function handleError(message, exception) {
+ logLog.error(message, exception);
+ log4javascript.dispatchEvent("error", { "message": message, "exception": exception });
+ }
+
+ log4javascript.handleError = handleError;
+
+ /* ---------------------------------------------------------------------- */
+
+ var enabled = !((typeof log4javascript_disabled != "undefined") &&
+ log4javascript_disabled);
+
+ log4javascript.setEnabled = function(enable) {
+ enabled = bool(enable);
+ };
+
+ log4javascript.isEnabled = function() {
+ return enabled;
+ };
+
+ var useTimeStampsInMilliseconds = true;
+
+ log4javascript.setTimeStampsInMilliseconds = function(timeStampsInMilliseconds) {
+ useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);
+ };
+
+ log4javascript.isTimeStampsInMilliseconds = function() {
+ return useTimeStampsInMilliseconds;
+ };
+
+
+ // This evaluates the given expression in the current scope, thus allowing
+ // scripts to access private variables. Particularly useful for testing
+ log4javascript.evalInScope = function(expr) {
+ return eval(expr);
+ };
+
+ var showStackTraces = false;
+
+ log4javascript.setShowStackTraces = function(show) {
+ showStackTraces = bool(show);
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Levels
+
+ var Level = function(level, name) {
+ this.level = level;
+ this.name = name;
+ };
+
+ Level.prototype = {
+ toString: function() {
+ return this.name;
+ },
+ equals: function(level) {
+ return this.level == level.level;
+ },
+ isGreaterOrEqual: function(level) {
+ return this.level >= level.level;
+ }
+ };
+
+ Level.ALL = new Level(Number.MIN_VALUE, "ALL");
+ Level.TRACE = new Level(10000, "TRACE");
+ Level.DEBUG = new Level(20000, "DEBUG");
+ Level.INFO = new Level(30000, "INFO");
+ Level.WARN = new Level(40000, "WARN");
+ Level.ERROR = new Level(50000, "ERROR");
+ Level.FATAL = new Level(60000, "FATAL");
+ Level.OFF = new Level(Number.MAX_VALUE, "OFF");
+
+ log4javascript.Level = Level;
+
+ /* ---------------------------------------------------------------------- */
+ // Timers
+
+ function Timer(name, level) {
+ this.name = name;
+ this.level = isUndefined(level) ? Level.INFO : level;
+ this.start = new Date();
+ }
+
+ Timer.prototype.getElapsedTime = function() {
+ return new Date().getTime() - this.start.getTime();
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Loggers
+
+ var anonymousLoggerName = "[anonymous]";
+ var defaultLoggerName = "[default]";
+ var nullLoggerName = "[null]";
+ var rootLoggerName = "root";
+
+ function Logger(name) {
+ this.name = name;
+ this.parent = null;
+ this.children = [];
+
+ var appenders = [];
+ var loggerLevel = null;
+ var isRoot = (this.name === rootLoggerName);
+ var isNull = (this.name === nullLoggerName);
+
+ var appenderCache = null;
+ var appenderCacheInvalidated = false;
+
+ this.addChild = function(childLogger) {
+ this.children.push(childLogger);
+ childLogger.parent = this;
+ childLogger.invalidateAppenderCache();
+ };
+
+ // Additivity
+ var additive = true;
+ this.getAdditivity = function() {
+ return additive;
+ };
+
+ this.setAdditivity = function(additivity) {
+ var valueChanged = (additive != additivity);
+ additive = additivity;
+ if (valueChanged) {
+ this.invalidateAppenderCache();
+ }
+ };
+
+ // Create methods that use the appenders variable in this scope
+ this.addAppender = function(appender) {
+ if (isNull) {
+ handleError("Logger.addAppender: you may not add an appender to the null logger");
+ } else {
+ if (appender instanceof log4javascript.Appender) {
+ if (!array_contains(appenders, appender)) {
+ appenders.push(appender);
+ appender.setAddedToLogger(this);
+ this.invalidateAppenderCache();
+ }
+ } else {
+ handleError("Logger.addAppender: appender supplied ('" +
+ toStr(appender) + "') is not a subclass of Appender");
+ }
+ }
+ };
+
+ this.removeAppender = function(appender) {
+ array_remove(appenders, appender);
+ appender.setRemovedFromLogger(this);
+ this.invalidateAppenderCache();
+ };
+
+ this.removeAllAppenders = function() {
+ var appenderCount = appenders.length;
+ if (appenderCount > 0) {
+ for (var i = 0; i < appenderCount; i++) {
+ appenders[i].setRemovedFromLogger(this);
+ }
+ appenders.length = 0;
+ this.invalidateAppenderCache();
+ }
+ };
+
+ this.getEffectiveAppenders = function() {
+ if (appenderCache === null || appenderCacheInvalidated) {
+ // Build appender cache
+ var parentEffectiveAppenders = (isRoot || !this.getAdditivity()) ?
+ [] : this.parent.getEffectiveAppenders();
+ appenderCache = parentEffectiveAppenders.concat(appenders);
+ appenderCacheInvalidated = false;
+ }
+ return appenderCache;
+ };
+
+ this.invalidateAppenderCache = function() {
+ appenderCacheInvalidated = true;
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ this.children[i].invalidateAppenderCache();
+ }
+ };
+
+ this.log = function(level, params) {
+ if (enabled && level.isGreaterOrEqual(this.getEffectiveLevel())) {
+ // Check whether last param is an exception
+ var exception;
+ var finalParamIndex = params.length - 1;
+ var lastParam = params[finalParamIndex];
+ if (params.length > 1 && isError(lastParam)) {
+ exception = lastParam;
+ finalParamIndex--;
+ }
+
+ // Construct genuine array for the params
+ var messages = [];
+ for (var i = 0; i <= finalParamIndex; i++) {
+ messages[i] = params[i];
+ }
+
+ var loggingEvent = new LoggingEvent(
+ this, new Date(), level, messages, exception);
+
+ this.callAppenders(loggingEvent);
+ }
+ };
+
+ this.callAppenders = function(loggingEvent) {
+ var effectiveAppenders = this.getEffectiveAppenders();
+ for (var i = 0, len = effectiveAppenders.length; i < len; i++) {
+ effectiveAppenders[i].doAppend(loggingEvent);
+ }
+ };
+
+ this.setLevel = function(level) {
+ // Having a level of null on the root logger would be very bad.
+ if (isRoot && level === null) {
+ handleError("Logger.setLevel: you cannot set the level of the root logger to null");
+ } else if (level instanceof Level) {
+ loggerLevel = level;
+ } else {
+ handleError("Logger.setLevel: level supplied to logger " +
+ this.name + " is not an instance of log4javascript.Level");
+ }
+ };
+
+ this.getLevel = function() {
+ return loggerLevel;
+ };
+
+ this.getEffectiveLevel = function() {
+ for (var logger = this; logger !== null; logger = logger.parent) {
+ var level = logger.getLevel();
+ if (level !== null) {
+ return level;
+ }
+ }
+ };
+
+ this.group = function(name, initiallyExpanded) {
+ if (enabled) {
+ var effectiveAppenders = this.getEffectiveAppenders();
+ for (var i = 0, len = effectiveAppenders.length; i < len; i++) {
+ effectiveAppenders[i].group(name, initiallyExpanded);
+ }
+ }
+ };
+
+ this.groupEnd = function() {
+ if (enabled) {
+ var effectiveAppenders = this.getEffectiveAppenders();
+ for (var i = 0, len = effectiveAppenders.length; i < len; i++) {
+ effectiveAppenders[i].groupEnd();
+ }
+ }
+ };
+
+ var timers = {};
+
+ this.time = function(name, level) {
+ if (enabled) {
+ if (isUndefined(name)) {
+ handleError("Logger.time: a name for the timer must be supplied");
+ } else if (level && !(level instanceof Level)) {
+ handleError("Logger.time: level supplied to timer " +
+ name + " is not an instance of log4javascript.Level");
+ } else {
+ timers[name] = new Timer(name, level);
+ }
+ }
+ };
+
+ this.timeEnd = function(name) {
+ if (enabled) {
+ if (isUndefined(name)) {
+ handleError("Logger.timeEnd: a name for the timer must be supplied");
+ } else if (timers[name]) {
+ var timer = timers[name];
+ var milliseconds = timer.getElapsedTime();
+ this.log(timer.level, ["Timer " + toStr(name) + " completed in " + milliseconds + "ms"]);
+ delete timers[name];
+ } else {
+ logLog.warn("Logger.timeEnd: no timer found with name " + name);
+ }
+ }
+ };
+
+ this.assert = function(expr) {
+ if (enabled && !expr) {
+ var args = [];
+ for (var i = 1, len = arguments.length; i < len; i++) {
+ args.push(arguments[i]);
+ }
+ args = (args.length > 0) ? args : ["Assertion Failure"];
+ args.push(newLine);
+ args.push(expr);
+ this.log(Level.ERROR, args);
+ }
+ };
+
+ this.toString = function() {
+ return "Logger[" + this.name + "]";
+ };
+ }
+
+ Logger.prototype = {
+ trace: function() {
+ this.log(Level.TRACE, arguments);
+ },
+
+ debug: function() {
+ this.log(Level.DEBUG, arguments);
+ },
+
+ info: function() {
+ this.log(Level.INFO, arguments);
+ },
+
+ warn: function() {
+ this.log(Level.WARN, arguments);
+ },
+
+ error: function() {
+ this.log(Level.ERROR, arguments);
+ },
+
+ fatal: function() {
+ this.log(Level.FATAL, arguments);
+ },
+
+ isEnabledFor: function(level) {
+ return level.isGreaterOrEqual(this.getEffectiveLevel());
+ },
+
+ isTraceEnabled: function() {
+ return this.isEnabledFor(Level.TRACE);
+ },
+
+ isDebugEnabled: function() {
+ return this.isEnabledFor(Level.DEBUG);
+ },
+
+ isInfoEnabled: function() {
+ return this.isEnabledFor(Level.INFO);
+ },
+
+ isWarnEnabled: function() {
+ return this.isEnabledFor(Level.WARN);
+ },
+
+ isErrorEnabled: function() {
+ return this.isEnabledFor(Level.ERROR);
+ },
+
+ isFatalEnabled: function() {
+ return this.isEnabledFor(Level.FATAL);
+ }
+ };
+
+ Logger.prototype.trace.isEntryPoint = true;
+ Logger.prototype.debug.isEntryPoint = true;
+ Logger.prototype.info.isEntryPoint = true;
+ Logger.prototype.warn.isEntryPoint = true;
+ Logger.prototype.error.isEntryPoint = true;
+ Logger.prototype.fatal.isEntryPoint = true;
+
+ /* ---------------------------------------------------------------------- */
+ // Logger access methods
+
+ // Hashtable of loggers keyed by logger name
+ var loggers = {};
+ var loggerNames = [];
+
+ var ROOT_LOGGER_DEFAULT_LEVEL = Level.DEBUG;
+ var rootLogger = new Logger(rootLoggerName);
+ rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);
+
+ log4javascript.getRootLogger = function() {
+ return rootLogger;
+ };
+
+ log4javascript.getLogger = function(loggerName) {
+ // Use default logger if loggerName is not specified or invalid
+ if (!(typeof loggerName == "string")) {
+ loggerName = anonymousLoggerName;
+ logLog.warn("log4javascript.getLogger: non-string logger name " +
+ toStr(loggerName) + " supplied, returning anonymous logger");
+ }
+
+ // Do not allow retrieval of the root logger by name
+ if (loggerName == rootLoggerName) {
+ handleError("log4javascript.getLogger: root logger may not be obtained by name");
+ }
+
+ // Create the logger for this name if it doesn't already exist
+ if (!loggers[loggerName]) {
+ var logger = new Logger(loggerName);
+ loggers[loggerName] = logger;
+ loggerNames.push(loggerName);
+
+ // Set up parent logger, if it doesn't exist
+ var lastDotIndex = loggerName.lastIndexOf(".");
+ var parentLogger;
+ if (lastDotIndex > -1) {
+ var parentLoggerName = loggerName.substring(0, lastDotIndex);
+ parentLogger = log4javascript.getLogger(parentLoggerName); // Recursively sets up grandparents etc.
+ } else {
+ parentLogger = rootLogger;
+ }
+ parentLogger.addChild(logger);
+ }
+ return loggers[loggerName];
+ };
+
+ var defaultLogger = null;
+ log4javascript.getDefaultLogger = function() {
+ if (!defaultLogger) {
+ defaultLogger = log4javascript.getLogger(defaultLoggerName);
+ var a = new log4javascript.PopUpAppender();
+ defaultLogger.addAppender(a);
+ }
+ return defaultLogger;
+ };
+
+ var nullLogger = null;
+ log4javascript.getNullLogger = function() {
+ if (!nullLogger) {
+ nullLogger = new Logger(nullLoggerName);
+ nullLogger.setLevel(Level.OFF);
+ }
+ return nullLogger;
+ };
+
+ // Destroys all loggers
+ log4javascript.resetConfiguration = function() {
+ rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);
+ loggers = {};
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Logging events
+
+ var LoggingEvent = function(logger, timeStamp, level, messages,
+ exception) {
+ this.logger = logger;
+ this.timeStamp = timeStamp;
+ this.timeStampInMilliseconds = timeStamp.getTime();
+ this.timeStampInSeconds = Math.floor(this.timeStampInMilliseconds / 1000);
+ this.milliseconds = this.timeStamp.getMilliseconds();
+ this.level = level;
+ this.messages = messages;
+ this.exception = exception;
+ };
+
+ LoggingEvent.prototype = {
+ getThrowableStrRep: function() {
+ return this.exception ?
+ getExceptionStringRep(this.exception) : "";
+ },
+ getCombinedMessages: function() {
+ return (this.messages.length == 1) ? this.messages[0] :
+ this.messages.join(newLine);
+ },
+ toString: function() {
+ return "LoggingEvent[" + this.level + "]";
+ }
+ };
+
+ log4javascript.LoggingEvent = LoggingEvent;
+
+ /* ---------------------------------------------------------------------- */
+ // Layout prototype
+
+ var Layout = function() {
+ };
+
+ Layout.prototype = {
+ defaults: {
+ loggerKey: "logger",
+ timeStampKey: "timestamp",
+ millisecondsKey: "milliseconds",
+ levelKey: "level",
+ messageKey: "message",
+ exceptionKey: "exception",
+ urlKey: "url"
+ },
+ loggerKey: "logger",
+ timeStampKey: "timestamp",
+ millisecondsKey: "milliseconds",
+ levelKey: "level",
+ messageKey: "message",
+ exceptionKey: "exception",
+ urlKey: "url",
+ batchHeader: "",
+ batchFooter: "",
+ batchSeparator: "",
+ returnsPostData: false,
+ overrideTimeStampsSetting: false,
+ useTimeStampsInMilliseconds: null,
+
+ format: function() {
+ handleError("Layout.format: layout supplied has no format() method");
+ },
+
+ ignoresThrowable: function() {
+ handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");
+ },
+
+ getContentType: function() {
+ return "text/plain";
+ },
+
+ allowBatching: function() {
+ return true;
+ },
+
+ setTimeStampsInMilliseconds: function(timeStampsInMilliseconds) {
+ this.overrideTimeStampsSetting = true;
+ this.useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);
+ },
+
+ isTimeStampsInMilliseconds: function() {
+ return this.overrideTimeStampsSetting ?
+ this.useTimeStampsInMilliseconds : useTimeStampsInMilliseconds;
+ },
+
+ getTimeStampValue: function(loggingEvent) {
+ return this.isTimeStampsInMilliseconds() ?
+ loggingEvent.timeStampInMilliseconds : loggingEvent.timeStampInSeconds;
+ },
+
+ getDataValues: function(loggingEvent, combineMessages) {
+ var dataValues = [
+ [this.loggerKey, loggingEvent.logger.name],
+ [this.timeStampKey, this.getTimeStampValue(loggingEvent)],
+ [this.levelKey, loggingEvent.level.name],
+ [this.urlKey, window.location.href],
+ [this.messageKey, combineMessages ? loggingEvent.getCombinedMessages() : loggingEvent.messages]
+ ];
+ if (!this.isTimeStampsInMilliseconds()) {
+ dataValues.push([this.millisecondsKey, loggingEvent.milliseconds]);
+ }
+ if (loggingEvent.exception) {
+ dataValues.push([this.exceptionKey, getExceptionStringRep(loggingEvent.exception)]);
+ }
+ if (this.hasCustomFields()) {
+ for (var i = 0, len = this.customFields.length; i < len; i++) {
+ var val = this.customFields[i].value;
+
+ // Check if the value is a function. If so, execute it, passing it the
+ // current layout and the logging event
+ if (typeof val === "function") {
+ val = val(this, loggingEvent);
+ }
+ dataValues.push([this.customFields[i].name, val]);
+ }
+ }
+ return dataValues;
+ },
+
+ setKeys: function(loggerKey, timeStampKey, levelKey, messageKey,
+ exceptionKey, urlKey, millisecondsKey) {
+ this.loggerKey = extractStringFromParam(loggerKey, this.defaults.loggerKey);
+ this.timeStampKey = extractStringFromParam(timeStampKey, this.defaults.timeStampKey);
+ this.levelKey = extractStringFromParam(levelKey, this.defaults.levelKey);
+ this.messageKey = extractStringFromParam(messageKey, this.defaults.messageKey);
+ this.exceptionKey = extractStringFromParam(exceptionKey, this.defaults.exceptionKey);
+ this.urlKey = extractStringFromParam(urlKey, this.defaults.urlKey);
+ this.millisecondsKey = extractStringFromParam(millisecondsKey, this.defaults.millisecondsKey);
+ },
+
+ setCustomField: function(name, value) {
+ var fieldUpdated = false;
+ for (var i = 0, len = this.customFields.length; i < len; i++) {
+ if (this.customFields[i].name === name) {
+ this.customFields[i].value = value;
+ fieldUpdated = true;
+ }
+ }
+ if (!fieldUpdated) {
+ this.customFields.push({"name": name, "value": value});
+ }
+ },
+
+ hasCustomFields: function() {
+ return (this.customFields.length > 0);
+ },
+
+ toString: function() {
+ handleError("Layout.toString: all layouts must override this method");
+ }
+ };
+
+ log4javascript.Layout = Layout;
+
+ /* ---------------------------------------------------------------------- */
+ // Appender prototype
+
+ var Appender = function() {};
+
+ Appender.prototype = new EventSupport();
+
+ Appender.prototype.layout = new PatternLayout();
+ Appender.prototype.threshold = Level.ALL;
+ Appender.prototype.loggers = [];
+
+ // Performs threshold checks before delegating actual logging to the
+ // subclass's specific append method.
+ Appender.prototype.doAppend = function(loggingEvent) {
+ if (enabled && loggingEvent.level.level >= this.threshold.level) {
+ this.append(loggingEvent);
+ }
+ };
+
+ Appender.prototype.append = function(loggingEvent) {};
+
+ Appender.prototype.setLayout = function(layout) {
+ if (layout instanceof Layout) {
+ this.layout = layout;
+ } else {
+ handleError("Appender.setLayout: layout supplied to " +
+ this.toString() + " is not a subclass of Layout");
+ }
+ };
+
+ Appender.prototype.getLayout = function() {
+ return this.layout;
+ };
+
+ Appender.prototype.setThreshold = function(threshold) {
+ if (threshold instanceof Level) {
+ this.threshold = threshold;
+ } else {
+ handleError("Appender.setThreshold: threshold supplied to " +
+ this.toString() + " is not a subclass of Level");
+ }
+ };
+
+ Appender.prototype.getThreshold = function() {
+ return this.threshold;
+ };
+
+ Appender.prototype.setAddedToLogger = function(logger) {
+ this.loggers.push(logger);
+ };
+
+ Appender.prototype.setRemovedFromLogger = function(logger) {
+ array_remove(this.loggers, logger);
+ };
+
+ Appender.prototype.group = emptyFunction;
+ Appender.prototype.groupEnd = emptyFunction;
+
+ Appender.prototype.toString = function() {
+ handleError("Appender.toString: all appenders must override this method");
+ };
+
+ log4javascript.Appender = Appender;
+
+ /* ---------------------------------------------------------------------- */
+ // SimpleLayout
+
+ function SimpleLayout() {
+ this.customFields = [];
+ }
+
+ SimpleLayout.prototype = new Layout();
+
+ SimpleLayout.prototype.format = function(loggingEvent) {
+ return loggingEvent.level.name + " - " + loggingEvent.getCombinedMessages();
+ };
+
+ SimpleLayout.prototype.ignoresThrowable = function() {
+ return true;
+ };
+
+ SimpleLayout.prototype.toString = function() {
+ return "SimpleLayout";
+ };
+
+ log4javascript.SimpleLayout = SimpleLayout;
+ /* ----------------------------------------------------------------------- */
+ // NullLayout
+
+ function NullLayout() {
+ this.customFields = [];
+ }
+
+ NullLayout.prototype = new Layout();
+
+ NullLayout.prototype.format = function(loggingEvent) {
+ return loggingEvent.messages;
+ };
+
+ NullLayout.prototype.ignoresThrowable = function() {
+ return true;
+ };
+
+ NullLayout.prototype.toString = function() {
+ return "NullLayout";
+ };
+
+ log4javascript.NullLayout = NullLayout;
+/* ---------------------------------------------------------------------- */
+ // XmlLayout
+
+ function XmlLayout(combineMessages) {
+ this.combineMessages = extractBooleanFromParam(combineMessages, true);
+ this.customFields = [];
+ }
+
+ XmlLayout.prototype = new Layout();
+
+ XmlLayout.prototype.isCombinedMessages = function() {
+ return this.combineMessages;
+ };
+
+ XmlLayout.prototype.getContentType = function() {
+ return "text/xml";
+ };
+
+ XmlLayout.prototype.escapeCdata = function(str) {
+ return str.replace(/\]\]>/, "]]>]]><![CDATA[");
+ };
+
+ XmlLayout.prototype.format = function(loggingEvent) {
+ var layout = this;
+ var i, len;
+ function formatMessage(message) {
+ message = (typeof message === "string") ? message : toStr(message);
+ return "<log4javascript:message><![CDATA[" +
+ layout.escapeCdata(message) + "]]></log4javascript:message>";
+ }
+
+ var str = "<log4javascript:event logger=\"" + loggingEvent.logger.name +
+ "\" timestamp=\"" + this.getTimeStampValue(loggingEvent) + "\"";
+ if (!this.isTimeStampsInMilliseconds()) {
+ str += " milliseconds=\"" + loggingEvent.milliseconds + "\"";
+ }
+ str += " level=\"" + loggingEvent.level.name + "\">" + newLine;
+ if (this.combineMessages) {
+ str += formatMessage(loggingEvent.getCombinedMessages());
+ } else {
+ str += "<log4javascript:messages>" + newLine;
+ for (i = 0, len = loggingEvent.messages.length; i < len; i++) {
+ str += formatMessage(loggingEvent.messages[i]) + newLine;
+ }
+ str += "</log4javascript:messages>" + newLine;
+ }
+ if (this.hasCustomFields()) {
+ for (i = 0, len = this.customFields.length; i < len; i++) {
+ str += "<log4javascript:customfield name=\"" +
+ this.customFields[i].name + "\"><![CDATA[" +
+ this.customFields[i].value.toString() +
+ "]]></log4javascript:customfield>" + newLine;
+ }
+ }
+ if (loggingEvent.exception) {
+ str += "<log4javascript:exception><![CDATA[" +
+ getExceptionStringRep(loggingEvent.exception) +
+ "]]></log4javascript:exception>" + newLine;
+ }
+ str += "</log4javascript:event>" + newLine + newLine;
+ return str;
+ };
+
+ XmlLayout.prototype.ignoresThrowable = function() {
+ return false;
+ };
+
+ XmlLayout.prototype.toString = function() {
+ return "XmlLayout";
+ };
+
+ log4javascript.XmlLayout = XmlLayout;
+ /* ---------------------------------------------------------------------- */
+ // JsonLayout related
+
+ function escapeNewLines(str) {
+ return str.replace(/\r\n|\r|\n/g, "\\r\\n");
+ }
+
+ function JsonLayout(readable, combineMessages) {
+ this.readable = extractBooleanFromParam(readable, false);
+ this.combineMessages = extractBooleanFromParam(combineMessages, true);
+ this.batchHeader = this.readable ? "[" + newLine : "[";
+ this.batchFooter = this.readable ? "]" + newLine : "]";
+ this.batchSeparator = this.readable ? "," + newLine : ",";
+ this.setKeys();
+ this.colon = this.readable ? ": " : ":";
+ this.tab = this.readable ? "\t" : "";
+ this.lineBreak = this.readable ? newLine : "";
+ this.customFields = [];
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // JsonLayout
+
+ JsonLayout.prototype = new Layout();
+
+ JsonLayout.prototype.isReadable = function() {
+ return this.readable;
+ };
+
+ JsonLayout.prototype.isCombinedMessages = function() {
+ return this.combineMessages;
+ };
+
+ JsonLayout.prototype.format = function(loggingEvent) {
+ var layout = this;
+ var dataValues = this.getDataValues(loggingEvent, this.combineMessages);
+ var str = "{" + this.lineBreak;
+ var i, len;
+
+ function formatValue(val, prefix, expand) {
+ // Check the type of the data value to decide whether quotation marks
+ // or expansion are required
+ var formattedValue;
+ var valType = typeof val;
+ if (val instanceof Date) {
+ formattedValue = String(val.getTime());
+ } else if (expand && (val instanceof Array)) {
+ formattedValue = "[" + layout.lineBreak;
+ for (var i = 0, len = val.length; i < len; i++) {
+ var childPrefix = prefix + layout.tab;
+ formattedValue += childPrefix + formatValue(val[i], childPrefix, false);
+ if (i < val.length - 1) {
+ formattedValue += ",";
+ }
+ formattedValue += layout.lineBreak;
+ }
+ formattedValue += prefix + "]";
+ } else if (valType !== "number" && valType !== "boolean") {
+ formattedValue = "\"" + escapeNewLines(toStr(val).replace(/\"/g, "\\\"")) + "\"";
+ } else {
+ formattedValue = val;
+ }
+ return formattedValue;
+ }
+
+ for (i = 0, len = dataValues.length - 1; i <= len; i++) {
+ str += this.tab + "\"" + dataValues[i][0] + "\"" + this.colon + formatValue(dataValues[i][1], this.tab, true);
+ if (i < len) {
+ str += ",";
+ }
+ str += this.lineBreak;
+ }
+
+ str += "}" + this.lineBreak;
+ return str;
+ };
+
+ JsonLayout.prototype.ignoresThrowable = function() {
+ return false;
+ };
+
+ JsonLayout.prototype.toString = function() {
+ return "JsonLayout";
+ };
+
+ JsonLayout.prototype.getContentType = function() {
+ return "application/json";
+ };
+
+ log4javascript.JsonLayout = JsonLayout;
+ /* ---------------------------------------------------------------------- */
+ // HttpPostDataLayout
+
+ function HttpPostDataLayout() {
+ this.setKeys();
+ this.customFields = [];
+ this.returnsPostData = true;
+ }
+
+ HttpPostDataLayout.prototype = new Layout();
+
+ // Disable batching
+ HttpPostDataLayout.prototype.allowBatching = function() {
+ return false;
+ };
+
+ HttpPostDataLayout.prototype.format = function(loggingEvent) {
+ var dataValues = this.getDataValues(loggingEvent);
+ var queryBits = [];
+ for (var i = 0, len = dataValues.length; i < len; i++) {
+ var val = (dataValues[i][1] instanceof Date) ?
+ String(dataValues[i][1].getTime()) : dataValues[i][1];
+ queryBits.push(urlEncode(dataValues[i][0]) + "=" + urlEncode(val));
+ }
+ return queryBits.join("&");
+ };
+
+ HttpPostDataLayout.prototype.ignoresThrowable = function(loggingEvent) {
+ return false;
+ };
+
+ HttpPostDataLayout.prototype.toString = function() {
+ return "HttpPostDataLayout";
+ };
+
+ log4javascript.HttpPostDataLayout = HttpPostDataLayout;
+ /* ---------------------------------------------------------------------- */
+ // formatObjectExpansion
+
+ function formatObjectExpansion(obj, depth, indentation) {
+ var objectsExpanded = [];
+
+ function doFormat(obj, depth, indentation) {
+ var i, j, len, childDepth, childIndentation, childLines, expansion,
+ childExpansion;
+
+ if (!indentation) {
+ indentation = "";
+ }
+
+ function formatString(text) {
+ var lines = splitIntoLines(text);
+ for (var j = 1, jLen = lines.length; j < jLen; j++) {
+ lines[j] = indentation + lines[j];
+ }
+ return lines.join(newLine);
+ }
+
+ if (obj === null) {
+ return "null";
+ } else if (typeof obj == "undefined") {
+ return "undefined";
+ } else if (typeof obj == "string") {
+ return formatString(obj);
+ } else if (typeof obj == "object" && array_contains(objectsExpanded, obj)) {
+ try {
+ expansion = toStr(obj);
+ } catch (ex) {
+ expansion = "Error formatting property. Details: " + getExceptionStringRep(ex);
+ }
+ return expansion + " [already expanded]";
+ } else if ((obj instanceof Array) && depth > 0) {
+ objectsExpanded.push(obj);
+ expansion = "[" + newLine;
+ childDepth = depth - 1;
+ childIndentation = indentation + " ";
+ childLines = [];
+ for (i = 0, len = obj.length; i < len; i++) {
+ try {
+ childExpansion = doFormat(obj[i], childDepth, childIndentation);
+ childLines.push(childIndentation + childExpansion);
+ } catch (ex) {
+ childLines.push(childIndentation + "Error formatting array member. Details: " +
+ getExceptionStringRep(ex) + "");
+ }
+ }
+ expansion += childLines.join("," + newLine) + newLine + indentation + "]";
+ return expansion;
+ } else if (Object.prototype.toString.call(obj) == "[object Date]") {
+ return obj.toString();
+ } else if (typeof obj == "object" && depth > 0) {
+ objectsExpanded.push(obj);
+ expansion = "{" + newLine;
+ childDepth = depth - 1;
+ childIndentation = indentation + " ";
+ childLines = [];
+ for (i in obj) {
+ try {
+ childExpansion = doFormat(obj[i], childDepth, childIndentation);
+ childLines.push(childIndentation + i + ": " + childExpansion);
+ } catch (ex) {
+ childLines.push(childIndentation + i + ": Error formatting property. Details: " +
+ getExceptionStringRep(ex));
+ }
+ }
+ expansion += childLines.join("," + newLine) + newLine + indentation + "}";
+ return expansion;
+ } else {
+ return formatString(toStr(obj));
+ }
+ }
+ return doFormat(obj, depth, indentation);
+ }
+ /* ---------------------------------------------------------------------- */
+ // Date-related stuff
+
+ var SimpleDateFormat;
+
+ (function() {
+ var regex = /('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;
+ var monthNames = ["January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"];
+ var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
+ var TEXT2 = 0, TEXT3 = 1, NUMBER = 2, YEAR = 3, MONTH = 4, TIMEZONE = 5;
+ var types = {
+ G : TEXT2,
+ y : YEAR,
+ M : MONTH,
+ w : NUMBER,
+ W : NUMBER,
+ D : NUMBER,
+ d : NUMBER,
+ F : NUMBER,
+ E : TEXT3,
+ a : TEXT2,
+ H : NUMBER,
+ k : NUMBER,
+ K : NUMBER,
+ h : NUMBER,
+ m : NUMBER,
+ s : NUMBER,
+ S : NUMBER,
+ Z : TIMEZONE
+ };
+ var ONE_DAY = 24 * 60 * 60 * 1000;
+ var ONE_WEEK = 7 * ONE_DAY;
+ var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK = 1;
+
+ var newDateAtMidnight = function(year, month, day) {
+ var d = new Date(year, month, day, 0, 0, 0);
+ d.setMilliseconds(0);
+ return d;
+ };
+
+ Date.prototype.getDifference = function(date) {
+ return this.getTime() - date.getTime();
+ };
+
+ Date.prototype.isBefore = function(d) {
+ return this.getTime() < d.getTime();
+ };
+
+ Date.prototype.getUTCTime = function() {
+ return Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(),
+ this.getSeconds(), this.getMilliseconds());
+ };
+
+ Date.prototype.getTimeSince = function(d) {
+ return this.getUTCTime() - d.getUTCTime();
+ };
+
+ Date.prototype.getPreviousSunday = function() {
+ // Using midday avoids any possibility of DST messing things up
+ var midday = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 12, 0, 0);
+ var previousSunday = new Date(midday.getTime() - this.getDay() * ONE_DAY);
+ return newDateAtMidnight(previousSunday.getFullYear(), previousSunday.getMonth(),
+ previousSunday.getDate());
+ };
+
+ Date.prototype.getWeekInYear = function(minimalDaysInFirstWeek) {
+ if (isUndefined(this.minimalDaysInFirstWeek)) {
+ minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;
+ }
+ var previousSunday = this.getPreviousSunday();
+ var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);
+ var numberOfSundays = previousSunday.isBefore(startOfYear) ?
+ 0 : 1 + Math.floor(previousSunday.getTimeSince(startOfYear) / ONE_WEEK);
+ var numberOfDaysInFirstWeek = 7 - startOfYear.getDay();
+ var weekInYear = numberOfSundays;
+ if (numberOfDaysInFirstWeek < minimalDaysInFirstWeek) {
+ weekInYear--;
+ }
+ return weekInYear;
+ };
+
+ Date.prototype.getWeekInMonth = function(minimalDaysInFirstWeek) {
+ if (isUndefined(this.minimalDaysInFirstWeek)) {
+ minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;
+ }
+ var previousSunday = this.getPreviousSunday();
+ var startOfMonth = newDateAtMidnight(this.getFullYear(), this.getMonth(), 1);
+ var numberOfSundays = previousSunday.isBefore(startOfMonth) ?
+ 0 : 1 + Math.floor(previousSunday.getTimeSince(startOfMonth) / ONE_WEEK);
+ var numberOfDaysInFirstWeek = 7 - startOfMonth.getDay();
+ var weekInMonth = numberOfSundays;
+ if (numberOfDaysInFirstWeek >= minimalDaysInFirstWeek) {
+ weekInMonth++;
+ }
+ return weekInMonth;
+ };
+
+ Date.prototype.getDayInYear = function() {
+ var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);
+ return 1 + Math.floor(this.getTimeSince(startOfYear) / ONE_DAY);
+ };
+
+ /* ------------------------------------------------------------------ */
+
+ SimpleDateFormat = function(formatString) {
+ this.formatString = formatString;
+ };
+
+ /**
+ * Sets the minimum number of days in a week in order for that week to
+ * be considered as belonging to a particular month or year
+ */
+ SimpleDateFormat.prototype.setMinimalDaysInFirstWeek = function(days) {
+ this.minimalDaysInFirstWeek = days;
+ };
+
+ SimpleDateFormat.prototype.getMinimalDaysInFirstWeek = function() {
+ return isUndefined(this.minimalDaysInFirstWeek) ?
+ DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK : this.minimalDaysInFirstWeek;
+ };
+
+ var padWithZeroes = function(str, len) {
+ while (str.length < len) {
+ str = "0" + str;
+ }
+ return str;
+ };
+
+ var formatText = function(data, numberOfLetters, minLength) {
+ return (numberOfLetters >= 4) ? data : data.substr(0, Math.max(minLength, numberOfLetters));
+ };
+
+ var formatNumber = function(data, numberOfLetters) {
+ var dataString = "" + data;
+ // Pad with 0s as necessary
+ return padWithZeroes(dataString, numberOfLetters);
+ };
+
+ SimpleDateFormat.prototype.format = function(date) {
+ var formattedString = "";
+ var result;
+ var searchString = this.formatString;
+ while ((result = regex.exec(searchString))) {
+ var quotedString = result[1];
+ var patternLetters = result[2];
+ var otherLetters = result[3];
+ var otherCharacters = result[4];
+
+ // If the pattern matched is quoted string, output the text between the quotes
+ if (quotedString) {
+ if (quotedString == "''") {
+ formattedString += "'";
+ } else {
+ formattedString += quotedString.substring(1, quotedString.length - 1);
+ }
+ } else if (otherLetters) {
+ // Swallow non-pattern letters by doing nothing here
+ } else if (otherCharacters) {
+ // Simply output other characters
+ formattedString += otherCharacters;
+ } else if (patternLetters) {
+ // Replace pattern letters
+ var patternLetter = patternLetters.charAt(0);
+ var numberOfLetters = patternLetters.length;
+ var rawData = "";
+ switch(patternLetter) {
+ case "G":
+ rawData = "AD";
+ break;
+ case "y":
+ rawData = date.getFullYear();
+ break;
+ case "M":
+ rawData = date.getMonth();
+ break;
+ case "w":
+ rawData = date.getWeekInYear(this.getMinimalDaysInFirstWeek());
+ break;
+ case "W":
+ rawData = date.getWeekInMonth(this.getMinimalDaysInFirstWeek());
+ break;
+ case "D":
+ rawData = date.getDayInYear();
+ break;
+ case "d":
+ rawData = date.getDate();
+ break;
+ case "F":
+ rawData = 1 + Math.floor((date.getDate() - 1) / 7);
+ break;
+ case "E":
+ rawData = dayNames[date.getDay()];
+ break;
+ case "a":
+ rawData = (date.getHours() >= 12) ? "PM" : "AM";
+ break;
+ case "H":
+ rawData = date.getHours();
+ break;
+ case "k":
+ rawData = date.getHours() || 24;
+ break;
+ case "K":
+ rawData = date.getHours() % 12;
+ break;
+ case "h":
+ rawData = (date.getHours() % 12) || 12;
+ break;
+ case "m":
+ rawData = date.getMinutes();
+ break;
+ case "s":
+ rawData = date.getSeconds();
+ break;
+ case "S":
+ rawData = date.getMilliseconds();
+ break;
+ case "Z":
+ rawData = date.getTimezoneOffset(); // This returns the number of minutes since GMT was this time.
+ break;
+ }
+ // Format the raw data depending on the type
+ switch(types[patternLetter]) {
+ case TEXT2:
+ formattedString += formatText(rawData, numberOfLetters, 2);
+ break;
+ case TEXT3:
+ formattedString += formatText(rawData, numberOfLetters, 3);
+ break;
+ case NUMBER:
+ formattedString += formatNumber(rawData, numberOfLetters);
+ break;
+ case YEAR:
+ if (numberOfLetters <= 3) {
+ // Output a 2-digit year
+ var dataString = "" + rawData;
+ formattedString += dataString.substr(2, 2);
+ } else {
+ formattedString += formatNumber(rawData, numberOfLetters);
+ }
+ break;
+ case MONTH:
+ if (numberOfLetters >= 3) {
+ formattedString += formatText(monthNames[rawData], numberOfLetters, numberOfLetters);
+ } else {
+ // NB. Months returned by getMonth are zero-based
+ formattedString += formatNumber(rawData + 1, numberOfLetters);
+ }
+ break;
+ case TIMEZONE:
+ var isPositive = (rawData > 0);
+ // The following line looks like a mistake but isn't
+ // because of the way getTimezoneOffset measures.
+ var prefix = isPositive ? "-" : "+";
+ var absData = Math.abs(rawData);
+
+ // Hours
+ var hours = "" + Math.floor(absData / 60);
+ hours = padWithZeroes(hours, 2);
+ // Minutes
+ var minutes = "" + (absData % 60);
+ minutes = padWithZeroes(minutes, 2);
+
+ formattedString += prefix + hours + minutes;
+ break;
+ }
+ }
+ searchString = searchString.substr(result.index + result[0].length);
+ }
+ return formattedString;
+ };
+ })();
+
+ log4javascript.SimpleDateFormat = SimpleDateFormat;
+
+ /* ---------------------------------------------------------------------- */
+ // PatternLayout
+
+ function PatternLayout(pattern) {
+ if (pattern) {
+ this.pattern = pattern;
+ } else {
+ this.pattern = PatternLayout.DEFAULT_CONVERSION_PATTERN;
+ }
+ this.customFields = [];
+ }
+
+ PatternLayout.TTCC_CONVERSION_PATTERN = "%r %p %c - %m%n";
+ PatternLayout.DEFAULT_CONVERSION_PATTERN = "%m%n";
+ PatternLayout.ISO8601_DATEFORMAT = "yyyy-MM-dd HH:mm:ss,SSS";
+ PatternLayout.DATETIME_DATEFORMAT = "dd MMM yyyy HH:mm:ss,SSS";
+ PatternLayout.ABSOLUTETIME_DATEFORMAT = "HH:mm:ss,SSS";
+
+ PatternLayout.prototype = new Layout();
+
+ PatternLayout.prototype.format = function(loggingEvent) {
+ var regex = /%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;
+ var formattedString = "";
+ var result;
+ var searchString = this.pattern;
+
+ // Cannot use regex global flag since it doesn't work with exec in IE5
+ while ((result = regex.exec(searchString))) {
+ var matchedString = result[0];
+ var padding = result[1];
+ var truncation = result[2];
+ var conversionCharacter = result[3];
+ var specifier = result[5];
+ var text = result[6];
+
+ // Check if the pattern matched was just normal text
+ if (text) {
+ formattedString += "" + text;
+ } else {
+ // Create a raw replacement string based on the conversion
+ // character and specifier
+ var replacement = "";
+ switch(conversionCharacter) {
+ case "a": // Array of messages
+ case "m": // Message
+ var depth = 0;
+ if (specifier) {
+ depth = parseInt(specifier, 10);
+ if (isNaN(depth)) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character '" + conversionCharacter +
+ "' - should be a number");
+ depth = 0;
+ }
+ }
+ var messages = (conversionCharacter === "a") ? loggingEvent.messages[0] : loggingEvent.messages;
+ for (var i = 0, len = messages.length; i < len; i++) {
+ if (i > 0 && (replacement.charAt(replacement.length - 1) !== " ")) {
+ replacement += " ";
+ }
+ if (depth === 0) {
+ replacement += messages[i];
+ } else {
+ replacement += formatObjectExpansion(messages[i], depth);
+ }
+ }
+ break;
+ case "c": // Logger name
+ var loggerName = loggingEvent.logger.name;
+ if (specifier) {
+ var precision = parseInt(specifier, 10);
+ var loggerNameBits = loggingEvent.logger.name.split(".");
+ if (precision >= loggerNameBits.length) {
+ replacement = loggerName;
+ } else {
+ replacement = loggerNameBits.slice(loggerNameBits.length - precision).join(".");
+ }
+ } else {
+ replacement = loggerName;
+ }
+ break;
+ case "d": // Date
+ var dateFormat = PatternLayout.ISO8601_DATEFORMAT;
+ if (specifier) {
+ dateFormat = specifier;
+ // Pick up special cases
+ if (dateFormat == "ISO8601") {
+ dateFormat = PatternLayout.ISO8601_DATEFORMAT;
+ } else if (dateFormat == "ABSOLUTE") {
+ dateFormat = PatternLayout.ABSOLUTETIME_DATEFORMAT;
+ } else if (dateFormat == "DATE") {
+ dateFormat = PatternLayout.DATETIME_DATEFORMAT;
+ }
+ }
+ // Format the date
+ replacement = (new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);
+ break;
+ case "f": // Custom field
+ if (this.hasCustomFields()) {
+ var fieldIndex = 0;
+ if (specifier) {
+ fieldIndex = parseInt(specifier, 10);
+ if (isNaN(fieldIndex)) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character 'f' - should be a number");
+ } else if (fieldIndex === 0) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character 'f' - must be greater than zero");
+ } else if (fieldIndex > this.customFields.length) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character 'f' - there aren't that many custom fields");
+ } else {
+ fieldIndex = fieldIndex - 1;
+ }
+ }
+ var val = this.customFields[fieldIndex].value;
+ if (typeof val == "function") {
+ val = val(this, loggingEvent);
+ }
+ replacement = val;
+ }
+ break;
+ case "n": // New line
+ replacement = newLine;
+ break;
+ case "p": // Level
+ replacement = loggingEvent.level.name;
+ break;
+ case "r": // Milliseconds since log4javascript startup
+ replacement = "" + loggingEvent.timeStamp.getDifference(applicationStartDate);
+ break;
+ case "%": // Literal % sign
+ replacement = "%";
+ break;
+ default:
+ replacement = matchedString;
+ break;
+ }
+ // Format the replacement according to any padding or
+ // truncation specified
+ var l;
+
+ // First, truncation
+ if (truncation) {
+ l = parseInt(truncation.substr(1), 10);
+ var strLen = replacement.length;
+ if (l < strLen) {
+ replacement = replacement.substring(strLen - l, strLen);
+ }
+ }
+ // Next, padding
+ if (padding) {
+ if (padding.charAt(0) == "-") {
+ l = parseInt(padding.substr(1), 10);
+ // Right pad with spaces
+ while (replacement.length < l) {
+ replacement += " ";
+ }
+ } else {
+ l = parseInt(padding, 10);
+ // Left pad with spaces
+ while (replacement.length < l) {
+ replacement = " " + replacement;
+ }
+ }
+ }
+ formattedString += replacement;
+ }
+ searchString = searchString.substr(result.index + result[0].length);
+ }
+ return formattedString;
+ };
+
+ PatternLayout.prototype.ignoresThrowable = function() {
+ return true;
+ };
+
+ PatternLayout.prototype.toString = function() {
+ return "PatternLayout";
+ };
+
+ log4javascript.PatternLayout = PatternLayout;
+ /* ---------------------------------------------------------------------- */
+ // AlertAppender
+
+ function AlertAppender() {}
+
+ AlertAppender.prototype = new Appender();
+
+ AlertAppender.prototype.layout = new SimpleLayout();
+
+ AlertAppender.prototype.append = function(loggingEvent) {
+ var formattedMessage = this.getLayout().format(loggingEvent);
+ if (this.getLayout().ignoresThrowable()) {
+ formattedMessage += loggingEvent.getThrowableStrRep();
+ }
+ alert(formattedMessage);
+ };
+
+ AlertAppender.prototype.toString = function() {
+ return "AlertAppender";
+ };
+
+ log4javascript.AlertAppender = AlertAppender;
+ /* ---------------------------------------------------------------------- */
+ // BrowserConsoleAppender (only works in Opera and Safari and Firefox with
+ // Firebug extension)
+
+ function BrowserConsoleAppender() {}
+
+ BrowserConsoleAppender.prototype = new log4javascript.Appender();
+ BrowserConsoleAppender.prototype.layout = new NullLayout();
+ BrowserConsoleAppender.prototype.threshold = Level.DEBUG;
+
+ BrowserConsoleAppender.prototype.append = function(loggingEvent) {
+ var appender = this;
+
+ var getFormattedMessage = function() {
+ var layout = appender.getLayout();
+ var formattedMessage = layout.format(loggingEvent);
+ if (layout.ignoresThrowable() && loggingEvent.exception) {
+ formattedMessage += loggingEvent.getThrowableStrRep();
+ }
+ return formattedMessage;
+ };
+
+ if ((typeof opera != "undefined") && opera.postError) { // Opera
+ opera.postError(getFormattedMessage());
+ } else if (window.console && window.console.log) { // Safari and Firebug
+ var formattedMesage = getFormattedMessage();
+ // Log to Firebug using its logging methods or revert to the console.log
+ // method in Safari
+ if (window.console.debug && Level.DEBUG.isGreaterOrEqual(loggingEvent.level)) {
+ window.console.debug(formattedMesage);
+ } else if (window.console.info && Level.INFO.equals(loggingEvent.level)) {
+ window.console.info(formattedMesage);
+ } else if (window.console.warn && Level.WARN.equals(loggingEvent.level)) {
+ window.console.warn(formattedMesage);
+ } else if (window.console.error && loggingEvent.level.isGreaterOrEqual(Level.ERROR)) {
+ window.console.error(formattedMesage);
+ } else {
+ window.console.log(formattedMesage);
+ }
+ }
+ };
+
+ BrowserConsoleAppender.prototype.group = function(name) {
+ if (window.console && window.console.group) {
+ window.console.group(name);
+ }
+ };
+
+ BrowserConsoleAppender.prototype.groupEnd = function() {
+ if (window.console && window.console.groupEnd) {
+ window.console.groupEnd();
+ }
+ };
+
+ BrowserConsoleAppender.prototype.toString = function() {
+ return "BrowserConsoleAppender";
+ };
+
+ log4javascript.BrowserConsoleAppender = BrowserConsoleAppender;
+ /* ---------------------------------------------------------------------- */
+ // AjaxAppender related
+
+ var xmlHttpFactories = [
+ function() { return new XMLHttpRequest(); },
+ function() { return new ActiveXObject("Msxml2.XMLHTTP"); },
+ function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
+ ];
+
+ var getXmlHttp = function(errorHandler) {
+ // This is only run the first time; the value of getXmlHttp gets
+ // replaced with the factory that succeeds on the first run
+ var xmlHttp = null, factory;
+ for (var i = 0, len = xmlHttpFactories.length; i < len; i++) {
+ factory = xmlHttpFactories[i];
+ try {
+ xmlHttp = factory();
+ getXmlHttp = factory;
+ return xmlHttp;
+ } catch (e) {
+ }
+ }
+ // If we're here, all factories have failed, so throw an error
+ if (errorHandler) {
+ errorHandler();
+ } else {
+ handleError("getXmlHttp: unable to obtain XMLHttpRequest object");
+ }
+ };
+
+ function isHttpRequestSuccessful(xmlHttp) {
+ return isUndefined(xmlHttp.status) || xmlHttp.status === 0 ||
+ (xmlHttp.status >= 200 && xmlHttp.status < 300) ||
+ xmlHttp.status == 1223 /* Fix for IE */;
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // AjaxAppender
+
+ function AjaxAppender(url) {
+ var appender = this;
+ var isSupported = true;
+ if (!url) {
+ handleError("AjaxAppender: URL must be specified in constructor");
+ isSupported = false;
+ }
+
+ var timed = this.defaults.timed;
+ var waitForResponse = this.defaults.waitForResponse;
+ var batchSize = this.defaults.batchSize;
+ var timerInterval = this.defaults.timerInterval;
+ var requestSuccessCallback = this.defaults.requestSuccessCallback;
+ var failCallback = this.defaults.failCallback;
+ var postVarName = this.defaults.postVarName;
+ var sendAllOnUnload = this.defaults.sendAllOnUnload;
+ var contentType = this.defaults.contentType;
+ var sessionId = null;
+
+ var queuedLoggingEvents = [];
+ var queuedRequests = [];
+ var headers = [];
+ var sending = false;
+ var initialized = false;
+
+ // Configuration methods. The function scope is used to prevent
+ // direct alteration to the appender configuration properties.
+ function checkCanConfigure(configOptionName) {
+ if (initialized) {
+ handleError("AjaxAppender: configuration option '" +
+ configOptionName +
+ "' may not be set after the appender has been initialized");
+ return false;
+ }
+ return true;
+ }
+
+ this.getSessionId = function() { return sessionId; };
+ this.setSessionId = function(sessionIdParam) {
+ sessionId = extractStringFromParam(sessionIdParam, null);
+ this.layout.setCustomField("sessionid", sessionId);
+ };
+
+ this.setLayout = function(layoutParam) {
+ if (checkCanConfigure("layout")) {
+ this.layout = layoutParam;
+ // Set the session id as a custom field on the layout, if not already present
+ if (sessionId !== null) {
+ this.setSessionId(sessionId);
+ }
+ }
+ };
+
+ this.isTimed = function() { return timed; };
+ this.setTimed = function(timedParam) {
+ if (checkCanConfigure("timed")) {
+ timed = bool(timedParam);
+ }
+ };
+
+ this.getTimerInterval = function() { return timerInterval; };
+ this.setTimerInterval = function(timerIntervalParam) {
+ if (checkCanConfigure("timerInterval")) {
+ timerInterval = extractIntFromParam(timerIntervalParam, timerInterval);
+ }
+ };
+
+ this.isWaitForResponse = function() { return waitForResponse; };
+ this.setWaitForResponse = function(waitForResponseParam) {
+ if (checkCanConfigure("waitForResponse")) {
+ waitForResponse = bool(waitForResponseParam);
+ }
+ };
+
+ this.getBatchSize = function() { return batchSize; };
+ this.setBatchSize = function(batchSizeParam) {
+ if (checkCanConfigure("batchSize")) {
+ batchSize = extractIntFromParam(batchSizeParam, batchSize);
+ }
+ };
+
+ this.isSendAllOnUnload = function() { return sendAllOnUnload; };
+ this.setSendAllOnUnload = function(sendAllOnUnloadParam) {
+ if (checkCanConfigure("sendAllOnUnload")) {
+ sendAllOnUnload = extractBooleanFromParam(sendAllOnUnloadParam, sendAllOnUnload);
+ }
+ };
+
+ this.setRequestSuccessCallback = function(requestSuccessCallbackParam) {
+ requestSuccessCallback = extractFunctionFromParam(requestSuccessCallbackParam, requestSuccessCallback);
+ };
+
+ this.setFailCallback = function(failCallbackParam) {
+ failCallback = extractFunctionFromParam(failCallbackParam, failCallback);
+ };
+
+ this.getPostVarName = function() { return postVarName; };
+ this.setPostVarName = function(postVarNameParam) {
+ if (checkCanConfigure("postVarName")) {
+ postVarName = extractStringFromParam(postVarNameParam, postVarName);
+ }
+ };
+
+ this.getHeaders = function() { return headers; };
+ this.addHeader = function(name, value) {
+ if (name.toLowerCase() == "content-type") {
+ contentType = value;
+ } else {
+ headers.push( { name: name, value: value } );
+ }
+ };
+
+ // Internal functions
+ function sendAll() {
+ if (isSupported && enabled) {
+ sending = true;
+ var currentRequestBatch;
+ if (waitForResponse) {
+ // Send the first request then use this function as the callback once
+ // the response comes back
+ if (queuedRequests.length > 0) {
+ currentRequestBatch = queuedRequests.shift();
+ sendRequest(preparePostData(currentRequestBatch), sendAll);
+ } else {
+ sending = false;
+ if (timed) {
+ scheduleSending();
+ }
+ }
+ } else {
+ // Rattle off all the requests without waiting to see the response
+ while ((currentRequestBatch = queuedRequests.shift())) {
+ sendRequest(preparePostData(currentRequestBatch));
+ }
+ sending = false;
+ if (timed) {
+ scheduleSending();
+ }
+ }
+ }
+ }
+
+ this.sendAll = sendAll;
+
+ // Called when the window unloads. At this point we're past caring about
+ // waiting for responses or timers or incomplete batches - everything
+ // must go, now
+ function sendAllRemaining() {
+ var sendingAnything = false;
+ if (isSupported && enabled) {
+ // Create requests for everything left over, batched as normal
+ var actualBatchSize = appender.getLayout().allowBatching() ? batchSize : 1;
+ var currentLoggingEvent;
+ var batchedLoggingEvents = [];
+ while ((currentLoggingEvent = queuedLoggingEvents.shift())) {
+ batchedLoggingEvents.push(currentLoggingEvent);
+ if (queuedLoggingEvents.length >= actualBatchSize) {
+ // Queue this batch of log entries
+ queuedRequests.push(batchedLoggingEvents);
+ batchedLoggingEvents = [];
+ }
+ }
+ // If there's a partially completed batch, add it
+ if (batchedLoggingEvents.length > 0) {
+ queuedRequests.push(batchedLoggingEvents);
+ }
+ sendingAnything = (queuedRequests.length > 0);
+ waitForResponse = false;
+ timed = false;
+ sendAll();
+ }
+ return sendingAnything;
+ }
+
+ this.sendAllRemaining = sendAllRemaining;
+
+ function preparePostData(batchedLoggingEvents) {
+ // Format the logging events
+ var formattedMessages = [];
+ var currentLoggingEvent;
+ var postData = "";
+ while ((currentLoggingEvent = batchedLoggingEvents.shift())) {
+ var currentFormattedMessage = appender.getLayout().format(currentLoggingEvent);
+ if (appender.getLayout().ignoresThrowable()) {
+ currentFormattedMessage += currentLoggingEvent.getThrowableStrRep();
+ }
+ formattedMessages.push(currentFormattedMessage);
+ }
+ // Create the post data string
+ if (batchedLoggingEvents.length == 1) {
+ postData = formattedMessages.join("");
+ } else {
+ postData = appender.getLayout().batchHeader +
+ formattedMessages.join(appender.getLayout().batchSeparator) +
+ appender.getLayout().batchFooter;
+ }
+ if (contentType == appender.defaults.contentType) {
+ postData = appender.getLayout().returnsPostData ? postData :
+ urlEncode(postVarName) + "=" + urlEncode(postData);
+ // Add the layout name to the post data
+ if (postData.length > 0) {
+ postData += "&";
+ }
+ postData += "layout=" + urlEncode(appender.getLayout().toString());
+ }
+ return postData;
+ }
+
+ function scheduleSending() {
+ window.setTimeout(sendAll, timerInterval);
+ }
+
+ function xmlHttpErrorHandler() {
+ var msg = "AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";
+ handleError(msg);
+ isSupported = false;
+ if (failCallback) {
+ failCallback(msg);
+ }
+ }
+
+ function sendRequest(postData, successCallback) {
+ try {
+ var xmlHttp = getXmlHttp(xmlHttpErrorHandler);
+ if (isSupported) {
+ if (xmlHttp.overrideMimeType) {
+ xmlHttp.overrideMimeType(appender.getLayout().getContentType());
+ }
+ xmlHttp.onreadystatechange = function() {
+ if (xmlHttp.readyState == 4) {
+ if (isHttpRequestSuccessful(xmlHttp)) {
+ if (requestSuccessCallback) {
+ requestSuccessCallback(xmlHttp);
+ }
+ if (successCallback) {
+ successCallback(xmlHttp);
+ }
+ } else {
+ var msg = "AjaxAppender.append: XMLHttpRequest request to URL " +
+ url + " returned status code " + xmlHttp.status;
+ handleError(msg);
+ if (failCallback) {
+ failCallback(msg);
+ }
+ }
+ xmlHttp.onreadystatechange = emptyFunction;
+ xmlHttp = null;
+ }
+ };
+ xmlHttp.open("POST", url, true);
+ try {
+ for (var i = 0, header; header = headers[i++]; ) {
+ xmlHttp.setRequestHeader(header.name, header.value);
+ }
+ xmlHttp.setRequestHeader("Content-Type", contentType);
+ } catch (headerEx) {
+ var msg = "AjaxAppender.append: your browser's XMLHttpRequest implementation" +
+ " does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";
+ handleError(msg);
+ isSupported = false;
+ if (failCallback) {
+ failCallback(msg);
+ }
+ return;
+ }
+ xmlHttp.send(postData);
+ }
+ } catch (ex) {
+ var errMsg = "AjaxAppender.append: error sending log message to " + url;
+ handleError(errMsg, ex);
+ isSupported = false;
+ if (failCallback) {
+ failCallback(errMsg + ". Details: " + getExceptionStringRep(ex));
+ }
+ }
+ }
+
+ this.append = function(loggingEvent) {
+ if (isSupported) {
+ if (!initialized) {
+ init();
+ }
+ queuedLoggingEvents.push(loggingEvent);
+ var actualBatchSize = this.getLayout().allowBatching() ? batchSize : 1;
+
+ if (queuedLoggingEvents.length >= actualBatchSize) {
+ var currentLoggingEvent;
+ var batchedLoggingEvents = [];
+ while ((currentLoggingEvent = queuedLoggingEvents.shift())) {
+ batchedLoggingEvents.push(currentLoggingEvent);
+ }
+ // Queue this batch of log entries
+ queuedRequests.push(batchedLoggingEvents);
+
+ // If using a timer, the queue of requests will be processed by the
+ // timer function, so nothing needs to be done here.
+ if (!timed && (!waitForResponse || (waitForResponse && !sending))) {
+ sendAll();
+ }
+ }
+ }
+ };
+
+ function init() {
+ initialized = true;
+ // Add unload event to send outstanding messages
+ if (sendAllOnUnload) {
+ var oldBeforeUnload = window.onbeforeunload;
+ window.onbeforeunload = function() {
+ if (oldBeforeUnload) {
+ oldBeforeUnload();
+ }
+ if (sendAllRemaining()) {
+ return "Sending log messages";
+ }
+ };
+ }
+ // Start timer
+ if (timed) {
+ scheduleSending();
+ }
+ }
+ }
+
+ AjaxAppender.prototype = new Appender();
+
+ AjaxAppender.prototype.defaults = {
+ waitForResponse: false,
+ timed: false,
+ timerInterval: 1000,
+ batchSize: 1,
+ sendAllOnUnload: false,
+ requestSuccessCallback: null,
+ failCallback: null,
+ postVarName: "data",
+ contentType: "application/x-www-form-urlencoded"
+ };
+
+ AjaxAppender.prototype.layout = new HttpPostDataLayout();
+
+ AjaxAppender.prototype.toString = function() {
+ return "AjaxAppender";
+ };
+
+ log4javascript.AjaxAppender = AjaxAppender;
+ /* ---------------------------------------------------------------------- */
+ // PopUpAppender and InPageAppender related
+
+ function setCookie(name, value, days, path) {
+ var expires;
+ path = path ? "; path=" + path : "";
+ if (days) {
+ var date = new Date();
+ date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
+ expires = "; expires=" + date.toGMTString();
+ } else {
+ expires = "";
+ }
+ document.cookie = escape(name) + "=" + escape(value) + expires + path;
+ }
+
+ function getCookie(name) {
+ var nameEquals = escape(name) + "=";
+ var ca = document.cookie.split(";");
+ for (var i = 0, len = ca.length; i < len; i++) {
+ var c = ca[i];
+ while (c.charAt(0) === " ") {
+ c = c.substring(1, c.length);
+ }
+ if (c.indexOf(nameEquals) === 0) {
+ return unescape(c.substring(nameEquals.length, c.length));
+ }
+ }
+ return null;
+ }
+
+ // Gets the base URL of the location of the log4javascript script.
+ // This is far from infallible.
+ function getBaseUrl() {
+ var scripts = document.getElementsByTagName("script");
+ for (var i = 0, len = scripts.length; i < len; ++i) {
+ if (scripts[i].src.indexOf("log4javascript") != -1) {
+ var lastSlash = scripts[i].src.lastIndexOf("/");
+ return (lastSlash == -1) ? "" : scripts[i].src.substr(0, lastSlash + 1);
+ }
+ }
+ return null;
+ }
+
+ function isLoaded(win) {
+ try {
+ return bool(win.loaded);
+ } catch (ex) {
+ return false;
+ }
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // ConsoleAppender (prototype for PopUpAppender and InPageAppender)
+
+ var ConsoleAppender;
+
+ // Create an anonymous function to protect base console methods
+ (function() {
+ var getConsoleHtmlLines = function() {
+ return [
+'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
+'<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">',
+' <head>',
+' <title>log4javascript</title>',
+' <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />',
+' <!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->',
+' <meta http-equiv="X-UA-Compatible" content="IE=7" />',
+' <script type="text/javascript">var isIe = false, isIePre7 = false;</script>',
+' <!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->',
+' <!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->',
+' <script type="text/javascript">',
+' //<![CDATA[',
+' var loggingEnabled = true;',
+' var logQueuedEventsTimer = null;',
+' var logEntries = [];',
+' var logEntriesAndSeparators = [];',
+' var logItems = [];',
+' var renderDelay = 100;',
+' var unrenderedLogItemsExist = false;',
+' var rootGroup, currentGroup = null;',
+' var loaded = false;',
+' var currentLogItem = null;',
+' var logMainContainer;',
+'',
+' function copyProperties(obj, props) {',
+' for (var i in props) {',
+' obj[i] = props[i];',
+' }',
+' }',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogItem() {',
+' }',
+'',
+' LogItem.prototype = {',
+' mainContainer: null,',
+' wrappedContainer: null,',
+' unwrappedContainer: null,',
+' group: null,',
+'',
+' appendToLog: function() {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].appendToLog();',
+' }',
+' this.group.update();',
+' },',
+'',
+' doRemove: function(doUpdate, removeFromGroup) {',
+' if (this.rendered) {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].remove();',
+' }',
+' this.unwrappedElementContainer = null;',
+' this.wrappedElementContainer = null;',
+' this.mainElementContainer = null;',
+' }',
+' if (this.group && removeFromGroup) {',
+' this.group.removeChild(this, doUpdate);',
+' }',
+' if (this === currentLogItem) {',
+' currentLogItem = null;',
+' }',
+' },',
+'',
+' remove: function(doUpdate, removeFromGroup) {',
+' this.doRemove(doUpdate, removeFromGroup);',
+' },',
+'',
+' render: function() {},',
+'',
+' accept: function(visitor) {',
+' visitor.visit(this);',
+' },',
+'',
+' getUnwrappedDomContainer: function() {',
+' return this.group.unwrappedElementContainer.contentDiv;',
+' },',
+'',
+' getWrappedDomContainer: function() {',
+' return this.group.wrappedElementContainer.contentDiv;',
+' },',
+'',
+' getMainDomContainer: function() {',
+' return this.group.mainElementContainer.contentDiv;',
+' }',
+' };',
+'',
+' LogItem.serializedItemKeys = {LOG_ENTRY: 0, GROUP_START: 1, GROUP_END: 2};',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogItemContainerElement() {',
+' }',
+'',
+' LogItemContainerElement.prototype = {',
+' appendToLog: function() {',
+' var insertBeforeFirst = (newestAtTop && this.containerDomNode.hasChildNodes());',
+' if (insertBeforeFirst) {',
+' this.containerDomNode.insertBefore(this.mainDiv, this.containerDomNode.firstChild);',
+' } else {',
+' this.containerDomNode.appendChild(this.mainDiv);',
+' }',
+' }',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function SeparatorElementContainer(containerDomNode) {',
+' this.containerDomNode = containerDomNode;',
+' this.mainDiv = document.createElement("div");',
+' this.mainDiv.className = "separator";',
+' this.mainDiv.innerHTML = " ";',
+' }',
+'',
+' SeparatorElementContainer.prototype = new LogItemContainerElement();',
+'',
+' SeparatorElementContainer.prototype.remove = function() {',
+' this.mainDiv.parentNode.removeChild(this.mainDiv);',
+' this.mainDiv = null;',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function Separator() {',
+' this.rendered = false;',
+' }',
+'',
+' Separator.prototype = new LogItem();',
+'',
+' copyProperties(Separator.prototype, {',
+' render: function() {',
+' var containerDomNode = this.group.contentDiv;',
+' if (isIe) {',
+' this.unwrappedElementContainer = new SeparatorElementContainer(this.getUnwrappedDomContainer());',
+' this.wrappedElementContainer = new SeparatorElementContainer(this.getWrappedDomContainer());',
+' this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',
+' } else {',
+' this.mainElementContainer = new SeparatorElementContainer(this.getMainDomContainer());',
+' this.elementContainers = [this.mainElementContainer];',
+' }',
+' this.content = this.formattedMessage;',
+' this.rendered = true;',
+' }',
+' });',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function GroupElementContainer(group, containerDomNode, isRoot, isWrapped) {',
+' this.group = group;',
+' this.containerDomNode = containerDomNode;',
+' this.isRoot = isRoot;',
+' this.isWrapped = isWrapped;',
+' this.expandable = false;',
+'',
+' if (this.isRoot) {',
+' if (isIe) {',
+' this.contentDiv = logMainContainer.appendChild(document.createElement("div"));',
+' this.contentDiv.id = this.isWrapped ? "log_wrapped" : "log_unwrapped";',
+' } else {',
+' this.contentDiv = logMainContainer;',
+' }',
+' } else {',
+' var groupElementContainer = this;',
+' ',
+' this.mainDiv = document.createElement("div");',
+' this.mainDiv.className = "group";',
+'',
+' this.headingDiv = this.mainDiv.appendChild(document.createElement("div"));',
+' this.headingDiv.className = "groupheading";',
+'',
+' this.expander = this.headingDiv.appendChild(document.createElement("span"));',
+' this.expander.className = "expander unselectable greyedout";',
+' this.expander.unselectable = true;',
+' var expanderText = this.group.expanded ? "-" : "+";',
+' this.expanderTextNode = this.expander.appendChild(document.createTextNode(expanderText));',
+' ',
+' this.headingDiv.appendChild(document.createTextNode(" " + this.group.name));',
+'',
+' this.contentDiv = this.mainDiv.appendChild(document.createElement("div"));',
+' var contentCssClass = this.group.expanded ? "expanded" : "collapsed";',
+' this.contentDiv.className = "groupcontent " + contentCssClass;',
+'',
+' this.expander.onclick = function() {',
+' if (groupElementContainer.group.expandable) {',
+' groupElementContainer.group.toggleExpanded();',
+' }',
+' };',
+' }',
+' }',
+'',
+' GroupElementContainer.prototype = new LogItemContainerElement();',
+'',
+' copyProperties(GroupElementContainer.prototype, {',
+' toggleExpanded: function() {',
+' if (!this.isRoot) {',
+' var oldCssClass, newCssClass, expanderText;',
+' if (this.group.expanded) {',
+' newCssClass = "expanded";',
+' oldCssClass = "collapsed";',
+' expanderText = "-";',
+' } else {',
+' newCssClass = "collapsed";',
+' oldCssClass = "expanded";',
+' expanderText = "+";',
+' }',
+' replaceClass(this.contentDiv, newCssClass, oldCssClass);',
+' this.expanderTextNode.nodeValue = expanderText;',
+' }',
+' },',
+'',
+' remove: function() {',
+' if (!this.isRoot) {',
+' this.headingDiv = null;',
+' this.expander.onclick = null;',
+' this.expander = null;',
+' this.expanderTextNode = null;',
+' this.contentDiv = null;',
+' this.containerDomNode = null;',
+' this.mainDiv.parentNode.removeChild(this.mainDiv);',
+' this.mainDiv = null;',
+' }',
+' },',
+'',
+' reverseChildren: function() {',
+' // Invert the order of the log entries',
+' var node = null;',
+'',
+' // Remove all the log container nodes',
+' var childDomNodes = [];',
+' while ((node = this.contentDiv.firstChild)) {',
+' this.contentDiv.removeChild(node);',
+' childDomNodes.push(node);',
+' }',
+'',
+' // Put them all back in reverse order',
+' while ((node = childDomNodes.pop())) {',
+' this.contentDiv.appendChild(node);',
+' }',
+' },',
+'',
+' update: function() {',
+' if (!this.isRoot) {',
+' if (this.group.expandable) {',
+' removeClass(this.expander, "greyedout");',
+' } else {',
+' addClass(this.expander, "greyedout");',
+' }',
+' }',
+' },',
+'',
+' clear: function() {',
+' if (this.isRoot) {',
+' this.contentDiv.innerHTML = "";',
+' }',
+' }',
+' });',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function Group(name, isRoot, initiallyExpanded) {',
+' this.name = name;',
+' this.group = null;',
+' this.isRoot = isRoot;',
+' this.initiallyExpanded = initiallyExpanded;',
+' this.elementContainers = [];',
+' this.children = [];',
+' this.expanded = initiallyExpanded;',
+' this.rendered = false;',
+' this.expandable = false;',
+' }',
+'',
+' Group.prototype = new LogItem();',
+'',
+' copyProperties(Group.prototype, {',
+' addChild: function(logItem) {',
+' this.children.push(logItem);',
+' logItem.group = this;',
+' },',
+'',
+' render: function() {',
+' if (isIe) {',
+' var unwrappedDomContainer, wrappedDomContainer;',
+' if (this.isRoot) {',
+' unwrappedDomContainer = logMainContainer;',
+' wrappedDomContainer = logMainContainer;',
+' } else {',
+' unwrappedDomContainer = this.getUnwrappedDomContainer();',
+' wrappedDomContainer = this.getWrappedDomContainer();',
+' }',
+' this.unwrappedElementContainer = new GroupElementContainer(this, unwrappedDomContainer, this.isRoot, false);',
+' this.wrappedElementContainer = new GroupElementContainer(this, wrappedDomContainer, this.isRoot, true);',
+' this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',
+' } else {',
+' var mainDomContainer = this.isRoot ? logMainContainer : this.getMainDomContainer();',
+' this.mainElementContainer = new GroupElementContainer(this, mainDomContainer, this.isRoot, false);',
+' this.elementContainers = [this.mainElementContainer];',
+' }',
+' this.rendered = true;',
+' },',
+'',
+' toggleExpanded: function() {',
+' this.expanded = !this.expanded;',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].toggleExpanded();',
+' }',
+' },',
+'',
+' expand: function() {',
+' if (!this.expanded) {',
+' this.toggleExpanded();',
+' }',
+' },',
+'',
+' accept: function(visitor) {',
+' visitor.visitGroup(this);',
+' },',
+'',
+' reverseChildren: function() {',
+' if (this.rendered) {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].reverseChildren();',
+' }',
+' }',
+' },',
+'',
+' update: function() {',
+' var previouslyExpandable = this.expandable;',
+' this.expandable = (this.children.length !== 0);',
+' if (this.expandable !== previouslyExpandable) {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].update();',
+' }',
+' }',
+' },',
+'',
+' flatten: function() {',
+' var visitor = new GroupFlattener();',
+' this.accept(visitor);',
+' return visitor.logEntriesAndSeparators;',
+' },',
+'',
+' removeChild: function(child, doUpdate) {',
+' array_remove(this.children, child);',
+' child.group = null;',
+' if (doUpdate) {',
+' this.update();',
+' }',
+' },',
+'',
+' remove: function(doUpdate, removeFromGroup) {',
+' for (var i = 0, len = this.children.length; i < len; i++) {',
+' this.children[i].remove(false, false);',
+' }',
+' this.children = [];',
+' this.update();',
+' if (this === currentGroup) {',
+' currentGroup = this.group;',
+' }',
+' this.doRemove(doUpdate, removeFromGroup);',
+' },',
+'',
+' serialize: function(items) {',
+' items.push([LogItem.serializedItemKeys.GROUP_START, this.name]);',
+' for (var i = 0, len = this.children.length; i < len; i++) {',
+' this.children[i].serialize(items);',
+' }',
+' if (this !== currentGroup) {',
+' items.push([LogItem.serializedItemKeys.GROUP_END]);',
+' }',
+' },',
+'',
+' clear: function() {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].clear();',
+' }',
+' }',
+' });',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogEntryElementContainer() {',
+' }',
+'',
+' LogEntryElementContainer.prototype = new LogItemContainerElement();',
+'',
+' copyProperties(LogEntryElementContainer.prototype, {',
+' remove: function() {',
+' this.doRemove();',
+' },',
+'',
+' doRemove: function() {',
+' this.mainDiv.parentNode.removeChild(this.mainDiv);',
+' this.mainDiv = null;',
+' this.contentElement = null;',
+' this.containerDomNode = null;',
+' },',
+'',
+' setContent: function(content, wrappedContent) {',
+' if (content === this.formattedMessage) {',
+' this.contentElement.innerHTML = "";',
+' this.contentElement.appendChild(document.createTextNode(this.formattedMessage));',
+' } else {',
+' this.contentElement.innerHTML = content;',
+' }',
+' },',
+'',
+' setSearchMatch: function(isMatch) {',
+' var oldCssClass = isMatch ? "searchnonmatch" : "searchmatch";',
+' var newCssClass = isMatch ? "searchmatch" : "searchnonmatch";',
+' replaceClass(this.mainDiv, newCssClass, oldCssClass);',
+' },',
+'',
+' clearSearch: function() {',
+' removeClass(this.mainDiv, "searchmatch");',
+' removeClass(this.mainDiv, "searchnonmatch");',
+' }',
+' });',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogEntryWrappedElementContainer(logEntry, containerDomNode) {',
+' this.logEntry = logEntry;',
+' this.containerDomNode = containerDomNode;',
+' this.mainDiv = document.createElement("div");',
+' this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));',
+' this.mainDiv.className = "logentry wrapped " + this.logEntry.level;',
+' this.contentElement = this.mainDiv;',
+' }',
+'',
+' LogEntryWrappedElementContainer.prototype = new LogEntryElementContainer();',
+'',
+' LogEntryWrappedElementContainer.prototype.setContent = function(content, wrappedContent) {',
+' if (content === this.formattedMessage) {',
+' this.contentElement.innerHTML = "";',
+' this.contentElement.appendChild(document.createTextNode(this.formattedMessage));',
+' } else {',
+' this.contentElement.innerHTML = wrappedContent;',
+' }',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogEntryUnwrappedElementContainer(logEntry, containerDomNode) {',
+' this.logEntry = logEntry;',
+' this.containerDomNode = containerDomNode;',
+' this.mainDiv = document.createElement("div");',
+' this.mainDiv.className = "logentry unwrapped " + this.logEntry.level;',
+' this.pre = this.mainDiv.appendChild(document.createElement("pre"));',
+' this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));',
+' this.pre.className = "unwrapped";',
+' this.contentElement = this.pre;',
+' }',
+'',
+' LogEntryUnwrappedElementContainer.prototype = new LogEntryElementContainer();',
+'',
+' LogEntryUnwrappedElementContainer.prototype.remove = function() {',
+' this.doRemove();',
+' this.pre = null;',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogEntryMainElementContainer(logEntry, containerDomNode) {',
+' this.logEntry = logEntry;',
+' this.containerDomNode = containerDomNode;',
+' this.mainDiv = document.createElement("div");',
+' this.mainDiv.className = "logentry nonielogentry " + this.logEntry.level;',
+' this.contentElement = this.mainDiv.appendChild(document.createElement("span"));',
+' this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));',
+' }',
+'',
+' LogEntryMainElementContainer.prototype = new LogEntryElementContainer();',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogEntry(level, formattedMessage) {',
+' this.level = level;',
+' this.formattedMessage = formattedMessage;',
+' this.rendered = false;',
+' }',
+'',
+' LogEntry.prototype = new LogItem();',
+'',
+' copyProperties(LogEntry.prototype, {',
+' render: function() {',
+' var logEntry = this;',
+' var containerDomNode = this.group.contentDiv;',
+'',
+' // Support for the CSS attribute white-space in IE for Windows is',
+' // non-existent pre version 6 and slightly odd in 6, so instead',
+' // use two different HTML elements',
+' if (isIe) {',
+' this.formattedMessage = this.formattedMessage.replace(/\\r\\n/g, "\\r"); // Workaround for IE\'s treatment of white space',
+' this.unwrappedElementContainer = new LogEntryUnwrappedElementContainer(this, this.getUnwrappedDomContainer());',
+' this.wrappedElementContainer = new LogEntryWrappedElementContainer(this, this.getWrappedDomContainer());',
+' this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',
+' } else {',
+' this.mainElementContainer = new LogEntryMainElementContainer(this, this.getMainDomContainer());',
+' this.elementContainers = [this.mainElementContainer];',
+' }',
+' this.content = this.formattedMessage;',
+' this.rendered = true;',
+' },',
+'',
+' setContent: function(content, wrappedContent) {',
+' if (content != this.content) {',
+' if (isIe && (content !== this.formattedMessage)) {',
+' content = content.replace(/\\r\\n/g, "\\r"); // Workaround for IE\'s treatment of white space',
+' }',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].setContent(content, wrappedContent);',
+' }',
+' this.content = content;',
+' }',
+' },',
+'',
+' getSearchMatches: function() {',
+' var matches = [];',
+' var i, len;',
+' if (isIe) {',
+' var unwrappedEls = getElementsByClass(this.unwrappedElementContainer.mainDiv, "searchterm", "span");',
+' var wrappedEls = getElementsByClass(this.wrappedElementContainer.mainDiv, "searchterm", "span");',
+' for (i = 0, len = unwrappedEls.length; i < len; i++) {',
+' matches[i] = new Match(this.level, null, unwrappedEls[i], wrappedEls[i]);',
+' }',
+' } else {',
+' var els = getElementsByClass(this.mainElementContainer.mainDiv, "searchterm", "span");',
+' for (i = 0, len = els.length; i < len; i++) {',
+' matches[i] = new Match(this.level, els[i]);',
+' }',
+' }',
+' return matches;',
+' },',
+'',
+' setSearchMatch: function(isMatch) {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].setSearchMatch(isMatch);',
+' }',
+' },',
+'',
+' clearSearch: function() {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].clearSearch();',
+' }',
+' },',
+'',
+' accept: function(visitor) {',
+' visitor.visitLogEntry(this);',
+' },',
+'',
+' serialize: function(items) {',
+' items.push([LogItem.serializedItemKeys.LOG_ENTRY, this.level, this.formattedMessage]);',
+' }',
+' });',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogItemVisitor() {',
+' }',
+'',
+' LogItemVisitor.prototype = {',
+' visit: function(logItem) {',
+' },',
+'',
+' visitParent: function(logItem) {',
+' if (logItem.group) {',
+' logItem.group.accept(this);',
+' }',
+' },',
+'',
+' visitChildren: function(logItem) {',
+' for (var i = 0, len = logItem.children.length; i < len; i++) {',
+' logItem.children[i].accept(this);',
+' }',
+' },',
+'',
+' visitLogEntry: function(logEntry) {',
+' this.visit(logEntry);',
+' },',
+'',
+' visitSeparator: function(separator) {',
+' this.visit(separator);',
+' },',
+'',
+' visitGroup: function(group) {',
+' this.visit(group);',
+' }',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function GroupFlattener() {',
+' this.logEntriesAndSeparators = [];',
+' }',
+'',
+' GroupFlattener.prototype = new LogItemVisitor();',
+'',
+' GroupFlattener.prototype.visitGroup = function(group) {',
+' this.visitChildren(group);',
+' };',
+'',
+' GroupFlattener.prototype.visitLogEntry = function(logEntry) {',
+' this.logEntriesAndSeparators.push(logEntry);',
+' };',
+'',
+' GroupFlattener.prototype.visitSeparator = function(separator) {',
+' this.logEntriesAndSeparators.push(separator);',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' window.onload = function() {',
+' // Sort out document.domain',
+' if (location.search) {',
+' var queryBits = unescape(location.search).substr(1).split("&"), nameValueBits;',
+' for (var i = 0, len = queryBits.length; i < len; i++) {',
+' nameValueBits = queryBits[i].split("=");',
+' if (nameValueBits[0] == "log4javascript_domain") {',
+' document.domain = nameValueBits[1];',
+' break;',
+' }',
+' }',
+' }',
+'',
+' // Create DOM objects',
+' logMainContainer = $("log");',
+' if (isIePre7) {',
+' addClass(logMainContainer, "oldIe");',
+' }',
+'',
+' rootGroup = new Group("root", true);',
+' rootGroup.render();',
+' currentGroup = rootGroup;',
+' ',
+' setCommandInputWidth();',
+' setLogContainerHeight();',
+' toggleLoggingEnabled();',
+' toggleSearchEnabled();',
+' toggleSearchFilter();',
+' toggleSearchHighlight();',
+' applyFilters();',
+' checkAllLevels();',
+' toggleWrap();',
+' toggleNewestAtTop();',
+' toggleScrollToLatest();',
+' renderQueuedLogItems();',
+' loaded = true;',
+' $("command").value = "";',
+' $("command").autocomplete = "off";',
+' $("command").onkeydown = function(evt) {',
+' evt = getEvent(evt);',
+' if (evt.keyCode == 10 || evt.keyCode == 13) { // Return/Enter',
+' evalCommandLine();',
+' stopPropagation(evt);',
+' } else if (evt.keyCode == 27) { // Escape',
+' this.value = "";',
+' this.focus();',
+' } else if (evt.keyCode == 38 && commandHistory.length > 0) { // Up',
+' currentCommandIndex = Math.max(0, currentCommandIndex - 1);',
+' this.value = commandHistory[currentCommandIndex];',
+' moveCaretToEnd(this);',
+' } else if (evt.keyCode == 40 && commandHistory.length > 0) { // Down',
+' currentCommandIndex = Math.min(commandHistory.length - 1, currentCommandIndex + 1);',
+' this.value = commandHistory[currentCommandIndex];',
+' moveCaretToEnd(this);',
+' }',
+' };',
+'',
+' // Prevent the keypress moving the caret in Firefox',
+' $("command").onkeypress = function(evt) {',
+' evt = getEvent(evt);',
+' if (evt.keyCode == 38 && commandHistory.length > 0 && evt.preventDefault) { // Up',
+' evt.preventDefault();',
+' }',
+' };',
+'',
+' // Prevent the keyup event blurring the input in Opera',
+' $("command").onkeyup = function(evt) {',
+' evt = getEvent(evt);',
+' if (evt.keyCode == 27 && evt.preventDefault) { // Up',
+' evt.preventDefault();',
+' this.focus();',
+' }',
+' };',
+'',
+' // Add document keyboard shortcuts',
+' document.onkeydown = function keyEventHandler(evt) {',
+' evt = getEvent(evt);',
+' switch (evt.keyCode) {',
+' case 69: // Ctrl + shift + E: re-execute last command',
+' if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',
+' evalLastCommand();',
+' cancelKeyEvent(evt);',
+' return false;',
+' }',
+' break;',
+' case 75: // Ctrl + shift + K: focus search',
+' if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',
+' focusSearch();',
+' cancelKeyEvent(evt);',
+' return false;',
+' }',
+' break;',
+' case 40: // Ctrl + shift + down arrow: focus command line',
+' case 76: // Ctrl + shift + L: focus command line',
+' if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',
+' focusCommandLine();',
+' cancelKeyEvent(evt);',
+' return false;',
+' }',
+' break;',
+' }',
+' };',
+'',
+' // Workaround to make sure log div starts at the correct size',
+' setTimeout(setLogContainerHeight, 20);',
+'',
+' setShowCommandLine(showCommandLine);',
+' doSearch();',
+' };',
+'',
+' window.onunload = function() {',
+' if (mainWindowExists()) {',
+' appender.unload();',
+' }',
+' appender = null;',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function toggleLoggingEnabled() {',
+' setLoggingEnabled($("enableLogging").checked);',
+' }',
+'',
+' function setLoggingEnabled(enable) {',
+' loggingEnabled = enable;',
+' }',
+'',
+' var appender = null;',
+'',
+' function setAppender(appenderParam) {',
+' appender = appenderParam;',
+' }',
+'',
+' function setShowCloseButton(showCloseButton) {',
+' $("closeButton").style.display = showCloseButton ? "inline" : "none";',
+' }',
+'',
+' function setShowHideButton(showHideButton) {',
+' $("hideButton").style.display = showHideButton ? "inline" : "none";',
+' }',
+'',
+' var newestAtTop = false;',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogItemContentReverser() {',
+' }',
+' ',
+' LogItemContentReverser.prototype = new LogItemVisitor();',
+' ',
+' LogItemContentReverser.prototype.visitGroup = function(group) {',
+' group.reverseChildren();',
+' this.visitChildren(group);',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function setNewestAtTop(isNewestAtTop) {',
+' var oldNewestAtTop = newestAtTop;',
+' var i, iLen, j, jLen;',
+' newestAtTop = Boolean(isNewestAtTop);',
+' if (oldNewestAtTop != newestAtTop) {',
+' var visitor = new LogItemContentReverser();',
+' rootGroup.accept(visitor);',
+'',
+' // Reassemble the matches array',
+' if (currentSearch) {',
+' var currentMatch = currentSearch.matches[currentMatchIndex];',
+' var matchIndex = 0;',
+' var matches = [];',
+' var actOnLogEntry = function(logEntry) {',
+' var logEntryMatches = logEntry.getSearchMatches();',
+' for (j = 0, jLen = logEntryMatches.length; j < jLen; j++) {',
+' matches[matchIndex] = logEntryMatches[j];',
+' if (currentMatch && logEntryMatches[j].equals(currentMatch)) {',
+' currentMatchIndex = matchIndex;',
+' }',
+' matchIndex++;',
+' }',
+' };',
+' if (newestAtTop) {',
+' for (i = logEntries.length - 1; i >= 0; i--) {',
+' actOnLogEntry(logEntries[i]);',
+' }',
+' } else {',
+' for (i = 0, iLen = logEntries.length; i < iLen; i++) {',
+' actOnLogEntry(logEntries[i]);',
+' }',
+' }',
+' currentSearch.matches = matches;',
+' if (currentMatch) {',
+' currentMatch.setCurrent();',
+' }',
+' } else if (scrollToLatest) {',
+' doScrollToLatest();',
+' }',
+' }',
+' $("newestAtTop").checked = isNewestAtTop;',
+' }',
+'',
+' function toggleNewestAtTop() {',
+' var isNewestAtTop = $("newestAtTop").checked;',
+' setNewestAtTop(isNewestAtTop);',
+' }',
+'',
+' var scrollToLatest = true;',
+'',
+' function setScrollToLatest(isScrollToLatest) {',
+' scrollToLatest = isScrollToLatest;',
+' if (scrollToLatest) {',
+' doScrollToLatest();',
+' }',
+' $("scrollToLatest").checked = isScrollToLatest;',
+' }',
+'',
+' function toggleScrollToLatest() {',
+' var isScrollToLatest = $("scrollToLatest").checked;',
+' setScrollToLatest(isScrollToLatest);',
+' }',
+'',
+' function doScrollToLatest() {',
+' var l = logMainContainer;',
+' if (typeof l.scrollTop != "undefined") {',
+' if (newestAtTop) {',
+' l.scrollTop = 0;',
+' } else {',
+' var latestLogEntry = l.lastChild;',
+' if (latestLogEntry) {',
+' l.scrollTop = l.scrollHeight;',
+' }',
+' }',
+' }',
+' }',
+'',
+' var closeIfOpenerCloses = true;',
+'',
+' function setCloseIfOpenerCloses(isCloseIfOpenerCloses) {',
+' closeIfOpenerCloses = isCloseIfOpenerCloses;',
+' }',
+'',
+' var maxMessages = null;',
+'',
+' function setMaxMessages(max) {',
+' maxMessages = max;',
+' pruneLogEntries();',
+' }',
+'',
+' var showCommandLine = false;',
+'',
+' function setShowCommandLine(isShowCommandLine) {',
+' showCommandLine = isShowCommandLine;',
+' if (loaded) {',
+' $("commandLine").style.display = showCommandLine ? "block" : "none";',
+' setCommandInputWidth();',
+' setLogContainerHeight();',
+' }',
+' }',
+'',
+' function focusCommandLine() {',
+' if (loaded) {',
+' $("command").focus();',
+' }',
+' }',
+'',
+' function focusSearch() {',
+' if (loaded) {',
+' $("searchBox").focus();',
+' }',
+' }',
+'',
+' function getLogItems() {',
+' var items = [];',
+' for (var i = 0, len = logItems.length; i < len; i++) {',
+' logItems[i].serialize(items);',
+' }',
+' return items;',
+' }',
+'',
+' function setLogItems(items) {',
+' var loggingReallyEnabled = loggingEnabled;',
+' // Temporarily turn logging on',
+' loggingEnabled = true;',
+' for (var i = 0, len = items.length; i < len; i++) {',
+' switch (items[i][0]) {',
+' case LogItem.serializedItemKeys.LOG_ENTRY:',
+' log(items[i][1], items[i][2]);',
+' break;',
+' case LogItem.serializedItemKeys.GROUP_START:',
+' group(items[i][1]);',
+' break;',
+' case LogItem.serializedItemKeys.GROUP_END:',
+' groupEnd();',
+' break;',
+' }',
+' }',
+' loggingEnabled = loggingReallyEnabled;',
+' }',
+'',
+' function log(logLevel, formattedMessage) {',
+' if (loggingEnabled) {',
+' var logEntry = new LogEntry(logLevel, formattedMessage);',
+' logEntries.push(logEntry);',
+' logEntriesAndSeparators.push(logEntry);',
+' logItems.push(logEntry);',
+' currentGroup.addChild(logEntry);',
+' if (loaded) {',
+' if (logQueuedEventsTimer !== null) {',
+' clearTimeout(logQueuedEventsTimer);',
+' }',
+' logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);',
+' unrenderedLogItemsExist = true;',
+' }',
+' }',
+' }',
+'',
+' function renderQueuedLogItems() {',
+' logQueuedEventsTimer = null;',
+' var pruned = pruneLogEntries();',
+'',
+' // Render any unrendered log entries and apply the current search to them',
+' var initiallyHasMatches = currentSearch ? currentSearch.hasMatches() : false;',
+' for (var i = 0, len = logItems.length; i < len; i++) {',
+' if (!logItems[i].rendered) {',
+' logItems[i].render();',
+' logItems[i].appendToLog();',
+' if (currentSearch && (logItems[i] instanceof LogEntry)) {',
+' currentSearch.applyTo(logItems[i]);',
+' }',
+' }',
+' }',
+' if (currentSearch) {',
+' if (pruned) {',
+' if (currentSearch.hasVisibleMatches()) {',
+' if (currentMatchIndex === null) {',
+' setCurrentMatchIndex(0);',
+' }',
+' displayMatches();',
+' } else {',
+' displayNoMatches();',
+' }',
+' } else if (!initiallyHasMatches && currentSearch.hasVisibleMatches()) {',
+' setCurrentMatchIndex(0);',
+' displayMatches();',
+' }',
+' }',
+' if (scrollToLatest) {',
+' doScrollToLatest();',
+' }',
+' unrenderedLogItemsExist = false;',
+' }',
+'',
+' function pruneLogEntries() {',
+' if ((maxMessages !== null) && (logEntriesAndSeparators.length > maxMessages)) {',
+' var numberToDelete = logEntriesAndSeparators.length - maxMessages;',
+' var prunedLogEntries = logEntriesAndSeparators.slice(0, numberToDelete);',
+' if (currentSearch) {',
+' currentSearch.removeMatches(prunedLogEntries);',
+' }',
+' var group;',
+' for (var i = 0; i < numberToDelete; i++) {',
+' group = logEntriesAndSeparators[i].group;',
+' array_remove(logItems, logEntriesAndSeparators[i]);',
+' array_remove(logEntries, logEntriesAndSeparators[i]);',
+' logEntriesAndSeparators[i].remove(true, true);',
+' if (group.children.length === 0 && group !== currentGroup && group !== rootGroup) {',
+' array_remove(logItems, group);',
+' group.remove(true, true);',
+' }',
+' }',
+' logEntriesAndSeparators = array_removeFromStart(logEntriesAndSeparators, numberToDelete);',
+' return true;',
+' }',
+' return false;',
+' }',
+'',
+' function group(name, startExpanded) {',
+' if (loggingEnabled) {',
+' initiallyExpanded = (typeof startExpanded === "undefined") ? true : Boolean(startExpanded);',
+' var newGroup = new Group(name, false, initiallyExpanded);',
+' currentGroup.addChild(newGroup);',
+' currentGroup = newGroup;',
+' logItems.push(newGroup);',
+' if (loaded) {',
+' if (logQueuedEventsTimer !== null) {',
+' clearTimeout(logQueuedEventsTimer);',
+' }',
+' logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);',
+' unrenderedLogItemsExist = true;',
+' }',
+' }',
+' }',
+'',
+' function groupEnd() {',
+' currentGroup = (currentGroup === rootGroup) ? rootGroup : currentGroup.group;',
+' }',
+'',
+' function mainPageReloaded() {',
+' currentGroup = rootGroup;',
+' var separator = new Separator();',
+' logEntriesAndSeparators.push(separator);',
+' logItems.push(separator);',
+' currentGroup.addChild(separator);',
+' }',
+'',
+' function closeWindow() {',
+' if (appender && mainWindowExists()) {',
+' appender.close(true);',
+' } else {',
+' window.close();',
+' }',
+' }',
+'',
+' function hide() {',
+' if (appender && mainWindowExists()) {',
+' appender.hide();',
+' }',
+' }',
+'',
+' var mainWindow = window;',
+' var windowId = "log4javascriptConsoleWindow_" + new Date().getTime() + "_" + ("" + Math.random()).substr(2);',
+'',
+' function setMainWindow(win) {',
+' mainWindow = win;',
+' mainWindow[windowId] = window;',
+' // If this is a pop-up, poll the opener to see if it\'s closed',
+' if (opener && closeIfOpenerCloses) {',
+' pollOpener();',
+' }',
+' }',
+'',
+' function pollOpener() {',
+' if (closeIfOpenerCloses) {',
+' if (mainWindowExists()) {',
+' setTimeout(pollOpener, 500);',
+' } else {',
+' closeWindow();',
+' }',
+' }',
+' }',
+'',
+' function mainWindowExists() {',
+' try {',
+' return (mainWindow && !mainWindow.closed &&',
+' mainWindow[windowId] == window);',
+' } catch (ex) {}',
+' return false;',
+' }',
+'',
+' var logLevels = ["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"];',
+'',
+' function getCheckBox(logLevel) {',
+' return $("switch_" + logLevel);',
+' }',
+'',
+' function getIeWrappedLogContainer() {',
+' return $("log_wrapped");',
+' }',
+'',
+' function getIeUnwrappedLogContainer() {',
+' return $("log_unwrapped");',
+' }',
+'',
+' function applyFilters() {',
+' for (var i = 0; i < logLevels.length; i++) {',
+' if (getCheckBox(logLevels[i]).checked) {',
+' addClass(logMainContainer, logLevels[i]);',
+' } else {',
+' removeClass(logMainContainer, logLevels[i]);',
+' }',
+' }',
+' updateSearchFromFilters();',
+' }',
+'',
+' function toggleAllLevels() {',
+' var turnOn = $("switch_ALL").checked;',
+' for (var i = 0; i < logLevels.length; i++) {',
+' getCheckBox(logLevels[i]).checked = turnOn;',
+' if (turnOn) {',
+' addClass(logMainContainer, logLevels[i]);',
+' } else {',
+' removeClass(logMainContainer, logLevels[i]);',
+' }',
+' }',
+' }',
+'',
+' function checkAllLevels() {',
+' for (var i = 0; i < logLevels.length; i++) {',
+' if (!getCheckBox(logLevels[i]).checked) {',
+' getCheckBox("ALL").checked = false;',
+' return;',
+' }',
+' }',
+' getCheckBox("ALL").checked = true;',
+' }',
+'',
+' function clearLog() {',
+' rootGroup.clear();',
+' currentGroup = rootGroup;',
+' logEntries = [];',
+' logItems = [];',
+' logEntriesAndSeparators = [];',
+' doSearch();',
+' }',
+'',
+' function toggleWrap() {',
+' var enable = $("wrap").checked;',
+' if (enable) {',
+' addClass(logMainContainer, "wrap");',
+' } else {',
+' removeClass(logMainContainer, "wrap");',
+' }',
+' refreshCurrentMatch();',
+' }',
+'',
+' /* ------------------------------------------------------------------- */',
+'',
+' // Search',
+'',
+' var searchTimer = null;',
+'',
+' function scheduleSearch() {',
+' try {',
+' clearTimeout(searchTimer);',
+' } catch (ex) {',
+' // Do nothing',
+' }',
+' searchTimer = setTimeout(doSearch, 500);',
+' }',
+'',
+' function Search(searchTerm, isRegex, searchRegex, isCaseSensitive) {',
+' this.searchTerm = searchTerm;',
+' this.isRegex = isRegex;',
+' this.searchRegex = searchRegex;',
+' this.isCaseSensitive = isCaseSensitive;',
+' this.matches = [];',
+' }',
+'',
+' Search.prototype = {',
+' hasMatches: function() {',
+' return this.matches.length > 0;',
+' },',
+'',
+' hasVisibleMatches: function() {',
+' if (this.hasMatches()) {',
+' for (var i = 0; i < this.matches.length; i++) {',
+' if (this.matches[i].isVisible()) {',
+' return true;',
+' }',
+' }',
+' }',
+' return false;',
+' },',
+'',
+' match: function(logEntry) {',
+' var entryText = String(logEntry.formattedMessage);',
+' var matchesSearch = false;',
+' if (this.isRegex) {',
+' matchesSearch = this.searchRegex.test(entryText);',
+' } else if (this.isCaseSensitive) {',
+' matchesSearch = (entryText.indexOf(this.searchTerm) > -1);',
+' } else {',
+' matchesSearch = (entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1);',
+' }',
+' return matchesSearch;',
+' },',
+'',
+' getNextVisibleMatchIndex: function() {',
+' for (var i = currentMatchIndex + 1; i < this.matches.length; i++) {',
+' if (this.matches[i].isVisible()) {',
+' return i;',
+' }',
+' }',
+' // Start again from the first match',
+' for (i = 0; i <= currentMatchIndex; i++) {',
+' if (this.matches[i].isVisible()) {',
+' return i;',
+' }',
+' }',
+' return -1;',
+' },',
+'',
+' getPreviousVisibleMatchIndex: function() {',
+' for (var i = currentMatchIndex - 1; i >= 0; i--) {',
+' if (this.matches[i].isVisible()) {',
+' return i;',
+' }',
+' }',
+' // Start again from the last match',
+' for (var i = this.matches.length - 1; i >= currentMatchIndex; i--) {',
+' if (this.matches[i].isVisible()) {',
+' return i;',
+' }',
+' }',
+' return -1;',
+' },',
+'',
+' applyTo: function(logEntry) {',
+' var doesMatch = this.match(logEntry);',
+' if (doesMatch) {',
+' logEntry.group.expand();',
+' logEntry.setSearchMatch(true);',
+' var logEntryContent;',
+' var wrappedLogEntryContent;',
+' var searchTermReplacementStartTag = "<span class=\\\"searchterm\\\">";',
+' var searchTermReplacementEndTag = "<" + "/span>";',
+' var preTagName = isIe ? "pre" : "span";',
+' var preStartTag = "<" + preTagName + " class=\\\"pre\\\">";',
+' var preEndTag = "<" + "/" + preTagName + ">";',
+' var startIndex = 0;',
+' var searchIndex, matchedText, textBeforeMatch;',
+' if (this.isRegex) {',
+' var flags = this.isCaseSensitive ? "g" : "gi";',
+' var capturingRegex = new RegExp("(" + this.searchRegex.source + ")", flags);',
+'',
+' // Replace the search term with temporary tokens for the start and end tags',
+' var rnd = ("" + Math.random()).substr(2);',
+' var startToken = "%%s" + rnd + "%%";',
+' var endToken = "%%e" + rnd + "%%";',
+' logEntryContent = logEntry.formattedMessage.replace(capturingRegex, startToken + "$1" + endToken);',
+'',
+' // Escape the HTML to get rid of angle brackets',
+' logEntryContent = escapeHtml(logEntryContent);',
+'',
+' // Substitute the proper HTML back in for the search match',
+' var result;',
+' var searchString = logEntryContent;',
+' logEntryContent = "";',
+' wrappedLogEntryContent = "";',
+' while ((searchIndex = searchString.indexOf(startToken, startIndex)) > -1) {',
+' var endTokenIndex = searchString.indexOf(endToken, searchIndex);',
+' matchedText = searchString.substring(searchIndex + startToken.length, endTokenIndex);',
+' textBeforeMatch = searchString.substring(startIndex, searchIndex);',
+' logEntryContent += preStartTag + textBeforeMatch + preEndTag;',
+' logEntryContent += searchTermReplacementStartTag + preStartTag + matchedText +',
+' preEndTag + searchTermReplacementEndTag;',
+' if (isIe) {',
+' wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +',
+' matchedText + searchTermReplacementEndTag;',
+' }',
+' startIndex = endTokenIndex + endToken.length;',
+' }',
+' logEntryContent += preStartTag + searchString.substr(startIndex) + preEndTag;',
+' if (isIe) {',
+' wrappedLogEntryContent += searchString.substr(startIndex);',
+' }',
+' } else {',
+' logEntryContent = "";',
+' wrappedLogEntryContent = "";',
+' var searchTermReplacementLength = searchTermReplacementStartTag.length +',
+' this.searchTerm.length + searchTermReplacementEndTag.length;',
+' var searchTermLength = this.searchTerm.length;',
+' var searchTermLowerCase = this.searchTerm.toLowerCase();',
+' var logTextLowerCase = logEntry.formattedMessage.toLowerCase();',
+' while ((searchIndex = logTextLowerCase.indexOf(searchTermLowerCase, startIndex)) > -1) {',
+' matchedText = escapeHtml(logEntry.formattedMessage.substr(searchIndex, this.searchTerm.length));',
+' textBeforeMatch = escapeHtml(logEntry.formattedMessage.substring(startIndex, searchIndex));',
+' var searchTermReplacement = searchTermReplacementStartTag +',
+' preStartTag + matchedText + preEndTag + searchTermReplacementEndTag;',
+' logEntryContent += preStartTag + textBeforeMatch + preEndTag + searchTermReplacement;',
+' if (isIe) {',
+' wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +',
+' matchedText + searchTermReplacementEndTag;',
+' }',
+' startIndex = searchIndex + searchTermLength;',
+' }',
+' var textAfterLastMatch = escapeHtml(logEntry.formattedMessage.substr(startIndex));',
+' logEntryContent += preStartTag + textAfterLastMatch + preEndTag;',
+' if (isIe) {',
+' wrappedLogEntryContent += textAfterLastMatch;',
+' }',
+' }',
+' logEntry.setContent(logEntryContent, wrappedLogEntryContent);',
+' var logEntryMatches = logEntry.getSearchMatches();',
+' this.matches = this.matches.concat(logEntryMatches);',
+' } else {',
+' logEntry.setSearchMatch(false);',
+' logEntry.setContent(logEntry.formattedMessage, logEntry.formattedMessage);',
+' }',
+' return doesMatch;',
+' },',
+'',
+' removeMatches: function(logEntries) {',
+' var matchesToRemoveCount = 0;',
+' var currentMatchRemoved = false;',
+' var matchesToRemove = [];',
+' var i, iLen, j, jLen;',
+'',
+' // Establish the list of matches to be removed',
+' for (i = 0, iLen = this.matches.length; i < iLen; i++) {',
+' for (j = 0, jLen = logEntries.length; j < jLen; j++) {',
+' if (this.matches[i].belongsTo(logEntries[j])) {',
+' matchesToRemove.push(this.matches[i]);',
+' if (i === currentMatchIndex) {',
+' currentMatchRemoved = true;',
+' }',
+' }',
+' }',
+' }',
+'',
+' // Set the new current match index if the current match has been deleted',
+' // This will be the first match that appears after the first log entry being',
+' // deleted, if one exists; otherwise, it\'s the first match overall',
+' var newMatch = currentMatchRemoved ? null : this.matches[currentMatchIndex];',
+' if (currentMatchRemoved) {',
+' for (i = currentMatchIndex, iLen = this.matches.length; i < iLen; i++) {',
+' if (this.matches[i].isVisible() && !array_contains(matchesToRemove, this.matches[i])) {',
+' newMatch = this.matches[i];',
+' break;',
+' }',
+' }',
+' }',
+'',
+' // Remove the matches',
+' for (i = 0, iLen = matchesToRemove.length; i < iLen; i++) {',
+' array_remove(this.matches, matchesToRemove[i]);',
+' matchesToRemove[i].remove();',
+' }',
+'',
+' // Set the new match, if one exists',
+' if (this.hasVisibleMatches()) {',
+' if (newMatch === null) {',
+' setCurrentMatchIndex(0);',
+' } else {',
+' // Get the index of the new match',
+' var newMatchIndex = 0;',
+' for (i = 0, iLen = this.matches.length; i < iLen; i++) {',
+' if (newMatch === this.matches[i]) {',
+' newMatchIndex = i;',
+' break;',
+' }',
+' }',
+' setCurrentMatchIndex(newMatchIndex);',
+' }',
+' } else {',
+' currentMatchIndex = null;',
+' displayNoMatches();',
+' }',
+' }',
+' };',
+'',
+' function getPageOffsetTop(el, container) {',
+' var currentEl = el;',
+' var y = 0;',
+' while (currentEl && currentEl != container) {',
+' y += currentEl.offsetTop;',
+' currentEl = currentEl.offsetParent;',
+' }',
+' return y;',
+' }',
+'',
+' function scrollIntoView(el) {',
+' var logContainer = logMainContainer;',
+' // Check if the whole width of the element is visible and centre if not',
+' if (!$("wrap").checked) {',
+' var logContainerLeft = logContainer.scrollLeft;',
+' var logContainerRight = logContainerLeft + logContainer.offsetWidth;',
+' var elLeft = el.offsetLeft;',
+' var elRight = elLeft + el.offsetWidth;',
+' if (elLeft < logContainerLeft || elRight > logContainerRight) {',
+' logContainer.scrollLeft = elLeft - (logContainer.offsetWidth - el.offsetWidth) / 2;',
+' }',
+' }',
+' // Check if the whole height of the element is visible and centre if not',
+' var logContainerTop = logContainer.scrollTop;',
+' var logContainerBottom = logContainerTop + logContainer.offsetHeight;',
+' var elTop = getPageOffsetTop(el) - getToolBarsHeight();',
+' var elBottom = elTop + el.offsetHeight;',
+' if (elTop < logContainerTop || elBottom > logContainerBottom) {',
+' logContainer.scrollTop = elTop - (logContainer.offsetHeight - el.offsetHeight) / 2;',
+' }',
+' }',
+'',
+' function Match(logEntryLevel, spanInMainDiv, spanInUnwrappedPre, spanInWrappedDiv) {',
+' this.logEntryLevel = logEntryLevel;',
+' this.spanInMainDiv = spanInMainDiv;',
+' if (isIe) {',
+' this.spanInUnwrappedPre = spanInUnwrappedPre;',
+' this.spanInWrappedDiv = spanInWrappedDiv;',
+' }',
+' this.mainSpan = isIe ? spanInUnwrappedPre : spanInMainDiv;',
+' }',
+'',
+' Match.prototype = {',
+' equals: function(match) {',
+' return this.mainSpan === match.mainSpan;',
+' },',
+'',
+' setCurrent: function() {',
+' if (isIe) {',
+' addClass(this.spanInUnwrappedPre, "currentmatch");',
+' addClass(this.spanInWrappedDiv, "currentmatch");',
+' // Scroll the visible one into view',
+' var elementToScroll = $("wrap").checked ? this.spanInWrappedDiv : this.spanInUnwrappedPre;',
+' scrollIntoView(elementToScroll);',
+' } else {',
+' addClass(this.spanInMainDiv, "currentmatch");',
+' scrollIntoView(this.spanInMainDiv);',
+' }',
+' },',
+'',
+' belongsTo: function(logEntry) {',
+' if (isIe) {',
+' return isDescendant(this.spanInUnwrappedPre, logEntry.unwrappedPre);',
+' } else {',
+' return isDescendant(this.spanInMainDiv, logEntry.mainDiv);',
+' }',
+' },',
+'',
+' setNotCurrent: function() {',
+' if (isIe) {',
+' removeClass(this.spanInUnwrappedPre, "currentmatch");',
+' removeClass(this.spanInWrappedDiv, "currentmatch");',
+' } else {',
+' removeClass(this.spanInMainDiv, "currentmatch");',
+' }',
+' },',
+'',
+' isOrphan: function() {',
+' return isOrphan(this.mainSpan);',
+' },',
+'',
+' isVisible: function() {',
+' return getCheckBox(this.logEntryLevel).checked;',
+' },',
+'',
+' remove: function() {',
+' if (isIe) {',
+' this.spanInUnwrappedPre = null;',
+' this.spanInWrappedDiv = null;',
+' } else {',
+' this.spanInMainDiv = null;',
+' }',
+' }',
+' };',
+'',
+' var currentSearch = null;',
+' var currentMatchIndex = null;',
+'',
+' function doSearch() {',
+' var searchBox = $("searchBox");',
+' var searchTerm = searchBox.value;',
+' var isRegex = $("searchRegex").checked;',
+' var isCaseSensitive = $("searchCaseSensitive").checked;',
+' var i;',
+'',
+' if (searchTerm === "") {',
+' $("searchReset").disabled = true;',
+' $("searchNav").style.display = "none";',
+' removeClass(document.body, "searching");',
+' removeClass(searchBox, "hasmatches");',
+' removeClass(searchBox, "nomatches");',
+' for (i = 0; i < logEntries.length; i++) {',
+' logEntries[i].clearSearch();',
+' logEntries[i].setContent(logEntries[i].formattedMessage, logEntries[i].formattedMessage);',
+' }',
+' currentSearch = null;',
+' setLogContainerHeight();',
+' } else {',
+' $("searchReset").disabled = false;',
+' $("searchNav").style.display = "block";',
+' var searchRegex;',
+' var regexValid;',
+' if (isRegex) {',
+' try {',
+' searchRegex = isCaseSensitive ? new RegExp(searchTerm, "g") : new RegExp(searchTerm, "gi");',
+' regexValid = true;',
+' replaceClass(searchBox, "validregex", "invalidregex");',
+' searchBox.title = "Valid regex";',
+' } catch (ex) {',
+' regexValid = false;',
+' replaceClass(searchBox, "invalidregex", "validregex");',
+' searchBox.title = "Invalid regex: " + (ex.message ? ex.message : (ex.description ? ex.description : "unknown error"));',
+' return;',
+' }',
+' } else {',
+' searchBox.title = "";',
+' removeClass(searchBox, "validregex");',
+' removeClass(searchBox, "invalidregex");',
+' }',
+' addClass(document.body, "searching");',
+' currentSearch = new Search(searchTerm, isRegex, searchRegex, isCaseSensitive);',
+' for (i = 0; i < logEntries.length; i++) {',
+' currentSearch.applyTo(logEntries[i]);',
+' }',
+' setLogContainerHeight();',
+'',
+' // Highlight the first search match',
+' if (currentSearch.hasVisibleMatches()) {',
+' setCurrentMatchIndex(0);',
+' displayMatches();',
+' } else {',
+' displayNoMatches();',
+' }',
+' }',
+' }',
+'',
+' function updateSearchFromFilters() {',
+' if (currentSearch) {',
+' if (currentSearch.hasMatches()) {',
+' if (currentMatchIndex === null) {',
+' currentMatchIndex = 0;',
+' }',
+' var currentMatch = currentSearch.matches[currentMatchIndex];',
+' if (currentMatch.isVisible()) {',
+' displayMatches();',
+' setCurrentMatchIndex(currentMatchIndex);',
+' } else {',
+' currentMatch.setNotCurrent();',
+' // Find the next visible match, if one exists',
+' var nextVisibleMatchIndex = currentSearch.getNextVisibleMatchIndex();',
+' if (nextVisibleMatchIndex > -1) {',
+' setCurrentMatchIndex(nextVisibleMatchIndex);',
+' displayMatches();',
+' } else {',
+' displayNoMatches();',
+' }',
+' }',
+' } else {',
+' displayNoMatches();',
+' }',
+' }',
+' }',
+'',
+' function refreshCurrentMatch() {',
+' if (currentSearch && currentSearch.hasVisibleMatches()) {',
+' setCurrentMatchIndex(currentMatchIndex);',
+' }',
+' }',
+'',
+' function displayMatches() {',
+' replaceClass($("searchBox"), "hasmatches", "nomatches");',
+' $("searchBox").title = "" + currentSearch.matches.length + " matches found";',
+' $("searchNav").style.display = "block";',
+' setLogContainerHeight();',
+' }',
+'',
+' function displayNoMatches() {',
+' replaceClass($("searchBox"), "nomatches", "hasmatches");',
+' $("searchBox").title = "No matches found";',
+' $("searchNav").style.display = "none";',
+' setLogContainerHeight();',
+' }',
+'',
+' function toggleSearchEnabled(enable) {',
+' enable = (typeof enable == "undefined") ? !$("searchDisable").checked : enable;',
+' $("searchBox").disabled = !enable;',
+' $("searchReset").disabled = !enable;',
+' $("searchRegex").disabled = !enable;',
+' $("searchNext").disabled = !enable;',
+' $("searchPrevious").disabled = !enable;',
+' $("searchCaseSensitive").disabled = !enable;',
+' $("searchNav").style.display = (enable && ($("searchBox").value !== "") &&',
+' currentSearch && currentSearch.hasVisibleMatches()) ?',
+' "block" : "none";',
+' if (enable) {',
+' removeClass($("search"), "greyedout");',
+' addClass(document.body, "searching");',
+' if ($("searchHighlight").checked) {',
+' addClass(logMainContainer, "searchhighlight");',
+' } else {',
+' removeClass(logMainContainer, "searchhighlight");',
+' }',
+' if ($("searchFilter").checked) {',
+' addClass(logMainContainer, "searchfilter");',
+' } else {',
+' removeClass(logMainContainer, "searchfilter");',
+' }',
+' $("searchDisable").checked = !enable;',
+' } else {',
+' addClass($("search"), "greyedout");',
+' removeClass(document.body, "searching");',
+' removeClass(logMainContainer, "searchhighlight");',
+' removeClass(logMainContainer, "searchfilter");',
+' }',
+' setLogContainerHeight();',
+' }',
+'',
+' function toggleSearchFilter() {',
+' var enable = $("searchFilter").checked;',
+' if (enable) {',
+' addClass(logMainContainer, "searchfilter");',
+' } else {',
+' removeClass(logMainContainer, "searchfilter");',
+' }',
+' refreshCurrentMatch();',
+' }',
+'',
+' function toggleSearchHighlight() {',
+' var enable = $("searchHighlight").checked;',
+' if (enable) {',
+' addClass(logMainContainer, "searchhighlight");',
+' } else {',
+' removeClass(logMainContainer, "searchhighlight");',
+' }',
+' }',
+'',
+' function clearSearch() {',
+' $("searchBox").value = "";',
+' doSearch();',
+' }',
+'',
+' function searchNext() {',
+' if (currentSearch !== null && currentMatchIndex !== null) {',
+' currentSearch.matches[currentMatchIndex].setNotCurrent();',
+' var nextMatchIndex = currentSearch.getNextVisibleMatchIndex();',
+' if (nextMatchIndex > currentMatchIndex || confirm("Reached the end of the page. Start from the top?")) {',
+' setCurrentMatchIndex(nextMatchIndex);',
+' }',
+' }',
+' }',
+'',
+' function searchPrevious() {',
+' if (currentSearch !== null && currentMatchIndex !== null) {',
+' currentSearch.matches[currentMatchIndex].setNotCurrent();',
+' var previousMatchIndex = currentSearch.getPreviousVisibleMatchIndex();',
+' if (previousMatchIndex < currentMatchIndex || confirm("Reached the start of the page. Continue from the bottom?")) {',
+' setCurrentMatchIndex(previousMatchIndex);',
+' }',
+' }',
+' }',
+'',
+' function setCurrentMatchIndex(index) {',
+' currentMatchIndex = index;',
+' currentSearch.matches[currentMatchIndex].setCurrent();',
+' }',
+'',
+' /* ------------------------------------------------------------------------- */',
+'',
+' // CSS Utilities',
+'',
+' function addClass(el, cssClass) {',
+' if (!hasClass(el, cssClass)) {',
+' if (el.className) {',
+' el.className += " " + cssClass;',
+' } else {',
+' el.className = cssClass;',
+' }',
+' }',
+' }',
+'',
+' function hasClass(el, cssClass) {',
+' if (el.className) {',
+' var classNames = el.className.split(" ");',
+' return array_contains(classNames, cssClass);',
+' }',
+' return false;',
+' }',
+'',
+' function removeClass(el, cssClass) {',
+' if (hasClass(el, cssClass)) {',
+' // Rebuild the className property',
+' var existingClasses = el.className.split(" ");',
+' var newClasses = [];',
+' for (var i = 0, len = existingClasses.length; i < len; i++) {',
+' if (existingClasses[i] != cssClass) {',
+' newClasses[newClasses.length] = existingClasses[i];',
+' }',
+' }',
+' el.className = newClasses.join(" ");',
+' }',
+' }',
+'',
+' function replaceClass(el, newCssClass, oldCssClass) {',
+' removeClass(el, oldCssClass);',
+' addClass(el, newCssClass);',
+' }',
+'',
+' /* ------------------------------------------------------------------------- */',
+'',
+' // Other utility functions',
+'',
+' function getElementsByClass(el, cssClass, tagName) {',
+' var elements = el.getElementsByTagName(tagName);',
+' var matches = [];',
+' for (var i = 0, len = elements.length; i < len; i++) {',
+' if (hasClass(elements[i], cssClass)) {',
+' matches.push(elements[i]);',
+' }',
+' }',
+' return matches;',
+' }',
+'',
+' // Syntax borrowed from Prototype library',
+' function $(id) {',
+' return document.getElementById(id);',
+' }',
+'',
+' function isDescendant(node, ancestorNode) {',
+' while (node != null) {',
+' if (node === ancestorNode) {',
+' return true;',
+' }',
+' node = node.parentNode;',
+' }',
+' return false;',
+' }',
+'',
+' function isOrphan(node) {',
+' var currentNode = node;',
+' while (currentNode) {',
+' if (currentNode == document.body) {',
+' return false;',
+' }',
+' currentNode = currentNode.parentNode;',
+' }',
+' return true;',
+' }',
+'',
+' function escapeHtml(str) {',
+' return str.replace(/&/g, "&").replace(/[<]/g, "<").replace(/>/g, ">");',
+' }',
+'',
+' function getWindowWidth() {',
+' if (window.innerWidth) {',
+' return window.innerWidth;',
+' } else if (document.documentElement && document.documentElement.clientWidth) {',
+' return document.documentElement.clientWidth;',
+' } else if (document.body) {',
+' return document.body.clientWidth;',
+' }',
+' return 0;',
+' }',
+'',
+' function getWindowHeight() {',
+' if (window.innerHeight) {',
+' return window.innerHeight;',
+' } else if (document.documentElement && document.documentElement.clientHeight) {',
+' return document.documentElement.clientHeight;',
+' } else if (document.body) {',
+' return document.body.clientHeight;',
+' }',
+' return 0;',
+' }',
+'',
+' function getToolBarsHeight() {',
+' return $("switches").offsetHeight;',
+' }',
+'',
+' function getChromeHeight() {',
+' var height = getToolBarsHeight();',
+' if (showCommandLine) {',
+' height += $("commandLine").offsetHeight;',
+' }',
+' return height;',
+' }',
+'',
+' function setLogContainerHeight() {',
+' if (logMainContainer) {',
+' var windowHeight = getWindowHeight();',
+' $("body").style.height = getWindowHeight() + "px";',
+' logMainContainer.style.height = "" +',
+' Math.max(0, windowHeight - getChromeHeight()) + "px";',
+' }',
+' }',
+'',
+' function setCommandInputWidth() {',
+' if (showCommandLine) {',
+' $("command").style.width = "" + Math.max(0, $("commandLineContainer").offsetWidth -',
+' ($("evaluateButton").offsetWidth + 13)) + "px";',
+' }',
+' }',
+'',
+' window.onresize = function() {',
+' setCommandInputWidth();',
+' setLogContainerHeight();',
+' };',
+'',
+' if (!Array.prototype.push) {',
+' Array.prototype.push = function() {',
+' for (var i = 0, len = arguments.length; i < len; i++){',
+' this[this.length] = arguments[i];',
+' }',
+' return this.length;',
+' };',
+' }',
+'',
+' if (!Array.prototype.pop) {',
+' Array.prototype.pop = function() {',
+' if (this.length > 0) {',
+' var val = this[this.length - 1];',
+' this.length = this.length - 1;',
+' return val;',
+' }',
+' };',
+' }',
+'',
+' if (!Array.prototype.shift) {',
+' Array.prototype.shift = function() {',
+' if (this.length > 0) {',
+' var firstItem = this[0];',
+' for (var i = 0, len = this.length - 1; i < len; i++) {',
+' this[i] = this[i + 1];',
+' }',
+' this.length = this.length - 1;',
+' return firstItem;',
+' }',
+' };',
+' }',
+'',
+' if (!Array.prototype.splice) {',
+' Array.prototype.splice = function(startIndex, deleteCount) {',
+' var itemsAfterDeleted = this.slice(startIndex + deleteCount);',
+' var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);',
+' this.length = startIndex;',
+' // Copy the arguments into a proper Array object',
+' var argumentsArray = [];',
+' for (var i = 0, len = arguments.length; i < len; i++) {',
+' argumentsArray[i] = arguments[i];',
+' }',
+' var itemsToAppend = (argumentsArray.length > 2) ?',
+' itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;',
+' for (i = 0, len = itemsToAppend.length; i < len; i++) {',
+' this.push(itemsToAppend[i]);',
+' }',
+' return itemsDeleted;',
+' };',
+' }',
+'',
+' function array_remove(arr, val) {',
+' var index = -1;',
+' for (var i = 0, len = arr.length; i < len; i++) {',
+' if (arr[i] === val) {',
+' index = i;',
+' break;',
+' }',
+' }',
+' if (index >= 0) {',
+' arr.splice(index, 1);',
+' return index;',
+' } else {',
+' return false;',
+' }',
+' }',
+'',
+' function array_removeFromStart(array, numberToRemove) {',
+' if (Array.prototype.splice) {',
+' array.splice(0, numberToRemove);',
+' } else {',
+' for (var i = numberToRemove, len = array.length; i < len; i++) {',
+' array[i - numberToRemove] = array[i];',
+' }',
+' array.length = array.length - numberToRemove;',
+' }',
+' return array;',
+' }',
+'',
+' function array_contains(arr, val) {',
+' for (var i = 0, len = arr.length; i < len; i++) {',
+' if (arr[i] == val) {',
+' return true;',
+' }',
+' }',
+' return false;',
+' }',
+'',
+' function getErrorMessage(ex) {',
+' if (ex.message) {',
+' return ex.message;',
+' } else if (ex.description) {',
+' return ex.description;',
+' }',
+' return "" + ex;',
+' }',
+'',
+' function moveCaretToEnd(input) {',
+' if (input.setSelectionRange) {',
+' input.focus();',
+' var length = input.value.length;',
+' input.setSelectionRange(length, length);',
+' } else if (input.createTextRange) {',
+' var range = input.createTextRange();',
+' range.collapse(false);',
+' range.select();',
+' }',
+' input.focus();',
+' }',
+'',
+' function stopPropagation(evt) {',
+' if (evt.stopPropagation) {',
+' evt.stopPropagation();',
+' } else if (typeof evt.cancelBubble != "undefined") {',
+' evt.cancelBubble = true;',
+' }',
+' }',
+'',
+' function getEvent(evt) {',
+' return evt ? evt : event;',
+' }',
+'',
+' function getTarget(evt) {',
+' return evt.target ? evt.target : evt.srcElement;',
+' }',
+'',
+' function getRelatedTarget(evt) {',
+' if (evt.relatedTarget) {',
+' return evt.relatedTarget;',
+' } else if (evt.srcElement) {',
+' switch(evt.type) {',
+' case "mouseover":',
+' return evt.fromElement;',
+' case "mouseout":',
+' return evt.toElement;',
+' default:',
+' return evt.srcElement;',
+' }',
+' }',
+' }',
+'',
+' function cancelKeyEvent(evt) {',
+' evt.returnValue = false;',
+' stopPropagation(evt);',
+' }',
+'',
+' function evalCommandLine() {',
+' var expr = $("command").value;',
+' evalCommand(expr);',
+' $("command").value = "";',
+' }',
+'',
+' function evalLastCommand() {',
+' if (lastCommand != null) {',
+' evalCommand(lastCommand);',
+' }',
+' }',
+'',
+' var lastCommand = null;',
+' var commandHistory = [];',
+' var currentCommandIndex = 0;',
+'',
+' function evalCommand(expr) {',
+' if (appender) {',
+' appender.evalCommandAndAppend(expr);',
+' } else {',
+' var prefix = ">>> " + expr + "\\r\\n";',
+' try {',
+' log("INFO", prefix + eval(expr));',
+' } catch (ex) {',
+' log("ERROR", prefix + "Error: " + getErrorMessage(ex));',
+' }',
+' }',
+' // Update command history',
+' if (expr != commandHistory[commandHistory.length - 1]) {',
+' commandHistory.push(expr);',
+' // Update the appender',
+' if (appender) {',
+' appender.storeCommandHistory(commandHistory);',
+' }',
+' }',
+' currentCommandIndex = (expr == commandHistory[currentCommandIndex]) ? currentCommandIndex + 1 : commandHistory.length;',
+' lastCommand = expr;',
+' }',
+' //]]>',
+' </script>',
+' <style type="text/css">',
+' body {',
+' background-color: white;',
+' color: black;',
+' padding: 0;',
+' margin: 0;',
+' font-family: tahoma, verdana, arial, helvetica, sans-serif;',
+' overflow: hidden;',
+' }',
+'',
+' div#switchesContainer input {',
+' margin-bottom: 0;',
+' }',
+'',
+' div.toolbar {',
+' border-top: solid #ffffff 1px;',
+' border-bottom: solid #aca899 1px;',
+' background-color: #f1efe7;',
+' padding: 3px 5px;',
+' font-size: 68.75%;',
+' }',
+'',
+' div.toolbar, div#search input {',
+' font-family: tahoma, verdana, arial, helvetica, sans-serif;',
+' }',
+'',
+' div.toolbar input.button {',
+' padding: 0 5px;',
+' font-size: 100%;',
+' }',
+'',
+' div.toolbar input.hidden {',
+' display: none;',
+' }',
+'',
+' div#switches input#clearButton {',
+' margin-left: 20px;',
+' }',
+'',
+' div#levels label {',
+' font-weight: bold;',
+' }',
+'',
+' div#levels label, div#options label {',
+' margin-right: 5px;',
+' }',
+'',
+' div#levels label#wrapLabel {',
+' font-weight: normal;',
+' }',
+'',
+' div#search label {',
+' margin-right: 10px;',
+' }',
+'',
+' div#search label.searchboxlabel {',
+' margin-right: 0;',
+' }',
+'',
+' div#search input {',
+' font-size: 100%;',
+' }',
+'',
+' div#search input.validregex {',
+' color: green;',
+' }',
+'',
+' div#search input.invalidregex {',
+' color: red;',
+' }',
+'',
+' div#search input.nomatches {',
+' color: white;',
+' background-color: #ff6666;',
+' }',
+'',
+' div#search input.nomatches {',
+' color: white;',
+' background-color: #ff6666;',
+' }',
+'',
+' div#searchNav {',
+' display: none;',
+' }',
+'',
+' div#commandLine {',
+' display: none;',
+' }',
+'',
+' div#commandLine input#command {',
+' font-size: 100%;',
+' font-family: Courier New, Courier;',
+' }',
+'',
+' div#commandLine input#evaluateButton {',
+' }',
+'',
+' *.greyedout {',
+' color: gray !important;',
+' border-color: gray !important;',
+' }',
+'',
+' *.greyedout *.alwaysenabled { color: black; }',
+'',
+' *.unselectable {',
+' -khtml-user-select: none;',
+' -moz-user-select: none;',
+' user-select: none;',
+' }',
+'',
+' div#log {',
+' font-family: Courier New, Courier;',
+' font-size: 75%;',
+' width: 100%;',
+' overflow: auto;',
+' clear: both;',
+' position: relative;',
+' }',
+'',
+' div.group {',
+' border-color: #cccccc;',
+' border-style: solid;',
+' border-width: 1px 0 1px 1px;',
+' overflow: visible;',
+' }',
+'',
+' div.oldIe div.group, div.oldIe div.group *, div.oldIe *.logentry {',
+' height: 1%;',
+' }',
+'',
+' div.group div.groupheading span.expander {',
+' border: solid black 1px;',
+' font-family: Courier New, Courier;',
+' font-size: 0.833em;',
+' background-color: #eeeeee;',
+' position: relative;',
+' top: -1px;',
+' color: black;',
+' padding: 0 2px;',
+' cursor: pointer;',
+' cursor: hand;',
+' height: 1%;',
+' }',
+'',
+' div.group div.groupcontent {',
+' margin-left: 10px;',
+' padding-bottom: 2px;',
+' overflow: visible;',
+' }',
+'',
+' div.group div.expanded {',
+' display: block;',
+' }',
+'',
+' div.group div.collapsed {',
+' display: none;',
+' }',
+'',
+' *.logentry {',
+' overflow: visible;',
+' display: none;',
+' white-space: pre;',
+' }',
+'',
+' span.pre {',
+' white-space: pre;',
+' }',
+' ',
+' pre.unwrapped {',
+' display: inline !important;',
+' }',
+'',
+' pre.unwrapped pre.pre, div.wrapped pre.pre {',
+' display: inline;',
+' }',
+'',
+' div.wrapped pre.pre {',
+' white-space: normal;',
+' }',
+'',
+' div.wrapped {',
+' display: none;',
+' }',
+'',
+' body.searching *.logentry span.currentmatch {',
+' color: white !important;',
+' background-color: green !important;',
+' }',
+'',
+' body.searching div.searchhighlight *.logentry span.searchterm {',
+' color: black;',
+' background-color: yellow;',
+' }',
+'',
+' div.wrap *.logentry {',
+' white-space: normal !important;',
+' border-width: 0 0 1px 0;',
+' border-color: #dddddd;',
+' border-style: dotted;',
+' }',
+'',
+' div.wrap #log_wrapped, #log_unwrapped {',
+' display: block;',
+' }',
+'',
+' div.wrap #log_unwrapped, #log_wrapped {',
+' display: none;',
+' }',
+'',
+' div.wrap *.logentry span.pre {',
+' overflow: visible;',
+' white-space: normal;',
+' }',
+'',
+' div.wrap *.logentry pre.unwrapped {',
+' display: none;',
+' }',
+'',
+' div.wrap *.logentry span.wrapped {',
+' display: inline;',
+' }',
+'',
+' div.searchfilter *.searchnonmatch {',
+' display: none !important;',
+' }',
+'',
+' div#log *.TRACE, label#label_TRACE {',
+' color: #666666;',
+' }',
+'',
+' div#log *.DEBUG, label#label_DEBUG {',
+' color: green;',
+' }',
+'',
+' div#log *.INFO, label#label_INFO {',
+' color: #000099;',
+' }',
+'',
+' div#log *.WARN, label#label_WARN {',
+' color: #999900;',
+' }',
+'',
+' div#log *.ERROR, label#label_ERROR {',
+' color: red;',
+' }',
+'',
+' div#log *.FATAL, label#label_FATAL {',
+' color: #660066;',
+' }',
+'',
+' div.TRACE#log *.TRACE,',
+' div.DEBUG#log *.DEBUG,',
+' div.INFO#log *.INFO,',
+' div.WARN#log *.WARN,',
+' div.ERROR#log *.ERROR,',
+' div.FATAL#log *.FATAL {',
+' display: block;',
+' }',
+'',
+' div#log div.separator {',
+' background-color: #cccccc;',
+' margin: 5px 0;',
+' line-height: 1px;',
+' }',
+' </style>',
+' </head>',
+'',
+' <body id="body">',
+' <div id="switchesContainer">',
+' <div id="switches">',
+' <div id="levels" class="toolbar">',
+' Filters:',
+' <input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>',
+' <input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>',
+' <input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>',
+' <input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>',
+' <input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>',
+' <input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>',
+' <input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>',
+' </div>',
+' <div id="search" class="toolbar">',
+' <label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />',
+' <input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />',
+' <input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>',
+' <input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>',
+' <input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>',
+' <div id="searchNav">',
+' <input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />',
+' <input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />',
+' <input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>',
+' <input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>',
+' </div>',
+' </div>',
+' <div id="options" class="toolbar">',
+' Options:',
+' <input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>',
+' <input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>',
+' <input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>',
+' <input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>',
+' <input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages" />',
+' <input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />',
+' <input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />',
+' </div>',
+' </div>',
+' </div>',
+' <div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>',
+' <div id="commandLine" class="toolbar">',
+' <div id="commandLineContainer">',
+' <input type="text" id="command" title="Enter a JavaScript command here and hit return or press \'Evaluate\'" />',
+' <input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />',
+' </div>',
+' </div>',
+' </body>',
+'</html>',
+''
+];
+ };
+
+ var defaultCommandLineFunctions = [];
+
+ ConsoleAppender = function() {};
+
+ var consoleAppenderIdCounter = 1;
+ ConsoleAppender.prototype = new Appender();
+
+ ConsoleAppender.prototype.create = function(inPage, container,
+ lazyInit, initiallyMinimized, useDocumentWrite, width, height, focusConsoleWindow) {
+ var appender = this;
+
+ // Common properties
+ var initialized = false;
+ var consoleWindowCreated = false;
+ var consoleWindowLoaded = false;
+ var consoleClosed = false;
+
+ var queuedLoggingEvents = [];
+ var isSupported = true;
+ var consoleAppenderId = consoleAppenderIdCounter++;
+
+ // Local variables
+ initiallyMinimized = extractBooleanFromParam(initiallyMinimized, this.defaults.initiallyMinimized);
+ lazyInit = extractBooleanFromParam(lazyInit, this.defaults.lazyInit);
+ useDocumentWrite = extractBooleanFromParam(useDocumentWrite, this.defaults.useDocumentWrite);
+ var newestMessageAtTop = this.defaults.newestMessageAtTop;
+ var scrollToLatestMessage = this.defaults.scrollToLatestMessage;
+ width = width ? width : this.defaults.width;
+ height = height ? height : this.defaults.height;
+ var maxMessages = this.defaults.maxMessages;
+ var showCommandLine = this.defaults.showCommandLine;
+ var commandLineObjectExpansionDepth = this.defaults.commandLineObjectExpansionDepth;
+ var showHideButton = this.defaults.showHideButton;
+ var showCloseButton = this.defaults.showCloseButton;
+ var showLogEntryDeleteButtons = this.defaults.showLogEntryDeleteButtons;
+
+ this.setLayout(this.defaults.layout);
+
+ // Functions whose implementations vary between subclasses
+ var init, createWindow, safeToAppend, getConsoleWindow, open;
+
+ // Configuration methods. The function scope is used to prevent
+ // direct alteration to the appender configuration properties.
+ var appenderName = inPage ? "InPageAppender" : "PopUpAppender";
+ var checkCanConfigure = function(configOptionName) {
+ if (consoleWindowCreated) {
+ handleError(appenderName + ": configuration option '" + configOptionName + "' may not be set after the appender has been initialized");
+ return false;
+ }
+ return true;
+ };
+
+ var consoleWindowExists = function() {
+ return (consoleWindowLoaded && isSupported && !consoleClosed);
+ };
+
+ this.isNewestMessageAtTop = function() { return newestMessageAtTop; };
+ this.setNewestMessageAtTop = function(newestMessageAtTopParam) {
+ newestMessageAtTop = bool(newestMessageAtTopParam);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setNewestAtTop(newestMessageAtTop);
+ }
+ };
+
+ this.isScrollToLatestMessage = function() { return scrollToLatestMessage; };
+ this.setScrollToLatestMessage = function(scrollToLatestMessageParam) {
+ scrollToLatestMessage = bool(scrollToLatestMessageParam);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setScrollToLatest(scrollToLatestMessage);
+ }
+ };
+
+ this.getWidth = function() { return width; };
+ this.setWidth = function(widthParam) {
+ if (checkCanConfigure("width")) {
+ width = extractStringFromParam(widthParam, width);
+ }
+ };
+
+ this.getHeight = function() { return height; };
+ this.setHeight = function(heightParam) {
+ if (checkCanConfigure("height")) {
+ height = extractStringFromParam(heightParam, height);
+ }
+ };
+
+ this.getMaxMessages = function() { return maxMessages; };
+ this.setMaxMessages = function(maxMessagesParam) {
+ maxMessages = extractIntFromParam(maxMessagesParam, maxMessages);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setMaxMessages(maxMessages);
+ }
+ };
+
+ this.isShowCommandLine = function() { return showCommandLine; };
+ this.setShowCommandLine = function(showCommandLineParam) {
+ showCommandLine = bool(showCommandLineParam);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setShowCommandLine(showCommandLine);
+ }
+ };
+
+ this.isShowHideButton = function() { return showHideButton; };
+ this.setShowHideButton = function(showHideButtonParam) {
+ showHideButton = bool(showHideButtonParam);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setShowHideButton(showHideButton);
+ }
+ };
+
+ this.isShowCloseButton = function() { return showCloseButton; };
+ this.setShowCloseButton = function(showCloseButtonParam) {
+ showCloseButton = bool(showCloseButtonParam);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setShowCloseButton(showCloseButton);
+ }
+ };
+
+ this.getCommandLineObjectExpansionDepth = function() { return commandLineObjectExpansionDepth; };
+ this.setCommandLineObjectExpansionDepth = function(commandLineObjectExpansionDepthParam) {
+ commandLineObjectExpansionDepth = extractIntFromParam(commandLineObjectExpansionDepthParam, commandLineObjectExpansionDepth);
+ };
+
+ var minimized = initiallyMinimized;
+ this.isInitiallyMinimized = function() { return initiallyMinimized; };
+ this.setInitiallyMinimized = function(initiallyMinimizedParam) {
+ if (checkCanConfigure("initiallyMinimized")) {
+ initiallyMinimized = bool(initiallyMinimizedParam);
+ minimized = initiallyMinimized;
+ }
+ };
+
+ this.isUseDocumentWrite = function() { return useDocumentWrite; };
+ this.setUseDocumentWrite = function(useDocumentWriteParam) {
+ if (checkCanConfigure("useDocumentWrite")) {
+ useDocumentWrite = bool(useDocumentWriteParam);
+ }
+ };
+
+ // Common methods
+ function QueuedLoggingEvent(loggingEvent, formattedMessage) {
+ this.loggingEvent = loggingEvent;
+ this.levelName = loggingEvent.level.name;
+ this.formattedMessage = formattedMessage;
+ }
+
+ QueuedLoggingEvent.prototype.append = function() {
+ getConsoleWindow().log(this.levelName, this.formattedMessage);
+ };
+
+ function QueuedGroup(name, initiallyExpanded) {
+ this.name = name;
+ this.initiallyExpanded = initiallyExpanded;
+ }
+
+ QueuedGroup.prototype.append = function() {
+ getConsoleWindow().group(this.name, this.initiallyExpanded);
+ };
+
+ function QueuedGroupEnd() {}
+
+ QueuedGroupEnd.prototype.append = function() {
+ getConsoleWindow().groupEnd();
+ };
+
+ var checkAndAppend = function() {
+ // Next line forces a check of whether the window has been closed
+ safeToAppend();
+ if (!initialized) {
+ init();
+ } else if (consoleClosed && reopenWhenClosed) {
+ createWindow();
+ }
+ if (safeToAppend()) {
+ appendQueuedLoggingEvents();
+ }
+ };
+
+ this.append = function(loggingEvent) {
+ if (isSupported) {
+ // Format the message
+ var formattedMessage = appender.getLayout().format(loggingEvent);
+ if (this.getLayout().ignoresThrowable()) {
+ formattedMessage += loggingEvent.getThrowableStrRep();
+ }
+ queuedLoggingEvents.push(new QueuedLoggingEvent(loggingEvent, formattedMessage));
+ checkAndAppend();
+ }
+ };
+
+ this.group = function(name, initiallyExpanded) {
+ if (isSupported) {
+ queuedLoggingEvents.push(new QueuedGroup(name, initiallyExpanded));
+ checkAndAppend();
+ }
+ };
+
+ this.groupEnd = function() {
+ if (isSupported) {
+ queuedLoggingEvents.push(new QueuedGroupEnd());
+ checkAndAppend();
+ }
+ };
+
+ var appendQueuedLoggingEvents = function() {
+ var currentLoggingEvent;
+ while (queuedLoggingEvents.length > 0) {
+ queuedLoggingEvents.shift().append();
+ }
+ if (focusConsoleWindow) {
+ getConsoleWindow().focus();
+ }
+ };
+
+ this.setAddedToLogger = function(logger) {
+ this.loggers.push(logger);
+ if (enabled && !lazyInit) {
+ init();
+ }
+ };
+
+ this.clear = function() {
+ if (consoleWindowExists()) {
+ getConsoleWindow().clearLog();
+ }
+ queuedLoggingEvents.length = 0;
+ };
+
+ this.focus = function() {
+ if (consoleWindowExists()) {
+ getConsoleWindow().focus();
+ }
+ };
+
+ this.focusCommandLine = function() {
+ if (consoleWindowExists()) {
+ getConsoleWindow().focusCommandLine();
+ }
+ };
+
+ this.focusSearch = function() {
+ if (consoleWindowExists()) {
+ getConsoleWindow().focusSearch();
+ }
+ };
+
+ var commandWindow = window;
+
+ this.getCommandWindow = function() { return commandWindow; };
+ this.setCommandWindow = function(commandWindowParam) {
+ commandWindow = commandWindowParam;
+ };
+
+ this.executeLastCommand = function() {
+ if (consoleWindowExists()) {
+ getConsoleWindow().evalLastCommand();
+ }
+ };
+
+ var commandLayout = new PatternLayout("%m");
+ this.getCommandLayout = function() { return commandLayout; };
+ this.setCommandLayout = function(commandLayoutParam) {
+ commandLayout = commandLayoutParam;
+ };
+
+ this.evalCommandAndAppend = function(expr) {
+ var commandReturnValue = { appendResult: true, isError: false };
+ var commandOutput = "";
+ // Evaluate the command
+ try {
+ var result, i;
+ // The next three lines constitute a workaround for IE. Bizarrely, iframes seem to have no
+ // eval method on the window object initially, but once execScript has been called on
+ // it once then the eval method magically appears. See http://www.thismuchiknow.co.uk/?p=25
+ if (!commandWindow.eval && commandWindow.execScript) {
+ commandWindow.execScript("null");
+ }
+
+ var commandLineFunctionsHash = {};
+ for (i = 0, len = commandLineFunctions.length; i < len; i++) {
+ commandLineFunctionsHash[commandLineFunctions[i][0]] = commandLineFunctions[i][1];
+ }
+
+ // Keep an array of variables that are being changed in the command window so that they
+ // can be restored to their original values afterwards
+ var objectsToRestore = [];
+ var addObjectToRestore = function(name) {
+ objectsToRestore.push([name, commandWindow[name]]);
+ };
+
+ addObjectToRestore("appender");
+ commandWindow.appender = appender;
+
+ addObjectToRestore("commandReturnValue");
+ commandWindow.commandReturnValue = commandReturnValue;
+
+ addObjectToRestore("commandLineFunctionsHash");
+ commandWindow.commandLineFunctionsHash = commandLineFunctionsHash;
+
+ var addFunctionToWindow = function(name) {
+ addObjectToRestore(name);
+ commandWindow[name] = function() {
+ return this.commandLineFunctionsHash[name](appender, arguments, commandReturnValue);
+ };
+ };
+
+ for (i = 0, len = commandLineFunctions.length; i < len; i++) {
+ addFunctionToWindow(commandLineFunctions[i][0]);
+ }
+
+ // Another bizarre workaround to get IE to eval in the global scope
+ if (commandWindow === window && commandWindow.execScript) {
+ addObjectToRestore("evalExpr");
+ addObjectToRestore("result");
+ window.evalExpr = expr;
+ commandWindow.execScript("window.result=eval(window.evalExpr);");
+ result = window.result;
+ } else {
+ result = commandWindow.eval(expr);
+ }
+ commandOutput = isUndefined(result) ? result : formatObjectExpansion(result, commandLineObjectExpansionDepth);
+
+ // Restore variables in the command window to their original state
+ for (i = 0, len = objectsToRestore.length; i < len; i++) {
+ commandWindow[objectsToRestore[i][0]] = objectsToRestore[i][1];
+ }
+ } catch (ex) {
+ commandOutput = "Error evaluating command: " + getExceptionStringRep(ex);
+ commandReturnValue.isError = true;
+ }
+ // Append command output
+ if (commandReturnValue.appendResult) {
+ var message = ">>> " + expr;
+ if (!isUndefined(commandOutput)) {
+ message += newLine + commandOutput;
+ }
+ var level = commandReturnValue.isError ? Level.ERROR : Level.INFO;
+ var loggingEvent = new LoggingEvent(null, new Date(), level, [message], null);
+ var mainLayout = this.getLayout();
+ this.setLayout(commandLayout);
+ this.append(loggingEvent);
+ this.setLayout(mainLayout);
+ }
+ };
+
+ var commandLineFunctions = defaultCommandLineFunctions.concat([]);
+
+ this.addCommandLineFunction = function(functionName, commandLineFunction) {
+ commandLineFunctions.push([functionName, commandLineFunction]);
+ };
+
+ var commandHistoryCookieName = "log4javascriptCommandHistory";
+ this.storeCommandHistory = function(commandHistory) {
+ setCookie(commandHistoryCookieName, commandHistory.join(","));
+ };
+
+ var writeHtml = function(doc) {
+ var lines = getConsoleHtmlLines();
+ doc.open();
+ for (var i = 0, len = lines.length; i < len; i++) {
+ doc.writeln(lines[i]);
+ }
+ doc.close();
+ };
+
+ // Set up event listeners
+ this.setEventTypes(["load", "unload"]);
+
+ var consoleWindowLoadHandler = function() {
+ var win = getConsoleWindow();
+ win.setAppender(appender);
+ win.setNewestAtTop(newestMessageAtTop);
+ win.setScrollToLatest(scrollToLatestMessage);
+ win.setMaxMessages(maxMessages);
+ win.setShowCommandLine(showCommandLine);
+ win.setShowHideButton(showHideButton);
+ win.setShowCloseButton(showCloseButton);
+ win.setMainWindow(window);
+
+ // Restore command history stored in cookie
+ var storedValue = getCookie(commandHistoryCookieName);
+ if (storedValue) {
+ win.commandHistory = storedValue.split(",");
+ win.currentCommandIndex = win.commandHistory.length;
+ }
+
+ appender.dispatchEvent("load", { "win" : win });
+ };
+
+ this.unload = function() {
+ logLog.debug("unload " + this + ", caller: " + this.unload.caller);
+ if (!consoleClosed) {
+ logLog.debug("really doing unload " + this);
+ consoleClosed = true;
+ consoleWindowLoaded = false;
+ consoleWindowCreated = false;
+ appender.dispatchEvent("unload", {});
+ }
+ };
+
+ var pollConsoleWindow = function(windowTest, interval, successCallback, errorMessage) {
+ function doPoll() {
+ try {
+ // Test if the console has been closed while polling
+ if (consoleClosed) {
+ clearInterval(poll);
+ }
+ if (windowTest(getConsoleWindow())) {
+ clearInterval(poll);
+ successCallback();
+ }
+ } catch (ex) {
+ clearInterval(poll);
+ isSupported = false;
+ handleError(errorMessage, ex);
+ }
+ }
+
+ // Poll the pop-up since the onload event is not reliable
+ var poll = setInterval(doPoll, interval);
+ };
+
+ var getConsoleUrl = function() {
+ var documentDomainSet = (document.domain != location.hostname);
+ return useDocumentWrite ? "" : getBaseUrl() + "console_uncompressed.html" +
+ (documentDomainSet ? "?log4javascript_domain=" + escape(document.domain) : "");
+ };
+
+ // Define methods and properties that vary between subclasses
+ if (inPage) {
+ // InPageAppender
+
+ var containerElement = null;
+
+ // Configuration methods. The function scope is used to prevent
+ // direct alteration to the appender configuration properties.
+ var cssProperties = [];
+ this.addCssProperty = function(name, value) {
+ if (checkCanConfigure("cssProperties")) {
+ cssProperties.push([name, value]);
+ }
+ };
+
+ // Define useful variables
+ var windowCreationStarted = false;
+ var iframeContainerDiv;
+ var iframeId = uniqueId + "_InPageAppender_" + consoleAppenderId;
+
+ this.hide = function() {
+ if (initialized && consoleWindowCreated) {
+ if (consoleWindowExists()) {
+ getConsoleWindow().$("command").blur();
+ }
+ iframeContainerDiv.style.display = "none";
+ minimized = true;
+ }
+ };
+
+ this.show = function() {
+ if (initialized) {
+ if (consoleWindowCreated) {
+ iframeContainerDiv.style.display = "block";
+ this.setShowCommandLine(showCommandLine); // Force IE to update
+ minimized = false;
+ } else if (!windowCreationStarted) {
+ createWindow(true);
+ }
+ }
+ };
+
+ this.isVisible = function() {
+ return !minimized && !consoleClosed;
+ };
+
+ this.close = function(fromButton) {
+ if (!consoleClosed && (!fromButton || confirm("This will permanently remove the console from the page. No more messages will be logged. Do you wish to continue?"))) {
+ iframeContainerDiv.parentNode.removeChild(iframeContainerDiv);
+ this.unload();
+ }
+ };
+
+ // Create open, init, getConsoleWindow and safeToAppend functions
+ open = function() {
+ var initErrorMessage = "InPageAppender.open: unable to create console iframe";
+
+ function finalInit() {
+ try {
+ if (!initiallyMinimized) {
+ appender.show();
+ }
+ consoleWindowLoadHandler();
+ consoleWindowLoaded = true;
+ appendQueuedLoggingEvents();
+ } catch (ex) {
+ isSupported = false;
+ handleError(initErrorMessage, ex);
+ }
+ }
+
+ function writeToDocument() {
+ try {
+ var windowTest = function(win) { return isLoaded(win); };
+ if (useDocumentWrite) {
+ writeHtml(getConsoleWindow().document);
+ }
+ if (windowTest(getConsoleWindow())) {
+ finalInit();
+ } else {
+ pollConsoleWindow(windowTest, 100, finalInit, initErrorMessage);
+ }
+ } catch (ex) {
+ isSupported = false;
+ handleError(initErrorMessage, ex);
+ }
+ }
+
+ minimized = false;
+ iframeContainerDiv = containerElement.appendChild(document.createElement("div"));
+
+ iframeContainerDiv.style.width = width;
+ iframeContainerDiv.style.height = height;
+ iframeContainerDiv.style.border = "solid gray 1px";
+
+ for (var i = 0, len = cssProperties.length; i < len; i++) {
+ iframeContainerDiv.style[cssProperties[i][0]] = cssProperties[i][1];
+ }
+
+ var iframeSrc = useDocumentWrite ? "" : " src='" + getConsoleUrl() + "'";
+
+ // Adding an iframe using the DOM would be preferable, but it doesn't work
+ // in IE5 on Windows, or in Konqueror prior to version 3.5 - in Konqueror
+ // it creates the iframe fine but I haven't been able to find a way to obtain
+ // the iframe's window object
+ iframeContainerDiv.innerHTML = "<iframe id='" + iframeId + "' name='" + iframeId +
+ "' width='100%' height='100%' frameborder='0'" + iframeSrc +
+ " scrolling='no'></iframe>";
+ consoleClosed = false;
+
+ // Write the console HTML to the iframe
+ var iframeDocumentExistsTest = function(win) {
+ try {
+ return bool(win) && bool(win.document);
+ } catch (ex) {
+ return false;
+ }
+ };
+ if (iframeDocumentExistsTest(getConsoleWindow())) {
+ writeToDocument();
+ } else {
+ pollConsoleWindow(iframeDocumentExistsTest, 100, writeToDocument, initErrorMessage);
+ }
+ consoleWindowCreated = true;
+ };
+
+ createWindow = function(show) {
+ if (show || !initiallyMinimized) {
+ var pageLoadHandler = function() {
+ if (!container) {
+ // Set up default container element
+ containerElement = document.createElement("div");
+ containerElement.style.position = "fixed";
+ containerElement.style.left = "0";
+ containerElement.style.right = "0";
+ containerElement.style.bottom = "0";
+ document.body.appendChild(containerElement);
+ appender.addCssProperty("borderWidth", "1px 0 0 0");
+ appender.addCssProperty("zIndex", 1000000); // Can't find anything authoritative that says how big z-index can be
+ open();
+ } else {
+ try {
+ var el = document.getElementById(container);
+ if (el.nodeType == 1) {
+ containerElement = el;
+ }
+ open();
+ } catch (ex) {
+ handleError("InPageAppender.init: invalid container element '" + container + "' supplied", ex);
+ }
+ }
+ };
+
+ // Test the type of the container supplied. First, check if it's an element
+ if (pageLoaded && container && container.appendChild) {
+ containerElement = container;
+ open();
+ } else if (pageLoaded) {
+ pageLoadHandler();
+ } else {
+ log4javascript.addEventListener("load", pageLoadHandler);
+ }
+ windowCreationStarted = true;
+ }
+ };
+
+ init = function() {
+ createWindow();
+ initialized = true;
+ };
+
+ getConsoleWindow = function() {
+ var iframe = window.frames[iframeId];
+ if (iframe) {
+ return iframe;
+ }
+ };
+
+ safeToAppend = function() {
+ if (isSupported && !consoleClosed) {
+ if (consoleWindowCreated && !consoleWindowLoaded && getConsoleWindow() && isLoaded(getConsoleWindow())) {
+ consoleWindowLoaded = true;
+ }
+ return consoleWindowLoaded;
+ }
+ return false;
+ };
+ } else {
+ // PopUpAppender
+
+ // Extract params
+ var useOldPopUp = appender.defaults.useOldPopUp;
+ var complainAboutPopUpBlocking = appender.defaults.complainAboutPopUpBlocking;
+ var reopenWhenClosed = this.defaults.reopenWhenClosed;
+
+ // Configuration methods. The function scope is used to prevent
+ // direct alteration to the appender configuration properties.
+ this.isUseOldPopUp = function() { return useOldPopUp; };
+ this.setUseOldPopUp = function(useOldPopUpParam) {
+ if (checkCanConfigure("useOldPopUp")) {
+ useOldPopUp = bool(useOldPopUpParam);
+ }
+ };
+
+ this.isComplainAboutPopUpBlocking = function() { return complainAboutPopUpBlocking; };
+ this.setComplainAboutPopUpBlocking = function(complainAboutPopUpBlockingParam) {
+ if (checkCanConfigure("complainAboutPopUpBlocking")) {
+ complainAboutPopUpBlocking = bool(complainAboutPopUpBlockingParam);
+ }
+ };
+
+ this.isFocusPopUp = function() { return focusConsoleWindow; };
+ this.setFocusPopUp = function(focusPopUpParam) {
+ // This property can be safely altered after logging has started
+ focusConsoleWindow = bool(focusPopUpParam);
+ };
+
+ this.isReopenWhenClosed = function() { return reopenWhenClosed; };
+ this.setReopenWhenClosed = function(reopenWhenClosedParam) {
+ // This property can be safely altered after logging has started
+ reopenWhenClosed = bool(reopenWhenClosedParam);
+ };
+
+ this.close = function() {
+ logLog.debug("close " + this);
+ try {
+ popUp.close();
+ this.unload();
+ } catch (ex) {
+ // Do nothing
+ }
+ };
+
+ this.hide = function() {
+ logLog.debug("hide " + this);
+ if (consoleWindowExists()) {
+ this.close();
+ }
+ };
+
+ this.show = function() {
+ logLog.debug("show " + this);
+ if (!consoleWindowCreated) {
+ open();
+ }
+ };
+
+ this.isVisible = function() {
+ return safeToAppend();
+ };
+
+ // Define useful variables
+ var popUp;
+
+ // Create open, init, getConsoleWindow and safeToAppend functions
+ open = function() {
+ var windowProperties = "width=" + width + ",height=" + height + ",status,resizable";
+ var frameInfo = "";
+ try {
+ var frameEl = window.frameElement;
+ if (frameEl) {
+ frameInfo = "_" + frameEl.tagName + "_" + (frameEl.name || frameEl.id || "");
+ }
+ } catch (e) {
+ frameInfo = "_inaccessibleParentFrame";
+ }
+ var windowName = "PopUp_" + location.host.replace(/[^a-z0-9]/gi, "_") + "_" + consoleAppenderId + frameInfo;
+ if (!useOldPopUp || !useDocumentWrite) {
+ // Ensure a previous window isn't used by using a unique name
+ windowName = windowName + "_" + uniqueId;
+ }
+
+ var checkPopUpClosed = function(win) {
+ if (consoleClosed) {
+ return true;
+ } else {
+ try {
+ return bool(win) && win.closed;
+ } catch(ex) {}
+ }
+ return false;
+ };
+
+ var popUpClosedCallback = function() {
+ if (!consoleClosed) {
+ appender.unload();
+ }
+ };
+
+ function finalInit() {
+ getConsoleWindow().setCloseIfOpenerCloses(!useOldPopUp || !useDocumentWrite);
+ consoleWindowLoadHandler();
+ consoleWindowLoaded = true;
+ appendQueuedLoggingEvents();
+ pollConsoleWindow(checkPopUpClosed, 500, popUpClosedCallback,
+ "PopUpAppender.checkPopUpClosed: error checking pop-up window");
+ }
+
+ try {
+ popUp = window.open(getConsoleUrl(), windowName, windowProperties);
+ consoleClosed = false;
+ consoleWindowCreated = true;
+ if (popUp && popUp.document) {
+ if (useDocumentWrite && useOldPopUp && isLoaded(popUp)) {
+ popUp.mainPageReloaded();
+ finalInit();
+ } else {
+ if (useDocumentWrite) {
+ writeHtml(popUp.document);
+ }
+ // Check if the pop-up window object is available
+ var popUpLoadedTest = function(win) { return bool(win) && isLoaded(win); };
+ if (isLoaded(popUp)) {
+ finalInit();
+ } else {
+ pollConsoleWindow(popUpLoadedTest, 100, finalInit,
+ "PopUpAppender.init: unable to create console window");
+ }
+ }
+ } else {
+ isSupported = false;
+ logLog.warn("PopUpAppender.init: pop-ups blocked, please unblock to use PopUpAppender");
+ if (complainAboutPopUpBlocking) {
+ handleError("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");
+ }
+ }
+ } catch (ex) {
+ handleError("PopUpAppender.init: error creating pop-up", ex);
+ }
+ };
+
+ createWindow = function() {
+ if (!initiallyMinimized) {
+ open();
+ }
+ };
+
+ init = function() {
+ createWindow();
+ initialized = true;
+ };
+
+ getConsoleWindow = function() {
+ return popUp;
+ };
+
+ safeToAppend = function() {
+ if (isSupported && !isUndefined(popUp) && !consoleClosed) {
+ if (popUp.closed ||
+ (consoleWindowLoaded && isUndefined(popUp.closed))) { // Extra check for Opera
+ appender.unload();
+ logLog.debug("PopUpAppender: pop-up closed");
+ return false;
+ }
+ if (!consoleWindowLoaded && isLoaded(popUp)) {
+ consoleWindowLoaded = true;
+ }
+ }
+ return isSupported && consoleWindowLoaded && !consoleClosed;
+ };
+ }
+
+ // Expose getConsoleWindow so that automated tests can check the DOM
+ this.getConsoleWindow = getConsoleWindow;
+ };
+
+ ConsoleAppender.addGlobalCommandLineFunction = function(functionName, commandLineFunction) {
+ defaultCommandLineFunctions.push([functionName, commandLineFunction]);
+ };
+
+ /* ------------------------------------------------------------------ */
+
+ function PopUpAppender(lazyInit, initiallyMinimized, useDocumentWrite,
+ width, height) {
+ this.create(false, null, lazyInit, initiallyMinimized,
+ useDocumentWrite, width, height, this.defaults.focusPopUp);
+ }
+
+ PopUpAppender.prototype = new ConsoleAppender();
+
+ PopUpAppender.prototype.defaults = {
+ layout: new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),
+ initiallyMinimized: false,
+ focusPopUp: false,
+ lazyInit: true,
+ useOldPopUp: true,
+ complainAboutPopUpBlocking: true,
+ newestMessageAtTop: false,
+ scrollToLatestMessage: true,
+ width: "600",
+ height: "400",
+ reopenWhenClosed: false,
+ maxMessages: null,
+ showCommandLine: true,
+ commandLineObjectExpansionDepth: 1,
+ showHideButton: false,
+ showCloseButton: true,
+ showLogEntryDeleteButtons: true,
+ useDocumentWrite: true
+ };
+
+ PopUpAppender.prototype.toString = function() {
+ return "PopUpAppender";
+ };
+
+ log4javascript.PopUpAppender = PopUpAppender;
+
+ /* ------------------------------------------------------------------ */
+
+ function InPageAppender(container, lazyInit, initiallyMinimized,
+ useDocumentWrite, width, height) {
+ this.create(true, container, lazyInit, initiallyMinimized,
+ useDocumentWrite, width, height, false);
+ }
+
+ InPageAppender.prototype = new ConsoleAppender();
+
+ InPageAppender.prototype.defaults = {
+ layout: new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),
+ initiallyMinimized: false,
+ lazyInit: true,
+ newestMessageAtTop: false,
+ scrollToLatestMessage: true,
+ width: "100%",
+ height: "220px",
+ maxMessages: null,
+ showCommandLine: true,
+ commandLineObjectExpansionDepth: 1,
+ showHideButton: false,
+ showCloseButton: false,
+ showLogEntryDeleteButtons: true,
+ useDocumentWrite: true
+ };
+
+ InPageAppender.prototype.toString = function() {
+ return "InPageAppender";
+ };
+
+ log4javascript.InPageAppender = InPageAppender;
+
+ // Next line for backwards compatibility
+ log4javascript.InlineAppender = InPageAppender;
+ })();
+ /* ---------------------------------------------------------------------- */
+ // Console extension functions
+
+ function padWithSpaces(str, len) {
+ if (str.length < len) {
+ var spaces = [];
+ var numberOfSpaces = Math.max(0, len - str.length);
+ for (var i = 0; i < numberOfSpaces; i++) {
+ spaces[i] = " ";
+ }
+ str += spaces.join("");
+ }
+ return str;
+ }
+
+ (function() {
+ function dir(obj) {
+ var maxLen = 0;
+ // Obtain the length of the longest property name
+ for (var p in obj) {
+ maxLen = Math.max(toStr(p).length, maxLen);
+ }
+ // Create the nicely formatted property list
+ var propList = [];
+ for (p in obj) {
+ var propNameStr = " " + padWithSpaces(toStr(p), maxLen + 2);
+ var propVal;
+ try {
+ propVal = splitIntoLines(toStr(obj[p])).join(padWithSpaces(newLine, maxLen + 6));
+ } catch (ex) {
+ propVal = "[Error obtaining property. Details: " + getExceptionMessage(ex) + "]";
+ }
+ propList.push(propNameStr + propVal);
+ }
+ return propList.join(newLine);
+ }
+
+ var nodeTypes = {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ };
+
+ var preFormattedElements = ["script", "pre"];
+
+ // This should be the definitive list, as specified by the XHTML 1.0 Transitional DTD
+ var emptyElements = ["br", "img", "hr", "param", "link", "area", "input", "col", "base", "meta"];
+ var indentationUnit = " ";
+
+ // Create and return an XHTML string from the node specified
+ function getXhtml(rootNode, includeRootNode, indentation, startNewLine, preformatted) {
+ includeRootNode = (typeof includeRootNode == "undefined") ? true : !!includeRootNode;
+ if (typeof indentation != "string") {
+ indentation = "";
+ }
+ startNewLine = !!startNewLine;
+ preformatted = !!preformatted;
+ var xhtml;
+
+ function isWhitespace(node) {
+ return ((node.nodeType == nodeTypes.TEXT_NODE) && /^[ \t\r\n]*$/.test(node.nodeValue));
+ }
+
+ function fixAttributeValue(attrValue) {
+ return attrValue.toString().replace(/&/g, "&").replace(/</g, "<").replace(/"/g, """);
+ }
+
+ function getStyleAttributeValue(el) {
+ var stylePairs = el.style.cssText.split(";");
+ var styleValue = "";
+ var isFirst = true;
+ for (var j = 0, len = stylePairs.length; j < len; j++) {
+ var nameValueBits = stylePairs[j].split(":");
+ var props = [];
+ if (!/^\s*$/.test(nameValueBits[0])) {
+ props.push(trim(nameValueBits[0]).toLowerCase() + ":" + trim(nameValueBits[1]));
+ }
+ styleValue = props.join(";");
+ }
+ return styleValue;
+ }
+
+ function getNamespace(el) {
+ if (el.prefix) {
+ return el.prefix;
+ } else if (el.outerHTML) {
+ var regex = new RegExp("<([^:]+):" + el.tagName + "[^>]*>", "i");
+ if (regex.test(el.outerHTML)) {
+ return RegExp.$1.toLowerCase();
+ }
+ }
+ return "";
+ }
+
+ var lt = "<";
+ var gt = ">";
+
+ if (includeRootNode && rootNode.nodeType != nodeTypes.DOCUMENT_FRAGMENT_NODE) {
+ switch (rootNode.nodeType) {
+ case nodeTypes.ELEMENT_NODE:
+ var tagName = rootNode.tagName.toLowerCase();
+ xhtml = startNewLine ? newLine + indentation : "";
+ xhtml += lt;
+ // Allow for namespaces, where present
+ var prefix = getNamespace(rootNode);
+ var hasPrefix = !!prefix;
+ if (hasPrefix) {
+ xhtml += prefix + ":";
+ }
+ xhtml += tagName;
+ for (i = 0, len = rootNode.attributes.length; i < len; i++) {
+ var currentAttr = rootNode.attributes[i];
+ // Check the attribute is valid.
+ if (! currentAttr.specified ||
+ currentAttr.nodeValue === null ||
+ currentAttr.nodeName.toLowerCase() === "style" ||
+ typeof currentAttr.nodeValue !== "string" ||
+ currentAttr.nodeName.indexOf("_moz") === 0) {
+ continue;
+ }
+ xhtml += " " + currentAttr.nodeName.toLowerCase() + "=\"";
+ xhtml += fixAttributeValue(currentAttr.nodeValue);
+ xhtml += "\"";
+ }
+ // Style needs to be done separately as it is not reported as an
+ // attribute in IE
+ if (rootNode.style.cssText) {
+ var styleValue = getStyleAttributeValue(rootNode);
+ if (styleValue !== "") {
+ xhtml += " style=\"" + getStyleAttributeValue(rootNode) + "\"";
+ }
+ }
+ if (array_contains(emptyElements, tagName) ||
+ (hasPrefix && !rootNode.hasChildNodes())) {
+ xhtml += "/" + gt;
+ } else {
+ xhtml += gt;
+ // Add output for childNodes collection (which doesn't include attribute nodes)
+ var childStartNewLine = !(rootNode.childNodes.length === 1 &&
+ rootNode.childNodes[0].nodeType === nodeTypes.TEXT_NODE);
+ var childPreformatted = array_contains(preFormattedElements, tagName);
+ for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {
+ xhtml += getXhtml(rootNode.childNodes[i], true, indentation + indentationUnit,
+ childStartNewLine, childPreformatted);
+ }
+ // Add the end tag
+ var endTag = lt + "/" + tagName + gt;
+ xhtml += childStartNewLine ? newLine + indentation + endTag : endTag;
+ }
+ return xhtml;
+ case nodeTypes.TEXT_NODE:
+ if (isWhitespace(rootNode)) {
+ xhtml = "";
+ } else {
+ if (preformatted) {
+ xhtml = rootNode.nodeValue;
+ } else {
+ // Trim whitespace from each line of the text node
+ var lines = splitIntoLines(trim(rootNode.nodeValue));
+ var trimmedLines = [];
+ for (var i = 0, len = lines.length; i < len; i++) {
+ trimmedLines[i] = trim(lines[i]);
+ }
+ xhtml = trimmedLines.join(newLine + indentation);
+ }
+ if (startNewLine) {
+ xhtml = newLine + indentation + xhtml;
+ }
+ }
+ return xhtml;
+ case nodeTypes.CDATA_SECTION_NODE:
+ return "<![CDA" + "TA[" + rootNode.nodeValue + "]" + "]>" + newLine;
+ case nodeTypes.DOCUMENT_NODE:
+ xhtml = "";
+ // Add output for childNodes collection (which doesn't include attribute nodes)
+ for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {
+ xhtml += getXhtml(rootNode.childNodes[i], true, indentation);
+ }
+ return xhtml;
+ default:
+ return "";
+ }
+ } else {
+ xhtml = "";
+ // Add output for childNodes collection (which doesn't include attribute nodes)
+ for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {
+ xhtml += getXhtml(rootNode.childNodes[i], true, indentation + indentationUnit);
+ }
+ return xhtml;
+ }
+ }
+
+ function createCommandLineFunctions() {
+ ConsoleAppender.addGlobalCommandLineFunction("$", function(appender, args, returnValue) {
+ return document.getElementById(args[0]);
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("dir", function(appender, args, returnValue) {
+ var lines = [];
+ for (var i = 0, len = args.length; i < len; i++) {
+ lines[i] = dir(args[i]);
+ }
+ return lines.join(newLine + newLine);
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("dirxml", function(appender, args, returnValue) {
+ var lines = [];
+ for (var i = 0, len = args.length; i < len; i++) {
+ var win = appender.getCommandWindow();
+ lines[i] = getXhtml(args[i]);
+ }
+ return lines.join(newLine + newLine);
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("cd", function(appender, args, returnValue) {
+ var win, message;
+ if (args.length === 0 || args[0] === "") {
+ win = window;
+ message = "Command line set to run in main window";
+ } else {
+ if (args[0].window == args[0]) {
+ win = args[0];
+ message = "Command line set to run in frame '" + args[0].name + "'";
+ } else {
+ win = window.frames[args[0]];
+ if (win) {
+ message = "Command line set to run in frame '" + args[0] + "'";
+ } else {
+ returnValue.isError = true;
+ message = "Frame '" + args[0] + "' does not exist";
+ win = appender.getCommandWindow();
+ }
+ }
+ }
+ appender.setCommandWindow(win);
+ return message;
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("clear", function(appender, args, returnValue) {
+ returnValue.appendResult = false;
+ appender.clear();
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("keys", function(appender, args, returnValue) {
+ var keys = [];
+ for (var k in args[0]) {
+ keys.push(k);
+ }
+ return keys;
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("values", function(appender, args, returnValue) {
+ var values = [];
+ for (var k in args[0]) {
+ try {
+ values.push(args[0][k]);
+ } catch (ex) {
+ logLog.warn("values(): Unable to obtain value for key " + k + ". Details: " + getExceptionMessage(ex));
+ }
+ }
+ return values;
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("expansionDepth", function(appender, args, returnValue) {
+ var expansionDepth = parseInt(args[0], 10);
+ if (isNaN(expansionDepth) || expansionDepth < 0) {
+ returnValue.isError = true;
+ return "" + args[0] + " is not a valid expansion depth";
+ } else {
+ appender.setCommandLineObjectExpansionDepth(expansionDepth);
+ return "Object expansion depth set to " + expansionDepth;
+ }
+ });
+ }
+
+ function init() {
+ // Add command line functions
+ createCommandLineFunctions();
+ }
+
+ /* ------------------------------------------------------------------ */
+
+ init();
+ })();
+
+ /* ---------------------------------------------------------------------- */
+ // Main load
+
+ log4javascript.setDocumentReady = function() {
+ pageLoaded = true;
+ log4javascript.dispatchEvent("load", {});
+ };
+
+ if (window.addEventListener) {
+ window.addEventListener("load", log4javascript.setDocumentReady, false);
+ } else if (window.attachEvent) {
+ window.attachEvent("onload", log4javascript.setDocumentReady);
+ } else {
+ var oldOnload = window.onload;
+ if (typeof window.onload != "function") {
+ window.onload = log4javascript.setDocumentReady;
+ } else {
+ window.onload = function(evt) {
+ if (oldOnload) {
+ oldOnload(evt);
+ }
+ log4javascript.setDocumentReady();
+ };
+ }
+ }
+
+ // Ensure that the log4javascript object is available in the window. This
+ // is necessary for log4javascript to be available in IE if loaded using
+ // Dojo's module system
+ window.log4javascript = log4javascript;
+
+ return log4javascript;
+})();
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript.js b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript.js
new file mode 100644
index 0000000..eae582b
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript.js
@@ -0,0 +1,23 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+
+var log4javascript_stub=(function(){var log4javascript;function ff(){return function(){};}
+function copy(obj,props){for(var i in props){obj[i]=props[i];}}
+var f=ff();var Logger=ff();copy(Logger.prototype,{addChild:f,getEffectiveAppenders:f,invalidateAppenderCache:f,getAdditivity:f,setAdditivity:f,addAppender:f,removeAppender:f,removeAllAppenders:f,log:f,setLevel:f,getLevel:f,getEffectiveLevel:f,trace:f,debug:f,info:f,warn:f,error:f,fatal:f,isEnabledFor:f,isTraceEnabled:f,isDebugEnabled:f,isInfoEnabled:f,isWarnEnabled:f,isErrorEnabled:f,isFatalEnabled:f,callAppenders:f,group:f,groupEnd:f,time:f,timeEnd:f,assert:f,parent:new Logger()});var getLogger=function(){return new Logger();};function EventSupport(){}
+copy(EventSupport.prototype,{setEventTypes:f,addEventListener:f,removeEventListener:f,dispatchEvent:f,eventTypes:[],eventListeners:{}});function Log4JavaScript(){}
+Log4JavaScript.prototype=new EventSupport();log4javascript=new Log4JavaScript();log4javascript={isStub:true,version:"1.4.6",edition:"log4javascript",setDocumentReady:f,setEventTypes:f,addEventListener:f,removeEventListener:f,dispatchEvent:f,eventTypes:[],eventListeners:{},logLog:{setQuietMode:f,setAlertAllErrors:f,debug:f,displayDebug:f,warn:f,error:f},handleError:f,setEnabled:f,isEnabled:f,setTimeStampsInMilliseconds:f,isTimeStampsInMilliseconds:f,evalInScope:f,setShowStackTraces:f,getLogger:getLogger,getDefaultLogger:getLogger,getNullLogger:getLogger,getRootLogger:getLogger,resetConfiguration:f,Level:ff(),LoggingEvent:ff(),Layout:ff(),Appender:ff()};log4javascript.LoggingEvent.prototype={getThrowableStrRep:f,getCombinedMessages:f};log4javascript.Level.prototype={toString:f,equals:f,isGreaterOrEqual:f};var level=new log4javascript.Level();copy(log4javascript.Level,{ALL:level,TRACE:level,DEBUG:level,INFO:level,WARN:level,ERROR:level,FATAL:level,OFF:level});log4javascript.Layout.prototype={defaults:{},format:f,ignoresThrowable:f,getContentType:f,allowBatching:f,getDataValues:f,setKeys:f,setCustomField:f,hasCustomFields:f,setTimeStampsInMilliseconds:f,isTimeStampsInMilliseconds:f,getTimeStampValue:f,toString:f};log4javascript.SimpleDateFormat=ff();log4javascript.SimpleDateFormat.prototype={setMinimalDaysInFirstWeek:f,getMinimalDaysInFirstWeek:f,format:f};log4javascript.PatternLayout=ff();log4javascript.PatternLayout.prototype=new log4javascript.Layout();log4javascript.Appender=ff();log4javascript.Appender.prototype=new EventSupport();copy(log4javascript.Appender.prototype,{layout:new log4javascript.PatternLayout(),threshold:log4javascript.Level.ALL,loggers:[],doAppend:f,append:f,setLayout:f,getLayout:f,setThreshold:f,getThreshold:f,setAddedToLogger:f,setRemovedFromLogger:f,group:f,groupEnd:f,toString:f});log4javascript.SimpleLayout=ff();log4javascript.SimpleLayout.prototype=new log4javascript.Layout();log4javascript.NullLayout=ff();log4javascript.NullLayout.prototype=new log4javascript.Layout();log4javascript.XmlLayout=ff();log4javascript.XmlLayout.prototype=new log4javascript.Layout();copy(log4javascript.XmlLayout.prototype,{escapeCdata:f,isCombinedMessages:f});log4javascript.JsonLayout=ff();log4javascript.JsonLayout.prototype=new log4javascript.Layout();copy(log4javascript.JsonLayout.prototype,{isReadable:f,isCombinedMessages:f});log4javascript.HttpPostDataLayout=ff();log4javascript.HttpPostDataLayout.prototype=new log4javascript.Layout();log4javascript.PatternLayout=ff();log4javascript.PatternLayout.prototype=new log4javascript.Layout();log4javascript.AlertAppender=ff();log4javascript.AlertAppender.prototype=new log4javascript.Appender();log4javascript.BrowserConsoleAppender=ff();log4javascript.BrowserConsoleAppender.prototype=new log4javascript.Appender();log4javascript.AjaxAppender=ff();log4javascript.AjaxAppender.prototype=new log4javascript.Appender();copy(log4javascript.AjaxAppender.prototype,{getSessionId:f,setSessionId:f,isTimed:f,setTimed:f,getTimerInterval:f,setTimerInterval:f,isWaitForResponse:f,setWaitForResponse:f,getBatchSize:f,setBatchSize:f,isSendAllOnUnload:f,setSendAllOnUnload:f,setRequestSuccessCallback:f,setFailCallback:f,getPostVarName:f,setPostVarName:f,sendAll:f,sendAllRemaining:f,defaults:{requestSuccessCallback:null,failCallback:null}});function ConsoleAppender(){}
+ConsoleAppender.prototype=new log4javascript.Appender();copy(ConsoleAppender.prototype,{create:f,isNewestMessageAtTop:f,setNewestMessageAtTop:f,isScrollToLatestMessage:f,setScrollToLatestMessage:f,getWidth:f,setWidth:f,getHeight:f,setHeight:f,getMaxMessages:f,setMaxMessages:f,isShowCommandLine:f,setShowCommandLine:f,isShowHideButton:f,setShowHideButton:f,isShowCloseButton:f,setShowCloseButton:f,getCommandLineObjectExpansionDepth:f,setCommandLineObjectExpansionDepth:f,isInitiallyMinimized:f,setInitiallyMinimized:f,isUseDocumentWrite:f,setUseDocumentWrite:f,group:f,groupEnd:f,clear:f,focus:f,focusCommandLine:f,focusSearch:f,getCommandWindow:f,setCommandWindow:f,executeLastCommand:f,getCommandLayout:f,setCommandLayout:f,evalCommandAndAppend:f,addCommandLineFunction:f,storeCommandHistory:f,unload:f});ConsoleAppender.addGlobalCommandLineFunction=f;log4javascript.InPageAppender=ff();log4javascript.InPageAppender.prototype=new ConsoleAppender();copy(log4javascript.InPageAppender.prototype,{addCssProperty:f,hide:f,show:f,isVisible:f,close:f,defaults:{layout:new log4javascript.PatternLayout(),maxMessages:null}});log4javascript.InlineAppender=log4javascript.InPageAppender;log4javascript.PopUpAppender=ff();log4javascript.PopUpAppender.prototype=new ConsoleAppender();copy(log4javascript.PopUpAppender.prototype,{isUseOldPopUp:f,setUseOldPopUp:f,isComplainAboutPopUpBlocking:f,setComplainAboutPopUpBlocking:f,isFocusPopUp:f,setFocusPopUp:f,isReopenWhenClosed:f,setReopenWhenClosed:f,close:f,hide:f,show:f,defaults:{layout:new log4javascript.PatternLayout(),maxMessages:null}});return log4javascript;})();if(typeof window.log4javascript=="undefined"){var log4javascript=log4javascript_stub;}
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite.js b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite.js
new file mode 100644
index 0000000..7d2ea14
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite.js
@@ -0,0 +1,21 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+
+var log4javascript_stub=(function(){var log4javascript;function ff(){return function(){};}
+function copy(obj,props){for(var i in props){obj[i]=props[i];}}
+var f=ff();var Logger=ff();copy(Logger.prototype,{setLevel:f,getLevel:f,trace:f,debug:f,info:f,warn:f,error:f,fatal:f,isEnabledFor:f,isTraceEnabled:f,isDebugEnabled:f,isInfoEnabled:f,isWarnEnabled:f,isErrorEnabled:f,isFatalEnabled:f});var getLogger=function(){return new Logger();};function Log4JavaScript(){}
+log4javascript=new Log4JavaScript();log4javascript={isStub:true,version:"1.4.6",edition:"log4javascript_lite",setEnabled:f,isEnabled:f,setShowStackTraces:f,getDefaultLogger:getLogger,getLogger:getLogger,getNullLogger:getLogger,Level:ff(),LoggingEvent:ff(),Appender:ff()};log4javascript.LoggingEvent.prototype={getThrowableStrRep:f,getCombinedMessages:f};log4javascript.Level.prototype={toString:f,equals:f,isGreaterOrEqual:f};var level=new log4javascript.Level();copy(log4javascript.Level,{ALL:level,TRACE:level,DEBUG:level,INFO:level,WARN:level,ERROR:level,FATAL:level,OFF:level});log4javascript.Appender.prototype.append=f;return log4javascript;})();if(typeof window.log4javascript=="undefined"){var log4javascript=log4javascript_stub;}
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite_uncompressed.js b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite_uncompressed.js
new file mode 100644
index 0000000..afb9ba7
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_lite_uncompressed.js
@@ -0,0 +1,102 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+var log4javascript_stub = (function() {
+ var log4javascript;
+
+ function ff() {
+ return function() {};
+ }
+ function copy(obj, props) {
+ for (var i in props) {
+ obj[i] = props[i];
+ }
+ }
+ var f = ff();
+
+ // Loggers
+ var Logger = ff();
+ copy(Logger.prototype, {
+ setLevel: f,
+ getLevel: f,
+ trace: f,
+ debug: f,
+ info: f,
+ warn: f,
+ error: f,
+ fatal: f,
+ isEnabledFor: f,
+ isTraceEnabled: f,
+ isDebugEnabled: f,
+ isInfoEnabled: f,
+ isWarnEnabled: f,
+ isErrorEnabled: f,
+ isFatalEnabled: f
+ });
+
+ var getLogger = function() {
+ return new Logger();
+ };
+
+ function Log4JavaScript() {}
+ log4javascript = new Log4JavaScript();
+
+ log4javascript = {
+ isStub: true,
+ version: "1.4.6",
+ edition: "log4javascript_lite",
+ setEnabled: f,
+ isEnabled: f,
+ setShowStackTraces: f,
+ getDefaultLogger: getLogger,
+ getLogger: getLogger,
+ getNullLogger: getLogger,
+ Level: ff(),
+ LoggingEvent: ff(),
+ Appender: ff()
+ };
+
+ // LoggingEvents
+ log4javascript.LoggingEvent.prototype = {
+ getThrowableStrRep: f,
+ getCombinedMessages: f
+ };
+
+ // Levels
+ log4javascript.Level.prototype = {
+ toString: f,
+ equals: f,
+ isGreaterOrEqual: f
+ };
+ var level = new log4javascript.Level();
+ copy(log4javascript.Level, {
+ ALL: level,
+ TRACE: level,
+ DEBUG: level,
+ INFO: level,
+ WARN: level,
+ ERROR: level,
+ FATAL: level,
+ OFF: level
+ });
+
+ log4javascript.Appender.prototype.append = f;
+
+ return log4javascript;
+})();
+if (typeof window.log4javascript == "undefined") {
+ var log4javascript = log4javascript_stub;
+}
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production.js b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production.js
new file mode 100644
index 0000000..69a90a8
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production.js
@@ -0,0 +1,22 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+
+var log4javascript_stub=(function(){var log4javascript;function ff(){return function(){};}
+function copy(obj,props){for(var i in props){obj[i]=props[i];}}
+var f=ff();var Logger=ff();copy(Logger.prototype,{addChild:f,getEffectiveAppenders:f,invalidateAppenderCache:f,getAdditivity:f,setAdditivity:f,addAppender:f,removeAppender:f,removeAllAppenders:f,log:f,setLevel:f,getLevel:f,getEffectiveLevel:f,trace:f,debug:f,info:f,warn:f,error:f,fatal:f,isEnabledFor:f,isTraceEnabled:f,isDebugEnabled:f,isInfoEnabled:f,isWarnEnabled:f,isErrorEnabled:f,isFatalEnabled:f,callAppenders:f,group:f,groupEnd:f,time:f,timeEnd:f,assert:f,parent:new Logger()});var getLogger=function(){return new Logger();};function EventSupport(){}
+copy(EventSupport.prototype,{setEventTypes:f,addEventListener:f,removeEventListener:f,dispatchEvent:f,eventTypes:[],eventListeners:{}});function Log4JavaScript(){}
+Log4JavaScript.prototype=new EventSupport();log4javascript=new Log4JavaScript();log4javascript={isStub:true,version:"1.4.6",edition:"log4javascript_production",setDocumentReady:f,setEventTypes:f,addEventListener:f,removeEventListener:f,dispatchEvent:f,eventTypes:[],eventListeners:{},logLog:{setQuietMode:f,setAlertAllErrors:f,debug:f,displayDebug:f,warn:f,error:f},handleError:f,setEnabled:f,isEnabled:f,setTimeStampsInMilliseconds:f,isTimeStampsInMilliseconds:f,evalInScope:f,setShowStackTraces:f,getLogger:getLogger,getDefaultLogger:getLogger,getNullLogger:getLogger,getRootLogger:getLogger,resetConfiguration:f,Level:ff(),LoggingEvent:ff(),Layout:ff(),Appender:ff()};log4javascript.LoggingEvent.prototype={getThrowableStrRep:f,getCombinedMessages:f};log4javascript.Level.prototype={toString:f,equals:f,isGreaterOrEqual:f};var level=new log4javascript.Level();copy(log4javascript.Level,{ALL:level,TRACE:level,DEBUG:level,INFO:level,WARN:level,ERROR:level,FATAL:level,OFF:level});log4javascript.Layout.prototype={defaults:{},format:f,ignoresThrowable:f,getContentType:f,allowBatching:f,getDataValues:f,setKeys:f,setCustomField:f,hasCustomFields:f,setTimeStampsInMilliseconds:f,isTimeStampsInMilliseconds:f,getTimeStampValue:f,toString:f};log4javascript.SimpleDateFormat=ff();log4javascript.SimpleDateFormat.prototype={setMinimalDaysInFirstWeek:f,getMinimalDaysInFirstWeek:f,format:f};log4javascript.PatternLayout=ff();log4javascript.PatternLayout.prototype=new log4javascript.Layout();log4javascript.Appender=ff();log4javascript.Appender.prototype=new EventSupport();copy(log4javascript.Appender.prototype,{layout:new log4javascript.PatternLayout(),threshold:log4javascript.Level.ALL,loggers:[],doAppend:f,append:f,setLayout:f,getLayout:f,setThreshold:f,getThreshold:f,setAddedToLogger:f,setRemovedFromLogger:f,group:f,groupEnd:f,toString:f});log4javascript.SimpleLayout=ff();log4javascript.SimpleLayout.prototype=new log4javascript.Layout();log4javascript.NullLayout=ff();log4javascript.NullLayout.prototype=new log4javascript.Layout();log4javascript.XmlLayout=ff();log4javascript.XmlLayout.prototype=new log4javascript.Layout();copy(log4javascript.XmlLayout.prototype,{escapeCdata:f,isCombinedMessages:f});log4javascript.JsonLayout=ff();log4javascript.JsonLayout.prototype=new log4javascript.Layout();copy(log4javascript.JsonLayout.prototype,{isReadable:f,isCombinedMessages:f});log4javascript.HttpPostDataLayout=ff();log4javascript.HttpPostDataLayout.prototype=new log4javascript.Layout();log4javascript.PatternLayout=ff();log4javascript.PatternLayout.prototype=new log4javascript.Layout();log4javascript.AjaxAppender=ff();log4javascript.AjaxAppender.prototype=new log4javascript.Appender();copy(log4javascript.AjaxAppender.prototype,{getSessionId:f,setSessionId:f,isTimed:f,setTimed:f,getTimerInterval:f,setTimerInterval:f,isWaitForResponse:f,setWaitForResponse:f,getBatchSize:f,setBatchSize:f,isSendAllOnUnload:f,setSendAllOnUnload:f,setRequestSuccessCallback:f,setFailCallback:f,getPostVarName:f,setPostVarName:f,sendAll:f,sendAllRemaining:f,defaults:{requestSuccessCallback:null,failCallback:null}});return log4javascript;})();if(typeof window.log4javascript=="undefined"){var log4javascript=log4javascript_stub;}
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production_uncompressed.js b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production_uncompressed.js
new file mode 100644
index 0000000..79eb7ca
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_production_uncompressed.js
@@ -0,0 +1,253 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+var log4javascript_stub = (function() {
+ var log4javascript;
+
+ function ff() {
+ return function() {};
+ }
+ function copy(obj, props) {
+ for (var i in props) {
+ obj[i] = props[i];
+ }
+ }
+ var f = ff();
+
+ // Loggers
+ var Logger = ff();
+ copy(Logger.prototype, {
+ addChild: f,
+ getEffectiveAppenders: f,
+ invalidateAppenderCache: f,
+ getAdditivity: f,
+ setAdditivity: f,
+ addAppender: f,
+ removeAppender: f,
+ removeAllAppenders: f,
+ log: f,
+ setLevel: f,
+ getLevel: f,
+ getEffectiveLevel: f,
+ trace: f,
+ debug: f,
+ info: f,
+ warn: f,
+ error: f,
+ fatal: f,
+ isEnabledFor: f,
+ isTraceEnabled: f,
+ isDebugEnabled: f,
+ isInfoEnabled: f,
+ isWarnEnabled: f,
+ isErrorEnabled: f,
+ isFatalEnabled: f,
+ callAppenders: f,
+ group: f,
+ groupEnd: f,
+ time: f,
+ timeEnd: f,
+ assert: f,
+ parent: new Logger()
+ });
+
+ var getLogger = function() {
+ return new Logger();
+ };
+
+ function EventSupport() {}
+
+ copy(EventSupport.prototype, {
+ setEventTypes: f,
+ addEventListener: f,
+ removeEventListener: f,
+ dispatchEvent: f,
+ eventTypes: [],
+ eventListeners: {}
+ });
+
+ function Log4JavaScript() {}
+ Log4JavaScript.prototype = new EventSupport();
+ log4javascript = new Log4JavaScript();
+
+ log4javascript = {
+ isStub: true,
+ version: "1.4.6",
+ edition: "log4javascript_production",
+ setDocumentReady: f,
+ setEventTypes: f,
+ addEventListener: f,
+ removeEventListener: f,
+ dispatchEvent: f,
+ eventTypes: [],
+ eventListeners: {},
+ logLog: {
+ setQuietMode: f,
+ setAlertAllErrors: f,
+ debug: f,
+ displayDebug: f,
+ warn: f,
+ error: f
+ },
+ handleError: f,
+ setEnabled: f,
+ isEnabled: f,
+ setTimeStampsInMilliseconds: f,
+ isTimeStampsInMilliseconds: f,
+ evalInScope: f,
+ setShowStackTraces: f,
+ getLogger: getLogger,
+ getDefaultLogger: getLogger,
+ getNullLogger: getLogger,
+ getRootLogger: getLogger,
+ resetConfiguration: f,
+ Level: ff(),
+ LoggingEvent: ff(),
+ Layout: ff(),
+ Appender: ff()
+ };
+
+ // LoggingEvents
+ log4javascript.LoggingEvent.prototype = {
+ getThrowableStrRep: f,
+ getCombinedMessages: f
+ };
+
+ // Levels
+ log4javascript.Level.prototype = {
+ toString: f,
+ equals: f,
+ isGreaterOrEqual: f
+ };
+ var level = new log4javascript.Level();
+ copy(log4javascript.Level, {
+ ALL: level,
+ TRACE: level,
+ DEBUG: level,
+ INFO: level,
+ WARN: level,
+ ERROR: level,
+ FATAL: level,
+ OFF: level
+ });
+
+ // Layouts
+ log4javascript.Layout.prototype = {
+ defaults: {},
+ format: f,
+ ignoresThrowable: f,
+ getContentType: f,
+ allowBatching: f,
+ getDataValues: f,
+ setKeys: f,
+ setCustomField: f,
+ hasCustomFields: f,
+ setTimeStampsInMilliseconds: f,
+ isTimeStampsInMilliseconds: f,
+ getTimeStampValue: f,
+ toString: f
+ };
+
+ // PatternLayout related
+ log4javascript.SimpleDateFormat = ff();
+ log4javascript.SimpleDateFormat.prototype = {
+ setMinimalDaysInFirstWeek: f,
+ getMinimalDaysInFirstWeek: f,
+ format: f
+ };
+
+ // PatternLayout
+ log4javascript.PatternLayout = ff();
+ log4javascript.PatternLayout.prototype = new log4javascript.Layout();
+
+ // Appenders
+ log4javascript.Appender = ff();
+ log4javascript.Appender.prototype = new EventSupport();
+
+ copy(log4javascript.Appender.prototype, {
+ layout: new log4javascript.PatternLayout(),
+ threshold: log4javascript.Level.ALL,
+ loggers: [],
+ doAppend: f,
+ append: f,
+ setLayout: f,
+ getLayout: f,
+ setThreshold: f,
+ getThreshold: f,
+ setAddedToLogger: f,
+ setRemovedFromLogger: f,
+ group: f,
+ groupEnd: f,
+ toString: f
+ });
+ // SimpleLayout
+ log4javascript.SimpleLayout = ff();
+ log4javascript.SimpleLayout.prototype = new log4javascript.Layout();
+ // NullLayout
+ log4javascript.NullLayout = ff();
+ log4javascript.NullLayout.prototype = new log4javascript.Layout();
+ // ZmlLayout
+ log4javascript.XmlLayout = ff();
+ log4javascript.XmlLayout.prototype = new log4javascript.Layout();
+ copy(log4javascript.XmlLayout.prototype, {
+ escapeCdata: f,
+ isCombinedMessages: f
+ });
+ // JsonLayout
+ log4javascript.JsonLayout = ff();
+ log4javascript.JsonLayout.prototype = new log4javascript.Layout();
+ copy(log4javascript.JsonLayout.prototype, {
+ isReadable: f,
+ isCombinedMessages: f
+ });
+ // HttpPostDataLayout
+ log4javascript.HttpPostDataLayout = ff();
+ log4javascript.HttpPostDataLayout.prototype = new log4javascript.Layout();
+ // PatternLayout
+ log4javascript.PatternLayout = ff();
+ log4javascript.PatternLayout.prototype = new log4javascript.Layout();
+ // AjaxAppender
+ log4javascript.AjaxAppender = ff();
+ log4javascript.AjaxAppender.prototype = new log4javascript.Appender();
+ copy(log4javascript.AjaxAppender.prototype, {
+ getSessionId: f,
+ setSessionId: f,
+ isTimed: f,
+ setTimed: f,
+ getTimerInterval: f,
+ setTimerInterval: f,
+ isWaitForResponse: f,
+ setWaitForResponse: f,
+ getBatchSize: f,
+ setBatchSize: f,
+ isSendAllOnUnload: f,
+ setSendAllOnUnload: f,
+ setRequestSuccessCallback: f,
+ setFailCallback: f,
+ getPostVarName: f,
+ setPostVarName: f,
+ sendAll: f,
+ sendAllRemaining: f,
+ defaults: {
+ requestSuccessCallback: null,
+ failCallback: null
+ }
+ });
+ return log4javascript;
+})();
+if (typeof window.log4javascript == "undefined") {
+ var log4javascript = log4javascript_stub;
+}
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_uncompressed.js b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_uncompressed.js
new file mode 100644
index 0000000..1976fbc
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/stubs/log4javascript_uncompressed.js
@@ -0,0 +1,341 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+var log4javascript_stub = (function() {
+ var log4javascript;
+
+ function ff() {
+ return function() {};
+ }
+ function copy(obj, props) {
+ for (var i in props) {
+ obj[i] = props[i];
+ }
+ }
+ var f = ff();
+
+ // Loggers
+ var Logger = ff();
+ copy(Logger.prototype, {
+ addChild: f,
+ getEffectiveAppenders: f,
+ invalidateAppenderCache: f,
+ getAdditivity: f,
+ setAdditivity: f,
+ addAppender: f,
+ removeAppender: f,
+ removeAllAppenders: f,
+ log: f,
+ setLevel: f,
+ getLevel: f,
+ getEffectiveLevel: f,
+ trace: f,
+ debug: f,
+ info: f,
+ warn: f,
+ error: f,
+ fatal: f,
+ isEnabledFor: f,
+ isTraceEnabled: f,
+ isDebugEnabled: f,
+ isInfoEnabled: f,
+ isWarnEnabled: f,
+ isErrorEnabled: f,
+ isFatalEnabled: f,
+ callAppenders: f,
+ group: f,
+ groupEnd: f,
+ time: f,
+ timeEnd: f,
+ assert: f,
+ parent: new Logger()
+ });
+
+ var getLogger = function() {
+ return new Logger();
+ };
+
+ function EventSupport() {}
+
+ copy(EventSupport.prototype, {
+ setEventTypes: f,
+ addEventListener: f,
+ removeEventListener: f,
+ dispatchEvent: f,
+ eventTypes: [],
+ eventListeners: {}
+ });
+
+ function Log4JavaScript() {}
+ Log4JavaScript.prototype = new EventSupport();
+ log4javascript = new Log4JavaScript();
+
+ log4javascript = {
+ isStub: true,
+ version: "1.4.6",
+ edition: "log4javascript",
+ setDocumentReady: f,
+ setEventTypes: f,
+ addEventListener: f,
+ removeEventListener: f,
+ dispatchEvent: f,
+ eventTypes: [],
+ eventListeners: {},
+ logLog: {
+ setQuietMode: f,
+ setAlertAllErrors: f,
+ debug: f,
+ displayDebug: f,
+ warn: f,
+ error: f
+ },
+ handleError: f,
+ setEnabled: f,
+ isEnabled: f,
+ setTimeStampsInMilliseconds: f,
+ isTimeStampsInMilliseconds: f,
+ evalInScope: f,
+ setShowStackTraces: f,
+ getLogger: getLogger,
+ getDefaultLogger: getLogger,
+ getNullLogger: getLogger,
+ getRootLogger: getLogger,
+ resetConfiguration: f,
+ Level: ff(),
+ LoggingEvent: ff(),
+ Layout: ff(),
+ Appender: ff()
+ };
+
+ // LoggingEvents
+ log4javascript.LoggingEvent.prototype = {
+ getThrowableStrRep: f,
+ getCombinedMessages: f
+ };
+
+ // Levels
+ log4javascript.Level.prototype = {
+ toString: f,
+ equals: f,
+ isGreaterOrEqual: f
+ };
+ var level = new log4javascript.Level();
+ copy(log4javascript.Level, {
+ ALL: level,
+ TRACE: level,
+ DEBUG: level,
+ INFO: level,
+ WARN: level,
+ ERROR: level,
+ FATAL: level,
+ OFF: level
+ });
+
+ // Layouts
+ log4javascript.Layout.prototype = {
+ defaults: {},
+ format: f,
+ ignoresThrowable: f,
+ getContentType: f,
+ allowBatching: f,
+ getDataValues: f,
+ setKeys: f,
+ setCustomField: f,
+ hasCustomFields: f,
+ setTimeStampsInMilliseconds: f,
+ isTimeStampsInMilliseconds: f,
+ getTimeStampValue: f,
+ toString: f
+ };
+
+ // PatternLayout related
+ log4javascript.SimpleDateFormat = ff();
+ log4javascript.SimpleDateFormat.prototype = {
+ setMinimalDaysInFirstWeek: f,
+ getMinimalDaysInFirstWeek: f,
+ format: f
+ };
+
+ // PatternLayout
+ log4javascript.PatternLayout = ff();
+ log4javascript.PatternLayout.prototype = new log4javascript.Layout();
+
+ // Appenders
+ log4javascript.Appender = ff();
+ log4javascript.Appender.prototype = new EventSupport();
+
+ copy(log4javascript.Appender.prototype, {
+ layout: new log4javascript.PatternLayout(),
+ threshold: log4javascript.Level.ALL,
+ loggers: [],
+ doAppend: f,
+ append: f,
+ setLayout: f,
+ getLayout: f,
+ setThreshold: f,
+ getThreshold: f,
+ setAddedToLogger: f,
+ setRemovedFromLogger: f,
+ group: f,
+ groupEnd: f,
+ toString: f
+ });
+ // SimpleLayout
+ log4javascript.SimpleLayout = ff();
+ log4javascript.SimpleLayout.prototype = new log4javascript.Layout();
+ // NullLayout
+ log4javascript.NullLayout = ff();
+ log4javascript.NullLayout.prototype = new log4javascript.Layout();
+ // ZmlLayout
+ log4javascript.XmlLayout = ff();
+ log4javascript.XmlLayout.prototype = new log4javascript.Layout();
+ copy(log4javascript.XmlLayout.prototype, {
+ escapeCdata: f,
+ isCombinedMessages: f
+ });
+ // JsonLayout
+ log4javascript.JsonLayout = ff();
+ log4javascript.JsonLayout.prototype = new log4javascript.Layout();
+ copy(log4javascript.JsonLayout.prototype, {
+ isReadable: f,
+ isCombinedMessages: f
+ });
+ // HttpPostDataLayout
+ log4javascript.HttpPostDataLayout = ff();
+ log4javascript.HttpPostDataLayout.prototype = new log4javascript.Layout();
+ // PatternLayout
+ log4javascript.PatternLayout = ff();
+ log4javascript.PatternLayout.prototype = new log4javascript.Layout();
+ // AlertAppender
+ log4javascript.AlertAppender = ff();
+ log4javascript.AlertAppender.prototype = new log4javascript.Appender();
+ // BrowserConsoleAppender
+ log4javascript.BrowserConsoleAppender = ff();
+ log4javascript.BrowserConsoleAppender.prototype = new log4javascript.Appender();
+ // AjaxAppender
+ log4javascript.AjaxAppender = ff();
+ log4javascript.AjaxAppender.prototype = new log4javascript.Appender();
+ copy(log4javascript.AjaxAppender.prototype, {
+ getSessionId: f,
+ setSessionId: f,
+ isTimed: f,
+ setTimed: f,
+ getTimerInterval: f,
+ setTimerInterval: f,
+ isWaitForResponse: f,
+ setWaitForResponse: f,
+ getBatchSize: f,
+ setBatchSize: f,
+ isSendAllOnUnload: f,
+ setSendAllOnUnload: f,
+ setRequestSuccessCallback: f,
+ setFailCallback: f,
+ getPostVarName: f,
+ setPostVarName: f,
+ sendAll: f,
+ sendAllRemaining: f,
+ defaults: {
+ requestSuccessCallback: null,
+ failCallback: null
+ }
+ });
+ // ConsoleAppender
+ function ConsoleAppender() {}
+ ConsoleAppender.prototype = new log4javascript.Appender();
+ copy(ConsoleAppender.prototype, {
+ create: f,
+ isNewestMessageAtTop: f,
+ setNewestMessageAtTop: f,
+ isScrollToLatestMessage: f,
+ setScrollToLatestMessage: f,
+ getWidth: f,
+ setWidth: f,
+ getHeight: f,
+ setHeight: f,
+ getMaxMessages: f,
+ setMaxMessages: f,
+ isShowCommandLine: f,
+ setShowCommandLine: f,
+ isShowHideButton: f,
+ setShowHideButton: f,
+ isShowCloseButton: f,
+ setShowCloseButton: f,
+ getCommandLineObjectExpansionDepth: f,
+ setCommandLineObjectExpansionDepth: f,
+ isInitiallyMinimized: f,
+ setInitiallyMinimized: f,
+ isUseDocumentWrite: f,
+ setUseDocumentWrite: f,
+ group: f,
+ groupEnd: f,
+ clear: f,
+ focus: f,
+ focusCommandLine: f,
+ focusSearch: f,
+ getCommandWindow: f,
+ setCommandWindow: f,
+ executeLastCommand: f,
+ getCommandLayout: f,
+ setCommandLayout: f,
+ evalCommandAndAppend: f,
+ addCommandLineFunction: f,
+ storeCommandHistory: f,
+ unload: f
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction = f;
+
+ // InPageAppender
+ log4javascript.InPageAppender = ff();
+ log4javascript.InPageAppender.prototype = new ConsoleAppender();
+ copy(log4javascript.InPageAppender.prototype, {
+ addCssProperty: f,
+ hide: f,
+ show: f,
+ isVisible: f,
+ close: f,
+ defaults: {
+ layout: new log4javascript.PatternLayout(),
+ maxMessages: null
+ }
+ });
+ log4javascript.InlineAppender = log4javascript.InPageAppender;
+
+ // PopUpAppender
+ log4javascript.PopUpAppender = ff();
+ log4javascript.PopUpAppender.prototype = new ConsoleAppender();
+ copy(log4javascript.PopUpAppender.prototype, {
+ isUseOldPopUp: f,
+ setUseOldPopUp: f,
+ isComplainAboutPopUpBlocking: f,
+ setComplainAboutPopUpBlocking: f,
+ isFocusPopUp: f,
+ setFocusPopUp: f,
+ isReopenWhenClosed: f,
+ setReopenWhenClosed: f,
+ close: f,
+ hide: f,
+ show: f,
+ defaults: {
+ layout: new log4javascript.PatternLayout(),
+ maxMessages: null
+ }
+ });
+ return log4javascript;
+})();
+if (typeof window.log4javascript == "undefined") {
+ var log4javascript = log4javascript_stub;
+}
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript.js b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript.js
new file mode 100644
index 0000000..89fd903
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript.js
@@ -0,0 +1,32 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+
+function array_contains(arr,val){for(var i=0;i<arr.length;i++){if(arr[i]==val){return true;}}
+return false;}
+function compareObjectInterface(obj1,obj1_name,obj2,obj2_name,namePrefix){if(!namePrefix){namePrefix="";}
+var obj1PropertyNames=new Array();for(var i in obj1){if(i!="prototype"&&i!="arguments"){obj1PropertyNames.push(i);}}
+if(obj1&&obj1.prototype&&!array_contains(obj1PropertyNames,"prototype")){}
+for(var j=0;j<obj1PropertyNames.length;j++){var propertyName=obj1PropertyNames[j];if((typeof obj1[propertyName]=="function"||typeof obj1[propertyName]=="object")&&!(obj1[propertyName]instanceof Array)){var propertyFullyQualifiedName=(namePrefix=="")?propertyName:namePrefix+"."+propertyName;try{if(typeof obj2[propertyName]=="undefined"){throw new Error(obj2_name+" does not contain "+propertyFullyQualifiedName+" in "+obj1_name);}else if(typeof obj2[propertyName]!=typeof obj1[propertyName]){throw new Error(obj2_name+"'s "+propertyFullyQualifiedName+" is of the wrong type: "+typeof obj2[propertyName]+" when it is type "+typeof obj1[propertyName]+" in "+obj1_name);}else if(obj1[propertyName]!=Function.prototype.apply){if(!compareObjectInterface(obj1[propertyName],obj1_name,obj2[propertyName],obj2_name,propertyFullyQualifiedName)){throw new Error("Interfaces don't match");}}}catch(ex){throw new Error("Exception while checking property name "+propertyFullyQualifiedName+" in "+obj2_name+": "+ex.message);}}}
+return true;};var testLayoutWithVariables=function(layout,t){var emptyObject={};var emptyArray=[];var emptyString="";var localUndefined=emptyArray[0];var oneLevelObject={"name":"One-level object"};var twoLevelObject={"name":"Two-level object","data":oneLevelObject};var threeLevelObject={"name":"Three-level object","data":twoLevelObject};var anArray=[3,"stuff",true,false,0,null,localUndefined,3.14,function(p){return"I'm a function";},[1,"things"]];var arrayOfTestItems=[emptyObject,emptyString,emptyString,localUndefined,oneLevelObject,twoLevelObject,threeLevelObject,anArray];t.log("Testing layout "+layout)
+for(var i=0;i<arrayOfTestItems.length;i++){var ex=new Error("Test error");var loggingEvent=new log4javascript.LoggingEvent(t.logger,new Date(),log4javascript.Level.INFO,[arrayOfTestItems[i]],null);t.log("Formatting",arrayOfTestItems[i],result);var result=layout.format(loggingEvent);loggingEvent.exception=ex;t.log("Formatting with exception",arrayOfTestItems[i],result);result=layout.format(loggingEvent);}};xn.test.enableTestDebug=true;xn.test.enable_log4javascript=false;xn.test.suite("log4javascript tests",function(s){log4javascript.logLog.setQuietMode(true);var ArrayAppender=function(layout){if(layout){this.setLayout(layout);}
+this.logMessages=[];};ArrayAppender.prototype=new log4javascript.Appender();ArrayAppender.prototype.layout=new log4javascript.NullLayout();ArrayAppender.prototype.append=function(loggingEvent){var formattedMessage=this.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}
+this.logMessages.push(formattedMessage);};ArrayAppender.prototype.toString=function(){return"[ArrayAppender]";};s.setUp=function(t){t.logger=log4javascript.getLogger("test");t.logger.removeAllAppenders();t.appender=new ArrayAppender();t.logger.addAppender(t.appender);};s.tearDown=function(t){t.logger.removeAppender(t.appender);log4javascript.resetConfiguration();};s.test("Stub script interface test",function(t){try{compareObjectInterface(log4javascript,"log4javascript",log4javascript_stub,"log4javascript_stub");}catch(ex){t.fail(ex);}});s.test("Disable log4javascript test",function(t){log4javascript.setEnabled(false);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,0);log4javascript.setEnabled(true);});s.test("Array.splice test 1",function(t){var a=["Marlon","Ashley","Darius","Lloyd"];var deletedItems=a.splice(1,2);t.assertEquals(a.join(","),"Marlon,Lloyd");t.assertEquals(deletedItems.join(","),"Ashley,Darius");});s.test("Array.splice test 2",function(t){var a=["Marlon","Ashley","Darius","Lloyd"];var deletedItems=a.splice(1,1,"Malky","Jay");t.assertEquals(a.join(","),"Marlon,Malky,Jay,Darius,Lloyd");t.assertEquals(deletedItems.join(","),"Ashley");});s.test("array_remove test",function(t){var array_remove=log4javascript.evalInScope("array_remove");var a=["Marlon","Ashley","Darius"];array_remove(a,"Darius");t.assertEquals(a.join(","),"Marlon,Ashley");});s.test("array_remove with empty array test",function(t){var array_remove=log4javascript.evalInScope("array_remove");var a=[];array_remove(a,"Darius");t.assertEquals(a.join(","),"");});s.test("Logger logging test",function(t){t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,1);});s.test("Logger levels test",function(t){var originalLevel=t.logger.getEffectiveLevel();t.logger.setLevel(log4javascript.Level.INFO);t.logger.debug("TEST");t.logger.setLevel(originalLevel);t.assertEquals(t.appender.logMessages.length,0);});s.test("Logger getEffectiveLevel inheritance test 1",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");parentLogger.setLevel(log4javascript.Level.ERROR);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.ERROR);});s.test("Logger getEffectiveLevel inheritance test 2",function(t){var grandParentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2.test3");grandParentLogger.setLevel(log4javascript.Level.ERROR);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.ERROR);});s.test("Logger getEffectiveLevel inheritance test 3",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");parentLogger.setLevel(log4javascript.Level.ERROR);childLogger.setLevel(log4javascript.Level.INFO);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.INFO);});s.test("Logger getEffectiveLevel root inheritance test",function(t){var rootLogger=log4javascript.getRootLogger();var childLogger=log4javascript.getLogger("test1.test2.test3");rootLogger.setLevel(log4javascript.Level.WARN);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.WARN);});s.test("Logger null level test",function(t){t.logger.setLevel(null);t.assertEquals(t.logger.getEffectiveLevel(),log4javascript.Level.DEBUG);});s.test("Logger appender additivity test 1",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");t.assertEquals(parentLoggerAppender.logMessages.length,2);t.assertEquals(childLoggerAppender.logMessages.length,1);});s.test("Logger appender additivity test 2",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);childLogger.setAdditivity(false);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");t.assertEquals(parentLoggerAppender.logMessages.length,1);t.assertEquals(childLoggerAppender.logMessages.length,1);});s.test("Logger appender additivity test 3",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);childLogger.setAdditivity(false);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");childLogger.setAdditivity(true);childLogger.info("Child logger test message 2");t.assertEquals(parentLoggerAppender.logMessages.length,2);t.assertEquals(childLoggerAppender.logMessages.length,2);});s.test("Appender threshold test",function(t){t.appender.setThreshold(log4javascript.Level.INFO);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,0);});s.test("Basic appender / layout test",function(t){t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST");});s.test("Appender uniqueness within logger test",function(t){t.logger.addAppender(t.appender);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,1);});s.test("Logger remove appender test",function(t){t.logger.debug("TEST");t.logger.removeAppender(t.appender);t.logger.debug("TEST AGAIN");t.assertEquals(t.appender.logMessages.length,1);});s.test("",function(t){t.logger.debug("TEST");t.logger.removeAppender(t.appender);t.logger.debug("TEST AGAIN");t.assertEquals(t.appender.logMessages.length,1);});s.test("SimpleLayout format test",function(t){var layout=new log4javascript.SimpleLayout();testLayoutWithVariables(layout,t);});s.test("SimpleLayout test",function(t){t.appender.setLayout(new log4javascript.SimpleLayout());t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"DEBUG - TEST");});s.test("NullLayout format test",function(t){var layout=new log4javascript.NullLayout();testLayoutWithVariables(layout,t);});s.test("NullLayout test",function(t){t.appender.setLayout(new log4javascript.NullLayout());t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST");});s.test("XmlLayout format test",function(t){var layout=new log4javascript.XmlLayout();testLayoutWithVariables(layout,t);});s.test("XmlLayout test",function(t){t.appender.setLayout(new log4javascript.XmlLayout());t.logger.debug("TEST");t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<\/log4javascript:event>\s*$/,t.appender.logMessages[0]);});s.test("XmlLayout with exception test",function(t){t.appender.setLayout(new log4javascript.XmlLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<log4javascript:exception>\s*<!\[CDATA\[.*\]\]><\/log4javascript:exception>\s*<\/log4javascript:event>\s*$/,t.appender.logMessages[0]);});var setUpXmlLayoutMillisecondsTest=function(t){t.date=new Date();t.timeInMilliseconds=t.date.getTime();t.timeInSeconds=Math.floor(t.timeInMilliseconds/1000);t.milliseconds=t.date.getMilliseconds();t.loggingEvent=new log4javascript.LoggingEvent(t.logger,t.date,log4javascript.Level.DEBUG,["TEST"],null);t.layout=new log4javascript.XmlLayout();}
+s.test("XmlLayout seconds/milliseconds test 1",function(t){setUpXmlLayoutMillisecondsTest(t);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInMilliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,t.layout.format(t.loggingEvent));});s.test("XmlLayout seconds/milliseconds test 2",function(t){setUpXmlLayoutMillisecondsTest(t);log4javascript.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);log4javascript.setTimeStampsInMilliseconds(true);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInSeconds+'" milliseconds="'+t.milliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,formatted);});s.test("XmlLayout seconds/milliseconds test 3",function(t){setUpXmlLayoutMillisecondsTest(t);t.layout.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInSeconds+'" milliseconds="'+t.milliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,formatted);});s.test("escapeNewLines test",function(t){var escapeNewLines=log4javascript.evalInScope("escapeNewLines");var str="1\r2\n3\n4\r\n5\r6\r\n7";t.assertEquals(escapeNewLines(str),"1\\r\\n2\\r\\n3\\r\\n4\\r\\n5\\r\\n6\\r\\n7");});s.test("JsonLayout format test",function(t){var layout=new log4javascript.JsonLayout();testLayoutWithVariables(layout,t);});s.test("JsonLayout test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST");t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST"}$/,t.appender.logMessages[0]);});s.test("JsonLayout JSON validity test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST");eval("var o = "+t.appender.logMessages[0]);t.assertEquals(o.message,"TEST");});s.test("JsonLayout with number type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug(15);t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":15}$/,t.appender.logMessages[0]);});s.test("JsonLayout with object type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug({});t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"\[object Object\]"}$/,t.appender.logMessages[0]);});s.test("JsonLayout with boolean type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug(false);t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":false}$/,t.appender.logMessages[0]);});s.test("JsonLayout with quote test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TE\"S\"T");t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TE\\"S\\"T"}$/,t.appender.logMessages[0]);});s.test("JsonLayout with exception test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST","exception":.*}$/,t.appender.logMessages[0]);});var setUpJsonLayoutMillisecondsTest=function(t){t.date=new Date();t.timeInMilliseconds=t.date.getTime();t.timeInSeconds=Math.floor(t.timeInMilliseconds/1000);t.milliseconds=t.date.getMilliseconds();t.loggingEvent=new log4javascript.LoggingEvent(t.logger,t.date,log4javascript.Level.DEBUG,["TEST"],null);t.layout=new log4javascript.JsonLayout();};s.test("JsonLayout seconds/milliseconds test 1",function(t){setUpJsonLayoutMillisecondsTest(t);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInMilliseconds+',"level":"DEBUG","url":".*","message":"TEST"}$');t.assertRegexMatches(regex,t.layout.format(t.loggingEvent));});s.test("JsonLayout seconds/milliseconds test 2",function(t){setUpJsonLayoutMillisecondsTest(t);log4javascript.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);log4javascript.setTimeStampsInMilliseconds(true);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInSeconds+',"level":"DEBUG","url":".*","message":"TEST","milliseconds":'+t.milliseconds+'}$');t.assertRegexMatches(regex,formatted);});s.test("JsonLayout seconds/milliseconds test 3",function(t){setUpJsonLayoutMillisecondsTest(t);t.layout.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInSeconds+',"level":"DEBUG","url":".*","message":"TEST","milliseconds":'+t.milliseconds+'}$');t.assertRegexMatches(regex,formatted);});s.test("HttpPostDataLayout format test",function(t){var layout=new log4javascript.HttpPostDataLayout();testLayoutWithVariables(layout,t);});s.test("HttpPostDataLayout test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST");t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST$/,t.appender.logMessages[0]);});s.test("HttpPostDataLayout URL encoding test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST +\"1\"");t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST%20%2B%221%22$/,t.appender.logMessages[0]);});s.test("HttpPostDataLayout with exception test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST&exception=.*$/,t.appender.logMessages[0]);});(function(){var formatObjectExpansion=log4javascript.evalInScope("formatObjectExpansion");var newLine=log4javascript.evalInScope("newLine");var arr=[null,undefined,1.2,"A string",[1,"test"],{a:{b:1}}];s.test("Basic formatObjectExpansion array test (depth: 1)",function(t){t.assertEquals(formatObjectExpansion(arr,1),"["+newLine+" null,"+newLine+" undefined,"+newLine+" 1.2,"+newLine+" A string,"+newLine+" 1,test,"+newLine+" [object Object]"+newLine+"]");});s.test("Basic formatObjectExpansion array test (depth: 2)",function(t){t.assertEquals(formatObjectExpansion(arr,2),"["+newLine+" null,"+newLine+" undefined,"+newLine+" 1.2,"+newLine+" A string,"+newLine+" ["+newLine+" 1,"+newLine+" test"+newLine+" ],"+newLine+" {"+newLine+" a: [object Object]"+newLine+" }"+newLine+"]");});s.test("formatObjectExpansion simple object test",function(t){var obj={STRING:"A string"};t.assertEquals(formatObjectExpansion(obj,1),"{"+newLine+" STRING: A string"+newLine+"}");});s.test("formatObjectExpansion simple circular object test",function(t){var obj={};obj.a=obj;t.assertEquals(formatObjectExpansion(obj,2),"{"+newLine+" a: [object Object] [already expanded]"+newLine+"}");});})();var getSampleDate=function(){var date=new Date();date.setFullYear(2006);date.setMonth(7);date.setDate(30);date.setHours(15);date.setMinutes(38);date.setSeconds(45);return date;};s.test("String.replace test",function(t){t.assertEquals("Hello world".replace(/o/g,"Z"),"HellZ wZrld");});s.test("PatternLayout format test",function(t){var layout=new log4javascript.PatternLayout();testLayoutWithVariables(layout,t);});s.test("PatternLayout dates test",function(t){var layout=new log4javascript.PatternLayout("%d %d{DATE} %d{HH:ss}");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertRegexMatches(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} \d{2} [A-Z][a-z]{2} \d{4} \d{2}:\d{2}:\d{2},\d{3} \d{2}:\d{2}$/,t.appender.logMessages[0]);});s.test("PatternLayout modifiers test",function(t){var layout=new log4javascript.PatternLayout("%m|%3m|%-3m|%6m|%-6m|%.2m|%1.2m|%6.8m|%-1.2m|%-6.8m|");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST|TEST|TEST| TEST|TEST |ST|ST| TEST|ST|TEST |");});s.test("PatternLayout conversion characters test",function(t){var layout=new log4javascript.PatternLayout("%c %n %p %r literal %%");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertRegexMatches(/^test \s+ DEBUG \d+ literal %$/,t.appender.logMessages[0]);});s.test("PatternLayout message test",function(t){var layout=new log4javascript.PatternLayout("%m{1} %m{2}");t.appender.setLayout(layout);var testObj={strikers:{quick:"Marlon"}};t.logger.debug(testObj);t.assertEquals("{\r\n strikers: [object Object]\r\n} {\r\n\ strikers: {\r\n quick: Marlon\r\n }\r\n}",t.appender.logMessages[0]);});s.test("Logging/grouping test",function(t){var browserConsoleAppender=new log4javascript.BrowserConsoleAppender();t.logger.addAppender(browserConsoleAppender);t.logger.trace("TEST TRACE");t.logger.debug("TEST DEBUG");t.logger.info("TEST INFO");t.logger.warn("TEST WARN");t.logger.error("TEST ERROR");t.logger.fatal("TEST FATAL");t.logger.fatal("TEST FATAL",new Error("Fake error"));t.logger.info("TEST INFO","Second message",["a","b","c"]);t.logger.group("TEST GROUP");t.logger.info("TEST INFO");t.logger.groupEnd("TEST GROUP");t.logger.info("TEST INFO");t.logger.removeAppender(browserConsoleAppender);});var testConsoleAppender=function(t,appender){var timeoutCallback=function(){return(windowLoaded?"Timed out while waiting for messages to appear":"Timed out while waiting for window to load")+". Debug messages: "+
+log4javascript.logLog.debugMessages.join("\r\n");}
+t.async(60000,timeoutCallback);var windowLoaded=false;var domChecked=false;var onLoadHandler=function(){log4javascript.logLog.debug("onLoadHandler");windowLoaded=true;var win=appender.getConsoleWindow();if(win&&win.loaded){var checkDom=function(){log4javascript.logLog.debug("checkDom");domChecked=true;var logContainer=win.logMainContainer;if(logContainer.hasChildNodes()){if(logContainer.innerHTML.indexOf("TEST MESSAGE")==-1){appender.close();t.fail("Log message not correctly logged (log container innerHTML: "+logContainer.innerHTML+")");}else{t.assert(appender.isVisible());appender.close();t.assert(!appender.isVisible());t.succeed();}}else{appender.close();t.fail("Console has no log messages");}}
+window.setTimeout(checkDom,300);}else{appender.close();t.fail("Console mistakenly raised load event");}}
+appender.addEventListener("load",onLoadHandler);t.logger.addAppender(appender);t.logger.debug("TEST MESSAGE");};s.test("InlineAppender test",function(t){var inlineAppender=new log4javascript.InlineAppender();inlineAppender.setInitiallyMinimized(false);inlineAppender.setNewestMessageAtTop(false);inlineAppender.setScrollToLatestMessage(true);inlineAppender.setWidth(600);inlineAppender.setHeight(200);testConsoleAppender(t,inlineAppender);});s.test("InPageAppender with separate console HTML file test",function(t){var inPageAppender=new log4javascript.InPageAppender();inPageAppender.setInitiallyMinimized(false);inPageAppender.setNewestMessageAtTop(false);inPageAppender.setScrollToLatestMessage(true);inPageAppender.setUseDocumentWrite(false);inPageAppender.setWidth(600);inPageAppender.setHeight(200);testConsoleAppender(t,inPageAppender);});s.test("PopUpAppender test",function(t){var popUpAppender=new log4javascript.PopUpAppender();popUpAppender.setFocusPopUp(true);popUpAppender.setUseOldPopUp(false);popUpAppender.setNewestMessageAtTop(false);popUpAppender.setScrollToLatestMessage(true);popUpAppender.setComplainAboutPopUpBlocking(false);popUpAppender.setWidth(600);popUpAppender.setHeight(200);testConsoleAppender(t,popUpAppender);});s.test("PopUpAppender with separate console HTML file test",function(t){var popUpAppender=new log4javascript.PopUpAppender();popUpAppender.setFocusPopUp(true);popUpAppender.setUseOldPopUp(false);popUpAppender.setNewestMessageAtTop(false);popUpAppender.setScrollToLatestMessage(true);popUpAppender.setComplainAboutPopUpBlocking(false);popUpAppender.setUseDocumentWrite(false);popUpAppender.setWidth(600);popUpAppender.setHeight(200);testConsoleAppender(t,popUpAppender);});});
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite.js b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite.js
new file mode 100644
index 0000000..b9eb6b7
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite.js
@@ -0,0 +1,16 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite_uncompressed.js b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite_uncompressed.js
new file mode 100644
index 0000000..b9eb6b7
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_lite_uncompressed.js
@@ -0,0 +1,16 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_production.js b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_production.js
new file mode 100644
index 0000000..f5d1090
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_production.js
@@ -0,0 +1,28 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+
+function array_contains(arr,val){for(var i=0;i<arr.length;i++){if(arr[i]==val){return true;}}
+return false;}
+function compareObjectInterface(obj1,obj1_name,obj2,obj2_name,namePrefix){if(!namePrefix){namePrefix="";}
+var obj1PropertyNames=new Array();for(var i in obj1){if(i!="prototype"&&i!="arguments"){obj1PropertyNames.push(i);}}
+if(obj1&&obj1.prototype&&!array_contains(obj1PropertyNames,"prototype")){}
+for(var j=0;j<obj1PropertyNames.length;j++){var propertyName=obj1PropertyNames[j];if((typeof obj1[propertyName]=="function"||typeof obj1[propertyName]=="object")&&!(obj1[propertyName]instanceof Array)){var propertyFullyQualifiedName=(namePrefix=="")?propertyName:namePrefix+"."+propertyName;try{if(typeof obj2[propertyName]=="undefined"){throw new Error(obj2_name+" does not contain "+propertyFullyQualifiedName+" in "+obj1_name);}else if(typeof obj2[propertyName]!=typeof obj1[propertyName]){throw new Error(obj2_name+"'s "+propertyFullyQualifiedName+" is of the wrong type: "+typeof obj2[propertyName]+" when it is type "+typeof obj1[propertyName]+" in "+obj1_name);}else if(obj1[propertyName]!=Function.prototype.apply){if(!compareObjectInterface(obj1[propertyName],obj1_name,obj2[propertyName],obj2_name,propertyFullyQualifiedName)){throw new Error("Interfaces don't match");}}}catch(ex){throw new Error("Exception while checking property name "+propertyFullyQualifiedName+" in "+obj2_name+": "+ex.message);}}}
+return true;};var testLayoutWithVariables=function(layout,t){var emptyObject={};var emptyArray=[];var emptyString="";var localUndefined=emptyArray[0];var oneLevelObject={"name":"One-level object"};var twoLevelObject={"name":"Two-level object","data":oneLevelObject};var threeLevelObject={"name":"Three-level object","data":twoLevelObject};var anArray=[3,"stuff",true,false,0,null,localUndefined,3.14,function(p){return"I'm a function";},[1,"things"]];var arrayOfTestItems=[emptyObject,emptyString,emptyString,localUndefined,oneLevelObject,twoLevelObject,threeLevelObject,anArray];t.log("Testing layout "+layout)
+for(var i=0;i<arrayOfTestItems.length;i++){var ex=new Error("Test error");var loggingEvent=new log4javascript.LoggingEvent(t.logger,new Date(),log4javascript.Level.INFO,[arrayOfTestItems[i]],null);t.log("Formatting",arrayOfTestItems[i],result);var result=layout.format(loggingEvent);loggingEvent.exception=ex;t.log("Formatting with exception",arrayOfTestItems[i],result);result=layout.format(loggingEvent);}};xn.test.enableTestDebug=true;xn.test.enable_log4javascript=false;xn.test.suite("log4javascript tests",function(s){log4javascript.logLog.setQuietMode(true);var ArrayAppender=function(layout){if(layout){this.setLayout(layout);}
+this.logMessages=[];};ArrayAppender.prototype=new log4javascript.Appender();ArrayAppender.prototype.layout=new log4javascript.NullLayout();ArrayAppender.prototype.append=function(loggingEvent){var formattedMessage=this.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}
+this.logMessages.push(formattedMessage);};ArrayAppender.prototype.toString=function(){return"[ArrayAppender]";};s.setUp=function(t){t.logger=log4javascript.getLogger("test");t.logger.removeAllAppenders();t.appender=new ArrayAppender();t.logger.addAppender(t.appender);};s.tearDown=function(t){t.logger.removeAppender(t.appender);log4javascript.resetConfiguration();};s.test("Stub script interface test",function(t){try{compareObjectInterface(log4javascript,"log4javascript",log4javascript_stub,"log4javascript_stub");}catch(ex){t.fail(ex);}});s.test("Disable log4javascript test",function(t){log4javascript.setEnabled(false);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,0);log4javascript.setEnabled(true);});s.test("Array.splice test 1",function(t){var a=["Marlon","Ashley","Darius","Lloyd"];var deletedItems=a.splice(1,2);t.assertEquals(a.join(","),"Marlon,Lloyd");t.assertEquals(deletedItems.join(","),"Ashley,Darius");});s.test("Array.splice test 2",function(t){var a=["Marlon","Ashley","Darius","Lloyd"];var deletedItems=a.splice(1,1,"Malky","Jay");t.assertEquals(a.join(","),"Marlon,Malky,Jay,Darius,Lloyd");t.assertEquals(deletedItems.join(","),"Ashley");});s.test("array_remove test",function(t){var array_remove=log4javascript.evalInScope("array_remove");var a=["Marlon","Ashley","Darius"];array_remove(a,"Darius");t.assertEquals(a.join(","),"Marlon,Ashley");});s.test("array_remove with empty array test",function(t){var array_remove=log4javascript.evalInScope("array_remove");var a=[];array_remove(a,"Darius");t.assertEquals(a.join(","),"");});s.test("Logger logging test",function(t){t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,1);});s.test("Logger levels test",function(t){var originalLevel=t.logger.getEffectiveLevel();t.logger.setLevel(log4javascript.Level.INFO);t.logger.debug("TEST");t.logger.setLevel(originalLevel);t.assertEquals(t.appender.logMessages.length,0);});s.test("Logger getEffectiveLevel inheritance test 1",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");parentLogger.setLevel(log4javascript.Level.ERROR);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.ERROR);});s.test("Logger getEffectiveLevel inheritance test 2",function(t){var grandParentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2.test3");grandParentLogger.setLevel(log4javascript.Level.ERROR);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.ERROR);});s.test("Logger getEffectiveLevel inheritance test 3",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");parentLogger.setLevel(log4javascript.Level.ERROR);childLogger.setLevel(log4javascript.Level.INFO);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.INFO);});s.test("Logger getEffectiveLevel root inheritance test",function(t){var rootLogger=log4javascript.getRootLogger();var childLogger=log4javascript.getLogger("test1.test2.test3");rootLogger.setLevel(log4javascript.Level.WARN);t.assertEquals(childLogger.getEffectiveLevel(),log4javascript.Level.WARN);});s.test("Logger null level test",function(t){t.logger.setLevel(null);t.assertEquals(t.logger.getEffectiveLevel(),log4javascript.Level.DEBUG);});s.test("Logger appender additivity test 1",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");t.assertEquals(parentLoggerAppender.logMessages.length,2);t.assertEquals(childLoggerAppender.logMessages.length,1);});s.test("Logger appender additivity test 2",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);childLogger.setAdditivity(false);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");t.assertEquals(parentLoggerAppender.logMessages.length,1);t.assertEquals(childLoggerAppender.logMessages.length,1);});s.test("Logger appender additivity test 3",function(t){var parentLogger=log4javascript.getLogger("test1");var childLogger=log4javascript.getLogger("test1.test2");var parentLoggerAppender=new ArrayAppender();var childLoggerAppender=new ArrayAppender();parentLogger.addAppender(parentLoggerAppender);childLogger.addAppender(childLoggerAppender);childLogger.setAdditivity(false);parentLogger.info("Parent logger test message");childLogger.info("Child logger test message");childLogger.setAdditivity(true);childLogger.info("Child logger test message 2");t.assertEquals(parentLoggerAppender.logMessages.length,2);t.assertEquals(childLoggerAppender.logMessages.length,2);});s.test("Appender threshold test",function(t){t.appender.setThreshold(log4javascript.Level.INFO);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,0);});s.test("Basic appender / layout test",function(t){t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST");});s.test("Appender uniqueness within logger test",function(t){t.logger.addAppender(t.appender);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages.length,1);});s.test("Logger remove appender test",function(t){t.logger.debug("TEST");t.logger.removeAppender(t.appender);t.logger.debug("TEST AGAIN");t.assertEquals(t.appender.logMessages.length,1);});s.test("",function(t){t.logger.debug("TEST");t.logger.removeAppender(t.appender);t.logger.debug("TEST AGAIN");t.assertEquals(t.appender.logMessages.length,1);});s.test("SimpleLayout format test",function(t){var layout=new log4javascript.SimpleLayout();testLayoutWithVariables(layout,t);});s.test("SimpleLayout test",function(t){t.appender.setLayout(new log4javascript.SimpleLayout());t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"DEBUG - TEST");});s.test("NullLayout format test",function(t){var layout=new log4javascript.NullLayout();testLayoutWithVariables(layout,t);});s.test("NullLayout test",function(t){t.appender.setLayout(new log4javascript.NullLayout());t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST");});s.test("XmlLayout format test",function(t){var layout=new log4javascript.XmlLayout();testLayoutWithVariables(layout,t);});s.test("XmlLayout test",function(t){t.appender.setLayout(new log4javascript.XmlLayout());t.logger.debug("TEST");t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<\/log4javascript:event>\s*$/,t.appender.logMessages[0]);});s.test("XmlLayout with exception test",function(t){t.appender.setLayout(new log4javascript.XmlLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<log4javascript:exception>\s*<!\[CDATA\[.*\]\]><\/log4javascript:exception>\s*<\/log4javascript:event>\s*$/,t.appender.logMessages[0]);});var setUpXmlLayoutMillisecondsTest=function(t){t.date=new Date();t.timeInMilliseconds=t.date.getTime();t.timeInSeconds=Math.floor(t.timeInMilliseconds/1000);t.milliseconds=t.date.getMilliseconds();t.loggingEvent=new log4javascript.LoggingEvent(t.logger,t.date,log4javascript.Level.DEBUG,["TEST"],null);t.layout=new log4javascript.XmlLayout();}
+s.test("XmlLayout seconds/milliseconds test 1",function(t){setUpXmlLayoutMillisecondsTest(t);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInMilliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,t.layout.format(t.loggingEvent));});s.test("XmlLayout seconds/milliseconds test 2",function(t){setUpXmlLayoutMillisecondsTest(t);log4javascript.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);log4javascript.setTimeStampsInMilliseconds(true);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInSeconds+'" milliseconds="'+t.milliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,formatted);});s.test("XmlLayout seconds/milliseconds test 3",function(t){setUpXmlLayoutMillisecondsTest(t);t.layout.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);var regex=new RegExp('^<log4javascript:event logger="test" timestamp="'+t.timeInSeconds+'" milliseconds="'+t.milliseconds+'" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');t.assertRegexMatches(regex,formatted);});s.test("escapeNewLines test",function(t){var escapeNewLines=log4javascript.evalInScope("escapeNewLines");var str="1\r2\n3\n4\r\n5\r6\r\n7";t.assertEquals(escapeNewLines(str),"1\\r\\n2\\r\\n3\\r\\n4\\r\\n5\\r\\n6\\r\\n7");});s.test("JsonLayout format test",function(t){var layout=new log4javascript.JsonLayout();testLayoutWithVariables(layout,t);});s.test("JsonLayout test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST");t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST"}$/,t.appender.logMessages[0]);});s.test("JsonLayout JSON validity test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST");eval("var o = "+t.appender.logMessages[0]);t.assertEquals(o.message,"TEST");});s.test("JsonLayout with number type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug(15);t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":15}$/,t.appender.logMessages[0]);});s.test("JsonLayout with object type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug({});t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"\[object Object\]"}$/,t.appender.logMessages[0]);});s.test("JsonLayout with boolean type message test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug(false);t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":false}$/,t.appender.logMessages[0]);});s.test("JsonLayout with quote test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TE\"S\"T");t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TE\\"S\\"T"}$/,t.appender.logMessages[0]);});s.test("JsonLayout with exception test",function(t){t.appender.setLayout(new log4javascript.JsonLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST","exception":.*}$/,t.appender.logMessages[0]);});var setUpJsonLayoutMillisecondsTest=function(t){t.date=new Date();t.timeInMilliseconds=t.date.getTime();t.timeInSeconds=Math.floor(t.timeInMilliseconds/1000);t.milliseconds=t.date.getMilliseconds();t.loggingEvent=new log4javascript.LoggingEvent(t.logger,t.date,log4javascript.Level.DEBUG,["TEST"],null);t.layout=new log4javascript.JsonLayout();};s.test("JsonLayout seconds/milliseconds test 1",function(t){setUpJsonLayoutMillisecondsTest(t);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInMilliseconds+',"level":"DEBUG","url":".*","message":"TEST"}$');t.assertRegexMatches(regex,t.layout.format(t.loggingEvent));});s.test("JsonLayout seconds/milliseconds test 2",function(t){setUpJsonLayoutMillisecondsTest(t);log4javascript.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);log4javascript.setTimeStampsInMilliseconds(true);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInSeconds+',"level":"DEBUG","url":".*","message":"TEST","milliseconds":'+t.milliseconds+'}$');t.assertRegexMatches(regex,formatted);});s.test("JsonLayout seconds/milliseconds test 3",function(t){setUpJsonLayoutMillisecondsTest(t);t.layout.setTimeStampsInMilliseconds(false);var formatted=t.layout.format(t.loggingEvent);var regex=new RegExp('^{"logger":"test","timestamp":'+t.timeInSeconds+',"level":"DEBUG","url":".*","message":"TEST","milliseconds":'+t.milliseconds+'}$');t.assertRegexMatches(regex,formatted);});s.test("HttpPostDataLayout format test",function(t){var layout=new log4javascript.HttpPostDataLayout();testLayoutWithVariables(layout,t);});s.test("HttpPostDataLayout test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST");t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST$/,t.appender.logMessages[0]);});s.test("HttpPostDataLayout URL encoding test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST +\"1\"");t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST%20%2B%221%22$/,t.appender.logMessages[0]);});s.test("HttpPostDataLayout with exception test",function(t){t.appender.setLayout(new log4javascript.HttpPostDataLayout());t.logger.debug("TEST",new Error("Test error"));t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST&exception=.*$/,t.appender.logMessages[0]);});(function(){var formatObjectExpansion=log4javascript.evalInScope("formatObjectExpansion");var newLine=log4javascript.evalInScope("newLine");var arr=[null,undefined,1.2,"A string",[1,"test"],{a:{b:1}}];s.test("Basic formatObjectExpansion array test (depth: 1)",function(t){t.assertEquals(formatObjectExpansion(arr,1),"["+newLine+" null,"+newLine+" undefined,"+newLine+" 1.2,"+newLine+" A string,"+newLine+" 1,test,"+newLine+" [object Object]"+newLine+"]");});s.test("Basic formatObjectExpansion array test (depth: 2)",function(t){t.assertEquals(formatObjectExpansion(arr,2),"["+newLine+" null,"+newLine+" undefined,"+newLine+" 1.2,"+newLine+" A string,"+newLine+" ["+newLine+" 1,"+newLine+" test"+newLine+" ],"+newLine+" {"+newLine+" a: [object Object]"+newLine+" }"+newLine+"]");});s.test("formatObjectExpansion simple object test",function(t){var obj={STRING:"A string"};t.assertEquals(formatObjectExpansion(obj,1),"{"+newLine+" STRING: A string"+newLine+"}");});s.test("formatObjectExpansion simple circular object test",function(t){var obj={};obj.a=obj;t.assertEquals(formatObjectExpansion(obj,2),"{"+newLine+" a: [object Object] [already expanded]"+newLine+"}");});})();var getSampleDate=function(){var date=new Date();date.setFullYear(2006);date.setMonth(7);date.setDate(30);date.setHours(15);date.setMinutes(38);date.setSeconds(45);return date;};s.test("String.replace test",function(t){t.assertEquals("Hello world".replace(/o/g,"Z"),"HellZ wZrld");});s.test("PatternLayout format test",function(t){var layout=new log4javascript.PatternLayout();testLayoutWithVariables(layout,t);});s.test("PatternLayout dates test",function(t){var layout=new log4javascript.PatternLayout("%d %d{DATE} %d{HH:ss}");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertRegexMatches(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} \d{2} [A-Z][a-z]{2} \d{4} \d{2}:\d{2}:\d{2},\d{3} \d{2}:\d{2}$/,t.appender.logMessages[0]);});s.test("PatternLayout modifiers test",function(t){var layout=new log4javascript.PatternLayout("%m|%3m|%-3m|%6m|%-6m|%.2m|%1.2m|%6.8m|%-1.2m|%-6.8m|");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertEquals(t.appender.logMessages[0],"TEST|TEST|TEST| TEST|TEST |ST|ST| TEST|ST|TEST |");});s.test("PatternLayout conversion characters test",function(t){var layout=new log4javascript.PatternLayout("%c %n %p %r literal %%");t.appender.setLayout(layout);t.logger.debug("TEST");t.assertRegexMatches(/^test \s+ DEBUG \d+ literal %$/,t.appender.logMessages[0]);});s.test("PatternLayout message test",function(t){var layout=new log4javascript.PatternLayout("%m{1} %m{2}");t.appender.setLayout(layout);var testObj={strikers:{quick:"Marlon"}};t.logger.debug(testObj);t.assertEquals("{\r\n strikers: [object Object]\r\n} {\r\n\ strikers: {\r\n quick: Marlon\r\n }\r\n}",t.appender.logMessages[0]);});});
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_production_uncompressed.js b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_production_uncompressed.js
new file mode 100644
index 0000000..e64990f
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_production_uncompressed.js
@@ -0,0 +1,728 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+function array_contains(arr, val) {
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i] == val) {
+ return true;
+ }
+ }
+ return false;
+}
+
+// Recursively checks that obj2's interface contains all of obj1's
+// interface (functions and objects only)
+function compareObjectInterface(obj1, obj1_name, obj2, obj2_name, namePrefix) {
+ if (!namePrefix) {
+ namePrefix = "";
+ }
+ var obj1PropertyNames = new Array();
+ for (var i in obj1) {
+ if (i != "prototype" && i != "arguments") {
+ obj1PropertyNames.push(i);
+ }
+ }
+ if (obj1 && obj1.prototype && !array_contains(obj1PropertyNames, "prototype")) {
+ //obj1PropertyNames.push("prototype");
+ }
+ for (var j = 0; j < obj1PropertyNames.length; j++) {
+ var propertyName = obj1PropertyNames[j];
+ if ((typeof obj1[propertyName] == "function" || typeof obj1[propertyName] == "object") && !(obj1[propertyName] instanceof Array)) {
+ var propertyFullyQualifiedName = (namePrefix == "") ? propertyName : namePrefix + "." + propertyName;
+ try {
+ if (typeof obj2[propertyName] == "undefined") {
+ throw new Error(obj2_name + " does not contain " + propertyFullyQualifiedName + " in " + obj1_name);
+ } else if (typeof obj2[propertyName] != typeof obj1[propertyName]){
+ throw new Error(obj2_name + "'s " + propertyFullyQualifiedName + " is of the wrong type: " + typeof obj2[propertyName] + " when it is type " + typeof obj1[propertyName] + " in " + obj1_name);
+ } else if (obj1[propertyName] != Function.prototype.apply) {
+ if (!compareObjectInterface(obj1[propertyName], obj1_name, obj2[propertyName], obj2_name, propertyFullyQualifiedName)) {
+ throw new Error("Interfaces don't match");
+ }
+ }
+ } catch(ex) {
+ throw new Error("Exception while checking property name " + propertyFullyQualifiedName + " in " + obj2_name + ": " + ex.message);
+ }
+ }
+ }
+ return true;
+};
+
+// Simply tests a layout for exceptions when formatting
+var testLayoutWithVariables = function(layout, t) {
+ var emptyObject = {};
+ var emptyArray = [];
+ var emptyString = "";
+ var localUndefined = emptyArray[0];
+ var oneLevelObject = {
+ "name": "One-level object"
+ };
+ var twoLevelObject = {
+ "name": "Two-level object",
+ "data": oneLevelObject
+ };
+ var threeLevelObject = {
+ "name": "Three-level object",
+ "data": twoLevelObject
+ };
+ var anArray = [
+ 3,
+ "stuff",
+ true,
+ false,
+ 0,
+ null,
+ localUndefined,
+ 3.14,
+ function(p) { return "I'm a function"; },
+ [1, "things"]
+ ];
+ var arrayOfTestItems = [emptyObject, emptyString, emptyString, localUndefined, oneLevelObject,
+ twoLevelObject, threeLevelObject, anArray];
+
+ t.log("Testing layout " + layout)
+ for (var i = 0; i < arrayOfTestItems.length; i++) {
+ var ex = new Error("Test error");
+ var loggingEvent = new log4javascript.LoggingEvent(t.logger, new Date(), log4javascript.Level.INFO,
+ [arrayOfTestItems[i]], null);
+ t.log("Formatting", arrayOfTestItems[i], result);
+ var result = layout.format(loggingEvent);
+ // Now try with an exception
+ loggingEvent.exception = ex;
+ t.log("Formatting with exception", arrayOfTestItems[i], result);
+ result = layout.format(loggingEvent);
+ }
+};
+
+xn.test.enableTestDebug = true;
+xn.test.enable_log4javascript = false;
+
+xn.test.suite("log4javascript tests", function(s) {
+ log4javascript.logLog.setQuietMode(true);
+ var ArrayAppender = function(layout) {
+ if (layout) {
+ this.setLayout(layout);
+ }
+ this.logMessages = [];
+ };
+
+ ArrayAppender.prototype = new log4javascript.Appender();
+
+ ArrayAppender.prototype.layout = new log4javascript.NullLayout();
+
+ ArrayAppender.prototype.append = function(loggingEvent) {
+ var formattedMessage = this.getLayout().format(loggingEvent);
+ if (this.getLayout().ignoresThrowable()) {
+ formattedMessage += loggingEvent.getThrowableStrRep();
+ }
+ this.logMessages.push(formattedMessage);
+ };
+
+ ArrayAppender.prototype.toString = function() {
+ return "[ArrayAppender]";
+ };
+
+ s.setUp = function(t) {
+ t.logger = log4javascript.getLogger("test");
+ t.logger.removeAllAppenders();
+ t.appender = new ArrayAppender();
+ t.logger.addAppender(t.appender);
+ };
+
+ s.tearDown = function(t) {
+ t.logger.removeAppender(t.appender);
+ log4javascript.resetConfiguration();
+ };
+
+ s.test("Stub script interface test", function(t) {
+ try {
+ compareObjectInterface(log4javascript, "log4javascript", log4javascript_stub, "log4javascript_stub");
+ } catch (ex) {
+ t.fail(ex);
+ }
+ });
+
+ s.test("Disable log4javascript test", function(t) {
+ log4javascript.setEnabled(false);
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages.length, 0);
+ log4javascript.setEnabled(true);
+ });
+
+ s.test("Array.splice test 1", function(t) {
+ var a = ["Marlon", "Ashley", "Darius", "Lloyd"];
+ var deletedItems = a.splice(1, 2);
+ t.assertEquals(a.join(","), "Marlon,Lloyd");
+ t.assertEquals(deletedItems.join(","), "Ashley,Darius");
+ });
+
+ s.test("Array.splice test 2", function(t) {
+ var a = ["Marlon", "Ashley", "Darius", "Lloyd"];
+ var deletedItems = a.splice(1, 1, "Malky", "Jay");
+ t.assertEquals(a.join(","), "Marlon,Malky,Jay,Darius,Lloyd");
+ t.assertEquals(deletedItems.join(","), "Ashley");
+ });
+
+ s.test("array_remove test", function(t) {
+ var array_remove = log4javascript.evalInScope("array_remove");
+ var a = ["Marlon", "Ashley", "Darius"];
+ array_remove(a, "Darius");
+ t.assertEquals(a.join(","), "Marlon,Ashley");
+ });
+
+ s.test("array_remove with empty array test", function(t) {
+ var array_remove = log4javascript.evalInScope("array_remove");
+ var a = [];
+ array_remove(a, "Darius");
+ t.assertEquals(a.join(","), "");
+ });
+
+ s.test("Logger logging test", function(t) {
+ // Should log since the default level for loggers is DEBUG and
+ // the default threshold for appenders is ALL
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages.length, 1);
+ });
+
+ s.test("Logger levels test", function(t) {
+ var originalLevel = t.logger.getEffectiveLevel();
+ t.logger.setLevel(log4javascript.Level.INFO);
+ t.logger.debug("TEST");
+ t.logger.setLevel(originalLevel);
+ t.assertEquals(t.appender.logMessages.length, 0);
+ });
+
+ s.test("Logger getEffectiveLevel inheritance test 1", function(t) {
+ var parentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2");
+ parentLogger.setLevel(log4javascript.Level.ERROR);
+ t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.ERROR);
+ });
+
+ s.test("Logger getEffectiveLevel inheritance test 2", function(t) {
+ var grandParentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2.test3");
+ grandParentLogger.setLevel(log4javascript.Level.ERROR);
+ t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.ERROR);
+ });
+
+ s.test("Logger getEffectiveLevel inheritance test 3", function(t) {
+ var parentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2");
+ parentLogger.setLevel(log4javascript.Level.ERROR);
+ childLogger.setLevel(log4javascript.Level.INFO);
+ t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.INFO);
+ });
+
+ s.test("Logger getEffectiveLevel root inheritance test", function(t) {
+ var rootLogger = log4javascript.getRootLogger();
+ var childLogger = log4javascript.getLogger("test1.test2.test3");
+ rootLogger.setLevel(log4javascript.Level.WARN);
+ t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.WARN);
+ });
+
+ s.test("Logger null level test", function(t) {
+ t.logger.setLevel(null);
+ // Should default to root logger level, which is DEBUG
+ t.assertEquals(t.logger.getEffectiveLevel(), log4javascript.Level.DEBUG);
+ });
+
+ s.test("Logger appender additivity test 1", function(t) {
+ var parentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2");
+ var parentLoggerAppender = new ArrayAppender();
+ var childLoggerAppender = new ArrayAppender();
+
+ parentLogger.addAppender(parentLoggerAppender);
+ childLogger.addAppender(childLoggerAppender);
+
+ parentLogger.info("Parent logger test message");
+ childLogger.info("Child logger test message");
+
+ t.assertEquals(parentLoggerAppender.logMessages.length, 2);
+ t.assertEquals(childLoggerAppender.logMessages.length, 1);
+ });
+
+ s.test("Logger appender additivity test 2", function(t) {
+ var parentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2");
+ var parentLoggerAppender = new ArrayAppender();
+ var childLoggerAppender = new ArrayAppender();
+
+ parentLogger.addAppender(parentLoggerAppender);
+ childLogger.addAppender(childLoggerAppender);
+
+ childLogger.setAdditivity(false);
+
+ parentLogger.info("Parent logger test message");
+ childLogger.info("Child logger test message");
+
+ t.assertEquals(parentLoggerAppender.logMessages.length, 1);
+ t.assertEquals(childLoggerAppender.logMessages.length, 1);
+ });
+
+ s.test("Logger appender additivity test 3", function(t) {
+ var parentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2");
+ var parentLoggerAppender = new ArrayAppender();
+ var childLoggerAppender = new ArrayAppender();
+
+ parentLogger.addAppender(parentLoggerAppender);
+ childLogger.addAppender(childLoggerAppender);
+
+ childLogger.setAdditivity(false);
+
+ parentLogger.info("Parent logger test message");
+ childLogger.info("Child logger test message");
+
+ childLogger.setAdditivity(true);
+
+ childLogger.info("Child logger test message 2");
+
+ t.assertEquals(parentLoggerAppender.logMessages.length, 2);
+ t.assertEquals(childLoggerAppender.logMessages.length, 2);
+ });
+
+ s.test("Appender threshold test", function(t) {
+ t.appender.setThreshold(log4javascript.Level.INFO);
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages.length, 0);
+ });
+
+ s.test("Basic appender / layout test", function(t) {
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages[0], "TEST");
+ });
+
+ s.test("Appender uniqueness within logger test", function(t) {
+ // Add the same appender to the logger for a second time
+ t.logger.addAppender(t.appender);
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages.length, 1);
+ });
+
+ s.test("Logger remove appender test", function(t) {
+ t.logger.debug("TEST");
+ t.logger.removeAppender(t.appender);
+ t.logger.debug("TEST AGAIN");
+ t.assertEquals(t.appender.logMessages.length, 1);
+ });
+
+ s.test("", function(t) {
+ t.logger.debug("TEST");
+ t.logger.removeAppender(t.appender);
+ t.logger.debug("TEST AGAIN");
+ t.assertEquals(t.appender.logMessages.length, 1);
+ });
+ s.test("SimpleLayout format test", function(t) {
+ var layout = new log4javascript.SimpleLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("SimpleLayout test", function(t) {
+ t.appender.setLayout(new log4javascript.SimpleLayout());
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages[0], "DEBUG - TEST");
+ });
+ s.test("NullLayout format test", function(t) {
+ var layout = new log4javascript.NullLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("NullLayout test", function(t) {
+ t.appender.setLayout(new log4javascript.NullLayout());
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages[0], "TEST");
+ });
+ s.test("XmlLayout format test", function(t) {
+ var layout = new log4javascript.XmlLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("XmlLayout test", function(t) {
+ t.appender.setLayout(new log4javascript.XmlLayout());
+ t.logger.debug("TEST");
+ t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<\/log4javascript:event>\s*$/, t.appender.logMessages[0]);
+ });
+
+ s.test("XmlLayout with exception test", function(t) {
+ t.appender.setLayout(new log4javascript.XmlLayout());
+ t.logger.debug("TEST", new Error("Test error"));
+ t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<log4javascript:exception>\s*<!\[CDATA\[.*\]\]><\/log4javascript:exception>\s*<\/log4javascript:event>\s*$/, t.appender.logMessages[0]);
+ });
+
+ var setUpXmlLayoutMillisecondsTest = function(t) {
+ t.date = new Date();
+ t.timeInMilliseconds = t.date.getTime();
+ t.timeInSeconds = Math.floor(t.timeInMilliseconds / 1000);
+ t.milliseconds = t.date.getMilliseconds();
+
+ t.loggingEvent = new log4javascript.LoggingEvent(t.logger, t.date, log4javascript.Level.DEBUG, ["TEST"], null);
+ t.layout = new log4javascript.XmlLayout();
+ }
+
+ s.test("XmlLayout seconds/milliseconds test 1", function(t) {
+ setUpXmlLayoutMillisecondsTest(t);
+
+ // Test default (i.e. timestamps in milliseconds) first
+ var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInMilliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');
+ t.assertRegexMatches(regex, t.layout.format(t.loggingEvent));
+ });
+
+ s.test("XmlLayout seconds/milliseconds test 2", function(t) {
+ setUpXmlLayoutMillisecondsTest(t);
+
+ // Change the global setting
+ log4javascript.setTimeStampsInMilliseconds(false);
+ var formatted = t.layout.format(t.loggingEvent);
+ log4javascript.setTimeStampsInMilliseconds(true);
+ var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInSeconds + '" milliseconds="' + t.milliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');
+ t.assertRegexMatches(regex, formatted);
+ });
+
+ s.test("XmlLayout seconds/milliseconds test 3", function(t) {
+ setUpXmlLayoutMillisecondsTest(t);
+
+ // Change the layout setting
+ t.layout.setTimeStampsInMilliseconds(false);
+ var formatted = t.layout.format(t.loggingEvent);
+ var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInSeconds + '" milliseconds="' + t.milliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');
+ t.assertRegexMatches(regex, formatted);
+ });
+ s.test("escapeNewLines test", function(t) {
+ var escapeNewLines = log4javascript.evalInScope("escapeNewLines");
+ var str = "1\r2\n3\n4\r\n5\r6\r\n7";
+ t.assertEquals(escapeNewLines(str), "1\\r\\n2\\r\\n3\\r\\n4\\r\\n5\\r\\n6\\r\\n7");
+ });
+
+ s.test("JsonLayout format test", function(t) {
+ var layout = new log4javascript.JsonLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("JsonLayout test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug("TEST");
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST"}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("JsonLayout JSON validity test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug("TEST");
+ eval("var o = " + t.appender.logMessages[0]);
+ t.assertEquals(o.message, "TEST");
+ });
+
+ s.test("JsonLayout with number type message test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug(15);
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":15}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("JsonLayout with object type message test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug({});
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"\[object Object\]"}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("JsonLayout with boolean type message test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug(false);
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":false}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("JsonLayout with quote test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug("TE\"S\"T");
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TE\\"S\\"T"}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("JsonLayout with exception test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug("TEST", new Error("Test error"));
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST","exception":.*}$/, t.appender.logMessages[0]);
+ });
+
+ var setUpJsonLayoutMillisecondsTest = function(t) {
+ t.date = new Date();
+ t.timeInMilliseconds = t.date.getTime();
+ t.timeInSeconds = Math.floor(t.timeInMilliseconds / 1000);
+ t.milliseconds = t.date.getMilliseconds();
+
+ t.loggingEvent = new log4javascript.LoggingEvent(t.logger, t.date, log4javascript.Level.DEBUG, ["TEST"], null);
+ t.layout = new log4javascript.JsonLayout();
+ };
+
+ s.test("JsonLayout seconds/milliseconds test 1", function(t) {
+ setUpJsonLayoutMillisecondsTest(t);
+
+ // Test default (i.e. timestamps in milliseconds) first
+ var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInMilliseconds + ',"level":"DEBUG","url":".*","message":"TEST"}$');
+ t.assertRegexMatches(regex, t.layout.format(t.loggingEvent));
+ });
+
+ s.test("JsonLayout seconds/milliseconds test 2", function(t) {
+ setUpJsonLayoutMillisecondsTest(t);
+
+ // Change the global setting
+ log4javascript.setTimeStampsInMilliseconds(false);
+ var formatted = t.layout.format(t.loggingEvent);
+ log4javascript.setTimeStampsInMilliseconds(true);
+ var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInSeconds + ',"level":"DEBUG","url":".*","message":"TEST","milliseconds":' + t.milliseconds + '}$');
+ t.assertRegexMatches(regex, formatted);
+ });
+
+ s.test("JsonLayout seconds/milliseconds test 3", function(t) {
+ setUpJsonLayoutMillisecondsTest(t);
+
+ // Change the layout setting
+ t.layout.setTimeStampsInMilliseconds(false);
+ var formatted = t.layout.format(t.loggingEvent);
+ var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInSeconds + ',"level":"DEBUG","url":".*","message":"TEST","milliseconds":' + t.milliseconds + '}$');
+ t.assertRegexMatches(regex, formatted);
+ });
+ s.test("HttpPostDataLayout format test", function(t) {
+ var layout = new log4javascript.HttpPostDataLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("HttpPostDataLayout test", function(t) {
+ t.appender.setLayout(new log4javascript.HttpPostDataLayout());
+ t.logger.debug("TEST");
+ t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST$/, t.appender.logMessages[0]);
+ });
+
+ s.test("HttpPostDataLayout URL encoding test", function(t) {
+ t.appender.setLayout(new log4javascript.HttpPostDataLayout());
+ t.logger.debug("TEST +\"1\"");
+ t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST%20%2B%221%22$/, t.appender.logMessages[0]);
+ });
+
+ s.test("HttpPostDataLayout with exception test", function(t) {
+ t.appender.setLayout(new log4javascript.HttpPostDataLayout());
+ t.logger.debug("TEST", new Error("Test error"));
+ t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST&exception=.*$/, t.appender.logMessages[0]);
+ });
+
+ (function() {
+ var formatObjectExpansion = log4javascript.evalInScope("formatObjectExpansion");
+ var newLine = log4javascript.evalInScope("newLine");
+ var arr = [
+ null,
+ undefined,
+ 1.2,
+ "A string",
+ [1, "test"],
+ {
+ a: {
+ b: 1
+ }
+ }
+ ];
+
+ s.test("Basic formatObjectExpansion array test (depth: 1)", function(t) {
+ t.assertEquals(formatObjectExpansion(arr, 1),
+ "[" + newLine +
+ " null," + newLine +
+ " undefined," + newLine +
+ " 1.2," + newLine +
+ " A string," + newLine +
+ " 1,test," + newLine +
+ " [object Object]" + newLine +
+ "]"
+ );
+ });
+
+ s.test("Basic formatObjectExpansion array test (depth: 2)", function(t) {
+ t.assertEquals(formatObjectExpansion(arr, 2),
+ "[" + newLine +
+ " null," + newLine +
+ " undefined," + newLine +
+ " 1.2," + newLine +
+ " A string," + newLine +
+ " [" + newLine +
+ " 1," + newLine +
+ " test" + newLine +
+ " ]," + newLine +
+ " {" + newLine +
+ " a: [object Object]" + newLine +
+ " }" + newLine +
+ "]"
+ );
+ });
+
+ s.test("formatObjectExpansion simple object test", function(t) {
+ var obj = {
+ STRING: "A string"
+ };
+ t.assertEquals(formatObjectExpansion(obj, 1),
+ "{" + newLine +
+ " STRING: A string" + newLine +
+ "}"
+ );
+ });
+
+ s.test("formatObjectExpansion simple circular object test", function(t) {
+ var obj = {};
+ obj.a = obj;
+
+ t.assertEquals(formatObjectExpansion(obj, 2),
+ "{" + newLine +
+ " a: [object Object] [already expanded]" + newLine +
+ "}"
+ );
+ });
+ })(); /* ---------------------------------------------------------- */
+
+ var getSampleDate = function() {
+ var date = new Date();
+ date.setFullYear(2006);
+ date.setMonth(7);
+ date.setDate(30);
+ date.setHours(15);
+ date.setMinutes(38);
+ date.setSeconds(45);
+ return date;
+ };
+
+ /* ---------------------------------------------------------- */
+
+ s.test("String.replace test", function(t) {
+ t.assertEquals("Hello world".replace(/o/g, "Z"), "HellZ wZrld");
+ });
+
+ s.test("PatternLayout format test", function(t) {
+ var layout = new log4javascript.PatternLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("PatternLayout dates test", function(t) {
+ var layout = new log4javascript.PatternLayout("%d %d{DATE} %d{HH:ss}");
+ t.appender.setLayout(layout);
+ t.logger.debug("TEST");
+ t.assertRegexMatches(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} \d{2} [A-Z][a-z]{2} \d{4} \d{2}:\d{2}:\d{2},\d{3} \d{2}:\d{2}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("PatternLayout modifiers test", function(t) {
+ var layout = new log4javascript.PatternLayout("%m|%3m|%-3m|%6m|%-6m|%.2m|%1.2m|%6.8m|%-1.2m|%-6.8m|");
+ t.appender.setLayout(layout);
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages[0], "TEST|TEST|TEST| TEST|TEST |ST|ST| TEST|ST|TEST |");
+ });
+
+ s.test("PatternLayout conversion characters test", function(t) {
+ var layout = new log4javascript.PatternLayout("%c %n %p %r literal %%");
+ t.appender.setLayout(layout);
+ t.logger.debug("TEST");
+ t.assertRegexMatches(/^test \s+ DEBUG \d+ literal %$/, t.appender.logMessages[0]);
+ });
+
+ s.test("PatternLayout message test", function(t) {
+ var layout = new log4javascript.PatternLayout("%m{1} %m{2}");
+ t.appender.setLayout(layout);
+ var testObj = {
+ strikers: {
+ quick: "Marlon"
+ }
+ };
+ t.logger.debug(testObj);
+ t.assertEquals("{\r\n strikers: [object Object]\r\n} {\r\n\ strikers: {\r\n quick: Marlon\r\n }\r\n}", t.appender.logMessages[0]);
+ });
+/*
+ s.test("AjaxAppender JsonLayout single message test", function(t) {
+ t.async(10000);
+ // Create and add an Ajax appender
+ var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");
+ ajaxAppender.setLayout(new log4javascript.JsonLayout());
+ ajaxAppender.setRequestSuccessCallback(
+ function(xmlHttp) {
+ // Response comes back as JSON array of messages logged
+ var jsonResponse = xmlHttp.responseText;
+ var arr = eval(jsonResponse);
+ t.assertEquals(arr.length, 1);
+ t.assertEquals(arr[0], "TEST");
+ t.succeed();
+ }
+ );
+ ajaxAppender.setFailCallback(
+ function(msg) {
+ t.fail(msg);
+ ajaxErrorMessage = msg;
+ }
+ );
+ t.logger.addAppender(ajaxAppender);
+ t.logger.debug("TEST");
+ });
+
+ s.test("AjaxAppender JsonLayout batched messages test", function(t) {
+ t.async(10000);
+ var message1 = "TEST 1";
+ var message2 = "String with \"lots of 'quotes'\" + plusses in";
+ var message3 = "A non-threatening string";
+ // Create and add an Ajax appender
+ var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");
+ ajaxAppender.setLayout(new log4javascript.JsonLayout());
+ ajaxAppender.setBatchSize(3);
+ ajaxAppender.setRequestSuccessCallback(
+ function(xmlHttp) {
+ // Response comes back as JSON array of messages logged
+ var jsonResponse = xmlHttp.responseText;
+ var arr = eval(jsonResponse);
+ t.assertEquals(arr.length, 3);
+ t.assertEquals(arr[0], message1);
+ t.assertEquals(arr[1], message2);
+ t.assertEquals(arr[2], message3);
+ t.succeed();
+ }
+ );
+ ajaxAppender.setFailCallback(
+ function(msg) {
+ t.fail(msg);
+ ajaxErrorMessage = msg;
+ }
+ );
+ t.logger.addAppender(ajaxAppender);
+ t.logger.debug(message1);
+ t.logger.info(message2);
+ t.logger.warn(message3);
+ });
+
+ s.test("AjaxAppender HttpPostDataLayout single message test", function(t) {
+ t.async(10000);
+ // Create and add an Ajax appender
+ var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");
+ var testMessage = "TEST +\"1\"";
+ ajaxAppender.setLayout(new log4javascript.HttpPostDataLayout());
+ ajaxAppender.setRequestSuccessCallback(
+ function(xmlHttp) {
+ // Response comes back as JSON array of messages logged
+ var jsonResponse = xmlHttp.responseText;
+ var arr = eval(jsonResponse);
+ t.assertEquals(arr.length, 1);
+ t.assertEquals(arr[0], testMessage);
+ t.succeed();
+ }
+ );
+ ajaxAppender.setFailCallback(
+ function(msg) {
+ t.fail(msg);
+ ajaxErrorMessage = msg;
+ }
+ );
+ t.logger.addAppender(ajaxAppender);
+ t.logger.debug(testMessage);
+ });
+*/
+});
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_uncompressed.js b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_uncompressed.js
new file mode 100644
index 0000000..55bd2ca
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/js/tests/log4javascript_uncompressed.js
@@ -0,0 +1,862 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+function array_contains(arr, val) {
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i] == val) {
+ return true;
+ }
+ }
+ return false;
+}
+
+// Recursively checks that obj2's interface contains all of obj1's
+// interface (functions and objects only)
+function compareObjectInterface(obj1, obj1_name, obj2, obj2_name, namePrefix) {
+ if (!namePrefix) {
+ namePrefix = "";
+ }
+ var obj1PropertyNames = new Array();
+ for (var i in obj1) {
+ if (i != "prototype" && i != "arguments") {
+ obj1PropertyNames.push(i);
+ }
+ }
+ if (obj1 && obj1.prototype && !array_contains(obj1PropertyNames, "prototype")) {
+ //obj1PropertyNames.push("prototype");
+ }
+ for (var j = 0; j < obj1PropertyNames.length; j++) {
+ var propertyName = obj1PropertyNames[j];
+ if ((typeof obj1[propertyName] == "function" || typeof obj1[propertyName] == "object") && !(obj1[propertyName] instanceof Array)) {
+ var propertyFullyQualifiedName = (namePrefix == "") ? propertyName : namePrefix + "." + propertyName;
+ try {
+ if (typeof obj2[propertyName] == "undefined") {
+ throw new Error(obj2_name + " does not contain " + propertyFullyQualifiedName + " in " + obj1_name);
+ } else if (typeof obj2[propertyName] != typeof obj1[propertyName]){
+ throw new Error(obj2_name + "'s " + propertyFullyQualifiedName + " is of the wrong type: " + typeof obj2[propertyName] + " when it is type " + typeof obj1[propertyName] + " in " + obj1_name);
+ } else if (obj1[propertyName] != Function.prototype.apply) {
+ if (!compareObjectInterface(obj1[propertyName], obj1_name, obj2[propertyName], obj2_name, propertyFullyQualifiedName)) {
+ throw new Error("Interfaces don't match");
+ }
+ }
+ } catch(ex) {
+ throw new Error("Exception while checking property name " + propertyFullyQualifiedName + " in " + obj2_name + ": " + ex.message);
+ }
+ }
+ }
+ return true;
+};
+
+// Simply tests a layout for exceptions when formatting
+var testLayoutWithVariables = function(layout, t) {
+ var emptyObject = {};
+ var emptyArray = [];
+ var emptyString = "";
+ var localUndefined = emptyArray[0];
+ var oneLevelObject = {
+ "name": "One-level object"
+ };
+ var twoLevelObject = {
+ "name": "Two-level object",
+ "data": oneLevelObject
+ };
+ var threeLevelObject = {
+ "name": "Three-level object",
+ "data": twoLevelObject
+ };
+ var anArray = [
+ 3,
+ "stuff",
+ true,
+ false,
+ 0,
+ null,
+ localUndefined,
+ 3.14,
+ function(p) { return "I'm a function"; },
+ [1, "things"]
+ ];
+ var arrayOfTestItems = [emptyObject, emptyString, emptyString, localUndefined, oneLevelObject,
+ twoLevelObject, threeLevelObject, anArray];
+
+ t.log("Testing layout " + layout)
+ for (var i = 0; i < arrayOfTestItems.length; i++) {
+ var ex = new Error("Test error");
+ var loggingEvent = new log4javascript.LoggingEvent(t.logger, new Date(), log4javascript.Level.INFO,
+ [arrayOfTestItems[i]], null);
+ t.log("Formatting", arrayOfTestItems[i], result);
+ var result = layout.format(loggingEvent);
+ // Now try with an exception
+ loggingEvent.exception = ex;
+ t.log("Formatting with exception", arrayOfTestItems[i], result);
+ result = layout.format(loggingEvent);
+ }
+};
+
+xn.test.enableTestDebug = true;
+xn.test.enable_log4javascript = false;
+
+xn.test.suite("log4javascript tests", function(s) {
+ log4javascript.logLog.setQuietMode(true);
+ var ArrayAppender = function(layout) {
+ if (layout) {
+ this.setLayout(layout);
+ }
+ this.logMessages = [];
+ };
+
+ ArrayAppender.prototype = new log4javascript.Appender();
+
+ ArrayAppender.prototype.layout = new log4javascript.NullLayout();
+
+ ArrayAppender.prototype.append = function(loggingEvent) {
+ var formattedMessage = this.getLayout().format(loggingEvent);
+ if (this.getLayout().ignoresThrowable()) {
+ formattedMessage += loggingEvent.getThrowableStrRep();
+ }
+ this.logMessages.push(formattedMessage);
+ };
+
+ ArrayAppender.prototype.toString = function() {
+ return "[ArrayAppender]";
+ };
+
+ s.setUp = function(t) {
+ t.logger = log4javascript.getLogger("test");
+ t.logger.removeAllAppenders();
+ t.appender = new ArrayAppender();
+ t.logger.addAppender(t.appender);
+ };
+
+ s.tearDown = function(t) {
+ t.logger.removeAppender(t.appender);
+ log4javascript.resetConfiguration();
+ };
+
+ s.test("Stub script interface test", function(t) {
+ try {
+ compareObjectInterface(log4javascript, "log4javascript", log4javascript_stub, "log4javascript_stub");
+ } catch (ex) {
+ t.fail(ex);
+ }
+ });
+
+ s.test("Disable log4javascript test", function(t) {
+ log4javascript.setEnabled(false);
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages.length, 0);
+ log4javascript.setEnabled(true);
+ });
+
+ s.test("Array.splice test 1", function(t) {
+ var a = ["Marlon", "Ashley", "Darius", "Lloyd"];
+ var deletedItems = a.splice(1, 2);
+ t.assertEquals(a.join(","), "Marlon,Lloyd");
+ t.assertEquals(deletedItems.join(","), "Ashley,Darius");
+ });
+
+ s.test("Array.splice test 2", function(t) {
+ var a = ["Marlon", "Ashley", "Darius", "Lloyd"];
+ var deletedItems = a.splice(1, 1, "Malky", "Jay");
+ t.assertEquals(a.join(","), "Marlon,Malky,Jay,Darius,Lloyd");
+ t.assertEquals(deletedItems.join(","), "Ashley");
+ });
+
+ s.test("array_remove test", function(t) {
+ var array_remove = log4javascript.evalInScope("array_remove");
+ var a = ["Marlon", "Ashley", "Darius"];
+ array_remove(a, "Darius");
+ t.assertEquals(a.join(","), "Marlon,Ashley");
+ });
+
+ s.test("array_remove with empty array test", function(t) {
+ var array_remove = log4javascript.evalInScope("array_remove");
+ var a = [];
+ array_remove(a, "Darius");
+ t.assertEquals(a.join(","), "");
+ });
+
+ s.test("Logger logging test", function(t) {
+ // Should log since the default level for loggers is DEBUG and
+ // the default threshold for appenders is ALL
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages.length, 1);
+ });
+
+ s.test("Logger levels test", function(t) {
+ var originalLevel = t.logger.getEffectiveLevel();
+ t.logger.setLevel(log4javascript.Level.INFO);
+ t.logger.debug("TEST");
+ t.logger.setLevel(originalLevel);
+ t.assertEquals(t.appender.logMessages.length, 0);
+ });
+
+ s.test("Logger getEffectiveLevel inheritance test 1", function(t) {
+ var parentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2");
+ parentLogger.setLevel(log4javascript.Level.ERROR);
+ t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.ERROR);
+ });
+
+ s.test("Logger getEffectiveLevel inheritance test 2", function(t) {
+ var grandParentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2.test3");
+ grandParentLogger.setLevel(log4javascript.Level.ERROR);
+ t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.ERROR);
+ });
+
+ s.test("Logger getEffectiveLevel inheritance test 3", function(t) {
+ var parentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2");
+ parentLogger.setLevel(log4javascript.Level.ERROR);
+ childLogger.setLevel(log4javascript.Level.INFO);
+ t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.INFO);
+ });
+
+ s.test("Logger getEffectiveLevel root inheritance test", function(t) {
+ var rootLogger = log4javascript.getRootLogger();
+ var childLogger = log4javascript.getLogger("test1.test2.test3");
+ rootLogger.setLevel(log4javascript.Level.WARN);
+ t.assertEquals(childLogger.getEffectiveLevel(), log4javascript.Level.WARN);
+ });
+
+ s.test("Logger null level test", function(t) {
+ t.logger.setLevel(null);
+ // Should default to root logger level, which is DEBUG
+ t.assertEquals(t.logger.getEffectiveLevel(), log4javascript.Level.DEBUG);
+ });
+
+ s.test("Logger appender additivity test 1", function(t) {
+ var parentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2");
+ var parentLoggerAppender = new ArrayAppender();
+ var childLoggerAppender = new ArrayAppender();
+
+ parentLogger.addAppender(parentLoggerAppender);
+ childLogger.addAppender(childLoggerAppender);
+
+ parentLogger.info("Parent logger test message");
+ childLogger.info("Child logger test message");
+
+ t.assertEquals(parentLoggerAppender.logMessages.length, 2);
+ t.assertEquals(childLoggerAppender.logMessages.length, 1);
+ });
+
+ s.test("Logger appender additivity test 2", function(t) {
+ var parentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2");
+ var parentLoggerAppender = new ArrayAppender();
+ var childLoggerAppender = new ArrayAppender();
+
+ parentLogger.addAppender(parentLoggerAppender);
+ childLogger.addAppender(childLoggerAppender);
+
+ childLogger.setAdditivity(false);
+
+ parentLogger.info("Parent logger test message");
+ childLogger.info("Child logger test message");
+
+ t.assertEquals(parentLoggerAppender.logMessages.length, 1);
+ t.assertEquals(childLoggerAppender.logMessages.length, 1);
+ });
+
+ s.test("Logger appender additivity test 3", function(t) {
+ var parentLogger = log4javascript.getLogger("test1");
+ var childLogger = log4javascript.getLogger("test1.test2");
+ var parentLoggerAppender = new ArrayAppender();
+ var childLoggerAppender = new ArrayAppender();
+
+ parentLogger.addAppender(parentLoggerAppender);
+ childLogger.addAppender(childLoggerAppender);
+
+ childLogger.setAdditivity(false);
+
+ parentLogger.info("Parent logger test message");
+ childLogger.info("Child logger test message");
+
+ childLogger.setAdditivity(true);
+
+ childLogger.info("Child logger test message 2");
+
+ t.assertEquals(parentLoggerAppender.logMessages.length, 2);
+ t.assertEquals(childLoggerAppender.logMessages.length, 2);
+ });
+
+ s.test("Appender threshold test", function(t) {
+ t.appender.setThreshold(log4javascript.Level.INFO);
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages.length, 0);
+ });
+
+ s.test("Basic appender / layout test", function(t) {
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages[0], "TEST");
+ });
+
+ s.test("Appender uniqueness within logger test", function(t) {
+ // Add the same appender to the logger for a second time
+ t.logger.addAppender(t.appender);
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages.length, 1);
+ });
+
+ s.test("Logger remove appender test", function(t) {
+ t.logger.debug("TEST");
+ t.logger.removeAppender(t.appender);
+ t.logger.debug("TEST AGAIN");
+ t.assertEquals(t.appender.logMessages.length, 1);
+ });
+
+ s.test("", function(t) {
+ t.logger.debug("TEST");
+ t.logger.removeAppender(t.appender);
+ t.logger.debug("TEST AGAIN");
+ t.assertEquals(t.appender.logMessages.length, 1);
+ });
+ s.test("SimpleLayout format test", function(t) {
+ var layout = new log4javascript.SimpleLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("SimpleLayout test", function(t) {
+ t.appender.setLayout(new log4javascript.SimpleLayout());
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages[0], "DEBUG - TEST");
+ });
+ s.test("NullLayout format test", function(t) {
+ var layout = new log4javascript.NullLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("NullLayout test", function(t) {
+ t.appender.setLayout(new log4javascript.NullLayout());
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages[0], "TEST");
+ });
+ s.test("XmlLayout format test", function(t) {
+ var layout = new log4javascript.XmlLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("XmlLayout test", function(t) {
+ t.appender.setLayout(new log4javascript.XmlLayout());
+ t.logger.debug("TEST");
+ t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<\/log4javascript:event>\s*$/, t.appender.logMessages[0]);
+ });
+
+ s.test("XmlLayout with exception test", function(t) {
+ t.appender.setLayout(new log4javascript.XmlLayout());
+ t.logger.debug("TEST", new Error("Test error"));
+ t.assertRegexMatches(/^<log4javascript:event logger="test" timestamp="\d+" level="DEBUG">\s*<log4javascript:message><!\[CDATA\[TEST\]\]><\/log4javascript:message>\s*<log4javascript:exception>\s*<!\[CDATA\[.*\]\]><\/log4javascript:exception>\s*<\/log4javascript:event>\s*$/, t.appender.logMessages[0]);
+ });
+
+ var setUpXmlLayoutMillisecondsTest = function(t) {
+ t.date = new Date();
+ t.timeInMilliseconds = t.date.getTime();
+ t.timeInSeconds = Math.floor(t.timeInMilliseconds / 1000);
+ t.milliseconds = t.date.getMilliseconds();
+
+ t.loggingEvent = new log4javascript.LoggingEvent(t.logger, t.date, log4javascript.Level.DEBUG, ["TEST"], null);
+ t.layout = new log4javascript.XmlLayout();
+ }
+
+ s.test("XmlLayout seconds/milliseconds test 1", function(t) {
+ setUpXmlLayoutMillisecondsTest(t);
+
+ // Test default (i.e. timestamps in milliseconds) first
+ var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInMilliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');
+ t.assertRegexMatches(regex, t.layout.format(t.loggingEvent));
+ });
+
+ s.test("XmlLayout seconds/milliseconds test 2", function(t) {
+ setUpXmlLayoutMillisecondsTest(t);
+
+ // Change the global setting
+ log4javascript.setTimeStampsInMilliseconds(false);
+ var formatted = t.layout.format(t.loggingEvent);
+ log4javascript.setTimeStampsInMilliseconds(true);
+ var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInSeconds + '" milliseconds="' + t.milliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');
+ t.assertRegexMatches(regex, formatted);
+ });
+
+ s.test("XmlLayout seconds/milliseconds test 3", function(t) {
+ setUpXmlLayoutMillisecondsTest(t);
+
+ // Change the layout setting
+ t.layout.setTimeStampsInMilliseconds(false);
+ var formatted = t.layout.format(t.loggingEvent);
+ var regex = new RegExp('^<log4javascript:event logger="test" timestamp="' + t.timeInSeconds + '" milliseconds="' + t.milliseconds + '" level="DEBUG">\\s*<log4javascript:message><!\\[CDATA\\[TEST\\]\\]></log4javascript:message>\\s*</log4javascript:event>\\s*$');
+ t.assertRegexMatches(regex, formatted);
+ });
+ s.test("escapeNewLines test", function(t) {
+ var escapeNewLines = log4javascript.evalInScope("escapeNewLines");
+ var str = "1\r2\n3\n4\r\n5\r6\r\n7";
+ t.assertEquals(escapeNewLines(str), "1\\r\\n2\\r\\n3\\r\\n4\\r\\n5\\r\\n6\\r\\n7");
+ });
+
+ s.test("JsonLayout format test", function(t) {
+ var layout = new log4javascript.JsonLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("JsonLayout test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug("TEST");
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST"}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("JsonLayout JSON validity test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug("TEST");
+ eval("var o = " + t.appender.logMessages[0]);
+ t.assertEquals(o.message, "TEST");
+ });
+
+ s.test("JsonLayout with number type message test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug(15);
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":15}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("JsonLayout with object type message test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug({});
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"\[object Object\]"}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("JsonLayout with boolean type message test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug(false);
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":false}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("JsonLayout with quote test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug("TE\"S\"T");
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TE\\"S\\"T"}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("JsonLayout with exception test", function(t) {
+ t.appender.setLayout(new log4javascript.JsonLayout());
+ t.logger.debug("TEST", new Error("Test error"));
+ t.assertRegexMatches(/^{"logger":"test","timestamp":\d+,"level":"DEBUG","url":".*","message":"TEST","exception":.*}$/, t.appender.logMessages[0]);
+ });
+
+ var setUpJsonLayoutMillisecondsTest = function(t) {
+ t.date = new Date();
+ t.timeInMilliseconds = t.date.getTime();
+ t.timeInSeconds = Math.floor(t.timeInMilliseconds / 1000);
+ t.milliseconds = t.date.getMilliseconds();
+
+ t.loggingEvent = new log4javascript.LoggingEvent(t.logger, t.date, log4javascript.Level.DEBUG, ["TEST"], null);
+ t.layout = new log4javascript.JsonLayout();
+ };
+
+ s.test("JsonLayout seconds/milliseconds test 1", function(t) {
+ setUpJsonLayoutMillisecondsTest(t);
+
+ // Test default (i.e. timestamps in milliseconds) first
+ var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInMilliseconds + ',"level":"DEBUG","url":".*","message":"TEST"}$');
+ t.assertRegexMatches(regex, t.layout.format(t.loggingEvent));
+ });
+
+ s.test("JsonLayout seconds/milliseconds test 2", function(t) {
+ setUpJsonLayoutMillisecondsTest(t);
+
+ // Change the global setting
+ log4javascript.setTimeStampsInMilliseconds(false);
+ var formatted = t.layout.format(t.loggingEvent);
+ log4javascript.setTimeStampsInMilliseconds(true);
+ var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInSeconds + ',"level":"DEBUG","url":".*","message":"TEST","milliseconds":' + t.milliseconds + '}$');
+ t.assertRegexMatches(regex, formatted);
+ });
+
+ s.test("JsonLayout seconds/milliseconds test 3", function(t) {
+ setUpJsonLayoutMillisecondsTest(t);
+
+ // Change the layout setting
+ t.layout.setTimeStampsInMilliseconds(false);
+ var formatted = t.layout.format(t.loggingEvent);
+ var regex = new RegExp('^{"logger":"test","timestamp":' + t.timeInSeconds + ',"level":"DEBUG","url":".*","message":"TEST","milliseconds":' + t.milliseconds + '}$');
+ t.assertRegexMatches(regex, formatted);
+ });
+ s.test("HttpPostDataLayout format test", function(t) {
+ var layout = new log4javascript.HttpPostDataLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("HttpPostDataLayout test", function(t) {
+ t.appender.setLayout(new log4javascript.HttpPostDataLayout());
+ t.logger.debug("TEST");
+ t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST$/, t.appender.logMessages[0]);
+ });
+
+ s.test("HttpPostDataLayout URL encoding test", function(t) {
+ t.appender.setLayout(new log4javascript.HttpPostDataLayout());
+ t.logger.debug("TEST +\"1\"");
+ t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST%20%2B%221%22$/, t.appender.logMessages[0]);
+ });
+
+ s.test("HttpPostDataLayout with exception test", function(t) {
+ t.appender.setLayout(new log4javascript.HttpPostDataLayout());
+ t.logger.debug("TEST", new Error("Test error"));
+ t.assertRegexMatches(/^logger=test×tamp=\d+&level=DEBUG&url=.*&message=TEST&exception=.*$/, t.appender.logMessages[0]);
+ });
+
+ (function() {
+ var formatObjectExpansion = log4javascript.evalInScope("formatObjectExpansion");
+ var newLine = log4javascript.evalInScope("newLine");
+ var arr = [
+ null,
+ undefined,
+ 1.2,
+ "A string",
+ [1, "test"],
+ {
+ a: {
+ b: 1
+ }
+ }
+ ];
+
+ s.test("Basic formatObjectExpansion array test (depth: 1)", function(t) {
+ t.assertEquals(formatObjectExpansion(arr, 1),
+ "[" + newLine +
+ " null," + newLine +
+ " undefined," + newLine +
+ " 1.2," + newLine +
+ " A string," + newLine +
+ " 1,test," + newLine +
+ " [object Object]" + newLine +
+ "]"
+ );
+ });
+
+ s.test("Basic formatObjectExpansion array test (depth: 2)", function(t) {
+ t.assertEquals(formatObjectExpansion(arr, 2),
+ "[" + newLine +
+ " null," + newLine +
+ " undefined," + newLine +
+ " 1.2," + newLine +
+ " A string," + newLine +
+ " [" + newLine +
+ " 1," + newLine +
+ " test" + newLine +
+ " ]," + newLine +
+ " {" + newLine +
+ " a: [object Object]" + newLine +
+ " }" + newLine +
+ "]"
+ );
+ });
+
+ s.test("formatObjectExpansion simple object test", function(t) {
+ var obj = {
+ STRING: "A string"
+ };
+ t.assertEquals(formatObjectExpansion(obj, 1),
+ "{" + newLine +
+ " STRING: A string" + newLine +
+ "}"
+ );
+ });
+
+ s.test("formatObjectExpansion simple circular object test", function(t) {
+ var obj = {};
+ obj.a = obj;
+
+ t.assertEquals(formatObjectExpansion(obj, 2),
+ "{" + newLine +
+ " a: [object Object] [already expanded]" + newLine +
+ "}"
+ );
+ });
+ })(); /* ---------------------------------------------------------- */
+
+ var getSampleDate = function() {
+ var date = new Date();
+ date.setFullYear(2006);
+ date.setMonth(7);
+ date.setDate(30);
+ date.setHours(15);
+ date.setMinutes(38);
+ date.setSeconds(45);
+ return date;
+ };
+
+ /* ---------------------------------------------------------- */
+
+ s.test("String.replace test", function(t) {
+ t.assertEquals("Hello world".replace(/o/g, "Z"), "HellZ wZrld");
+ });
+
+ s.test("PatternLayout format test", function(t) {
+ var layout = new log4javascript.PatternLayout();
+ testLayoutWithVariables(layout, t);
+ });
+
+ s.test("PatternLayout dates test", function(t) {
+ var layout = new log4javascript.PatternLayout("%d %d{DATE} %d{HH:ss}");
+ t.appender.setLayout(layout);
+ t.logger.debug("TEST");
+ t.assertRegexMatches(/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} \d{2} [A-Z][a-z]{2} \d{4} \d{2}:\d{2}:\d{2},\d{3} \d{2}:\d{2}$/, t.appender.logMessages[0]);
+ });
+
+ s.test("PatternLayout modifiers test", function(t) {
+ var layout = new log4javascript.PatternLayout("%m|%3m|%-3m|%6m|%-6m|%.2m|%1.2m|%6.8m|%-1.2m|%-6.8m|");
+ t.appender.setLayout(layout);
+ t.logger.debug("TEST");
+ t.assertEquals(t.appender.logMessages[0], "TEST|TEST|TEST| TEST|TEST |ST|ST| TEST|ST|TEST |");
+ });
+
+ s.test("PatternLayout conversion characters test", function(t) {
+ var layout = new log4javascript.PatternLayout("%c %n %p %r literal %%");
+ t.appender.setLayout(layout);
+ t.logger.debug("TEST");
+ t.assertRegexMatches(/^test \s+ DEBUG \d+ literal %$/, t.appender.logMessages[0]);
+ });
+
+ s.test("PatternLayout message test", function(t) {
+ var layout = new log4javascript.PatternLayout("%m{1} %m{2}");
+ t.appender.setLayout(layout);
+ var testObj = {
+ strikers: {
+ quick: "Marlon"
+ }
+ };
+ t.logger.debug(testObj);
+ t.assertEquals("{\r\n strikers: [object Object]\r\n} {\r\n\ strikers: {\r\n quick: Marlon\r\n }\r\n}", t.appender.logMessages[0]);
+ });
+ // Tests for exceptions when logging
+ s.test("Logging/grouping test", function(t) {
+ var browserConsoleAppender = new log4javascript.BrowserConsoleAppender();
+ t.logger.addAppender(browserConsoleAppender);
+
+ // Test each level
+ t.logger.trace("TEST TRACE");
+ t.logger.debug("TEST DEBUG");
+ t.logger.info("TEST INFO");
+ t.logger.warn("TEST WARN");
+ t.logger.error("TEST ERROR");
+ t.logger.fatal("TEST FATAL");
+
+ // Test with exception
+ t.logger.fatal("TEST FATAL", new Error("Fake error"));
+
+ // Test multiple messages
+ t.logger.info("TEST INFO", "Second message", ["a", "b", "c"]);
+
+ // Test groups
+ t.logger.group("TEST GROUP");
+ t.logger.info("TEST INFO");
+ t.logger.groupEnd("TEST GROUP");
+ t.logger.info("TEST INFO");
+
+ t.logger.removeAppender(browserConsoleAppender);
+ });
+
+/*
+ s.test("AjaxAppender JsonLayout single message test", function(t) {
+ t.async(10000);
+ // Create and add an Ajax appender
+ var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");
+ ajaxAppender.setLayout(new log4javascript.JsonLayout());
+ ajaxAppender.setRequestSuccessCallback(
+ function(xmlHttp) {
+ // Response comes back as JSON array of messages logged
+ var jsonResponse = xmlHttp.responseText;
+ var arr = eval(jsonResponse);
+ t.assertEquals(arr.length, 1);
+ t.assertEquals(arr[0], "TEST");
+ t.succeed();
+ }
+ );
+ ajaxAppender.setFailCallback(
+ function(msg) {
+ t.fail(msg);
+ ajaxErrorMessage = msg;
+ }
+ );
+ t.logger.addAppender(ajaxAppender);
+ t.logger.debug("TEST");
+ });
+
+ s.test("AjaxAppender JsonLayout batched messages test", function(t) {
+ t.async(10000);
+ var message1 = "TEST 1";
+ var message2 = "String with \"lots of 'quotes'\" + plusses in";
+ var message3 = "A non-threatening string";
+ // Create and add an Ajax appender
+ var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");
+ ajaxAppender.setLayout(new log4javascript.JsonLayout());
+ ajaxAppender.setBatchSize(3);
+ ajaxAppender.setRequestSuccessCallback(
+ function(xmlHttp) {
+ // Response comes back as JSON array of messages logged
+ var jsonResponse = xmlHttp.responseText;
+ var arr = eval(jsonResponse);
+ t.assertEquals(arr.length, 3);
+ t.assertEquals(arr[0], message1);
+ t.assertEquals(arr[1], message2);
+ t.assertEquals(arr[2], message3);
+ t.succeed();
+ }
+ );
+ ajaxAppender.setFailCallback(
+ function(msg) {
+ t.fail(msg);
+ ajaxErrorMessage = msg;
+ }
+ );
+ t.logger.addAppender(ajaxAppender);
+ t.logger.debug(message1);
+ t.logger.info(message2);
+ t.logger.warn(message3);
+ });
+
+ s.test("AjaxAppender HttpPostDataLayout single message test", function(t) {
+ t.async(10000);
+ // Create and add an Ajax appender
+ var ajaxAppender = new log4javascript.AjaxAppender("../log4javascript.do");
+ var testMessage = "TEST +\"1\"";
+ ajaxAppender.setLayout(new log4javascript.HttpPostDataLayout());
+ ajaxAppender.setRequestSuccessCallback(
+ function(xmlHttp) {
+ // Response comes back as JSON array of messages logged
+ var jsonResponse = xmlHttp.responseText;
+ var arr = eval(jsonResponse);
+ t.assertEquals(arr.length, 1);
+ t.assertEquals(arr[0], testMessage);
+ t.succeed();
+ }
+ );
+ ajaxAppender.setFailCallback(
+ function(msg) {
+ t.fail(msg);
+ ajaxErrorMessage = msg;
+ }
+ );
+ t.logger.addAppender(ajaxAppender);
+ t.logger.debug(testMessage);
+ });
+*/
+ var testConsoleAppender = function(t, appender) {
+ var timeoutCallback = function() {
+ //alert("Failed. Debug messages follow.");
+ //log4javascript.logLog.displayDebug();
+ return (windowLoaded ? "Timed out while waiting for messages to appear" :
+ "Timed out while waiting for window to load") + ". Debug messages: " +
+ log4javascript.logLog.debugMessages.join("\r\n");
+ }
+
+ t.async(60000, timeoutCallback);
+
+ var windowLoaded = false;
+ var domChecked = false;
+
+ // Set a timeout to allow the pop-up to appear
+ var onLoadHandler = function() {
+ log4javascript.logLog.debug("onLoadHandler");
+ windowLoaded = true;
+ var win = appender.getConsoleWindow();
+
+ if (win && win.loaded) {
+ // Check that the log container element contains the log message. Since
+ // the console window waits 100 milliseconds before actually rendering the
+ // message as a DOM element, we need to use a timer
+ var checkDom = function() {
+ log4javascript.logLog.debug("checkDom");
+ domChecked = true;
+ var logContainer = win.logMainContainer;
+ if (logContainer.hasChildNodes()) {
+ if (logContainer.innerHTML.indexOf("TEST MESSAGE") == -1) {
+ appender.close();
+ t.fail("Log message not correctly logged (log container innerHTML: " + logContainer.innerHTML + ")");
+ } else {
+ t.assert(appender.isVisible());
+ appender.close();
+ t.assert(!appender.isVisible());
+ t.succeed();
+ }
+ } else {
+ appender.close();
+ t.fail("Console has no log messages");
+ }
+ }
+ window.setTimeout(checkDom, 300);
+ } else {
+ appender.close();
+ t.fail("Console mistakenly raised load event");
+ }
+ }
+
+ appender.addEventListener("load", onLoadHandler);
+ t.logger.addAppender(appender);
+ t.logger.debug("TEST MESSAGE");
+ };
+
+ s.test("InlineAppender test", function(t) {
+ var inlineAppender = new log4javascript.InlineAppender();
+ inlineAppender.setInitiallyMinimized(false);
+ inlineAppender.setNewestMessageAtTop(false);
+ inlineAppender.setScrollToLatestMessage(true);
+ inlineAppender.setWidth(600);
+ inlineAppender.setHeight(200);
+
+ testConsoleAppender(t, inlineAppender);
+ });
+
+ s.test("InPageAppender with separate console HTML file test", function(t) {
+ var inPageAppender = new log4javascript.InPageAppender();
+ inPageAppender.setInitiallyMinimized(false);
+ inPageAppender.setNewestMessageAtTop(false);
+ inPageAppender.setScrollToLatestMessage(true);
+ inPageAppender.setUseDocumentWrite(false);
+ inPageAppender.setWidth(600);
+ inPageAppender.setHeight(200);
+
+ testConsoleAppender(t, inPageAppender);
+ });
+
+ s.test("PopUpAppender test", function(t) {
+ var popUpAppender = new log4javascript.PopUpAppender();
+ popUpAppender.setFocusPopUp(true);
+ popUpAppender.setUseOldPopUp(false);
+ popUpAppender.setNewestMessageAtTop(false);
+ popUpAppender.setScrollToLatestMessage(true);
+ popUpAppender.setComplainAboutPopUpBlocking(false);
+ popUpAppender.setWidth(600);
+ popUpAppender.setHeight(200);
+
+ testConsoleAppender(t, popUpAppender);
+
+
+ });
+
+ s.test("PopUpAppender with separate console HTML file test", function(t) {
+ var popUpAppender = new log4javascript.PopUpAppender();
+ popUpAppender.setFocusPopUp(true);
+ popUpAppender.setUseOldPopUp(false);
+ popUpAppender.setNewestMessageAtTop(false);
+ popUpAppender.setScrollToLatestMessage(true);
+ popUpAppender.setComplainAboutPopUpBlocking(false);
+ popUpAppender.setUseDocumentWrite(false);
+ popUpAppender.setWidth(600);
+ popUpAppender.setHeight(200);
+
+ testConsoleAppender(t, popUpAppender);
+ });
+});
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/license.txt b/planetstack/core/static/log4javascript-1.4.6/license.txt
new file mode 100644
index 0000000..29f81d8
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/license.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/planetstack/core/static/log4javascript-1.4.6/log4javascript.js b/planetstack/core/static/log4javascript-1.4.6/log4javascript.js
new file mode 100644
index 0000000..042daa9
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/log4javascript.js
@@ -0,0 +1,274 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+
+if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}
+return this.length;};}
+if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}
+this.length=this.length-1;return firstItem;}};}
+if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}
+var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}
+return itemsDeleted;};}
+var log4javascript=(function(){function isUndefined(obj){return typeof obj=="undefined";}
+function EventSupport(){}
+EventSupport.prototype={eventTypes:[],eventListeners:{},setEventTypes:function(eventTypesParam){if(eventTypesParam instanceof Array){this.eventTypes=eventTypesParam;this.eventListeners={};for(var i=0,len=this.eventTypes.length;i<len;i++){this.eventListeners[this.eventTypes[i]]=[];}}else{handleError("log4javascript.EventSupport ["+this+"]: setEventTypes: eventTypes parameter must be an Array");}},addEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: addEventListener: no event called '"+eventType+"'");}
+this.eventListeners[eventType].push(listener);}else{handleError("log4javascript.EventSupport ["+this+"]: addEventListener: listener must be a function");}},removeEventListener:function(eventType,listener){if(typeof listener=="function"){if(!array_contains(this.eventTypes,eventType)){handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: no event called '"+eventType+"'");}
+array_remove(this.eventListeners[eventType],listener);}else{handleError("log4javascript.EventSupport ["+this+"]: removeEventListener: listener must be a function");}},dispatchEvent:function(eventType,eventArgs){if(array_contains(this.eventTypes,eventType)){var listeners=this.eventListeners[eventType];for(var i=0,len=listeners.length;i<len;i++){listeners[i](this,eventType,eventArgs);}}else{handleError("log4javascript.EventSupport ["+this+"]: dispatchEvent: no event called '"+eventType+"'");}}};var applicationStartDate=new Date();var uniqueId="log4javascript_"+applicationStartDate.getTime()+"_"+
+Math.floor(Math.random()*100000000);var emptyFunction=function(){};var newLine="\r\n";var pageLoaded=false;function Log4JavaScript(){}
+Log4JavaScript.prototype=new EventSupport();log4javascript=new Log4JavaScript();log4javascript.version="1.4.6";log4javascript.edition="log4javascript";function toStr(obj){if(obj&&obj.toString){return obj.toString();}else{return String(obj);}}
+function getExceptionMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}else{return toStr(ex);}}
+function getUrlFileName(url){var lastSlashIndex=Math.max(url.lastIndexOf("/"),url.lastIndexOf("\\"));return url.substr(lastSlashIndex+1);}
+function getExceptionStringRep(ex){if(ex){var exStr="Exception: "+getExceptionMessage(ex);try{if(ex.lineNumber){exStr+=" on line number "+ex.lineNumber;}
+if(ex.fileName){exStr+=" in file "+getUrlFileName(ex.fileName);}}catch(localEx){logLog.warn("Unable to obtain file and line information for error");}
+if(showStackTraces&&ex.stack){exStr+=newLine+"Stack trace:"+newLine+ex.stack;}
+return exStr;}
+return null;}
+function bool(obj){return Boolean(obj);}
+function trim(str){return str.replace(/^\s+/,"").replace(/\s+$/,"");}
+function splitIntoLines(text){var text2=text.replace(/\r\n/g,"\n").replace(/\r/g,"\n");return text2.split("\n");}
+var urlEncode=(typeof window.encodeURIComponent!="undefined")?function(str){return encodeURIComponent(str);}:function(str){return escape(str).replace(/\+/g,"%2B").replace(/"/g,"%22").replace(/'/g,"%27").replace(/\//g,"%2F").replace(/=/g,"%3D");};var urlDecode=(typeof window.decodeURIComponent!="undefined")?function(str){return decodeURIComponent(str);}:function(str){return unescape(str).replace(/%2B/g,"+").replace(/%22/g,"\"").replace(/%27/g,"'").replace(/%2F/g,"/").replace(/%3D/g,"=");};function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}
+if(index>=0){arr.splice(index,1);return true;}else{return false;}}
+function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}
+return false;}
+function extractBooleanFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return bool(param);}}
+function extractStringFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{return String(param);}}
+function extractIntFromParam(param,defaultValue){if(isUndefined(param)){return defaultValue;}else{try{var value=parseInt(param,10);return isNaN(value)?defaultValue:value;}catch(ex){logLog.warn("Invalid int param "+param,ex);return defaultValue;}}}
+function extractFunctionFromParam(param,defaultValue){if(typeof param=="function"){return param;}else{return defaultValue;}}
+function isError(err){return(err instanceof Error);}
+if(!Function.prototype.apply){Function.prototype.apply=function(obj,args){var methodName="__apply__";if(typeof obj[methodName]!="undefined"){methodName+=String(Math.random()).substr(2);}
+obj[methodName]=this;var argsStrings=[];for(var i=0,len=args.length;i<len;i++){argsStrings[i]="args["+i+"]";}
+var script="obj."+methodName+"("+argsStrings.join(",")+")";var returnValue=eval(script);delete obj[methodName];return returnValue;};}
+if(!Function.prototype.call){Function.prototype.call=function(obj){var args=[];for(var i=1,len=arguments.length;i<len;i++){args[i-1]=arguments[i];}
+return this.apply(obj,args);};}
+function getListenersPropertyName(eventName){return"__log4javascript_listeners__"+eventName;}
+function addEvent(node,eventName,listener,useCapture,win){win=win?win:window;if(node.addEventListener){node.addEventListener(eventName,listener,useCapture);}else if(node.attachEvent){node.attachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(!node[propertyName]){node[propertyName]=[];node["on"+eventName]=function(evt){evt=getEvent(evt,win);var listenersPropertyName=getListenersPropertyName(eventName);var listeners=this[listenersPropertyName].concat([]);var currentListener;while((currentListener=listeners.shift())){currentListener.call(this,evt);}};}
+node[propertyName].push(listener);}}
+function removeEvent(node,eventName,listener,useCapture){if(node.removeEventListener){node.removeEventListener(eventName,listener,useCapture);}else if(node.detachEvent){node.detachEvent("on"+eventName,listener);}else{var propertyName=getListenersPropertyName(eventName);if(node[propertyName]){array_remove(node[propertyName],listener);}}}
+function getEvent(evt,win){win=win?win:window;return evt?evt:win.event;}
+function stopEventPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}
+evt.returnValue=false;}
+var logLog={quietMode:false,debugMessages:[],setQuietMode:function(quietMode){this.quietMode=bool(quietMode);},numberOfErrors:0,alertAllErrors:false,setAlertAllErrors:function(alertAllErrors){this.alertAllErrors=alertAllErrors;},debug:function(message){this.debugMessages.push(message);},displayDebug:function(){alert(this.debugMessages.join(newLine));},warn:function(message,exception){},error:function(message,exception){if(++this.numberOfErrors==1||this.alertAllErrors){if(!this.quietMode){var alertMessage="log4javascript error: "+message;if(exception){alertMessage+=newLine+newLine+"Original error: "+getExceptionStringRep(exception);}
+alert(alertMessage);}}}};log4javascript.logLog=logLog;log4javascript.setEventTypes(["load","error"]);function handleError(message,exception){logLog.error(message,exception);log4javascript.dispatchEvent("error",{"message":message,"exception":exception});}
+log4javascript.handleError=handleError;var enabled=!((typeof log4javascript_disabled!="undefined")&&log4javascript_disabled);log4javascript.setEnabled=function(enable){enabled=bool(enable);};log4javascript.isEnabled=function(){return enabled;};var useTimeStampsInMilliseconds=true;log4javascript.setTimeStampsInMilliseconds=function(timeStampsInMilliseconds){useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);};log4javascript.isTimeStampsInMilliseconds=function(){return useTimeStampsInMilliseconds;};log4javascript.evalInScope=function(expr){return eval(expr);};var showStackTraces=false;log4javascript.setShowStackTraces=function(show){showStackTraces=bool(show);};var Level=function(level,name){this.level=level;this.name=name;};Level.prototype={toString:function(){return this.name;},equals:function(level){return this.level==level.level;},isGreaterOrEqual:function(level){return this.level>=level.level;}};Level.ALL=new Level(Number.MIN_VALUE,"ALL");Level.TRACE=new Level(10000,"TRACE");Level.DEBUG=new Level(20000,"DEBUG");Level.INFO=new Level(30000,"INFO");Level.WARN=new Level(40000,"WARN");Level.ERROR=new Level(50000,"ERROR");Level.FATAL=new Level(60000,"FATAL");Level.OFF=new Level(Number.MAX_VALUE,"OFF");log4javascript.Level=Level;function Timer(name,level){this.name=name;this.level=isUndefined(level)?Level.INFO:level;this.start=new Date();}
+Timer.prototype.getElapsedTime=function(){return new Date().getTime()-this.start.getTime();};var anonymousLoggerName="[anonymous]";var defaultLoggerName="[default]";var nullLoggerName="[null]";var rootLoggerName="root";function Logger(name){this.name=name;this.parent=null;this.children=[];var appenders=[];var loggerLevel=null;var isRoot=(this.name===rootLoggerName);var isNull=(this.name===nullLoggerName);var appenderCache=null;var appenderCacheInvalidated=false;this.addChild=function(childLogger){this.children.push(childLogger);childLogger.parent=this;childLogger.invalidateAppenderCache();};var additive=true;this.getAdditivity=function(){return additive;};this.setAdditivity=function(additivity){var valueChanged=(additive!=additivity);additive=additivity;if(valueChanged){this.invalidateAppenderCache();}};this.addAppender=function(appender){if(isNull){handleError("Logger.addAppender: you may not add an appender to the null logger");}else{if(appender instanceof log4javascript.Appender){if(!array_contains(appenders,appender)){appenders.push(appender);appender.setAddedToLogger(this);this.invalidateAppenderCache();}}else{handleError("Logger.addAppender: appender supplied ('"+
+toStr(appender)+"') is not a subclass of Appender");}}};this.removeAppender=function(appender){array_remove(appenders,appender);appender.setRemovedFromLogger(this);this.invalidateAppenderCache();};this.removeAllAppenders=function(){var appenderCount=appenders.length;if(appenderCount>0){for(var i=0;i<appenderCount;i++){appenders[i].setRemovedFromLogger(this);}
+appenders.length=0;this.invalidateAppenderCache();}};this.getEffectiveAppenders=function(){if(appenderCache===null||appenderCacheInvalidated){var parentEffectiveAppenders=(isRoot||!this.getAdditivity())?[]:this.parent.getEffectiveAppenders();appenderCache=parentEffectiveAppenders.concat(appenders);appenderCacheInvalidated=false;}
+return appenderCache;};this.invalidateAppenderCache=function(){appenderCacheInvalidated=true;for(var i=0,len=this.children.length;i<len;i++){this.children[i].invalidateAppenderCache();}};this.log=function(level,params){if(enabled&&level.isGreaterOrEqual(this.getEffectiveLevel())){var exception;var finalParamIndex=params.length-1;var lastParam=params[finalParamIndex];if(params.length>1&&isError(lastParam)){exception=lastParam;finalParamIndex--;}
+var messages=[];for(var i=0;i<=finalParamIndex;i++){messages[i]=params[i];}
+var loggingEvent=new LoggingEvent(this,new Date(),level,messages,exception);this.callAppenders(loggingEvent);}};this.callAppenders=function(loggingEvent){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].doAppend(loggingEvent);}};this.setLevel=function(level){if(isRoot&&level===null){handleError("Logger.setLevel: you cannot set the level of the root logger to null");}else if(level instanceof Level){loggerLevel=level;}else{handleError("Logger.setLevel: level supplied to logger "+
+this.name+" is not an instance of log4javascript.Level");}};this.getLevel=function(){return loggerLevel;};this.getEffectiveLevel=function(){for(var logger=this;logger!==null;logger=logger.parent){var level=logger.getLevel();if(level!==null){return level;}}};this.group=function(name,initiallyExpanded){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].group(name,initiallyExpanded);}}};this.groupEnd=function(){if(enabled){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i<len;i++){effectiveAppenders[i].groupEnd();}}};var timers={};this.time=function(name,level){if(enabled){if(isUndefined(name)){handleError("Logger.time: a name for the timer must be supplied");}else if(level&&!(level instanceof Level)){handleError("Logger.time: level supplied to timer "+
+name+" is not an instance of log4javascript.Level");}else{timers[name]=new Timer(name,level);}}};this.timeEnd=function(name){if(enabled){if(isUndefined(name)){handleError("Logger.timeEnd: a name for the timer must be supplied");}else if(timers[name]){var timer=timers[name];var milliseconds=timer.getElapsedTime();this.log(timer.level,["Timer "+toStr(name)+" completed in "+milliseconds+"ms"]);delete timers[name];}else{logLog.warn("Logger.timeEnd: no timer found with name "+name);}}};this.assert=function(expr){if(enabled&&!expr){var args=[];for(var i=1,len=arguments.length;i<len;i++){args.push(arguments[i]);}
+args=(args.length>0)?args:["Assertion Failure"];args.push(newLine);args.push(expr);this.log(Level.ERROR,args);}};this.toString=function(){return"Logger["+this.name+"]";};}
+Logger.prototype={trace:function(){this.log(Level.TRACE,arguments);},debug:function(){this.log(Level.DEBUG,arguments);},info:function(){this.log(Level.INFO,arguments);},warn:function(){this.log(Level.WARN,arguments);},error:function(){this.log(Level.ERROR,arguments);},fatal:function(){this.log(Level.FATAL,arguments);},isEnabledFor:function(level){return level.isGreaterOrEqual(this.getEffectiveLevel());},isTraceEnabled:function(){return this.isEnabledFor(Level.TRACE);},isDebugEnabled:function(){return this.isEnabledFor(Level.DEBUG);},isInfoEnabled:function(){return this.isEnabledFor(Level.INFO);},isWarnEnabled:function(){return this.isEnabledFor(Level.WARN);},isErrorEnabled:function(){return this.isEnabledFor(Level.ERROR);},isFatalEnabled:function(){return this.isEnabledFor(Level.FATAL);}};Logger.prototype.trace.isEntryPoint=true;Logger.prototype.debug.isEntryPoint=true;Logger.prototype.info.isEntryPoint=true;Logger.prototype.warn.isEntryPoint=true;Logger.prototype.error.isEntryPoint=true;Logger.prototype.fatal.isEntryPoint=true;var loggers={};var loggerNames=[];var ROOT_LOGGER_DEFAULT_LEVEL=Level.DEBUG;var rootLogger=new Logger(rootLoggerName);rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);log4javascript.getRootLogger=function(){return rootLogger;};log4javascript.getLogger=function(loggerName){if(!(typeof loggerName=="string")){loggerName=anonymousLoggerName;logLog.warn("log4javascript.getLogger: non-string logger name "+
+toStr(loggerName)+" supplied, returning anonymous logger");}
+if(loggerName==rootLoggerName){handleError("log4javascript.getLogger: root logger may not be obtained by name");}
+if(!loggers[loggerName]){var logger=new Logger(loggerName);loggers[loggerName]=logger;loggerNames.push(loggerName);var lastDotIndex=loggerName.lastIndexOf(".");var parentLogger;if(lastDotIndex>-1){var parentLoggerName=loggerName.substring(0,lastDotIndex);parentLogger=log4javascript.getLogger(parentLoggerName);}else{parentLogger=rootLogger;}
+parentLogger.addChild(logger);}
+return loggers[loggerName];};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=log4javascript.getLogger(defaultLoggerName);var a=new log4javascript.PopUpAppender();defaultLogger.addAppender(a);}
+return defaultLogger;};var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=new Logger(nullLoggerName);nullLogger.setLevel(Level.OFF);}
+return nullLogger;};log4javascript.resetConfiguration=function(){rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);loggers={};};var LoggingEvent=function(logger,timeStamp,level,messages,exception){this.logger=logger;this.timeStamp=timeStamp;this.timeStampInMilliseconds=timeStamp.getTime();this.timeStampInSeconds=Math.floor(this.timeStampInMilliseconds/1000);this.milliseconds=this.timeStamp.getMilliseconds();this.level=level;this.messages=messages;this.exception=exception;};LoggingEvent.prototype={getThrowableStrRep:function(){return this.exception?getExceptionStringRep(this.exception):"";},getCombinedMessages:function(){return(this.messages.length==1)?this.messages[0]:this.messages.join(newLine);},toString:function(){return"LoggingEvent["+this.level+"]";}};log4javascript.LoggingEvent=LoggingEvent;var Layout=function(){};Layout.prototype={defaults:{loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url"},loggerKey:"logger",timeStampKey:"timestamp",millisecondsKey:"milliseconds",levelKey:"level",messageKey:"message",exceptionKey:"exception",urlKey:"url",batchHeader:"",batchFooter:"",batchSeparator:"",returnsPostData:false,overrideTimeStampsSetting:false,useTimeStampsInMilliseconds:null,format:function(){handleError("Layout.format: layout supplied has no format() method");},ignoresThrowable:function(){handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");},getContentType:function(){return"text/plain";},allowBatching:function(){return true;},setTimeStampsInMilliseconds:function(timeStampsInMilliseconds){this.overrideTimeStampsSetting=true;this.useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);},isTimeStampsInMilliseconds:function(){return this.overrideTimeStampsSetting?this.useTimeStampsInMilliseconds:useTimeStampsInMilliseconds;},getTimeStampValue:function(loggingEvent){return this.isTimeStampsInMilliseconds()?loggingEvent.timeStampInMilliseconds:loggingEvent.timeStampInSeconds;},getDataValues:function(loggingEvent,combineMessages){var dataValues=[[this.loggerKey,loggingEvent.logger.name],[this.timeStampKey,this.getTimeStampValue(loggingEvent)],[this.levelKey,loggingEvent.level.name],[this.urlKey,window.location.href],[this.messageKey,combineMessages?loggingEvent.getCombinedMessages():loggingEvent.messages]];if(!this.isTimeStampsInMilliseconds()){dataValues.push([this.millisecondsKey,loggingEvent.milliseconds]);}
+if(loggingEvent.exception){dataValues.push([this.exceptionKey,getExceptionStringRep(loggingEvent.exception)]);}
+if(this.hasCustomFields()){for(var i=0,len=this.customFields.length;i<len;i++){var val=this.customFields[i].value;if(typeof val==="function"){val=val(this,loggingEvent);}
+dataValues.push([this.customFields[i].name,val]);}}
+return dataValues;},setKeys:function(loggerKey,timeStampKey,levelKey,messageKey,exceptionKey,urlKey,millisecondsKey){this.loggerKey=extractStringFromParam(loggerKey,this.defaults.loggerKey);this.timeStampKey=extractStringFromParam(timeStampKey,this.defaults.timeStampKey);this.levelKey=extractStringFromParam(levelKey,this.defaults.levelKey);this.messageKey=extractStringFromParam(messageKey,this.defaults.messageKey);this.exceptionKey=extractStringFromParam(exceptionKey,this.defaults.exceptionKey);this.urlKey=extractStringFromParam(urlKey,this.defaults.urlKey);this.millisecondsKey=extractStringFromParam(millisecondsKey,this.defaults.millisecondsKey);},setCustomField:function(name,value){var fieldUpdated=false;for(var i=0,len=this.customFields.length;i<len;i++){if(this.customFields[i].name===name){this.customFields[i].value=value;fieldUpdated=true;}}
+if(!fieldUpdated){this.customFields.push({"name":name,"value":value});}},hasCustomFields:function(){return(this.customFields.length>0);},toString:function(){handleError("Layout.toString: all layouts must override this method");}};log4javascript.Layout=Layout;var Appender=function(){};Appender.prototype=new EventSupport();Appender.prototype.layout=new PatternLayout();Appender.prototype.threshold=Level.ALL;Appender.prototype.loggers=[];Appender.prototype.doAppend=function(loggingEvent){if(enabled&&loggingEvent.level.level>=this.threshold.level){this.append(loggingEvent);}};Appender.prototype.append=function(loggingEvent){};Appender.prototype.setLayout=function(layout){if(layout instanceof Layout){this.layout=layout;}else{handleError("Appender.setLayout: layout supplied to "+
+this.toString()+" is not a subclass of Layout");}};Appender.prototype.getLayout=function(){return this.layout;};Appender.prototype.setThreshold=function(threshold){if(threshold instanceof Level){this.threshold=threshold;}else{handleError("Appender.setThreshold: threshold supplied to "+
+this.toString()+" is not a subclass of Level");}};Appender.prototype.getThreshold=function(){return this.threshold;};Appender.prototype.setAddedToLogger=function(logger){this.loggers.push(logger);};Appender.prototype.setRemovedFromLogger=function(logger){array_remove(this.loggers,logger);};Appender.prototype.group=emptyFunction;Appender.prototype.groupEnd=emptyFunction;Appender.prototype.toString=function(){handleError("Appender.toString: all appenders must override this method");};log4javascript.Appender=Appender;function SimpleLayout(){this.customFields=[];}
+SimpleLayout.prototype=new Layout();SimpleLayout.prototype.format=function(loggingEvent){return loggingEvent.level.name+" - "+loggingEvent.getCombinedMessages();};SimpleLayout.prototype.ignoresThrowable=function(){return true;};SimpleLayout.prototype.toString=function(){return"SimpleLayout";};log4javascript.SimpleLayout=SimpleLayout;function NullLayout(){this.customFields=[];}
+NullLayout.prototype=new Layout();NullLayout.prototype.format=function(loggingEvent){return loggingEvent.messages;};NullLayout.prototype.ignoresThrowable=function(){return true;};NullLayout.prototype.toString=function(){return"NullLayout";};log4javascript.NullLayout=NullLayout;function XmlLayout(combineMessages){this.combineMessages=extractBooleanFromParam(combineMessages,true);this.customFields=[];}
+XmlLayout.prototype=new Layout();XmlLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};XmlLayout.prototype.getContentType=function(){return"text/xml";};XmlLayout.prototype.escapeCdata=function(str){return str.replace(/\]\]>/,"]]>]]><![CDATA[");};XmlLayout.prototype.format=function(loggingEvent){var layout=this;var i,len;function formatMessage(message){message=(typeof message==="string")?message:toStr(message);return"<log4javascript:message><![CDATA["+
+layout.escapeCdata(message)+"]]></log4javascript:message>";}
+var str="<log4javascript:event logger=\""+loggingEvent.logger.name+"\" timestamp=\""+this.getTimeStampValue(loggingEvent)+"\"";if(!this.isTimeStampsInMilliseconds()){str+=" milliseconds=\""+loggingEvent.milliseconds+"\"";}
+str+=" level=\""+loggingEvent.level.name+"\">"+newLine;if(this.combineMessages){str+=formatMessage(loggingEvent.getCombinedMessages());}else{str+="<log4javascript:messages>"+newLine;for(i=0,len=loggingEvent.messages.length;i<len;i++){str+=formatMessage(loggingEvent.messages[i])+newLine;}
+str+="</log4javascript:messages>"+newLine;}
+if(this.hasCustomFields()){for(i=0,len=this.customFields.length;i<len;i++){str+="<log4javascript:customfield name=\""+
+this.customFields[i].name+"\"><![CDATA["+
+this.customFields[i].value.toString()+"]]></log4javascript:customfield>"+newLine;}}
+if(loggingEvent.exception){str+="<log4javascript:exception><![CDATA["+
+getExceptionStringRep(loggingEvent.exception)+"]]></log4javascript:exception>"+newLine;}
+str+="</log4javascript:event>"+newLine+newLine;return str;};XmlLayout.prototype.ignoresThrowable=function(){return false;};XmlLayout.prototype.toString=function(){return"XmlLayout";};log4javascript.XmlLayout=XmlLayout;function escapeNewLines(str){return str.replace(/\r\n|\r|\n/g,"\\r\\n");}
+function JsonLayout(readable,combineMessages){this.readable=extractBooleanFromParam(readable,false);this.combineMessages=extractBooleanFromParam(combineMessages,true);this.batchHeader=this.readable?"["+newLine:"[";this.batchFooter=this.readable?"]"+newLine:"]";this.batchSeparator=this.readable?","+newLine:",";this.setKeys();this.colon=this.readable?": ":":";this.tab=this.readable?"\t":"";this.lineBreak=this.readable?newLine:"";this.customFields=[];}
+JsonLayout.prototype=new Layout();JsonLayout.prototype.isReadable=function(){return this.readable;};JsonLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};JsonLayout.prototype.format=function(loggingEvent){var layout=this;var dataValues=this.getDataValues(loggingEvent,this.combineMessages);var str="{"+this.lineBreak;var i,len;function formatValue(val,prefix,expand){var formattedValue;var valType=typeof val;if(val instanceof Date){formattedValue=String(val.getTime());}else if(expand&&(val instanceof Array)){formattedValue="["+layout.lineBreak;for(var i=0,len=val.length;i<len;i++){var childPrefix=prefix+layout.tab;formattedValue+=childPrefix+formatValue(val[i],childPrefix,false);if(i<val.length-1){formattedValue+=",";}
+formattedValue+=layout.lineBreak;}
+formattedValue+=prefix+"]";}else if(valType!=="number"&&valType!=="boolean"){formattedValue="\""+escapeNewLines(toStr(val).replace(/\"/g,"\\\""))+"\"";}else{formattedValue=val;}
+return formattedValue;}
+for(i=0,len=dataValues.length-1;i<=len;i++){str+=this.tab+"\""+dataValues[i][0]+"\""+this.colon+formatValue(dataValues[i][1],this.tab,true);if(i<len){str+=",";}
+str+=this.lineBreak;}
+str+="}"+this.lineBreak;return str;};JsonLayout.prototype.ignoresThrowable=function(){return false;};JsonLayout.prototype.toString=function(){return"JsonLayout";};JsonLayout.prototype.getContentType=function(){return"application/json";};log4javascript.JsonLayout=JsonLayout;function HttpPostDataLayout(){this.setKeys();this.customFields=[];this.returnsPostData=true;}
+HttpPostDataLayout.prototype=new Layout();HttpPostDataLayout.prototype.allowBatching=function(){return false;};HttpPostDataLayout.prototype.format=function(loggingEvent){var dataValues=this.getDataValues(loggingEvent);var queryBits=[];for(var i=0,len=dataValues.length;i<len;i++){var val=(dataValues[i][1]instanceof Date)?String(dataValues[i][1].getTime()):dataValues[i][1];queryBits.push(urlEncode(dataValues[i][0])+"="+urlEncode(val));}
+return queryBits.join("&");};HttpPostDataLayout.prototype.ignoresThrowable=function(loggingEvent){return false;};HttpPostDataLayout.prototype.toString=function(){return"HttpPostDataLayout";};log4javascript.HttpPostDataLayout=HttpPostDataLayout;function formatObjectExpansion(obj,depth,indentation){var objectsExpanded=[];function doFormat(obj,depth,indentation){var i,j,len,childDepth,childIndentation,childLines,expansion,childExpansion;if(!indentation){indentation="";}
+function formatString(text){var lines=splitIntoLines(text);for(var j=1,jLen=lines.length;j<jLen;j++){lines[j]=indentation+lines[j];}
+return lines.join(newLine);}
+if(obj===null){return"null";}else if(typeof obj=="undefined"){return"undefined";}else if(typeof obj=="string"){return formatString(obj);}else if(typeof obj=="object"&&array_contains(objectsExpanded,obj)){try{expansion=toStr(obj);}catch(ex){expansion="Error formatting property. Details: "+getExceptionStringRep(ex);}
+return expansion+" [already expanded]";}else if((obj instanceof Array)&&depth>0){objectsExpanded.push(obj);expansion="["+newLine;childDepth=depth-1;childIndentation=indentation+" ";childLines=[];for(i=0,len=obj.length;i<len;i++){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+childExpansion);}catch(ex){childLines.push(childIndentation+"Error formatting array member. Details: "+
+getExceptionStringRep(ex)+"");}}
+expansion+=childLines.join(","+newLine)+newLine+indentation+"]";return expansion;}else if(Object.prototype.toString.call(obj)=="[object Date]"){return obj.toString();}else if(typeof obj=="object"&&depth>0){objectsExpanded.push(obj);expansion="{"+newLine;childDepth=depth-1;childIndentation=indentation+" ";childLines=[];for(i in obj){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+i+": "+childExpansion);}catch(ex){childLines.push(childIndentation+i+": Error formatting property. Details: "+
+getExceptionStringRep(ex));}}
+expansion+=childLines.join(","+newLine)+newLine+indentation+"}";return expansion;}else{return formatString(toStr(obj));}}
+return doFormat(obj,depth,indentation);}
+var SimpleDateFormat;(function(){var regex=/('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;var monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];var dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var TEXT2=0,TEXT3=1,NUMBER=2,YEAR=3,MONTH=4,TIMEZONE=5;var types={G:TEXT2,y:YEAR,M:MONTH,w:NUMBER,W:NUMBER,D:NUMBER,d:NUMBER,F:NUMBER,E:TEXT3,a:TEXT2,H:NUMBER,k:NUMBER,K:NUMBER,h:NUMBER,m:NUMBER,s:NUMBER,S:NUMBER,Z:TIMEZONE};var ONE_DAY=24*60*60*1000;var ONE_WEEK=7*ONE_DAY;var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK=1;var newDateAtMidnight=function(year,month,day){var d=new Date(year,month,day,0,0,0);d.setMilliseconds(0);return d;};Date.prototype.getDifference=function(date){return this.getTime()-date.getTime();};Date.prototype.isBefore=function(d){return this.getTime()<d.getTime();};Date.prototype.getUTCTime=function(){return Date.UTC(this.getFullYear(),this.getMonth(),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds(),this.getMilliseconds());};Date.prototype.getTimeSince=function(d){return this.getUTCTime()-d.getUTCTime();};Date.prototype.getPreviousSunday=function(){var midday=new Date(this.getFullYear(),this.getMonth(),this.getDate(),12,0,0);var previousSunday=new Date(midday.getTime()-this.getDay()*ONE_DAY);return newDateAtMidnight(previousSunday.getFullYear(),previousSunday.getMonth(),previousSunday.getDate());};Date.prototype.getWeekInYear=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}
+var previousSunday=this.getPreviousSunday();var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);var numberOfSundays=previousSunday.isBefore(startOfYear)?0:1+Math.floor(previousSunday.getTimeSince(startOfYear)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfYear.getDay();var weekInYear=numberOfSundays;if(numberOfDaysInFirstWeek<minimalDaysInFirstWeek){weekInYear--;}
+return weekInYear;};Date.prototype.getWeekInMonth=function(minimalDaysInFirstWeek){if(isUndefined(this.minimalDaysInFirstWeek)){minimalDaysInFirstWeek=DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;}
+var previousSunday=this.getPreviousSunday();var startOfMonth=newDateAtMidnight(this.getFullYear(),this.getMonth(),1);var numberOfSundays=previousSunday.isBefore(startOfMonth)?0:1+Math.floor(previousSunday.getTimeSince(startOfMonth)/ONE_WEEK);var numberOfDaysInFirstWeek=7-startOfMonth.getDay();var weekInMonth=numberOfSundays;if(numberOfDaysInFirstWeek>=minimalDaysInFirstWeek){weekInMonth++;}
+return weekInMonth;};Date.prototype.getDayInYear=function(){var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);return 1+Math.floor(this.getTimeSince(startOfYear)/ONE_DAY);};SimpleDateFormat=function(formatString){this.formatString=formatString;};SimpleDateFormat.prototype.setMinimalDaysInFirstWeek=function(days){this.minimalDaysInFirstWeek=days;};SimpleDateFormat.prototype.getMinimalDaysInFirstWeek=function(){return isUndefined(this.minimalDaysInFirstWeek)?DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK:this.minimalDaysInFirstWeek;};var padWithZeroes=function(str,len){while(str.length<len){str="0"+str;}
+return str;};var formatText=function(data,numberOfLetters,minLength){return(numberOfLetters>=4)?data:data.substr(0,Math.max(minLength,numberOfLetters));};var formatNumber=function(data,numberOfLetters){var dataString=""+data;return padWithZeroes(dataString,numberOfLetters);};SimpleDateFormat.prototype.format=function(date){var formattedString="";var result;var searchString=this.formatString;while((result=regex.exec(searchString))){var quotedString=result[1];var patternLetters=result[2];var otherLetters=result[3];var otherCharacters=result[4];if(quotedString){if(quotedString=="''"){formattedString+="'";}else{formattedString+=quotedString.substring(1,quotedString.length-1);}}else if(otherLetters){}else if(otherCharacters){formattedString+=otherCharacters;}else if(patternLetters){var patternLetter=patternLetters.charAt(0);var numberOfLetters=patternLetters.length;var rawData="";switch(patternLetter){case"G":rawData="AD";break;case"y":rawData=date.getFullYear();break;case"M":rawData=date.getMonth();break;case"w":rawData=date.getWeekInYear(this.getMinimalDaysInFirstWeek());break;case"W":rawData=date.getWeekInMonth(this.getMinimalDaysInFirstWeek());break;case"D":rawData=date.getDayInYear();break;case"d":rawData=date.getDate();break;case"F":rawData=1+Math.floor((date.getDate()-1)/7);break;case"E":rawData=dayNames[date.getDay()];break;case"a":rawData=(date.getHours()>=12)?"PM":"AM";break;case"H":rawData=date.getHours();break;case"k":rawData=date.getHours()||24;break;case"K":rawData=date.getHours()%12;break;case"h":rawData=(date.getHours()%12)||12;break;case"m":rawData=date.getMinutes();break;case"s":rawData=date.getSeconds();break;case"S":rawData=date.getMilliseconds();break;case"Z":rawData=date.getTimezoneOffset();break;}
+switch(types[patternLetter]){case TEXT2:formattedString+=formatText(rawData,numberOfLetters,2);break;case TEXT3:formattedString+=formatText(rawData,numberOfLetters,3);break;case NUMBER:formattedString+=formatNumber(rawData,numberOfLetters);break;case YEAR:if(numberOfLetters<=3){var dataString=""+rawData;formattedString+=dataString.substr(2,2);}else{formattedString+=formatNumber(rawData,numberOfLetters);}
+break;case MONTH:if(numberOfLetters>=3){formattedString+=formatText(monthNames[rawData],numberOfLetters,numberOfLetters);}else{formattedString+=formatNumber(rawData+1,numberOfLetters);}
+break;case TIMEZONE:var isPositive=(rawData>0);var prefix=isPositive?"-":"+";var absData=Math.abs(rawData);var hours=""+Math.floor(absData/60);hours=padWithZeroes(hours,2);var minutes=""+(absData%60);minutes=padWithZeroes(minutes,2);formattedString+=prefix+hours+minutes;break;}}
+searchString=searchString.substr(result.index+result[0].length);}
+return formattedString;};})();log4javascript.SimpleDateFormat=SimpleDateFormat;function PatternLayout(pattern){if(pattern){this.pattern=pattern;}else{this.pattern=PatternLayout.DEFAULT_CONVERSION_PATTERN;}
+this.customFields=[];}
+PatternLayout.TTCC_CONVERSION_PATTERN="%r %p %c - %m%n";PatternLayout.DEFAULT_CONVERSION_PATTERN="%m%n";PatternLayout.ISO8601_DATEFORMAT="yyyy-MM-dd HH:mm:ss,SSS";PatternLayout.DATETIME_DATEFORMAT="dd MMM yyyy HH:mm:ss,SSS";PatternLayout.ABSOLUTETIME_DATEFORMAT="HH:mm:ss,SSS";PatternLayout.prototype=new Layout();PatternLayout.prototype.format=function(loggingEvent){var regex=/%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;var formattedString="";var result;var searchString=this.pattern;while((result=regex.exec(searchString))){var matchedString=result[0];var padding=result[1];var truncation=result[2];var conversionCharacter=result[3];var specifier=result[5];var text=result[6];if(text){formattedString+=""+text;}else{var replacement="";switch(conversionCharacter){case"a":case"m":var depth=0;if(specifier){depth=parseInt(specifier,10);if(isNaN(depth)){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character '"+conversionCharacter+"' - should be a number");depth=0;}}
+var messages=(conversionCharacter==="a")?loggingEvent.messages[0]:loggingEvent.messages;for(var i=0,len=messages.length;i<len;i++){if(i>0&&(replacement.charAt(replacement.length-1)!==" ")){replacement+=" ";}
+if(depth===0){replacement+=messages[i];}else{replacement+=formatObjectExpansion(messages[i],depth);}}
+break;case"c":var loggerName=loggingEvent.logger.name;if(specifier){var precision=parseInt(specifier,10);var loggerNameBits=loggingEvent.logger.name.split(".");if(precision>=loggerNameBits.length){replacement=loggerName;}else{replacement=loggerNameBits.slice(loggerNameBits.length-precision).join(".");}}else{replacement=loggerName;}
+break;case"d":var dateFormat=PatternLayout.ISO8601_DATEFORMAT;if(specifier){dateFormat=specifier;if(dateFormat=="ISO8601"){dateFormat=PatternLayout.ISO8601_DATEFORMAT;}else if(dateFormat=="ABSOLUTE"){dateFormat=PatternLayout.ABSOLUTETIME_DATEFORMAT;}else if(dateFormat=="DATE"){dateFormat=PatternLayout.DATETIME_DATEFORMAT;}}
+replacement=(new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);break;case"f":if(this.hasCustomFields()){var fieldIndex=0;if(specifier){fieldIndex=parseInt(specifier,10);if(isNaN(fieldIndex)){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character 'f' - should be a number");}else if(fieldIndex===0){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character 'f' - must be greater than zero");}else if(fieldIndex>this.customFields.length){handleError("PatternLayout.format: invalid specifier '"+
+specifier+"' for conversion character 'f' - there aren't that many custom fields");}else{fieldIndex=fieldIndex-1;}}
+var val=this.customFields[fieldIndex].value;if(typeof val=="function"){val=val(this,loggingEvent);}
+replacement=val;}
+break;case"n":replacement=newLine;break;case"p":replacement=loggingEvent.level.name;break;case"r":replacement=""+loggingEvent.timeStamp.getDifference(applicationStartDate);break;case"%":replacement="%";break;default:replacement=matchedString;break;}
+var l;if(truncation){l=parseInt(truncation.substr(1),10);var strLen=replacement.length;if(l<strLen){replacement=replacement.substring(strLen-l,strLen);}}
+if(padding){if(padding.charAt(0)=="-"){l=parseInt(padding.substr(1),10);while(replacement.length<l){replacement+=" ";}}else{l=parseInt(padding,10);while(replacement.length<l){replacement=" "+replacement;}}}
+formattedString+=replacement;}
+searchString=searchString.substr(result.index+result[0].length);}
+return formattedString;};PatternLayout.prototype.ignoresThrowable=function(){return true;};PatternLayout.prototype.toString=function(){return"PatternLayout";};log4javascript.PatternLayout=PatternLayout;function AlertAppender(){}
+AlertAppender.prototype=new Appender();AlertAppender.prototype.layout=new SimpleLayout();AlertAppender.prototype.append=function(loggingEvent){var formattedMessage=this.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}
+alert(formattedMessage);};AlertAppender.prototype.toString=function(){return"AlertAppender";};log4javascript.AlertAppender=AlertAppender;function BrowserConsoleAppender(){}
+BrowserConsoleAppender.prototype=new log4javascript.Appender();BrowserConsoleAppender.prototype.layout=new NullLayout();BrowserConsoleAppender.prototype.threshold=Level.DEBUG;BrowserConsoleAppender.prototype.append=function(loggingEvent){var appender=this;var getFormattedMessage=function(){var layout=appender.getLayout();var formattedMessage=layout.format(loggingEvent);if(layout.ignoresThrowable()&&loggingEvent.exception){formattedMessage+=loggingEvent.getThrowableStrRep();}
+return formattedMessage;};if((typeof opera!="undefined")&&opera.postError){opera.postError(getFormattedMessage());}else if(window.console&&window.console.log){var formattedMesage=getFormattedMessage();if(window.console.debug&&Level.DEBUG.isGreaterOrEqual(loggingEvent.level)){window.console.debug(formattedMesage);}else if(window.console.info&&Level.INFO.equals(loggingEvent.level)){window.console.info(formattedMesage);}else if(window.console.warn&&Level.WARN.equals(loggingEvent.level)){window.console.warn(formattedMesage);}else if(window.console.error&&loggingEvent.level.isGreaterOrEqual(Level.ERROR)){window.console.error(formattedMesage);}else{window.console.log(formattedMesage);}}};BrowserConsoleAppender.prototype.group=function(name){if(window.console&&window.console.group){window.console.group(name);}};BrowserConsoleAppender.prototype.groupEnd=function(){if(window.console&&window.console.groupEnd){window.console.groupEnd();}};BrowserConsoleAppender.prototype.toString=function(){return"BrowserConsoleAppender";};log4javascript.BrowserConsoleAppender=BrowserConsoleAppender;var xmlHttpFactories=[function(){return new XMLHttpRequest();},function(){return new ActiveXObject("Msxml2.XMLHTTP");},function(){return new ActiveXObject("Microsoft.XMLHTTP");}];var getXmlHttp=function(errorHandler){var xmlHttp=null,factory;for(var i=0,len=xmlHttpFactories.length;i<len;i++){factory=xmlHttpFactories[i];try{xmlHttp=factory();getXmlHttp=factory;return xmlHttp;}catch(e){}}
+if(errorHandler){errorHandler();}else{handleError("getXmlHttp: unable to obtain XMLHttpRequest object");}};function isHttpRequestSuccessful(xmlHttp){return isUndefined(xmlHttp.status)||xmlHttp.status===0||(xmlHttp.status>=200&&xmlHttp.status<300)||xmlHttp.status==1223;}
+function AjaxAppender(url){var appender=this;var isSupported=true;if(!url){handleError("AjaxAppender: URL must be specified in constructor");isSupported=false;}
+var timed=this.defaults.timed;var waitForResponse=this.defaults.waitForResponse;var batchSize=this.defaults.batchSize;var timerInterval=this.defaults.timerInterval;var requestSuccessCallback=this.defaults.requestSuccessCallback;var failCallback=this.defaults.failCallback;var postVarName=this.defaults.postVarName;var sendAllOnUnload=this.defaults.sendAllOnUnload;var contentType=this.defaults.contentType;var sessionId=null;var queuedLoggingEvents=[];var queuedRequests=[];var headers=[];var sending=false;var initialized=false;function checkCanConfigure(configOptionName){if(initialized){handleError("AjaxAppender: configuration option '"+
+configOptionName+"' may not be set after the appender has been initialized");return false;}
+return true;}
+this.getSessionId=function(){return sessionId;};this.setSessionId=function(sessionIdParam){sessionId=extractStringFromParam(sessionIdParam,null);this.layout.setCustomField("sessionid",sessionId);};this.setLayout=function(layoutParam){if(checkCanConfigure("layout")){this.layout=layoutParam;if(sessionId!==null){this.setSessionId(sessionId);}}};this.isTimed=function(){return timed;};this.setTimed=function(timedParam){if(checkCanConfigure("timed")){timed=bool(timedParam);}};this.getTimerInterval=function(){return timerInterval;};this.setTimerInterval=function(timerIntervalParam){if(checkCanConfigure("timerInterval")){timerInterval=extractIntFromParam(timerIntervalParam,timerInterval);}};this.isWaitForResponse=function(){return waitForResponse;};this.setWaitForResponse=function(waitForResponseParam){if(checkCanConfigure("waitForResponse")){waitForResponse=bool(waitForResponseParam);}};this.getBatchSize=function(){return batchSize;};this.setBatchSize=function(batchSizeParam){if(checkCanConfigure("batchSize")){batchSize=extractIntFromParam(batchSizeParam,batchSize);}};this.isSendAllOnUnload=function(){return sendAllOnUnload;};this.setSendAllOnUnload=function(sendAllOnUnloadParam){if(checkCanConfigure("sendAllOnUnload")){sendAllOnUnload=extractBooleanFromParam(sendAllOnUnloadParam,sendAllOnUnload);}};this.setRequestSuccessCallback=function(requestSuccessCallbackParam){requestSuccessCallback=extractFunctionFromParam(requestSuccessCallbackParam,requestSuccessCallback);};this.setFailCallback=function(failCallbackParam){failCallback=extractFunctionFromParam(failCallbackParam,failCallback);};this.getPostVarName=function(){return postVarName;};this.setPostVarName=function(postVarNameParam){if(checkCanConfigure("postVarName")){postVarName=extractStringFromParam(postVarNameParam,postVarName);}};this.getHeaders=function(){return headers;};this.addHeader=function(name,value){if(name.toLowerCase()=="content-type"){contentType=value;}else{headers.push({name:name,value:value});}};function sendAll(){if(isSupported&&enabled){sending=true;var currentRequestBatch;if(waitForResponse){if(queuedRequests.length>0){currentRequestBatch=queuedRequests.shift();sendRequest(preparePostData(currentRequestBatch),sendAll);}else{sending=false;if(timed){scheduleSending();}}}else{while((currentRequestBatch=queuedRequests.shift())){sendRequest(preparePostData(currentRequestBatch));}
+sending=false;if(timed){scheduleSending();}}}}
+this.sendAll=sendAll;function sendAllRemaining(){var sendingAnything=false;if(isSupported&&enabled){var actualBatchSize=appender.getLayout().allowBatching()?batchSize:1;var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);if(queuedLoggingEvents.length>=actualBatchSize){queuedRequests.push(batchedLoggingEvents);batchedLoggingEvents=[];}}
+if(batchedLoggingEvents.length>0){queuedRequests.push(batchedLoggingEvents);}
+sendingAnything=(queuedRequests.length>0);waitForResponse=false;timed=false;sendAll();}
+return sendingAnything;}
+this.sendAllRemaining=sendAllRemaining;function preparePostData(batchedLoggingEvents){var formattedMessages=[];var currentLoggingEvent;var postData="";while((currentLoggingEvent=batchedLoggingEvents.shift())){var currentFormattedMessage=appender.getLayout().format(currentLoggingEvent);if(appender.getLayout().ignoresThrowable()){currentFormattedMessage+=currentLoggingEvent.getThrowableStrRep();}
+formattedMessages.push(currentFormattedMessage);}
+if(batchedLoggingEvents.length==1){postData=formattedMessages.join("");}else{postData=appender.getLayout().batchHeader+
+formattedMessages.join(appender.getLayout().batchSeparator)+
+appender.getLayout().batchFooter;}
+if(contentType==appender.defaults.contentType){postData=appender.getLayout().returnsPostData?postData:urlEncode(postVarName)+"="+urlEncode(postData);if(postData.length>0){postData+="&";}
+postData+="layout="+urlEncode(appender.getLayout().toString());}
+return postData;}
+function scheduleSending(){window.setTimeout(sendAll,timerInterval);}
+function xmlHttpErrorHandler(){var msg="AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}}
+function sendRequest(postData,successCallback){try{var xmlHttp=getXmlHttp(xmlHttpErrorHandler);if(isSupported){if(xmlHttp.overrideMimeType){xmlHttp.overrideMimeType(appender.getLayout().getContentType());}
+xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4){if(isHttpRequestSuccessful(xmlHttp)){if(requestSuccessCallback){requestSuccessCallback(xmlHttp);}
+if(successCallback){successCallback(xmlHttp);}}else{var msg="AjaxAppender.append: XMLHttpRequest request to URL "+
+url+" returned status code "+xmlHttp.status;handleError(msg);if(failCallback){failCallback(msg);}}
+xmlHttp.onreadystatechange=emptyFunction;xmlHttp=null;}};xmlHttp.open("POST",url,true);try{for(var i=0,header;header=headers[i++];){xmlHttp.setRequestHeader(header.name,header.value);}
+xmlHttp.setRequestHeader("Content-Type",contentType);}catch(headerEx){var msg="AjaxAppender.append: your browser's XMLHttpRequest implementation"+" does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}
+return;}
+xmlHttp.send(postData);}}catch(ex){var errMsg="AjaxAppender.append: error sending log message to "+url;handleError(errMsg,ex);isSupported=false;if(failCallback){failCallback(errMsg+". Details: "+getExceptionStringRep(ex));}}}
+this.append=function(loggingEvent){if(isSupported){if(!initialized){init();}
+queuedLoggingEvents.push(loggingEvent);var actualBatchSize=this.getLayout().allowBatching()?batchSize:1;if(queuedLoggingEvents.length>=actualBatchSize){var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);}
+queuedRequests.push(batchedLoggingEvents);if(!timed&&(!waitForResponse||(waitForResponse&&!sending))){sendAll();}}}};function init(){initialized=true;if(sendAllOnUnload){var oldBeforeUnload=window.onbeforeunload;window.onbeforeunload=function(){if(oldBeforeUnload){oldBeforeUnload();}
+if(sendAllRemaining()){return"Sending log messages";}};}
+if(timed){scheduleSending();}}}
+AjaxAppender.prototype=new Appender();AjaxAppender.prototype.defaults={waitForResponse:false,timed:false,timerInterval:1000,batchSize:1,sendAllOnUnload:false,requestSuccessCallback:null,failCallback:null,postVarName:"data",contentType:"application/x-www-form-urlencoded"};AjaxAppender.prototype.layout=new HttpPostDataLayout();AjaxAppender.prototype.toString=function(){return"AjaxAppender";};log4javascript.AjaxAppender=AjaxAppender;function setCookie(name,value,days,path){var expires;path=path?"; path="+path:"";if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));expires="; expires="+date.toGMTString();}else{expires="";}
+document.cookie=escape(name)+"="+escape(value)+expires+path;}
+function getCookie(name){var nameEquals=escape(name)+"=";var ca=document.cookie.split(";");for(var i=0,len=ca.length;i<len;i++){var c=ca[i];while(c.charAt(0)===" "){c=c.substring(1,c.length);}
+if(c.indexOf(nameEquals)===0){return unescape(c.substring(nameEquals.length,c.length));}}
+return null;}
+function getBaseUrl(){var scripts=document.getElementsByTagName("script");for(var i=0,len=scripts.length;i<len;++i){if(scripts[i].src.indexOf("log4javascript")!=-1){var lastSlash=scripts[i].src.lastIndexOf("/");return(lastSlash==-1)?"":scripts[i].src.substr(0,lastSlash+1);}}
+return null;}
+function isLoaded(win){try{return bool(win.loaded);}catch(ex){return false;}}
+var ConsoleAppender;(function(){var getConsoleHtmlLines=function(){return['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">','<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">','<head>','<title>log4javascript</title>','<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />','<!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->','<meta http-equiv="X-UA-Compatible" content="IE=7" />','<script type="text/javascript">var isIe = false, isIePre7 = false;</script>','<!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->','<!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->','<script type="text/javascript">','//<![CDATA[','var loggingEnabled=true;var logQueuedEventsTimer=null;var logEntries=[];var logEntriesAndSeparators=[];var logItems=[];var renderDelay=100;var unrenderedLogItemsExist=false;var rootGroup,currentGroup=null;var loaded=false;var currentLogItem=null;var logMainContainer;function copyProperties(obj,props){for(var i in props){obj[i]=props[i];}}','function LogItem(){}','LogItem.prototype={mainContainer:null,wrappedContainer:null,unwrappedContainer:null,group:null,appendToLog:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].appendToLog();}','this.group.update();},doRemove:function(doUpdate,removeFromGroup){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].remove();}','this.unwrappedElementContainer=null;this.wrappedElementContainer=null;this.mainElementContainer=null;}','if(this.group&&removeFromGroup){this.group.removeChild(this,doUpdate);}','if(this===currentLogItem){currentLogItem=null;}},remove:function(doUpdate,removeFromGroup){this.doRemove(doUpdate,removeFromGroup);},render:function(){},accept:function(visitor){visitor.visit(this);},getUnwrappedDomContainer:function(){return this.group.unwrappedElementContainer.contentDiv;},getWrappedDomContainer:function(){return this.group.wrappedElementContainer.contentDiv;},getMainDomContainer:function(){return this.group.mainElementContainer.contentDiv;}};LogItem.serializedItemKeys={LOG_ENTRY:0,GROUP_START:1,GROUP_END:2};function LogItemContainerElement(){}','LogItemContainerElement.prototype={appendToLog:function(){var insertBeforeFirst=(newestAtTop&&this.containerDomNode.hasChildNodes());if(insertBeforeFirst){this.containerDomNode.insertBefore(this.mainDiv,this.containerDomNode.firstChild);}else{this.containerDomNode.appendChild(this.mainDiv);}}};function SeparatorElementContainer(containerDomNode){this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="separator";this.mainDiv.innerHTML=" ";}','SeparatorElementContainer.prototype=new LogItemContainerElement();SeparatorElementContainer.prototype.remove=function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;};function Separator(){this.rendered=false;}','Separator.prototype=new LogItem();copyProperties(Separator.prototype,{render:function(){var containerDomNode=this.group.contentDiv;if(isIe){this.unwrappedElementContainer=new SeparatorElementContainer(this.getUnwrappedDomContainer());this.wrappedElementContainer=new SeparatorElementContainer(this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new SeparatorElementContainer(this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}','this.content=this.formattedMessage;this.rendered=true;}});function GroupElementContainer(group,containerDomNode,isRoot,isWrapped){this.group=group;this.containerDomNode=containerDomNode;this.isRoot=isRoot;this.isWrapped=isWrapped;this.expandable=false;if(this.isRoot){if(isIe){this.contentDiv=logMainContainer.appendChild(document.createElement("div"));this.contentDiv.id=this.isWrapped?"log_wrapped":"log_unwrapped";}else{this.contentDiv=logMainContainer;}}else{var groupElementContainer=this;this.mainDiv=document.createElement("div");this.mainDiv.className="group";this.headingDiv=this.mainDiv.appendChild(document.createElement("div"));this.headingDiv.className="groupheading";this.expander=this.headingDiv.appendChild(document.createElement("span"));this.expander.className="expander unselectable greyedout";this.expander.unselectable=true;var expanderText=this.group.expanded?"-":"+";this.expanderTextNode=this.expander.appendChild(document.createTextNode(expanderText));this.headingDiv.appendChild(document.createTextNode(" "+this.group.name));this.contentDiv=this.mainDiv.appendChild(document.createElement("div"));var contentCssClass=this.group.expanded?"expanded":"collapsed";this.contentDiv.className="groupcontent "+contentCssClass;this.expander.onclick=function(){if(groupElementContainer.group.expandable){groupElementContainer.group.toggleExpanded();}};}}','GroupElementContainer.prototype=new LogItemContainerElement();copyProperties(GroupElementContainer.prototype,{toggleExpanded:function(){if(!this.isRoot){var oldCssClass,newCssClass,expanderText;if(this.group.expanded){newCssClass="expanded";oldCssClass="collapsed";expanderText="-";}else{newCssClass="collapsed";oldCssClass="expanded";expanderText="+";}','replaceClass(this.contentDiv,newCssClass,oldCssClass);this.expanderTextNode.nodeValue=expanderText;}},remove:function(){if(!this.isRoot){this.headingDiv=null;this.expander.onclick=null;this.expander=null;this.expanderTextNode=null;this.contentDiv=null;this.containerDomNode=null;this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;}},reverseChildren:function(){var node=null;var childDomNodes=[];while((node=this.contentDiv.firstChild)){this.contentDiv.removeChild(node);childDomNodes.push(node);}','while((node=childDomNodes.pop())){this.contentDiv.appendChild(node);}},update:function(){if(!this.isRoot){if(this.group.expandable){removeClass(this.expander,"greyedout");}else{addClass(this.expander,"greyedout");}}},clear:function(){if(this.isRoot){this.contentDiv.innerHTML="";}}});function Group(name,isRoot,initiallyExpanded){this.name=name;this.group=null;this.isRoot=isRoot;this.initiallyExpanded=initiallyExpanded;this.elementContainers=[];this.children=[];this.expanded=initiallyExpanded;this.rendered=false;this.expandable=false;}','Group.prototype=new LogItem();copyProperties(Group.prototype,{addChild:function(logItem){this.children.push(logItem);logItem.group=this;},render:function(){if(isIe){var unwrappedDomContainer,wrappedDomContainer;if(this.isRoot){unwrappedDomContainer=logMainContainer;wrappedDomContainer=logMainContainer;}else{unwrappedDomContainer=this.getUnwrappedDomContainer();wrappedDomContainer=this.getWrappedDomContainer();}','this.unwrappedElementContainer=new GroupElementContainer(this,unwrappedDomContainer,this.isRoot,false);this.wrappedElementContainer=new GroupElementContainer(this,wrappedDomContainer,this.isRoot,true);this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{var mainDomContainer=this.isRoot?logMainContainer:this.getMainDomContainer();this.mainElementContainer=new GroupElementContainer(this,mainDomContainer,this.isRoot,false);this.elementContainers=[this.mainElementContainer];}','this.rendered=true;},toggleExpanded:function(){this.expanded=!this.expanded;for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].toggleExpanded();}},expand:function(){if(!this.expanded){this.toggleExpanded();}},accept:function(visitor){visitor.visitGroup(this);},reverseChildren:function(){if(this.rendered){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].reverseChildren();}}},update:function(){var previouslyExpandable=this.expandable;this.expandable=(this.children.length!==0);if(this.expandable!==previouslyExpandable){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].update();}}},flatten:function(){var visitor=new GroupFlattener();this.accept(visitor);return visitor.logEntriesAndSeparators;},removeChild:function(child,doUpdate){array_remove(this.children,child);child.group=null;if(doUpdate){this.update();}},remove:function(doUpdate,removeFromGroup){for(var i=0,len=this.children.length;i<len;i++){this.children[i].remove(false,false);}','this.children=[];this.update();if(this===currentGroup){currentGroup=this.group;}','this.doRemove(doUpdate,removeFromGroup);},serialize:function(items){items.push([LogItem.serializedItemKeys.GROUP_START,this.name]);for(var i=0,len=this.children.length;i<len;i++){this.children[i].serialize(items);}','if(this!==currentGroup){items.push([LogItem.serializedItemKeys.GROUP_END]);}},clear:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clear();}}});function LogEntryElementContainer(){}','LogEntryElementContainer.prototype=new LogItemContainerElement();copyProperties(LogEntryElementContainer.prototype,{remove:function(){this.doRemove();},doRemove:function(){this.mainDiv.parentNode.removeChild(this.mainDiv);this.mainDiv=null;this.contentElement=null;this.containerDomNode=null;},setContent:function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=content;}},setSearchMatch:function(isMatch){var oldCssClass=isMatch?"searchnonmatch":"searchmatch";var newCssClass=isMatch?"searchmatch":"searchnonmatch";replaceClass(this.mainDiv,newCssClass,oldCssClass);},clearSearch:function(){removeClass(this.mainDiv,"searchmatch");removeClass(this.mainDiv,"searchnonmatch");}});function LogEntryWrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.mainDiv.className="logentry wrapped "+this.logEntry.level;this.contentElement=this.mainDiv;}','LogEntryWrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryWrappedElementContainer.prototype.setContent=function(content,wrappedContent){if(content===this.formattedMessage){this.contentElement.innerHTML="";this.contentElement.appendChild(document.createTextNode(this.formattedMessage));}else{this.contentElement.innerHTML=wrappedContent;}};function LogEntryUnwrappedElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry unwrapped "+this.logEntry.level;this.pre=this.mainDiv.appendChild(document.createElement("pre"));this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));this.pre.className="unwrapped";this.contentElement=this.pre;}','LogEntryUnwrappedElementContainer.prototype=new LogEntryElementContainer();LogEntryUnwrappedElementContainer.prototype.remove=function(){this.doRemove();this.pre=null;};function LogEntryMainElementContainer(logEntry,containerDomNode){this.logEntry=logEntry;this.containerDomNode=containerDomNode;this.mainDiv=document.createElement("div");this.mainDiv.className="logentry nonielogentry "+this.logEntry.level;this.contentElement=this.mainDiv.appendChild(document.createElement("span"));this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));}','LogEntryMainElementContainer.prototype=new LogEntryElementContainer();function LogEntry(level,formattedMessage){this.level=level;this.formattedMessage=formattedMessage;this.rendered=false;}','LogEntry.prototype=new LogItem();copyProperties(LogEntry.prototype,{render:function(){var logEntry=this;var containerDomNode=this.group.contentDiv;if(isIe){this.formattedMessage=this.formattedMessage.replace(/\\r\\n/g,"\\r");this.unwrappedElementContainer=new LogEntryUnwrappedElementContainer(this,this.getUnwrappedDomContainer());this.wrappedElementContainer=new LogEntryWrappedElementContainer(this,this.getWrappedDomContainer());this.elementContainers=[this.unwrappedElementContainer,this.wrappedElementContainer];}else{this.mainElementContainer=new LogEntryMainElementContainer(this,this.getMainDomContainer());this.elementContainers=[this.mainElementContainer];}','this.content=this.formattedMessage;this.rendered=true;},setContent:function(content,wrappedContent){if(content!=this.content){if(isIe&&(content!==this.formattedMessage)){content=content.replace(/\\r\\n/g,"\\r");}','for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setContent(content,wrappedContent);}','this.content=content;}},getSearchMatches:function(){var matches=[];var i,len;if(isIe){var unwrappedEls=getElementsByClass(this.unwrappedElementContainer.mainDiv,"searchterm","span");var wrappedEls=getElementsByClass(this.wrappedElementContainer.mainDiv,"searchterm","span");for(i=0,len=unwrappedEls.length;i<len;i++){matches[i]=new Match(this.level,null,unwrappedEls[i],wrappedEls[i]);}}else{var els=getElementsByClass(this.mainElementContainer.mainDiv,"searchterm","span");for(i=0,len=els.length;i<len;i++){matches[i]=new Match(this.level,els[i]);}}','return matches;},setSearchMatch:function(isMatch){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].setSearchMatch(isMatch);}},clearSearch:function(){for(var i=0,len=this.elementContainers.length;i<len;i++){this.elementContainers[i].clearSearch();}},accept:function(visitor){visitor.visitLogEntry(this);},serialize:function(items){items.push([LogItem.serializedItemKeys.LOG_ENTRY,this.level,this.formattedMessage]);}});function LogItemVisitor(){}','LogItemVisitor.prototype={visit:function(logItem){},visitParent:function(logItem){if(logItem.group){logItem.group.accept(this);}},visitChildren:function(logItem){for(var i=0,len=logItem.children.length;i<len;i++){logItem.children[i].accept(this);}},visitLogEntry:function(logEntry){this.visit(logEntry);},visitSeparator:function(separator){this.visit(separator);},visitGroup:function(group){this.visit(group);}};function GroupFlattener(){this.logEntriesAndSeparators=[];}','GroupFlattener.prototype=new LogItemVisitor();GroupFlattener.prototype.visitGroup=function(group){this.visitChildren(group);};GroupFlattener.prototype.visitLogEntry=function(logEntry){this.logEntriesAndSeparators.push(logEntry);};GroupFlattener.prototype.visitSeparator=function(separator){this.logEntriesAndSeparators.push(separator);};window.onload=function(){if(location.search){var queryBits=unescape(location.search).substr(1).split("&"),nameValueBits;for(var i=0,len=queryBits.length;i<len;i++){nameValueBits=queryBits[i].split("=");if(nameValueBits[0]=="log4javascript_domain"){document.domain=nameValueBits[1];break;}}}','logMainContainer=$("log");if(isIePre7){addClass(logMainContainer,"oldIe");}','rootGroup=new Group("root",true);rootGroup.render();currentGroup=rootGroup;setCommandInputWidth();setLogContainerHeight();toggleLoggingEnabled();toggleSearchEnabled();toggleSearchFilter();toggleSearchHighlight();applyFilters();checkAllLevels();toggleWrap();toggleNewestAtTop();toggleScrollToLatest();renderQueuedLogItems();loaded=true;$("command").value="";$("command").autocomplete="off";$("command").onkeydown=function(evt){evt=getEvent(evt);if(evt.keyCode==10||evt.keyCode==13){evalCommandLine();stopPropagation(evt);}else if(evt.keyCode==27){this.value="";this.focus();}else if(evt.keyCode==38&&commandHistory.length>0){currentCommandIndex=Math.max(0,currentCommandIndex-1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}else if(evt.keyCode==40&&commandHistory.length>0){currentCommandIndex=Math.min(commandHistory.length-1,currentCommandIndex+1);this.value=commandHistory[currentCommandIndex];moveCaretToEnd(this);}};$("command").onkeypress=function(evt){evt=getEvent(evt);if(evt.keyCode==38&&commandHistory.length>0&&evt.preventDefault){evt.preventDefault();}};$("command").onkeyup=function(evt){evt=getEvent(evt);if(evt.keyCode==27&&evt.preventDefault){evt.preventDefault();this.focus();}};document.onkeydown=function keyEventHandler(evt){evt=getEvent(evt);switch(evt.keyCode){case 69:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){evalLastCommand();cancelKeyEvent(evt);return false;}','break;case 75:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusSearch();cancelKeyEvent(evt);return false;}','break;case 40:case 76:if(evt.shiftKey&&(evt.ctrlKey||evt.metaKey)){focusCommandLine();cancelKeyEvent(evt);return false;}','break;}};setTimeout(setLogContainerHeight,20);setShowCommandLine(showCommandLine);doSearch();};window.onunload=function(){if(mainWindowExists()){appender.unload();}','appender=null;};function toggleLoggingEnabled(){setLoggingEnabled($("enableLogging").checked);}','function setLoggingEnabled(enable){loggingEnabled=enable;}','var appender=null;function setAppender(appenderParam){appender=appenderParam;}','function setShowCloseButton(showCloseButton){$("closeButton").style.display=showCloseButton?"inline":"none";}','function setShowHideButton(showHideButton){$("hideButton").style.display=showHideButton?"inline":"none";}','var newestAtTop=false;function LogItemContentReverser(){}','LogItemContentReverser.prototype=new LogItemVisitor();LogItemContentReverser.prototype.visitGroup=function(group){group.reverseChildren();this.visitChildren(group);};function setNewestAtTop(isNewestAtTop){var oldNewestAtTop=newestAtTop;var i,iLen,j,jLen;newestAtTop=Boolean(isNewestAtTop);if(oldNewestAtTop!=newestAtTop){var visitor=new LogItemContentReverser();rootGroup.accept(visitor);if(currentSearch){var currentMatch=currentSearch.matches[currentMatchIndex];var matchIndex=0;var matches=[];var actOnLogEntry=function(logEntry){var logEntryMatches=logEntry.getSearchMatches();for(j=0,jLen=logEntryMatches.length;j<jLen;j++){matches[matchIndex]=logEntryMatches[j];if(currentMatch&&logEntryMatches[j].equals(currentMatch)){currentMatchIndex=matchIndex;}','matchIndex++;}};if(newestAtTop){for(i=logEntries.length-1;i>=0;i--){actOnLogEntry(logEntries[i]);}}else{for(i=0,iLen=logEntries.length;i<iLen;i++){actOnLogEntry(logEntries[i]);}}','currentSearch.matches=matches;if(currentMatch){currentMatch.setCurrent();}}else if(scrollToLatest){doScrollToLatest();}}','$("newestAtTop").checked=isNewestAtTop;}','function toggleNewestAtTop(){var isNewestAtTop=$("newestAtTop").checked;setNewestAtTop(isNewestAtTop);}','var scrollToLatest=true;function setScrollToLatest(isScrollToLatest){scrollToLatest=isScrollToLatest;if(scrollToLatest){doScrollToLatest();}','$("scrollToLatest").checked=isScrollToLatest;}','function toggleScrollToLatest(){var isScrollToLatest=$("scrollToLatest").checked;setScrollToLatest(isScrollToLatest);}','function doScrollToLatest(){var l=logMainContainer;if(typeof l.scrollTop!="undefined"){if(newestAtTop){l.scrollTop=0;}else{var latestLogEntry=l.lastChild;if(latestLogEntry){l.scrollTop=l.scrollHeight;}}}}','var closeIfOpenerCloses=true;function setCloseIfOpenerCloses(isCloseIfOpenerCloses){closeIfOpenerCloses=isCloseIfOpenerCloses;}','var maxMessages=null;function setMaxMessages(max){maxMessages=max;pruneLogEntries();}','var showCommandLine=false;function setShowCommandLine(isShowCommandLine){showCommandLine=isShowCommandLine;if(loaded){$("commandLine").style.display=showCommandLine?"block":"none";setCommandInputWidth();setLogContainerHeight();}}','function focusCommandLine(){if(loaded){$("command").focus();}}','function focusSearch(){if(loaded){$("searchBox").focus();}}','function getLogItems(){var items=[];for(var i=0,len=logItems.length;i<len;i++){logItems[i].serialize(items);}','return items;}','function setLogItems(items){var loggingReallyEnabled=loggingEnabled;loggingEnabled=true;for(var i=0,len=items.length;i<len;i++){switch(items[i][0]){case LogItem.serializedItemKeys.LOG_ENTRY:log(items[i][1],items[i][2]);break;case LogItem.serializedItemKeys.GROUP_START:group(items[i][1]);break;case LogItem.serializedItemKeys.GROUP_END:groupEnd();break;}}','loggingEnabled=loggingReallyEnabled;}','function log(logLevel,formattedMessage){if(loggingEnabled){var logEntry=new LogEntry(logLevel,formattedMessage);logEntries.push(logEntry);logEntriesAndSeparators.push(logEntry);logItems.push(logEntry);currentGroup.addChild(logEntry);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}','logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}','function renderQueuedLogItems(){logQueuedEventsTimer=null;var pruned=pruneLogEntries();var initiallyHasMatches=currentSearch?currentSearch.hasMatches():false;for(var i=0,len=logItems.length;i<len;i++){if(!logItems[i].rendered){logItems[i].render();logItems[i].appendToLog();if(currentSearch&&(logItems[i]instanceof LogEntry)){currentSearch.applyTo(logItems[i]);}}}','if(currentSearch){if(pruned){if(currentSearch.hasVisibleMatches()){if(currentMatchIndex===null){setCurrentMatchIndex(0);}','displayMatches();}else{displayNoMatches();}}else if(!initiallyHasMatches&¤tSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}}','if(scrollToLatest){doScrollToLatest();}','unrenderedLogItemsExist=false;}','function pruneLogEntries(){if((maxMessages!==null)&&(logEntriesAndSeparators.length>maxMessages)){var numberToDelete=logEntriesAndSeparators.length-maxMessages;var prunedLogEntries=logEntriesAndSeparators.slice(0,numberToDelete);if(currentSearch){currentSearch.removeMatches(prunedLogEntries);}','var group;for(var i=0;i<numberToDelete;i++){group=logEntriesAndSeparators[i].group;array_remove(logItems,logEntriesAndSeparators[i]);array_remove(logEntries,logEntriesAndSeparators[i]);logEntriesAndSeparators[i].remove(true,true);if(group.children.length===0&&group!==currentGroup&&group!==rootGroup){array_remove(logItems,group);group.remove(true,true);}}','logEntriesAndSeparators=array_removeFromStart(logEntriesAndSeparators,numberToDelete);return true;}','return false;}','function group(name,startExpanded){if(loggingEnabled){initiallyExpanded=(typeof startExpanded==="undefined")?true:Boolean(startExpanded);var newGroup=new Group(name,false,initiallyExpanded);currentGroup.addChild(newGroup);currentGroup=newGroup;logItems.push(newGroup);if(loaded){if(logQueuedEventsTimer!==null){clearTimeout(logQueuedEventsTimer);}','logQueuedEventsTimer=setTimeout(renderQueuedLogItems,renderDelay);unrenderedLogItemsExist=true;}}}','function groupEnd(){currentGroup=(currentGroup===rootGroup)?rootGroup:currentGroup.group;}','function mainPageReloaded(){currentGroup=rootGroup;var separator=new Separator();logEntriesAndSeparators.push(separator);logItems.push(separator);currentGroup.addChild(separator);}','function closeWindow(){if(appender&&mainWindowExists()){appender.close(true);}else{window.close();}}','function hide(){if(appender&&mainWindowExists()){appender.hide();}}','var mainWindow=window;var windowId="log4javascriptConsoleWindow_"+new Date().getTime()+"_"+(""+Math.random()).substr(2);function setMainWindow(win){mainWindow=win;mainWindow[windowId]=window;if(opener&&closeIfOpenerCloses){pollOpener();}}','function pollOpener(){if(closeIfOpenerCloses){if(mainWindowExists()){setTimeout(pollOpener,500);}else{closeWindow();}}}','function mainWindowExists(){try{return(mainWindow&&!mainWindow.closed&&mainWindow[windowId]==window);}catch(ex){}','return false;}','var logLevels=["TRACE","DEBUG","INFO","WARN","ERROR","FATAL"];function getCheckBox(logLevel){return $("switch_"+logLevel);}','function getIeWrappedLogContainer(){return $("log_wrapped");}','function getIeUnwrappedLogContainer(){return $("log_unwrapped");}','function applyFilters(){for(var i=0;i<logLevels.length;i++){if(getCheckBox(logLevels[i]).checked){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}','updateSearchFromFilters();}','function toggleAllLevels(){var turnOn=$("switch_ALL").checked;for(var i=0;i<logLevels.length;i++){getCheckBox(logLevels[i]).checked=turnOn;if(turnOn){addClass(logMainContainer,logLevels[i]);}else{removeClass(logMainContainer,logLevels[i]);}}}','function checkAllLevels(){for(var i=0;i<logLevels.length;i++){if(!getCheckBox(logLevels[i]).checked){getCheckBox("ALL").checked=false;return;}}','getCheckBox("ALL").checked=true;}','function clearLog(){rootGroup.clear();currentGroup=rootGroup;logEntries=[];logItems=[];logEntriesAndSeparators=[];doSearch();}','function toggleWrap(){var enable=$("wrap").checked;if(enable){addClass(logMainContainer,"wrap");}else{removeClass(logMainContainer,"wrap");}','refreshCurrentMatch();}','var searchTimer=null;function scheduleSearch(){try{clearTimeout(searchTimer);}catch(ex){}','searchTimer=setTimeout(doSearch,500);}','function Search(searchTerm,isRegex,searchRegex,isCaseSensitive){this.searchTerm=searchTerm;this.isRegex=isRegex;this.searchRegex=searchRegex;this.isCaseSensitive=isCaseSensitive;this.matches=[];}','Search.prototype={hasMatches:function(){return this.matches.length>0;},hasVisibleMatches:function(){if(this.hasMatches()){for(var i=0;i<this.matches.length;i++){if(this.matches[i].isVisible()){return true;}}}','return false;},match:function(logEntry){var entryText=String(logEntry.formattedMessage);var matchesSearch=false;if(this.isRegex){matchesSearch=this.searchRegex.test(entryText);}else if(this.isCaseSensitive){matchesSearch=(entryText.indexOf(this.searchTerm)>-1);}else{matchesSearch=(entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase())>-1);}','return matchesSearch;},getNextVisibleMatchIndex:function(){for(var i=currentMatchIndex+1;i<this.matches.length;i++){if(this.matches[i].isVisible()){return i;}}','for(i=0;i<=currentMatchIndex;i++){if(this.matches[i].isVisible()){return i;}}','return-1;},getPreviousVisibleMatchIndex:function(){for(var i=currentMatchIndex-1;i>=0;i--){if(this.matches[i].isVisible()){return i;}}','for(var i=this.matches.length-1;i>=currentMatchIndex;i--){if(this.matches[i].isVisible()){return i;}}','return-1;},applyTo:function(logEntry){var doesMatch=this.match(logEntry);if(doesMatch){logEntry.group.expand();logEntry.setSearchMatch(true);var logEntryContent;var wrappedLogEntryContent;var searchTermReplacementStartTag="<span class=\\\"searchterm\\\">";var searchTermReplacementEndTag="<"+"/span>";var preTagName=isIe?"pre":"span";var preStartTag="<"+preTagName+" class=\\\"pre\\\">";var preEndTag="<"+"/"+preTagName+">";var startIndex=0;var searchIndex,matchedText,textBeforeMatch;if(this.isRegex){var flags=this.isCaseSensitive?"g":"gi";var capturingRegex=new RegExp("("+this.searchRegex.source+")",flags);var rnd=(""+Math.random()).substr(2);var startToken="%%s"+rnd+"%%";var endToken="%%e"+rnd+"%%";logEntryContent=logEntry.formattedMessage.replace(capturingRegex,startToken+"$1"+endToken);logEntryContent=escapeHtml(logEntryContent);var result;var searchString=logEntryContent;logEntryContent="";wrappedLogEntryContent="";while((searchIndex=searchString.indexOf(startToken,startIndex))>-1){var endTokenIndex=searchString.indexOf(endToken,searchIndex);matchedText=searchString.substring(searchIndex+startToken.length,endTokenIndex);textBeforeMatch=searchString.substring(startIndex,searchIndex);logEntryContent+=preStartTag+textBeforeMatch+preEndTag;logEntryContent+=searchTermReplacementStartTag+preStartTag+matchedText+','preEndTag+searchTermReplacementEndTag;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+','matchedText+searchTermReplacementEndTag;}','startIndex=endTokenIndex+endToken.length;}','logEntryContent+=preStartTag+searchString.substr(startIndex)+preEndTag;if(isIe){wrappedLogEntryContent+=searchString.substr(startIndex);}}else{logEntryContent="";wrappedLogEntryContent="";var searchTermReplacementLength=searchTermReplacementStartTag.length+','this.searchTerm.length+searchTermReplacementEndTag.length;var searchTermLength=this.searchTerm.length;var searchTermLowerCase=this.searchTerm.toLowerCase();var logTextLowerCase=logEntry.formattedMessage.toLowerCase();while((searchIndex=logTextLowerCase.indexOf(searchTermLowerCase,startIndex))>-1){matchedText=escapeHtml(logEntry.formattedMessage.substr(searchIndex,this.searchTerm.length));textBeforeMatch=escapeHtml(logEntry.formattedMessage.substring(startIndex,searchIndex));var searchTermReplacement=searchTermReplacementStartTag+','preStartTag+matchedText+preEndTag+searchTermReplacementEndTag;logEntryContent+=preStartTag+textBeforeMatch+preEndTag+searchTermReplacement;if(isIe){wrappedLogEntryContent+=textBeforeMatch+searchTermReplacementStartTag+','matchedText+searchTermReplacementEndTag;}','startIndex=searchIndex+searchTermLength;}','var textAfterLastMatch=escapeHtml(logEntry.formattedMessage.substr(startIndex));logEntryContent+=preStartTag+textAfterLastMatch+preEndTag;if(isIe){wrappedLogEntryContent+=textAfterLastMatch;}}','logEntry.setContent(logEntryContent,wrappedLogEntryContent);var logEntryMatches=logEntry.getSearchMatches();this.matches=this.matches.concat(logEntryMatches);}else{logEntry.setSearchMatch(false);logEntry.setContent(logEntry.formattedMessage,logEntry.formattedMessage);}','return doesMatch;},removeMatches:function(logEntries){var matchesToRemoveCount=0;var currentMatchRemoved=false;var matchesToRemove=[];var i,iLen,j,jLen;for(i=0,iLen=this.matches.length;i<iLen;i++){for(j=0,jLen=logEntries.length;j<jLen;j++){if(this.matches[i].belongsTo(logEntries[j])){matchesToRemove.push(this.matches[i]);if(i===currentMatchIndex){currentMatchRemoved=true;}}}}','var newMatch=currentMatchRemoved?null:this.matches[currentMatchIndex];if(currentMatchRemoved){for(i=currentMatchIndex,iLen=this.matches.length;i<iLen;i++){if(this.matches[i].isVisible()&&!array_contains(matchesToRemove,this.matches[i])){newMatch=this.matches[i];break;}}}','for(i=0,iLen=matchesToRemove.length;i<iLen;i++){array_remove(this.matches,matchesToRemove[i]);matchesToRemove[i].remove();}','if(this.hasVisibleMatches()){if(newMatch===null){setCurrentMatchIndex(0);}else{var newMatchIndex=0;for(i=0,iLen=this.matches.length;i<iLen;i++){if(newMatch===this.matches[i]){newMatchIndex=i;break;}}','setCurrentMatchIndex(newMatchIndex);}}else{currentMatchIndex=null;displayNoMatches();}}};function getPageOffsetTop(el,container){var currentEl=el;var y=0;while(currentEl&¤tEl!=container){y+=currentEl.offsetTop;currentEl=currentEl.offsetParent;}','return y;}','function scrollIntoView(el){var logContainer=logMainContainer;if(!$("wrap").checked){var logContainerLeft=logContainer.scrollLeft;var logContainerRight=logContainerLeft+logContainer.offsetWidth;var elLeft=el.offsetLeft;var elRight=elLeft+el.offsetWidth;if(elLeft<logContainerLeft||elRight>logContainerRight){logContainer.scrollLeft=elLeft-(logContainer.offsetWidth-el.offsetWidth)/2;}}','var logContainerTop=logContainer.scrollTop;var logContainerBottom=logContainerTop+logContainer.offsetHeight;var elTop=getPageOffsetTop(el)-getToolBarsHeight();var elBottom=elTop+el.offsetHeight;if(elTop<logContainerTop||elBottom>logContainerBottom){logContainer.scrollTop=elTop-(logContainer.offsetHeight-el.offsetHeight)/2;}}','function Match(logEntryLevel,spanInMainDiv,spanInUnwrappedPre,spanInWrappedDiv){this.logEntryLevel=logEntryLevel;this.spanInMainDiv=spanInMainDiv;if(isIe){this.spanInUnwrappedPre=spanInUnwrappedPre;this.spanInWrappedDiv=spanInWrappedDiv;}','this.mainSpan=isIe?spanInUnwrappedPre:spanInMainDiv;}','Match.prototype={equals:function(match){return this.mainSpan===match.mainSpan;},setCurrent:function(){if(isIe){addClass(this.spanInUnwrappedPre,"currentmatch");addClass(this.spanInWrappedDiv,"currentmatch");var elementToScroll=$("wrap").checked?this.spanInWrappedDiv:this.spanInUnwrappedPre;scrollIntoView(elementToScroll);}else{addClass(this.spanInMainDiv,"currentmatch");scrollIntoView(this.spanInMainDiv);}},belongsTo:function(logEntry){if(isIe){return isDescendant(this.spanInUnwrappedPre,logEntry.unwrappedPre);}else{return isDescendant(this.spanInMainDiv,logEntry.mainDiv);}},setNotCurrent:function(){if(isIe){removeClass(this.spanInUnwrappedPre,"currentmatch");removeClass(this.spanInWrappedDiv,"currentmatch");}else{removeClass(this.spanInMainDiv,"currentmatch");}},isOrphan:function(){return isOrphan(this.mainSpan);},isVisible:function(){return getCheckBox(this.logEntryLevel).checked;},remove:function(){if(isIe){this.spanInUnwrappedPre=null;this.spanInWrappedDiv=null;}else{this.spanInMainDiv=null;}}};var currentSearch=null;var currentMatchIndex=null;function doSearch(){var searchBox=$("searchBox");var searchTerm=searchBox.value;var isRegex=$("searchRegex").checked;var isCaseSensitive=$("searchCaseSensitive").checked;var i;if(searchTerm===""){$("searchReset").disabled=true;$("searchNav").style.display="none";removeClass(document.body,"searching");removeClass(searchBox,"hasmatches");removeClass(searchBox,"nomatches");for(i=0;i<logEntries.length;i++){logEntries[i].clearSearch();logEntries[i].setContent(logEntries[i].formattedMessage,logEntries[i].formattedMessage);}','currentSearch=null;setLogContainerHeight();}else{$("searchReset").disabled=false;$("searchNav").style.display="block";var searchRegex;var regexValid;if(isRegex){try{searchRegex=isCaseSensitive?new RegExp(searchTerm,"g"):new RegExp(searchTerm,"gi");regexValid=true;replaceClass(searchBox,"validregex","invalidregex");searchBox.title="Valid regex";}catch(ex){regexValid=false;replaceClass(searchBox,"invalidregex","validregex");searchBox.title="Invalid regex: "+(ex.message?ex.message:(ex.description?ex.description:"unknown error"));return;}}else{searchBox.title="";removeClass(searchBox,"validregex");removeClass(searchBox,"invalidregex");}','addClass(document.body,"searching");currentSearch=new Search(searchTerm,isRegex,searchRegex,isCaseSensitive);for(i=0;i<logEntries.length;i++){currentSearch.applyTo(logEntries[i]);}','setLogContainerHeight();if(currentSearch.hasVisibleMatches()){setCurrentMatchIndex(0);displayMatches();}else{displayNoMatches();}}}','function updateSearchFromFilters(){if(currentSearch){if(currentSearch.hasMatches()){if(currentMatchIndex===null){currentMatchIndex=0;}','var currentMatch=currentSearch.matches[currentMatchIndex];if(currentMatch.isVisible()){displayMatches();setCurrentMatchIndex(currentMatchIndex);}else{currentMatch.setNotCurrent();var nextVisibleMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextVisibleMatchIndex>-1){setCurrentMatchIndex(nextVisibleMatchIndex);displayMatches();}else{displayNoMatches();}}}else{displayNoMatches();}}}','function refreshCurrentMatch(){if(currentSearch&¤tSearch.hasVisibleMatches()){setCurrentMatchIndex(currentMatchIndex);}}','function displayMatches(){replaceClass($("searchBox"),"hasmatches","nomatches");$("searchBox").title=""+currentSearch.matches.length+" matches found";$("searchNav").style.display="block";setLogContainerHeight();}','function displayNoMatches(){replaceClass($("searchBox"),"nomatches","hasmatches");$("searchBox").title="No matches found";$("searchNav").style.display="none";setLogContainerHeight();}','function toggleSearchEnabled(enable){enable=(typeof enable=="undefined")?!$("searchDisable").checked:enable;$("searchBox").disabled=!enable;$("searchReset").disabled=!enable;$("searchRegex").disabled=!enable;$("searchNext").disabled=!enable;$("searchPrevious").disabled=!enable;$("searchCaseSensitive").disabled=!enable;$("searchNav").style.display=(enable&&($("searchBox").value!=="")&¤tSearch&¤tSearch.hasVisibleMatches())?"block":"none";if(enable){removeClass($("search"),"greyedout");addClass(document.body,"searching");if($("searchHighlight").checked){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}','if($("searchFilter").checked){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}','$("searchDisable").checked=!enable;}else{addClass($("search"),"greyedout");removeClass(document.body,"searching");removeClass(logMainContainer,"searchhighlight");removeClass(logMainContainer,"searchfilter");}','setLogContainerHeight();}','function toggleSearchFilter(){var enable=$("searchFilter").checked;if(enable){addClass(logMainContainer,"searchfilter");}else{removeClass(logMainContainer,"searchfilter");}','refreshCurrentMatch();}','function toggleSearchHighlight(){var enable=$("searchHighlight").checked;if(enable){addClass(logMainContainer,"searchhighlight");}else{removeClass(logMainContainer,"searchhighlight");}}','function clearSearch(){$("searchBox").value="";doSearch();}','function searchNext(){if(currentSearch!==null&¤tMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var nextMatchIndex=currentSearch.getNextVisibleMatchIndex();if(nextMatchIndex>currentMatchIndex||confirm("Reached the end of the page. Start from the top?")){setCurrentMatchIndex(nextMatchIndex);}}}','function searchPrevious(){if(currentSearch!==null&¤tMatchIndex!==null){currentSearch.matches[currentMatchIndex].setNotCurrent();var previousMatchIndex=currentSearch.getPreviousVisibleMatchIndex();if(previousMatchIndex<currentMatchIndex||confirm("Reached the start of the page. Continue from the bottom?")){setCurrentMatchIndex(previousMatchIndex);}}}','function setCurrentMatchIndex(index){currentMatchIndex=index;currentSearch.matches[currentMatchIndex].setCurrent();}','function addClass(el,cssClass){if(!hasClass(el,cssClass)){if(el.className){el.className+=" "+cssClass;}else{el.className=cssClass;}}}','function hasClass(el,cssClass){if(el.className){var classNames=el.className.split(" ");return array_contains(classNames,cssClass);}','return false;}','function removeClass(el,cssClass){if(hasClass(el,cssClass)){var existingClasses=el.className.split(" ");var newClasses=[];for(var i=0,len=existingClasses.length;i<len;i++){if(existingClasses[i]!=cssClass){newClasses[newClasses.length]=existingClasses[i];}}','el.className=newClasses.join(" ");}}','function replaceClass(el,newCssClass,oldCssClass){removeClass(el,oldCssClass);addClass(el,newCssClass);}','function getElementsByClass(el,cssClass,tagName){var elements=el.getElementsByTagName(tagName);var matches=[];for(var i=0,len=elements.length;i<len;i++){if(hasClass(elements[i],cssClass)){matches.push(elements[i]);}}','return matches;}','function $(id){return document.getElementById(id);}','function isDescendant(node,ancestorNode){while(node!=null){if(node===ancestorNode){return true;}','node=node.parentNode;}','return false;}','function isOrphan(node){var currentNode=node;while(currentNode){if(currentNode==document.body){return false;}','currentNode=currentNode.parentNode;}','return true;}','function escapeHtml(str){return str.replace(/&/g,"&").replace(/[<]/g,"<").replace(/>/g,">");}','function getWindowWidth(){if(window.innerWidth){return window.innerWidth;}else if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth;}else if(document.body){return document.body.clientWidth;}','return 0;}','function getWindowHeight(){if(window.innerHeight){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body){return document.body.clientHeight;}','return 0;}','function getToolBarsHeight(){return $("switches").offsetHeight;}','function getChromeHeight(){var height=getToolBarsHeight();if(showCommandLine){height+=$("commandLine").offsetHeight;}','return height;}','function setLogContainerHeight(){if(logMainContainer){var windowHeight=getWindowHeight();$("body").style.height=getWindowHeight()+"px";logMainContainer.style.height=""+','Math.max(0,windowHeight-getChromeHeight())+"px";}}','function setCommandInputWidth(){if(showCommandLine){$("command").style.width=""+Math.max(0,$("commandLineContainer").offsetWidth-','($("evaluateButton").offsetWidth+13))+"px";}}','window.onresize=function(){setCommandInputWidth();setLogContainerHeight();};if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i<len;i++){this[this.length]=arguments[i];}','return this.length;};}','if(!Array.prototype.pop){Array.prototype.pop=function(){if(this.length>0){var val=this[this.length-1];this.length=this.length-1;return val;}};}','if(!Array.prototype.shift){Array.prototype.shift=function(){if(this.length>0){var firstItem=this[0];for(var i=0,len=this.length-1;i<len;i++){this[i]=this[i+1];}','this.length=this.length-1;return firstItem;}};}','if(!Array.prototype.splice){Array.prototype.splice=function(startIndex,deleteCount){var itemsAfterDeleted=this.slice(startIndex+deleteCount);var itemsDeleted=this.slice(startIndex,startIndex+deleteCount);this.length=startIndex;var argumentsArray=[];for(var i=0,len=arguments.length;i<len;i++){argumentsArray[i]=arguments[i];}','var itemsToAppend=(argumentsArray.length>2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i<len;i++){this.push(itemsToAppend[i]);}','return itemsDeleted;};}','function array_remove(arr,val){var index=-1;for(var i=0,len=arr.length;i<len;i++){if(arr[i]===val){index=i;break;}}','if(index>=0){arr.splice(index,1);return index;}else{return false;}}','function array_removeFromStart(array,numberToRemove){if(Array.prototype.splice){array.splice(0,numberToRemove);}else{for(var i=numberToRemove,len=array.length;i<len;i++){array[i-numberToRemove]=array[i];}','array.length=array.length-numberToRemove;}','return array;}','function array_contains(arr,val){for(var i=0,len=arr.length;i<len;i++){if(arr[i]==val){return true;}}','return false;}','function getErrorMessage(ex){if(ex.message){return ex.message;}else if(ex.description){return ex.description;}','return""+ex;}','function moveCaretToEnd(input){if(input.setSelectionRange){input.focus();var length=input.value.length;input.setSelectionRange(length,length);}else if(input.createTextRange){var range=input.createTextRange();range.collapse(false);range.select();}','input.focus();}','function stopPropagation(evt){if(evt.stopPropagation){evt.stopPropagation();}else if(typeof evt.cancelBubble!="undefined"){evt.cancelBubble=true;}}','function getEvent(evt){return evt?evt:event;}','function getTarget(evt){return evt.target?evt.target:evt.srcElement;}','function getRelatedTarget(evt){if(evt.relatedTarget){return evt.relatedTarget;}else if(evt.srcElement){switch(evt.type){case"mouseover":return evt.fromElement;case"mouseout":return evt.toElement;default:return evt.srcElement;}}}','function cancelKeyEvent(evt){evt.returnValue=false;stopPropagation(evt);}','function evalCommandLine(){var expr=$("command").value;evalCommand(expr);$("command").value="";}','function evalLastCommand(){if(lastCommand!=null){evalCommand(lastCommand);}}','var lastCommand=null;var commandHistory=[];var currentCommandIndex=0;function evalCommand(expr){if(appender){appender.evalCommandAndAppend(expr);}else{var prefix=">>> "+expr+"\\r\\n";try{log("INFO",prefix+eval(expr));}catch(ex){log("ERROR",prefix+"Error: "+getErrorMessage(ex));}}','if(expr!=commandHistory[commandHistory.length-1]){commandHistory.push(expr);if(appender){appender.storeCommandHistory(commandHistory);}}','currentCommandIndex=(expr==commandHistory[currentCommandIndex])?currentCommandIndex+1:commandHistory.length;lastCommand=expr;}','//]]>','</script>','<style type="text/css">','body{background-color:white;color:black;padding:0;margin:0;font-family:tahoma,verdana,arial,helvetica,sans-serif;overflow:hidden}div#switchesContainer input{margin-bottom:0}div.toolbar{border-top:solid #ffffff 1px;border-bottom:solid #aca899 1px;background-color:#f1efe7;padding:3px 5px;font-size:68.75%}div.toolbar,div#search input{font-family:tahoma,verdana,arial,helvetica,sans-serif}div.toolbar input.button{padding:0 5px;font-size:100%}div.toolbar input.hidden{display:none}div#switches input#clearButton{margin-left:20px}div#levels label{font-weight:bold}div#levels label,div#options label{margin-right:5px}div#levels label#wrapLabel{font-weight:normal}div#search label{margin-right:10px}div#search label.searchboxlabel{margin-right:0}div#search input{font-size:100%}div#search input.validregex{color:green}div#search input.invalidregex{color:red}div#search input.nomatches{color:white;background-color:#ff6666}div#search input.nomatches{color:white;background-color:#ff6666}div#searchNav{display:none}div#commandLine{display:none}div#commandLine input#command{font-size:100%;font-family:Courier New,Courier}div#commandLine input#evaluateButton{}*.greyedout{color:gray !important;border-color:gray !important}*.greyedout *.alwaysenabled{color:black}*.unselectable{-khtml-user-select:none;-moz-user-select:none;user-select:none}div#log{font-family:Courier New,Courier;font-size:75%;width:100%;overflow:auto;clear:both;position:relative}div.group{border-color:#cccccc;border-style:solid;border-width:1px 0 1px 1px;overflow:visible}div.oldIe div.group,div.oldIe div.group *,div.oldIe *.logentry{height:1%}div.group div.groupheading span.expander{border:solid black 1px;font-family:Courier New,Courier;font-size:0.833em;background-color:#eeeeee;position:relative;top:-1px;color:black;padding:0 2px;cursor:pointer;cursor:hand;height:1%}div.group div.groupcontent{margin-left:10px;padding-bottom:2px;overflow:visible}div.group div.expanded{display:block}div.group div.collapsed{display:none}*.logentry{overflow:visible;display:none;white-space:pre}span.pre{white-space:pre}pre.unwrapped{display:inline !important}pre.unwrapped pre.pre,div.wrapped pre.pre{display:inline}div.wrapped pre.pre{white-space:normal}div.wrapped{display:none}body.searching *.logentry span.currentmatch{color:white !important;background-color:green !important}body.searching div.searchhighlight *.logentry span.searchterm{color:black;background-color:yellow}div.wrap *.logentry{white-space:normal !important;border-width:0 0 1px 0;border-color:#dddddd;border-style:dotted}div.wrap #log_wrapped,#log_unwrapped{display:block}div.wrap #log_unwrapped,#log_wrapped{display:none}div.wrap *.logentry span.pre{overflow:visible;white-space:normal}div.wrap *.logentry pre.unwrapped{display:none}div.wrap *.logentry span.wrapped{display:inline}div.searchfilter *.searchnonmatch{display:none !important}div#log *.TRACE,label#label_TRACE{color:#666666}div#log *.DEBUG,label#label_DEBUG{color:green}div#log *.INFO,label#label_INFO{color:#000099}div#log *.WARN,label#label_WARN{color:#999900}div#log *.ERROR,label#label_ERROR{color:red}div#log *.FATAL,label#label_FATAL{color:#660066}div.TRACE#log *.TRACE,div.DEBUG#log *.DEBUG,div.INFO#log *.INFO,div.WARN#log *.WARN,div.ERROR#log *.ERROR,div.FATAL#log *.FATAL{display:block}div#log div.separator{background-color:#cccccc;margin:5px 0;line-height:1px}','</style>','</head>','<body id="body">','<div id="switchesContainer">','<div id="switches">','<div id="levels" class="toolbar">','Filters:','<input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>','<input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>','<input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>','<input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>','<input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>','<input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>','<input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>','</div>','<div id="search" class="toolbar">','<label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />','<input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />','<input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>','<input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>','<input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>','<div id="searchNav">','<input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />','<input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />','<input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>','<input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>','</div>','</div>','<div id="options" class="toolbar">','Options:','<input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>','<input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>','<input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>','<input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>','<input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages" />','<input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />','<input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />','</div>','</div>','</div>','<div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>','<div id="commandLine" class="toolbar">','<div id="commandLineContainer">','<input type="text" id="command" title="Enter a JavaScript command here and hit return or press \'Evaluate\'" />','<input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />','</div>','</div>','</body>','</html>',''];};var defaultCommandLineFunctions=[];ConsoleAppender=function(){};var consoleAppenderIdCounter=1;ConsoleAppender.prototype=new Appender();ConsoleAppender.prototype.create=function(inPage,container,lazyInit,initiallyMinimized,useDocumentWrite,width,height,focusConsoleWindow){var appender=this;var initialized=false;var consoleWindowCreated=false;var consoleWindowLoaded=false;var consoleClosed=false;var queuedLoggingEvents=[];var isSupported=true;var consoleAppenderId=consoleAppenderIdCounter++;initiallyMinimized=extractBooleanFromParam(initiallyMinimized,this.defaults.initiallyMinimized);lazyInit=extractBooleanFromParam(lazyInit,this.defaults.lazyInit);useDocumentWrite=extractBooleanFromParam(useDocumentWrite,this.defaults.useDocumentWrite);var newestMessageAtTop=this.defaults.newestMessageAtTop;var scrollToLatestMessage=this.defaults.scrollToLatestMessage;width=width?width:this.defaults.width;height=height?height:this.defaults.height;var maxMessages=this.defaults.maxMessages;var showCommandLine=this.defaults.showCommandLine;var commandLineObjectExpansionDepth=this.defaults.commandLineObjectExpansionDepth;var showHideButton=this.defaults.showHideButton;var showCloseButton=this.defaults.showCloseButton;var showLogEntryDeleteButtons=this.defaults.showLogEntryDeleteButtons;this.setLayout(this.defaults.layout);var init,createWindow,safeToAppend,getConsoleWindow,open;var appenderName=inPage?"InPageAppender":"PopUpAppender";var checkCanConfigure=function(configOptionName){if(consoleWindowCreated){handleError(appenderName+": configuration option '"+configOptionName+"' may not be set after the appender has been initialized");return false;}
+return true;};var consoleWindowExists=function(){return(consoleWindowLoaded&&isSupported&&!consoleClosed);};this.isNewestMessageAtTop=function(){return newestMessageAtTop;};this.setNewestMessageAtTop=function(newestMessageAtTopParam){newestMessageAtTop=bool(newestMessageAtTopParam);if(consoleWindowExists()){getConsoleWindow().setNewestAtTop(newestMessageAtTop);}};this.isScrollToLatestMessage=function(){return scrollToLatestMessage;};this.setScrollToLatestMessage=function(scrollToLatestMessageParam){scrollToLatestMessage=bool(scrollToLatestMessageParam);if(consoleWindowExists()){getConsoleWindow().setScrollToLatest(scrollToLatestMessage);}};this.getWidth=function(){return width;};this.setWidth=function(widthParam){if(checkCanConfigure("width")){width=extractStringFromParam(widthParam,width);}};this.getHeight=function(){return height;};this.setHeight=function(heightParam){if(checkCanConfigure("height")){height=extractStringFromParam(heightParam,height);}};this.getMaxMessages=function(){return maxMessages;};this.setMaxMessages=function(maxMessagesParam){maxMessages=extractIntFromParam(maxMessagesParam,maxMessages);if(consoleWindowExists()){getConsoleWindow().setMaxMessages(maxMessages);}};this.isShowCommandLine=function(){return showCommandLine;};this.setShowCommandLine=function(showCommandLineParam){showCommandLine=bool(showCommandLineParam);if(consoleWindowExists()){getConsoleWindow().setShowCommandLine(showCommandLine);}};this.isShowHideButton=function(){return showHideButton;};this.setShowHideButton=function(showHideButtonParam){showHideButton=bool(showHideButtonParam);if(consoleWindowExists()){getConsoleWindow().setShowHideButton(showHideButton);}};this.isShowCloseButton=function(){return showCloseButton;};this.setShowCloseButton=function(showCloseButtonParam){showCloseButton=bool(showCloseButtonParam);if(consoleWindowExists()){getConsoleWindow().setShowCloseButton(showCloseButton);}};this.getCommandLineObjectExpansionDepth=function(){return commandLineObjectExpansionDepth;};this.setCommandLineObjectExpansionDepth=function(commandLineObjectExpansionDepthParam){commandLineObjectExpansionDepth=extractIntFromParam(commandLineObjectExpansionDepthParam,commandLineObjectExpansionDepth);};var minimized=initiallyMinimized;this.isInitiallyMinimized=function(){return initiallyMinimized;};this.setInitiallyMinimized=function(initiallyMinimizedParam){if(checkCanConfigure("initiallyMinimized")){initiallyMinimized=bool(initiallyMinimizedParam);minimized=initiallyMinimized;}};this.isUseDocumentWrite=function(){return useDocumentWrite;};this.setUseDocumentWrite=function(useDocumentWriteParam){if(checkCanConfigure("useDocumentWrite")){useDocumentWrite=bool(useDocumentWriteParam);}};function QueuedLoggingEvent(loggingEvent,formattedMessage){this.loggingEvent=loggingEvent;this.levelName=loggingEvent.level.name;this.formattedMessage=formattedMessage;}
+QueuedLoggingEvent.prototype.append=function(){getConsoleWindow().log(this.levelName,this.formattedMessage);};function QueuedGroup(name,initiallyExpanded){this.name=name;this.initiallyExpanded=initiallyExpanded;}
+QueuedGroup.prototype.append=function(){getConsoleWindow().group(this.name,this.initiallyExpanded);};function QueuedGroupEnd(){}
+QueuedGroupEnd.prototype.append=function(){getConsoleWindow().groupEnd();};var checkAndAppend=function(){safeToAppend();if(!initialized){init();}else if(consoleClosed&&reopenWhenClosed){createWindow();}
+if(safeToAppend()){appendQueuedLoggingEvents();}};this.append=function(loggingEvent){if(isSupported){var formattedMessage=appender.getLayout().format(loggingEvent);if(this.getLayout().ignoresThrowable()){formattedMessage+=loggingEvent.getThrowableStrRep();}
+queuedLoggingEvents.push(new QueuedLoggingEvent(loggingEvent,formattedMessage));checkAndAppend();}};this.group=function(name,initiallyExpanded){if(isSupported){queuedLoggingEvents.push(new QueuedGroup(name,initiallyExpanded));checkAndAppend();}};this.groupEnd=function(){if(isSupported){queuedLoggingEvents.push(new QueuedGroupEnd());checkAndAppend();}};var appendQueuedLoggingEvents=function(){var currentLoggingEvent;while(queuedLoggingEvents.length>0){queuedLoggingEvents.shift().append();}
+if(focusConsoleWindow){getConsoleWindow().focus();}};this.setAddedToLogger=function(logger){this.loggers.push(logger);if(enabled&&!lazyInit){init();}};this.clear=function(){if(consoleWindowExists()){getConsoleWindow().clearLog();}
+queuedLoggingEvents.length=0;};this.focus=function(){if(consoleWindowExists()){getConsoleWindow().focus();}};this.focusCommandLine=function(){if(consoleWindowExists()){getConsoleWindow().focusCommandLine();}};this.focusSearch=function(){if(consoleWindowExists()){getConsoleWindow().focusSearch();}};var commandWindow=window;this.getCommandWindow=function(){return commandWindow;};this.setCommandWindow=function(commandWindowParam){commandWindow=commandWindowParam;};this.executeLastCommand=function(){if(consoleWindowExists()){getConsoleWindow().evalLastCommand();}};var commandLayout=new PatternLayout("%m");this.getCommandLayout=function(){return commandLayout;};this.setCommandLayout=function(commandLayoutParam){commandLayout=commandLayoutParam;};this.evalCommandAndAppend=function(expr){var commandReturnValue={appendResult:true,isError:false};var commandOutput="";try{var result,i;if(!commandWindow.eval&&commandWindow.execScript){commandWindow.execScript("null");}
+var commandLineFunctionsHash={};for(i=0,len=commandLineFunctions.length;i<len;i++){commandLineFunctionsHash[commandLineFunctions[i][0]]=commandLineFunctions[i][1];}
+var objectsToRestore=[];var addObjectToRestore=function(name){objectsToRestore.push([name,commandWindow[name]]);};addObjectToRestore("appender");commandWindow.appender=appender;addObjectToRestore("commandReturnValue");commandWindow.commandReturnValue=commandReturnValue;addObjectToRestore("commandLineFunctionsHash");commandWindow.commandLineFunctionsHash=commandLineFunctionsHash;var addFunctionToWindow=function(name){addObjectToRestore(name);commandWindow[name]=function(){return this.commandLineFunctionsHash[name](appender,arguments,commandReturnValue);};};for(i=0,len=commandLineFunctions.length;i<len;i++){addFunctionToWindow(commandLineFunctions[i][0]);}
+if(commandWindow===window&&commandWindow.execScript){addObjectToRestore("evalExpr");addObjectToRestore("result");window.evalExpr=expr;commandWindow.execScript("window.result=eval(window.evalExpr);");result=window.result;}else{result=commandWindow.eval(expr);}
+commandOutput=isUndefined(result)?result:formatObjectExpansion(result,commandLineObjectExpansionDepth);for(i=0,len=objectsToRestore.length;i<len;i++){commandWindow[objectsToRestore[i][0]]=objectsToRestore[i][1];}}catch(ex){commandOutput="Error evaluating command: "+getExceptionStringRep(ex);commandReturnValue.isError=true;}
+if(commandReturnValue.appendResult){var message=">>> "+expr;if(!isUndefined(commandOutput)){message+=newLine+commandOutput;}
+var level=commandReturnValue.isError?Level.ERROR:Level.INFO;var loggingEvent=new LoggingEvent(null,new Date(),level,[message],null);var mainLayout=this.getLayout();this.setLayout(commandLayout);this.append(loggingEvent);this.setLayout(mainLayout);}};var commandLineFunctions=defaultCommandLineFunctions.concat([]);this.addCommandLineFunction=function(functionName,commandLineFunction){commandLineFunctions.push([functionName,commandLineFunction]);};var commandHistoryCookieName="log4javascriptCommandHistory";this.storeCommandHistory=function(commandHistory){setCookie(commandHistoryCookieName,commandHistory.join(","));};var writeHtml=function(doc){var lines=getConsoleHtmlLines();doc.open();for(var i=0,len=lines.length;i<len;i++){doc.writeln(lines[i]);}
+doc.close();};this.setEventTypes(["load","unload"]);var consoleWindowLoadHandler=function(){var win=getConsoleWindow();win.setAppender(appender);win.setNewestAtTop(newestMessageAtTop);win.setScrollToLatest(scrollToLatestMessage);win.setMaxMessages(maxMessages);win.setShowCommandLine(showCommandLine);win.setShowHideButton(showHideButton);win.setShowCloseButton(showCloseButton);win.setMainWindow(window);var storedValue=getCookie(commandHistoryCookieName);if(storedValue){win.commandHistory=storedValue.split(",");win.currentCommandIndex=win.commandHistory.length;}
+appender.dispatchEvent("load",{"win":win});};this.unload=function(){logLog.debug("unload "+this+", caller: "+this.unload.caller);if(!consoleClosed){logLog.debug("really doing unload "+this);consoleClosed=true;consoleWindowLoaded=false;consoleWindowCreated=false;appender.dispatchEvent("unload",{});}};var pollConsoleWindow=function(windowTest,interval,successCallback,errorMessage){function doPoll(){try{if(consoleClosed){clearInterval(poll);}
+if(windowTest(getConsoleWindow())){clearInterval(poll);successCallback();}}catch(ex){clearInterval(poll);isSupported=false;handleError(errorMessage,ex);}}
+var poll=setInterval(doPoll,interval);};var getConsoleUrl=function(){var documentDomainSet=(document.domain!=location.hostname);return useDocumentWrite?"":getBaseUrl()+"console.html"+
+(documentDomainSet?"?log4javascript_domain="+escape(document.domain):"");};if(inPage){var containerElement=null;var cssProperties=[];this.addCssProperty=function(name,value){if(checkCanConfigure("cssProperties")){cssProperties.push([name,value]);}};var windowCreationStarted=false;var iframeContainerDiv;var iframeId=uniqueId+"_InPageAppender_"+consoleAppenderId;this.hide=function(){if(initialized&&consoleWindowCreated){if(consoleWindowExists()){getConsoleWindow().$("command").blur();}
+iframeContainerDiv.style.display="none";minimized=true;}};this.show=function(){if(initialized){if(consoleWindowCreated){iframeContainerDiv.style.display="block";this.setShowCommandLine(showCommandLine);minimized=false;}else if(!windowCreationStarted){createWindow(true);}}};this.isVisible=function(){return!minimized&&!consoleClosed;};this.close=function(fromButton){if(!consoleClosed&&(!fromButton||confirm("This will permanently remove the console from the page. No more messages will be logged. Do you wish to continue?"))){iframeContainerDiv.parentNode.removeChild(iframeContainerDiv);this.unload();}};open=function(){var initErrorMessage="InPageAppender.open: unable to create console iframe";function finalInit(){try{if(!initiallyMinimized){appender.show();}
+consoleWindowLoadHandler();consoleWindowLoaded=true;appendQueuedLoggingEvents();}catch(ex){isSupported=false;handleError(initErrorMessage,ex);}}
+function writeToDocument(){try{var windowTest=function(win){return isLoaded(win);};if(useDocumentWrite){writeHtml(getConsoleWindow().document);}
+if(windowTest(getConsoleWindow())){finalInit();}else{pollConsoleWindow(windowTest,100,finalInit,initErrorMessage);}}catch(ex){isSupported=false;handleError(initErrorMessage,ex);}}
+minimized=false;iframeContainerDiv=containerElement.appendChild(document.createElement("div"));iframeContainerDiv.style.width=width;iframeContainerDiv.style.height=height;iframeContainerDiv.style.border="solid gray 1px";for(var i=0,len=cssProperties.length;i<len;i++){iframeContainerDiv.style[cssProperties[i][0]]=cssProperties[i][1];}
+var iframeSrc=useDocumentWrite?"":" src='"+getConsoleUrl()+"'";iframeContainerDiv.innerHTML="<iframe id='"+iframeId+"' name='"+iframeId+"' width='100%' height='100%' frameborder='0'"+iframeSrc+" scrolling='no'></iframe>";consoleClosed=false;var iframeDocumentExistsTest=function(win){try{return bool(win)&&bool(win.document);}catch(ex){return false;}};if(iframeDocumentExistsTest(getConsoleWindow())){writeToDocument();}else{pollConsoleWindow(iframeDocumentExistsTest,100,writeToDocument,initErrorMessage);}
+consoleWindowCreated=true;};createWindow=function(show){if(show||!initiallyMinimized){var pageLoadHandler=function(){if(!container){containerElement=document.createElement("div");containerElement.style.position="fixed";containerElement.style.left="0";containerElement.style.right="0";containerElement.style.bottom="0";document.body.appendChild(containerElement);appender.addCssProperty("borderWidth","1px 0 0 0");appender.addCssProperty("zIndex",1000000);open();}else{try{var el=document.getElementById(container);if(el.nodeType==1){containerElement=el;}
+open();}catch(ex){handleError("InPageAppender.init: invalid container element '"+container+"' supplied",ex);}}};if(pageLoaded&&container&&container.appendChild){containerElement=container;open();}else if(pageLoaded){pageLoadHandler();}else{log4javascript.addEventListener("load",pageLoadHandler);}
+windowCreationStarted=true;}};init=function(){createWindow();initialized=true;};getConsoleWindow=function(){var iframe=window.frames[iframeId];if(iframe){return iframe;}};safeToAppend=function(){if(isSupported&&!consoleClosed){if(consoleWindowCreated&&!consoleWindowLoaded&&getConsoleWindow()&&isLoaded(getConsoleWindow())){consoleWindowLoaded=true;}
+return consoleWindowLoaded;}
+return false;};}else{var useOldPopUp=appender.defaults.useOldPopUp;var complainAboutPopUpBlocking=appender.defaults.complainAboutPopUpBlocking;var reopenWhenClosed=this.defaults.reopenWhenClosed;this.isUseOldPopUp=function(){return useOldPopUp;};this.setUseOldPopUp=function(useOldPopUpParam){if(checkCanConfigure("useOldPopUp")){useOldPopUp=bool(useOldPopUpParam);}};this.isComplainAboutPopUpBlocking=function(){return complainAboutPopUpBlocking;};this.setComplainAboutPopUpBlocking=function(complainAboutPopUpBlockingParam){if(checkCanConfigure("complainAboutPopUpBlocking")){complainAboutPopUpBlocking=bool(complainAboutPopUpBlockingParam);}};this.isFocusPopUp=function(){return focusConsoleWindow;};this.setFocusPopUp=function(focusPopUpParam){focusConsoleWindow=bool(focusPopUpParam);};this.isReopenWhenClosed=function(){return reopenWhenClosed;};this.setReopenWhenClosed=function(reopenWhenClosedParam){reopenWhenClosed=bool(reopenWhenClosedParam);};this.close=function(){logLog.debug("close "+this);try{popUp.close();this.unload();}catch(ex){}};this.hide=function(){logLog.debug("hide "+this);if(consoleWindowExists()){this.close();}};this.show=function(){logLog.debug("show "+this);if(!consoleWindowCreated){open();}};this.isVisible=function(){return safeToAppend();};var popUp;open=function(){var windowProperties="width="+width+",height="+height+",status,resizable";var frameInfo="";try{var frameEl=window.frameElement;if(frameEl){frameInfo="_"+frameEl.tagName+"_"+(frameEl.name||frameEl.id||"");}}catch(e){frameInfo="_inaccessibleParentFrame";}
+var windowName="PopUp_"+location.host.replace(/[^a-z0-9]/gi,"_")+"_"+consoleAppenderId+frameInfo;if(!useOldPopUp||!useDocumentWrite){windowName=windowName+"_"+uniqueId;}
+var checkPopUpClosed=function(win){if(consoleClosed){return true;}else{try{return bool(win)&&win.closed;}catch(ex){}}
+return false;};var popUpClosedCallback=function(){if(!consoleClosed){appender.unload();}};function finalInit(){getConsoleWindow().setCloseIfOpenerCloses(!useOldPopUp||!useDocumentWrite);consoleWindowLoadHandler();consoleWindowLoaded=true;appendQueuedLoggingEvents();pollConsoleWindow(checkPopUpClosed,500,popUpClosedCallback,"PopUpAppender.checkPopUpClosed: error checking pop-up window");}
+try{popUp=window.open(getConsoleUrl(),windowName,windowProperties);consoleClosed=false;consoleWindowCreated=true;if(popUp&&popUp.document){if(useDocumentWrite&&useOldPopUp&&isLoaded(popUp)){popUp.mainPageReloaded();finalInit();}else{if(useDocumentWrite){writeHtml(popUp.document);}
+var popUpLoadedTest=function(win){return bool(win)&&isLoaded(win);};if(isLoaded(popUp)){finalInit();}else{pollConsoleWindow(popUpLoadedTest,100,finalInit,"PopUpAppender.init: unable to create console window");}}}else{isSupported=false;logLog.warn("PopUpAppender.init: pop-ups blocked, please unblock to use PopUpAppender");if(complainAboutPopUpBlocking){handleError("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");}}}catch(ex){handleError("PopUpAppender.init: error creating pop-up",ex);}};createWindow=function(){if(!initiallyMinimized){open();}};init=function(){createWindow();initialized=true;};getConsoleWindow=function(){return popUp;};safeToAppend=function(){if(isSupported&&!isUndefined(popUp)&&!consoleClosed){if(popUp.closed||(consoleWindowLoaded&&isUndefined(popUp.closed))){appender.unload();logLog.debug("PopUpAppender: pop-up closed");return false;}
+if(!consoleWindowLoaded&&isLoaded(popUp)){consoleWindowLoaded=true;}}
+return isSupported&&consoleWindowLoaded&&!consoleClosed;};}
+this.getConsoleWindow=getConsoleWindow;};ConsoleAppender.addGlobalCommandLineFunction=function(functionName,commandLineFunction){defaultCommandLineFunctions.push([functionName,commandLineFunction]);};function PopUpAppender(lazyInit,initiallyMinimized,useDocumentWrite,width,height){this.create(false,null,lazyInit,initiallyMinimized,useDocumentWrite,width,height,this.defaults.focusPopUp);}
+PopUpAppender.prototype=new ConsoleAppender();PopUpAppender.prototype.defaults={layout:new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),initiallyMinimized:false,focusPopUp:false,lazyInit:true,useOldPopUp:true,complainAboutPopUpBlocking:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:"600",height:"400",reopenWhenClosed:false,maxMessages:null,showCommandLine:true,commandLineObjectExpansionDepth:1,showHideButton:false,showCloseButton:true,showLogEntryDeleteButtons:true,useDocumentWrite:true};PopUpAppender.prototype.toString=function(){return"PopUpAppender";};log4javascript.PopUpAppender=PopUpAppender;function InPageAppender(container,lazyInit,initiallyMinimized,useDocumentWrite,width,height){this.create(true,container,lazyInit,initiallyMinimized,useDocumentWrite,width,height,false);}
+InPageAppender.prototype=new ConsoleAppender();InPageAppender.prototype.defaults={layout:new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),initiallyMinimized:false,lazyInit:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:"100%",height:"220px",maxMessages:null,showCommandLine:true,commandLineObjectExpansionDepth:1,showHideButton:false,showCloseButton:false,showLogEntryDeleteButtons:true,useDocumentWrite:true};InPageAppender.prototype.toString=function(){return"InPageAppender";};log4javascript.InPageAppender=InPageAppender;log4javascript.InlineAppender=InPageAppender;})();function padWithSpaces(str,len){if(str.length<len){var spaces=[];var numberOfSpaces=Math.max(0,len-str.length);for(var i=0;i<numberOfSpaces;i++){spaces[i]=" ";}
+str+=spaces.join("");}
+return str;}
+(function(){function dir(obj){var maxLen=0;for(var p in obj){maxLen=Math.max(toStr(p).length,maxLen);}
+var propList=[];for(p in obj){var propNameStr=" "+padWithSpaces(toStr(p),maxLen+2);var propVal;try{propVal=splitIntoLines(toStr(obj[p])).join(padWithSpaces(newLine,maxLen+6));}catch(ex){propVal="[Error obtaining property. Details: "+getExceptionMessage(ex)+"]";}
+propList.push(propNameStr+propVal);}
+return propList.join(newLine);}
+var nodeTypes={ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12};var preFormattedElements=["script","pre"];var emptyElements=["br","img","hr","param","link","area","input","col","base","meta"];var indentationUnit=" ";function getXhtml(rootNode,includeRootNode,indentation,startNewLine,preformatted){includeRootNode=(typeof includeRootNode=="undefined")?true:!!includeRootNode;if(typeof indentation!="string"){indentation="";}
+startNewLine=!!startNewLine;preformatted=!!preformatted;var xhtml;function isWhitespace(node){return((node.nodeType==nodeTypes.TEXT_NODE)&&/^[ \t\r\n]*$/.test(node.nodeValue));}
+function fixAttributeValue(attrValue){return attrValue.toString().replace(/&/g,"&").replace(/</g,"<").replace(/"/g,""");}
+function getStyleAttributeValue(el){var stylePairs=el.style.cssText.split(";");var styleValue="";var isFirst=true;for(var j=0,len=stylePairs.length;j<len;j++){var nameValueBits=stylePairs[j].split(":");var props=[];if(!/^\s*$/.test(nameValueBits[0])){props.push(trim(nameValueBits[0]).toLowerCase()+":"+trim(nameValueBits[1]));}
+styleValue=props.join(";");}
+return styleValue;}
+function getNamespace(el){if(el.prefix){return el.prefix;}else if(el.outerHTML){var regex=new RegExp("<([^:]+):"+el.tagName+"[^>]*>","i");if(regex.test(el.outerHTML)){return RegExp.$1.toLowerCase();}}
+return"";}
+var lt="<";var gt=">";if(includeRootNode&&rootNode.nodeType!=nodeTypes.DOCUMENT_FRAGMENT_NODE){switch(rootNode.nodeType){case nodeTypes.ELEMENT_NODE:var tagName=rootNode.tagName.toLowerCase();xhtml=startNewLine?newLine+indentation:"";xhtml+=lt;var prefix=getNamespace(rootNode);var hasPrefix=!!prefix;if(hasPrefix){xhtml+=prefix+":";}
+xhtml+=tagName;for(i=0,len=rootNode.attributes.length;i<len;i++){var currentAttr=rootNode.attributes[i];if(!currentAttr.specified||currentAttr.nodeValue===null||currentAttr.nodeName.toLowerCase()==="style"||typeof currentAttr.nodeValue!=="string"||currentAttr.nodeName.indexOf("_moz")===0){continue;}
+xhtml+=" "+currentAttr.nodeName.toLowerCase()+"=\"";xhtml+=fixAttributeValue(currentAttr.nodeValue);xhtml+="\"";}
+if(rootNode.style.cssText){var styleValue=getStyleAttributeValue(rootNode);if(styleValue!==""){xhtml+=" style=\""+getStyleAttributeValue(rootNode)+"\"";}}
+if(array_contains(emptyElements,tagName)||(hasPrefix&&!rootNode.hasChildNodes())){xhtml+="/"+gt;}else{xhtml+=gt;var childStartNewLine=!(rootNode.childNodes.length===1&&rootNode.childNodes[0].nodeType===nodeTypes.TEXT_NODE);var childPreformatted=array_contains(preFormattedElements,tagName);for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation+indentationUnit,childStartNewLine,childPreformatted);}
+var endTag=lt+"/"+tagName+gt;xhtml+=childStartNewLine?newLine+indentation+endTag:endTag;}
+return xhtml;case nodeTypes.TEXT_NODE:if(isWhitespace(rootNode)){xhtml="";}else{if(preformatted){xhtml=rootNode.nodeValue;}else{var lines=splitIntoLines(trim(rootNode.nodeValue));var trimmedLines=[];for(var i=0,len=lines.length;i<len;i++){trimmedLines[i]=trim(lines[i]);}
+xhtml=trimmedLines.join(newLine+indentation);}
+if(startNewLine){xhtml=newLine+indentation+xhtml;}}
+return xhtml;case nodeTypes.CDATA_SECTION_NODE:return"<![CDA"+"TA["+rootNode.nodeValue+"]"+"]>"+newLine;case nodeTypes.DOCUMENT_NODE:xhtml="";for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation);}
+return xhtml;default:return"";}}else{xhtml="";for(var i=0,len=rootNode.childNodes.length;i<len;i++){xhtml+=getXhtml(rootNode.childNodes[i],true,indentation+indentationUnit);}
+return xhtml;}}
+function createCommandLineFunctions(){ConsoleAppender.addGlobalCommandLineFunction("$",function(appender,args,returnValue){return document.getElementById(args[0]);});ConsoleAppender.addGlobalCommandLineFunction("dir",function(appender,args,returnValue){var lines=[];for(var i=0,len=args.length;i<len;i++){lines[i]=dir(args[i]);}
+return lines.join(newLine+newLine);});ConsoleAppender.addGlobalCommandLineFunction("dirxml",function(appender,args,returnValue){var lines=[];for(var i=0,len=args.length;i<len;i++){var win=appender.getCommandWindow();lines[i]=getXhtml(args[i]);}
+return lines.join(newLine+newLine);});ConsoleAppender.addGlobalCommandLineFunction("cd",function(appender,args,returnValue){var win,message;if(args.length===0||args[0]===""){win=window;message="Command line set to run in main window";}else{if(args[0].window==args[0]){win=args[0];message="Command line set to run in frame '"+args[0].name+"'";}else{win=window.frames[args[0]];if(win){message="Command line set to run in frame '"+args[0]+"'";}else{returnValue.isError=true;message="Frame '"+args[0]+"' does not exist";win=appender.getCommandWindow();}}}
+appender.setCommandWindow(win);return message;});ConsoleAppender.addGlobalCommandLineFunction("clear",function(appender,args,returnValue){returnValue.appendResult=false;appender.clear();});ConsoleAppender.addGlobalCommandLineFunction("keys",function(appender,args,returnValue){var keys=[];for(var k in args[0]){keys.push(k);}
+return keys;});ConsoleAppender.addGlobalCommandLineFunction("values",function(appender,args,returnValue){var values=[];for(var k in args[0]){try{values.push(args[0][k]);}catch(ex){logLog.warn("values(): Unable to obtain value for key "+k+". Details: "+getExceptionMessage(ex));}}
+return values;});ConsoleAppender.addGlobalCommandLineFunction("expansionDepth",function(appender,args,returnValue){var expansionDepth=parseInt(args[0],10);if(isNaN(expansionDepth)||expansionDepth<0){returnValue.isError=true;return""+args[0]+" is not a valid expansion depth";}else{appender.setCommandLineObjectExpansionDepth(expansionDepth);return"Object expansion depth set to "+expansionDepth;}});}
+function init(){createCommandLineFunctions();}
+init();})();log4javascript.setDocumentReady=function(){pageLoaded=true;log4javascript.dispatchEvent("load",{});};if(window.addEventListener){window.addEventListener("load",log4javascript.setDocumentReady,false);}else if(window.attachEvent){window.attachEvent("onload",log4javascript.setDocumentReady);}else{var oldOnload=window.onload;if(typeof window.onload!="function"){window.onload=log4javascript.setDocumentReady;}else{window.onload=function(evt){if(oldOnload){oldOnload(evt);}
+log4javascript.setDocumentReady();};}}
+window.log4javascript=log4javascript;return log4javascript;})();
diff --git a/planetstack/core/static/log4javascript-1.4.6/log4javascript_uncompressed.js b/planetstack/core/static/log4javascript-1.4.6/log4javascript_uncompressed.js
new file mode 100644
index 0000000..a644e3b
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/log4javascript_uncompressed.js
@@ -0,0 +1,5879 @@
+/**
+ * Copyright 2013 Tim Down.
+ *
+ * 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.
+ */
+
+/**
+ * log4javascript
+ *
+ * log4javascript is a logging framework for JavaScript based on log4j
+ * for Java. This file contains all core log4javascript code and is the only
+ * file required to use log4javascript, unless you require support for
+ * document.domain, in which case you will also need console.html, which must be
+ * stored in the same directory as the main log4javascript.js file.
+ *
+ * Author: Tim Down <tim@log4javascript.org>
+ * Version: 1.4.6
+ * Edition: log4javascript
+ * Build date: 19 March 2013
+ * Website: http://log4javascript.org
+ */
+
+/* -------------------------------------------------------------------------- */
+// Array-related stuff
+
+// Next three methods are solely for IE5, which is missing them
+if (!Array.prototype.push) {
+ Array.prototype.push = function() {
+ for (var i = 0, len = arguments.length; i < len; i++){
+ this[this.length] = arguments[i];
+ }
+ return this.length;
+ };
+}
+
+if (!Array.prototype.shift) {
+ Array.prototype.shift = function() {
+ if (this.length > 0) {
+ var firstItem = this[0];
+ for (var i = 0, len = this.length - 1; i < len; i++) {
+ this[i] = this[i + 1];
+ }
+ this.length = this.length - 1;
+ return firstItem;
+ }
+ };
+}
+
+if (!Array.prototype.splice) {
+ Array.prototype.splice = function(startIndex, deleteCount) {
+ var itemsAfterDeleted = this.slice(startIndex + deleteCount);
+ var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);
+ this.length = startIndex;
+ // Copy the arguments into a proper Array object
+ var argumentsArray = [];
+ for (var i = 0, len = arguments.length; i < len; i++) {
+ argumentsArray[i] = arguments[i];
+ }
+ var itemsToAppend = (argumentsArray.length > 2) ?
+ itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;
+ for (i = 0, len = itemsToAppend.length; i < len; i++) {
+ this.push(itemsToAppend[i]);
+ }
+ return itemsDeleted;
+ };
+}
+
+/* -------------------------------------------------------------------------- */
+
+var log4javascript = (function() {
+
+ function isUndefined(obj) {
+ return typeof obj == "undefined";
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // Custom event support
+
+ function EventSupport() {}
+
+ EventSupport.prototype = {
+ eventTypes: [],
+ eventListeners: {},
+ setEventTypes: function(eventTypesParam) {
+ if (eventTypesParam instanceof Array) {
+ this.eventTypes = eventTypesParam;
+ this.eventListeners = {};
+ for (var i = 0, len = this.eventTypes.length; i < len; i++) {
+ this.eventListeners[this.eventTypes[i]] = [];
+ }
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: setEventTypes: eventTypes parameter must be an Array");
+ }
+ },
+
+ addEventListener: function(eventType, listener) {
+ if (typeof listener == "function") {
+ if (!array_contains(this.eventTypes, eventType)) {
+ handleError("log4javascript.EventSupport [" + this + "]: addEventListener: no event called '" + eventType + "'");
+ }
+ this.eventListeners[eventType].push(listener);
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: addEventListener: listener must be a function");
+ }
+ },
+
+ removeEventListener: function(eventType, listener) {
+ if (typeof listener == "function") {
+ if (!array_contains(this.eventTypes, eventType)) {
+ handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: no event called '" + eventType + "'");
+ }
+ array_remove(this.eventListeners[eventType], listener);
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: removeEventListener: listener must be a function");
+ }
+ },
+
+ dispatchEvent: function(eventType, eventArgs) {
+ if (array_contains(this.eventTypes, eventType)) {
+ var listeners = this.eventListeners[eventType];
+ for (var i = 0, len = listeners.length; i < len; i++) {
+ listeners[i](this, eventType, eventArgs);
+ }
+ } else {
+ handleError("log4javascript.EventSupport [" + this + "]: dispatchEvent: no event called '" + eventType + "'");
+ }
+ }
+ };
+
+ /* -------------------------------------------------------------------------- */
+
+ var applicationStartDate = new Date();
+ var uniqueId = "log4javascript_" + applicationStartDate.getTime() + "_" +
+ Math.floor(Math.random() * 100000000);
+ var emptyFunction = function() {};
+ var newLine = "\r\n";
+ var pageLoaded = false;
+
+ // Create main log4javascript object; this will be assigned public properties
+ function Log4JavaScript() {}
+ Log4JavaScript.prototype = new EventSupport();
+
+ log4javascript = new Log4JavaScript();
+ log4javascript.version = "1.4.6";
+ log4javascript.edition = "log4javascript";
+
+ /* -------------------------------------------------------------------------- */
+ // Utility functions
+
+ function toStr(obj) {
+ if (obj && obj.toString) {
+ return obj.toString();
+ } else {
+ return String(obj);
+ }
+ }
+
+ function getExceptionMessage(ex) {
+ if (ex.message) {
+ return ex.message;
+ } else if (ex.description) {
+ return ex.description;
+ } else {
+ return toStr(ex);
+ }
+ }
+
+ // Gets the portion of the URL after the last slash
+ function getUrlFileName(url) {
+ var lastSlashIndex = Math.max(url.lastIndexOf("/"), url.lastIndexOf("\\"));
+ return url.substr(lastSlashIndex + 1);
+ }
+
+ // Returns a nicely formatted representation of an error
+ function getExceptionStringRep(ex) {
+ if (ex) {
+ var exStr = "Exception: " + getExceptionMessage(ex);
+ try {
+ if (ex.lineNumber) {
+ exStr += " on line number " + ex.lineNumber;
+ }
+ if (ex.fileName) {
+ exStr += " in file " + getUrlFileName(ex.fileName);
+ }
+ } catch (localEx) {
+ logLog.warn("Unable to obtain file and line information for error");
+ }
+ if (showStackTraces && ex.stack) {
+ exStr += newLine + "Stack trace:" + newLine + ex.stack;
+ }
+ return exStr;
+ }
+ return null;
+ }
+
+ function bool(obj) {
+ return Boolean(obj);
+ }
+
+ function trim(str) {
+ return str.replace(/^\s+/, "").replace(/\s+$/, "");
+ }
+
+ function splitIntoLines(text) {
+ // Ensure all line breaks are \n only
+ var text2 = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
+ return text2.split("\n");
+ }
+
+ var urlEncode = (typeof window.encodeURIComponent != "undefined") ?
+ function(str) {
+ return encodeURIComponent(str);
+ }:
+ function(str) {
+ return escape(str).replace(/\+/g, "%2B").replace(/"/g, "%22").replace(/'/g, "%27").replace(/\//g, "%2F").replace(/=/g, "%3D");
+ };
+
+ var urlDecode = (typeof window.decodeURIComponent != "undefined") ?
+ function(str) {
+ return decodeURIComponent(str);
+ }:
+ function(str) {
+ return unescape(str).replace(/%2B/g, "+").replace(/%22/g, "\"").replace(/%27/g, "'").replace(/%2F/g, "/").replace(/%3D/g, "=");
+ };
+
+ function array_remove(arr, val) {
+ var index = -1;
+ for (var i = 0, len = arr.length; i < len; i++) {
+ if (arr[i] === val) {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0) {
+ arr.splice(index, 1);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function array_contains(arr, val) {
+ for(var i = 0, len = arr.length; i < len; i++) {
+ if (arr[i] == val) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function extractBooleanFromParam(param, defaultValue) {
+ if (isUndefined(param)) {
+ return defaultValue;
+ } else {
+ return bool(param);
+ }
+ }
+
+ function extractStringFromParam(param, defaultValue) {
+ if (isUndefined(param)) {
+ return defaultValue;
+ } else {
+ return String(param);
+ }
+ }
+
+ function extractIntFromParam(param, defaultValue) {
+ if (isUndefined(param)) {
+ return defaultValue;
+ } else {
+ try {
+ var value = parseInt(param, 10);
+ return isNaN(value) ? defaultValue : value;
+ } catch (ex) {
+ logLog.warn("Invalid int param " + param, ex);
+ return defaultValue;
+ }
+ }
+ }
+
+ function extractFunctionFromParam(param, defaultValue) {
+ if (typeof param == "function") {
+ return param;
+ } else {
+ return defaultValue;
+ }
+ }
+
+ function isError(err) {
+ return (err instanceof Error);
+ }
+
+ if (!Function.prototype.apply){
+ Function.prototype.apply = function(obj, args) {
+ var methodName = "__apply__";
+ if (typeof obj[methodName] != "undefined") {
+ methodName += String(Math.random()).substr(2);
+ }
+ obj[methodName] = this;
+
+ var argsStrings = [];
+ for (var i = 0, len = args.length; i < len; i++) {
+ argsStrings[i] = "args[" + i + "]";
+ }
+ var script = "obj." + methodName + "(" + argsStrings.join(",") + ")";
+ var returnValue = eval(script);
+ delete obj[methodName];
+ return returnValue;
+ };
+ }
+
+ if (!Function.prototype.call){
+ Function.prototype.call = function(obj) {
+ var args = [];
+ for (var i = 1, len = arguments.length; i < len; i++) {
+ args[i - 1] = arguments[i];
+ }
+ return this.apply(obj, args);
+ };
+ }
+
+ function getListenersPropertyName(eventName) {
+ return "__log4javascript_listeners__" + eventName;
+ }
+
+ function addEvent(node, eventName, listener, useCapture, win) {
+ win = win ? win : window;
+ if (node.addEventListener) {
+ node.addEventListener(eventName, listener, useCapture);
+ } else if (node.attachEvent) {
+ node.attachEvent("on" + eventName, listener);
+ } else {
+ var propertyName = getListenersPropertyName(eventName);
+ if (!node[propertyName]) {
+ node[propertyName] = [];
+ // Set event handler
+ node["on" + eventName] = function(evt) {
+ evt = getEvent(evt, win);
+ var listenersPropertyName = getListenersPropertyName(eventName);
+
+ // Clone the array of listeners to leave the original untouched
+ var listeners = this[listenersPropertyName].concat([]);
+ var currentListener;
+
+ // Call each listener in turn
+ while ((currentListener = listeners.shift())) {
+ currentListener.call(this, evt);
+ }
+ };
+ }
+ node[propertyName].push(listener);
+ }
+ }
+
+ function removeEvent(node, eventName, listener, useCapture) {
+ if (node.removeEventListener) {
+ node.removeEventListener(eventName, listener, useCapture);
+ } else if (node.detachEvent) {
+ node.detachEvent("on" + eventName, listener);
+ } else {
+ var propertyName = getListenersPropertyName(eventName);
+ if (node[propertyName]) {
+ array_remove(node[propertyName], listener);
+ }
+ }
+ }
+
+ function getEvent(evt, win) {
+ win = win ? win : window;
+ return evt ? evt : win.event;
+ }
+
+ function stopEventPropagation(evt) {
+ if (evt.stopPropagation) {
+ evt.stopPropagation();
+ } else if (typeof evt.cancelBubble != "undefined") {
+ evt.cancelBubble = true;
+ }
+ evt.returnValue = false;
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // Simple logging for log4javascript itself
+
+ var logLog = {
+ quietMode: false,
+
+ debugMessages: [],
+
+ setQuietMode: function(quietMode) {
+ this.quietMode = bool(quietMode);
+ },
+
+ numberOfErrors: 0,
+
+ alertAllErrors: false,
+
+ setAlertAllErrors: function(alertAllErrors) {
+ this.alertAllErrors = alertAllErrors;
+ },
+
+ debug: function(message) {
+ this.debugMessages.push(message);
+ },
+
+ displayDebug: function() {
+ alert(this.debugMessages.join(newLine));
+ },
+
+ warn: function(message, exception) {
+ },
+
+ error: function(message, exception) {
+ if (++this.numberOfErrors == 1 || this.alertAllErrors) {
+ if (!this.quietMode) {
+ var alertMessage = "log4javascript error: " + message;
+ if (exception) {
+ alertMessage += newLine + newLine + "Original error: " + getExceptionStringRep(exception);
+ }
+ alert(alertMessage);
+ }
+ }
+ }
+ };
+ log4javascript.logLog = logLog;
+
+ log4javascript.setEventTypes(["load", "error"]);
+
+ function handleError(message, exception) {
+ logLog.error(message, exception);
+ log4javascript.dispatchEvent("error", { "message": message, "exception": exception });
+ }
+
+ log4javascript.handleError = handleError;
+
+ /* ---------------------------------------------------------------------- */
+
+ var enabled = !((typeof log4javascript_disabled != "undefined") &&
+ log4javascript_disabled);
+
+ log4javascript.setEnabled = function(enable) {
+ enabled = bool(enable);
+ };
+
+ log4javascript.isEnabled = function() {
+ return enabled;
+ };
+
+ var useTimeStampsInMilliseconds = true;
+
+ log4javascript.setTimeStampsInMilliseconds = function(timeStampsInMilliseconds) {
+ useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);
+ };
+
+ log4javascript.isTimeStampsInMilliseconds = function() {
+ return useTimeStampsInMilliseconds;
+ };
+
+
+ // This evaluates the given expression in the current scope, thus allowing
+ // scripts to access private variables. Particularly useful for testing
+ log4javascript.evalInScope = function(expr) {
+ return eval(expr);
+ };
+
+ var showStackTraces = false;
+
+ log4javascript.setShowStackTraces = function(show) {
+ showStackTraces = bool(show);
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Levels
+
+ var Level = function(level, name) {
+ this.level = level;
+ this.name = name;
+ };
+
+ Level.prototype = {
+ toString: function() {
+ return this.name;
+ },
+ equals: function(level) {
+ return this.level == level.level;
+ },
+ isGreaterOrEqual: function(level) {
+ return this.level >= level.level;
+ }
+ };
+
+ Level.ALL = new Level(Number.MIN_VALUE, "ALL");
+ Level.TRACE = new Level(10000, "TRACE");
+ Level.DEBUG = new Level(20000, "DEBUG");
+ Level.INFO = new Level(30000, "INFO");
+ Level.WARN = new Level(40000, "WARN");
+ Level.ERROR = new Level(50000, "ERROR");
+ Level.FATAL = new Level(60000, "FATAL");
+ Level.OFF = new Level(Number.MAX_VALUE, "OFF");
+
+ log4javascript.Level = Level;
+
+ /* ---------------------------------------------------------------------- */
+ // Timers
+
+ function Timer(name, level) {
+ this.name = name;
+ this.level = isUndefined(level) ? Level.INFO : level;
+ this.start = new Date();
+ }
+
+ Timer.prototype.getElapsedTime = function() {
+ return new Date().getTime() - this.start.getTime();
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Loggers
+
+ var anonymousLoggerName = "[anonymous]";
+ var defaultLoggerName = "[default]";
+ var nullLoggerName = "[null]";
+ var rootLoggerName = "root";
+
+ function Logger(name) {
+ this.name = name;
+ this.parent = null;
+ this.children = [];
+
+ var appenders = [];
+ var loggerLevel = null;
+ var isRoot = (this.name === rootLoggerName);
+ var isNull = (this.name === nullLoggerName);
+
+ var appenderCache = null;
+ var appenderCacheInvalidated = false;
+
+ this.addChild = function(childLogger) {
+ this.children.push(childLogger);
+ childLogger.parent = this;
+ childLogger.invalidateAppenderCache();
+ };
+
+ // Additivity
+ var additive = true;
+ this.getAdditivity = function() {
+ return additive;
+ };
+
+ this.setAdditivity = function(additivity) {
+ var valueChanged = (additive != additivity);
+ additive = additivity;
+ if (valueChanged) {
+ this.invalidateAppenderCache();
+ }
+ };
+
+ // Create methods that use the appenders variable in this scope
+ this.addAppender = function(appender) {
+ if (isNull) {
+ handleError("Logger.addAppender: you may not add an appender to the null logger");
+ } else {
+ if (appender instanceof log4javascript.Appender) {
+ if (!array_contains(appenders, appender)) {
+ appenders.push(appender);
+ appender.setAddedToLogger(this);
+ this.invalidateAppenderCache();
+ }
+ } else {
+ handleError("Logger.addAppender: appender supplied ('" +
+ toStr(appender) + "') is not a subclass of Appender");
+ }
+ }
+ };
+
+ this.removeAppender = function(appender) {
+ array_remove(appenders, appender);
+ appender.setRemovedFromLogger(this);
+ this.invalidateAppenderCache();
+ };
+
+ this.removeAllAppenders = function() {
+ var appenderCount = appenders.length;
+ if (appenderCount > 0) {
+ for (var i = 0; i < appenderCount; i++) {
+ appenders[i].setRemovedFromLogger(this);
+ }
+ appenders.length = 0;
+ this.invalidateAppenderCache();
+ }
+ };
+
+ this.getEffectiveAppenders = function() {
+ if (appenderCache === null || appenderCacheInvalidated) {
+ // Build appender cache
+ var parentEffectiveAppenders = (isRoot || !this.getAdditivity()) ?
+ [] : this.parent.getEffectiveAppenders();
+ appenderCache = parentEffectiveAppenders.concat(appenders);
+ appenderCacheInvalidated = false;
+ }
+ return appenderCache;
+ };
+
+ this.invalidateAppenderCache = function() {
+ appenderCacheInvalidated = true;
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ this.children[i].invalidateAppenderCache();
+ }
+ };
+
+ this.log = function(level, params) {
+ if (enabled && level.isGreaterOrEqual(this.getEffectiveLevel())) {
+ // Check whether last param is an exception
+ var exception;
+ var finalParamIndex = params.length - 1;
+ var lastParam = params[finalParamIndex];
+ if (params.length > 1 && isError(lastParam)) {
+ exception = lastParam;
+ finalParamIndex--;
+ }
+
+ // Construct genuine array for the params
+ var messages = [];
+ for (var i = 0; i <= finalParamIndex; i++) {
+ messages[i] = params[i];
+ }
+
+ var loggingEvent = new LoggingEvent(
+ this, new Date(), level, messages, exception);
+
+ this.callAppenders(loggingEvent);
+ }
+ };
+
+ this.callAppenders = function(loggingEvent) {
+ var effectiveAppenders = this.getEffectiveAppenders();
+ for (var i = 0, len = effectiveAppenders.length; i < len; i++) {
+ effectiveAppenders[i].doAppend(loggingEvent);
+ }
+ };
+
+ this.setLevel = function(level) {
+ // Having a level of null on the root logger would be very bad.
+ if (isRoot && level === null) {
+ handleError("Logger.setLevel: you cannot set the level of the root logger to null");
+ } else if (level instanceof Level) {
+ loggerLevel = level;
+ } else {
+ handleError("Logger.setLevel: level supplied to logger " +
+ this.name + " is not an instance of log4javascript.Level");
+ }
+ };
+
+ this.getLevel = function() {
+ return loggerLevel;
+ };
+
+ this.getEffectiveLevel = function() {
+ for (var logger = this; logger !== null; logger = logger.parent) {
+ var level = logger.getLevel();
+ if (level !== null) {
+ return level;
+ }
+ }
+ };
+
+ this.group = function(name, initiallyExpanded) {
+ if (enabled) {
+ var effectiveAppenders = this.getEffectiveAppenders();
+ for (var i = 0, len = effectiveAppenders.length; i < len; i++) {
+ effectiveAppenders[i].group(name, initiallyExpanded);
+ }
+ }
+ };
+
+ this.groupEnd = function() {
+ if (enabled) {
+ var effectiveAppenders = this.getEffectiveAppenders();
+ for (var i = 0, len = effectiveAppenders.length; i < len; i++) {
+ effectiveAppenders[i].groupEnd();
+ }
+ }
+ };
+
+ var timers = {};
+
+ this.time = function(name, level) {
+ if (enabled) {
+ if (isUndefined(name)) {
+ handleError("Logger.time: a name for the timer must be supplied");
+ } else if (level && !(level instanceof Level)) {
+ handleError("Logger.time: level supplied to timer " +
+ name + " is not an instance of log4javascript.Level");
+ } else {
+ timers[name] = new Timer(name, level);
+ }
+ }
+ };
+
+ this.timeEnd = function(name) {
+ if (enabled) {
+ if (isUndefined(name)) {
+ handleError("Logger.timeEnd: a name for the timer must be supplied");
+ } else if (timers[name]) {
+ var timer = timers[name];
+ var milliseconds = timer.getElapsedTime();
+ this.log(timer.level, ["Timer " + toStr(name) + " completed in " + milliseconds + "ms"]);
+ delete timers[name];
+ } else {
+ logLog.warn("Logger.timeEnd: no timer found with name " + name);
+ }
+ }
+ };
+
+ this.assert = function(expr) {
+ if (enabled && !expr) {
+ var args = [];
+ for (var i = 1, len = arguments.length; i < len; i++) {
+ args.push(arguments[i]);
+ }
+ args = (args.length > 0) ? args : ["Assertion Failure"];
+ args.push(newLine);
+ args.push(expr);
+ this.log(Level.ERROR, args);
+ }
+ };
+
+ this.toString = function() {
+ return "Logger[" + this.name + "]";
+ };
+ }
+
+ Logger.prototype = {
+ trace: function() {
+ this.log(Level.TRACE, arguments);
+ },
+
+ debug: function() {
+ this.log(Level.DEBUG, arguments);
+ },
+
+ info: function() {
+ this.log(Level.INFO, arguments);
+ },
+
+ warn: function() {
+ this.log(Level.WARN, arguments);
+ },
+
+ error: function() {
+ this.log(Level.ERROR, arguments);
+ },
+
+ fatal: function() {
+ this.log(Level.FATAL, arguments);
+ },
+
+ isEnabledFor: function(level) {
+ return level.isGreaterOrEqual(this.getEffectiveLevel());
+ },
+
+ isTraceEnabled: function() {
+ return this.isEnabledFor(Level.TRACE);
+ },
+
+ isDebugEnabled: function() {
+ return this.isEnabledFor(Level.DEBUG);
+ },
+
+ isInfoEnabled: function() {
+ return this.isEnabledFor(Level.INFO);
+ },
+
+ isWarnEnabled: function() {
+ return this.isEnabledFor(Level.WARN);
+ },
+
+ isErrorEnabled: function() {
+ return this.isEnabledFor(Level.ERROR);
+ },
+
+ isFatalEnabled: function() {
+ return this.isEnabledFor(Level.FATAL);
+ }
+ };
+
+ Logger.prototype.trace.isEntryPoint = true;
+ Logger.prototype.debug.isEntryPoint = true;
+ Logger.prototype.info.isEntryPoint = true;
+ Logger.prototype.warn.isEntryPoint = true;
+ Logger.prototype.error.isEntryPoint = true;
+ Logger.prototype.fatal.isEntryPoint = true;
+
+ /* ---------------------------------------------------------------------- */
+ // Logger access methods
+
+ // Hashtable of loggers keyed by logger name
+ var loggers = {};
+ var loggerNames = [];
+
+ var ROOT_LOGGER_DEFAULT_LEVEL = Level.DEBUG;
+ var rootLogger = new Logger(rootLoggerName);
+ rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);
+
+ log4javascript.getRootLogger = function() {
+ return rootLogger;
+ };
+
+ log4javascript.getLogger = function(loggerName) {
+ // Use default logger if loggerName is not specified or invalid
+ if (!(typeof loggerName == "string")) {
+ loggerName = anonymousLoggerName;
+ logLog.warn("log4javascript.getLogger: non-string logger name " +
+ toStr(loggerName) + " supplied, returning anonymous logger");
+ }
+
+ // Do not allow retrieval of the root logger by name
+ if (loggerName == rootLoggerName) {
+ handleError("log4javascript.getLogger: root logger may not be obtained by name");
+ }
+
+ // Create the logger for this name if it doesn't already exist
+ if (!loggers[loggerName]) {
+ var logger = new Logger(loggerName);
+ loggers[loggerName] = logger;
+ loggerNames.push(loggerName);
+
+ // Set up parent logger, if it doesn't exist
+ var lastDotIndex = loggerName.lastIndexOf(".");
+ var parentLogger;
+ if (lastDotIndex > -1) {
+ var parentLoggerName = loggerName.substring(0, lastDotIndex);
+ parentLogger = log4javascript.getLogger(parentLoggerName); // Recursively sets up grandparents etc.
+ } else {
+ parentLogger = rootLogger;
+ }
+ parentLogger.addChild(logger);
+ }
+ return loggers[loggerName];
+ };
+
+ var defaultLogger = null;
+ log4javascript.getDefaultLogger = function() {
+ if (!defaultLogger) {
+ defaultLogger = log4javascript.getLogger(defaultLoggerName);
+ var a = new log4javascript.PopUpAppender();
+ defaultLogger.addAppender(a);
+ }
+ return defaultLogger;
+ };
+
+ var nullLogger = null;
+ log4javascript.getNullLogger = function() {
+ if (!nullLogger) {
+ nullLogger = new Logger(nullLoggerName);
+ nullLogger.setLevel(Level.OFF);
+ }
+ return nullLogger;
+ };
+
+ // Destroys all loggers
+ log4javascript.resetConfiguration = function() {
+ rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);
+ loggers = {};
+ };
+
+ /* ---------------------------------------------------------------------- */
+ // Logging events
+
+ var LoggingEvent = function(logger, timeStamp, level, messages,
+ exception) {
+ this.logger = logger;
+ this.timeStamp = timeStamp;
+ this.timeStampInMilliseconds = timeStamp.getTime();
+ this.timeStampInSeconds = Math.floor(this.timeStampInMilliseconds / 1000);
+ this.milliseconds = this.timeStamp.getMilliseconds();
+ this.level = level;
+ this.messages = messages;
+ this.exception = exception;
+ };
+
+ LoggingEvent.prototype = {
+ getThrowableStrRep: function() {
+ return this.exception ?
+ getExceptionStringRep(this.exception) : "";
+ },
+ getCombinedMessages: function() {
+ return (this.messages.length == 1) ? this.messages[0] :
+ this.messages.join(newLine);
+ },
+ toString: function() {
+ return "LoggingEvent[" + this.level + "]";
+ }
+ };
+
+ log4javascript.LoggingEvent = LoggingEvent;
+
+ /* ---------------------------------------------------------------------- */
+ // Layout prototype
+
+ var Layout = function() {
+ };
+
+ Layout.prototype = {
+ defaults: {
+ loggerKey: "logger",
+ timeStampKey: "timestamp",
+ millisecondsKey: "milliseconds",
+ levelKey: "level",
+ messageKey: "message",
+ exceptionKey: "exception",
+ urlKey: "url"
+ },
+ loggerKey: "logger",
+ timeStampKey: "timestamp",
+ millisecondsKey: "milliseconds",
+ levelKey: "level",
+ messageKey: "message",
+ exceptionKey: "exception",
+ urlKey: "url",
+ batchHeader: "",
+ batchFooter: "",
+ batchSeparator: "",
+ returnsPostData: false,
+ overrideTimeStampsSetting: false,
+ useTimeStampsInMilliseconds: null,
+
+ format: function() {
+ handleError("Layout.format: layout supplied has no format() method");
+ },
+
+ ignoresThrowable: function() {
+ handleError("Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method");
+ },
+
+ getContentType: function() {
+ return "text/plain";
+ },
+
+ allowBatching: function() {
+ return true;
+ },
+
+ setTimeStampsInMilliseconds: function(timeStampsInMilliseconds) {
+ this.overrideTimeStampsSetting = true;
+ this.useTimeStampsInMilliseconds = bool(timeStampsInMilliseconds);
+ },
+
+ isTimeStampsInMilliseconds: function() {
+ return this.overrideTimeStampsSetting ?
+ this.useTimeStampsInMilliseconds : useTimeStampsInMilliseconds;
+ },
+
+ getTimeStampValue: function(loggingEvent) {
+ return this.isTimeStampsInMilliseconds() ?
+ loggingEvent.timeStampInMilliseconds : loggingEvent.timeStampInSeconds;
+ },
+
+ getDataValues: function(loggingEvent, combineMessages) {
+ var dataValues = [
+ [this.loggerKey, loggingEvent.logger.name],
+ [this.timeStampKey, this.getTimeStampValue(loggingEvent)],
+ [this.levelKey, loggingEvent.level.name],
+ [this.urlKey, window.location.href],
+ [this.messageKey, combineMessages ? loggingEvent.getCombinedMessages() : loggingEvent.messages]
+ ];
+ if (!this.isTimeStampsInMilliseconds()) {
+ dataValues.push([this.millisecondsKey, loggingEvent.milliseconds]);
+ }
+ if (loggingEvent.exception) {
+ dataValues.push([this.exceptionKey, getExceptionStringRep(loggingEvent.exception)]);
+ }
+ if (this.hasCustomFields()) {
+ for (var i = 0, len = this.customFields.length; i < len; i++) {
+ var val = this.customFields[i].value;
+
+ // Check if the value is a function. If so, execute it, passing it the
+ // current layout and the logging event
+ if (typeof val === "function") {
+ val = val(this, loggingEvent);
+ }
+ dataValues.push([this.customFields[i].name, val]);
+ }
+ }
+ return dataValues;
+ },
+
+ setKeys: function(loggerKey, timeStampKey, levelKey, messageKey,
+ exceptionKey, urlKey, millisecondsKey) {
+ this.loggerKey = extractStringFromParam(loggerKey, this.defaults.loggerKey);
+ this.timeStampKey = extractStringFromParam(timeStampKey, this.defaults.timeStampKey);
+ this.levelKey = extractStringFromParam(levelKey, this.defaults.levelKey);
+ this.messageKey = extractStringFromParam(messageKey, this.defaults.messageKey);
+ this.exceptionKey = extractStringFromParam(exceptionKey, this.defaults.exceptionKey);
+ this.urlKey = extractStringFromParam(urlKey, this.defaults.urlKey);
+ this.millisecondsKey = extractStringFromParam(millisecondsKey, this.defaults.millisecondsKey);
+ },
+
+ setCustomField: function(name, value) {
+ var fieldUpdated = false;
+ for (var i = 0, len = this.customFields.length; i < len; i++) {
+ if (this.customFields[i].name === name) {
+ this.customFields[i].value = value;
+ fieldUpdated = true;
+ }
+ }
+ if (!fieldUpdated) {
+ this.customFields.push({"name": name, "value": value});
+ }
+ },
+
+ hasCustomFields: function() {
+ return (this.customFields.length > 0);
+ },
+
+ toString: function() {
+ handleError("Layout.toString: all layouts must override this method");
+ }
+ };
+
+ log4javascript.Layout = Layout;
+
+ /* ---------------------------------------------------------------------- */
+ // Appender prototype
+
+ var Appender = function() {};
+
+ Appender.prototype = new EventSupport();
+
+ Appender.prototype.layout = new PatternLayout();
+ Appender.prototype.threshold = Level.ALL;
+ Appender.prototype.loggers = [];
+
+ // Performs threshold checks before delegating actual logging to the
+ // subclass's specific append method.
+ Appender.prototype.doAppend = function(loggingEvent) {
+ if (enabled && loggingEvent.level.level >= this.threshold.level) {
+ this.append(loggingEvent);
+ }
+ };
+
+ Appender.prototype.append = function(loggingEvent) {};
+
+ Appender.prototype.setLayout = function(layout) {
+ if (layout instanceof Layout) {
+ this.layout = layout;
+ } else {
+ handleError("Appender.setLayout: layout supplied to " +
+ this.toString() + " is not a subclass of Layout");
+ }
+ };
+
+ Appender.prototype.getLayout = function() {
+ return this.layout;
+ };
+
+ Appender.prototype.setThreshold = function(threshold) {
+ if (threshold instanceof Level) {
+ this.threshold = threshold;
+ } else {
+ handleError("Appender.setThreshold: threshold supplied to " +
+ this.toString() + " is not a subclass of Level");
+ }
+ };
+
+ Appender.prototype.getThreshold = function() {
+ return this.threshold;
+ };
+
+ Appender.prototype.setAddedToLogger = function(logger) {
+ this.loggers.push(logger);
+ };
+
+ Appender.prototype.setRemovedFromLogger = function(logger) {
+ array_remove(this.loggers, logger);
+ };
+
+ Appender.prototype.group = emptyFunction;
+ Appender.prototype.groupEnd = emptyFunction;
+
+ Appender.prototype.toString = function() {
+ handleError("Appender.toString: all appenders must override this method");
+ };
+
+ log4javascript.Appender = Appender;
+
+ /* ---------------------------------------------------------------------- */
+ // SimpleLayout
+
+ function SimpleLayout() {
+ this.customFields = [];
+ }
+
+ SimpleLayout.prototype = new Layout();
+
+ SimpleLayout.prototype.format = function(loggingEvent) {
+ return loggingEvent.level.name + " - " + loggingEvent.getCombinedMessages();
+ };
+
+ SimpleLayout.prototype.ignoresThrowable = function() {
+ return true;
+ };
+
+ SimpleLayout.prototype.toString = function() {
+ return "SimpleLayout";
+ };
+
+ log4javascript.SimpleLayout = SimpleLayout;
+ /* ----------------------------------------------------------------------- */
+ // NullLayout
+
+ function NullLayout() {
+ this.customFields = [];
+ }
+
+ NullLayout.prototype = new Layout();
+
+ NullLayout.prototype.format = function(loggingEvent) {
+ return loggingEvent.messages;
+ };
+
+ NullLayout.prototype.ignoresThrowable = function() {
+ return true;
+ };
+
+ NullLayout.prototype.toString = function() {
+ return "NullLayout";
+ };
+
+ log4javascript.NullLayout = NullLayout;
+/* ---------------------------------------------------------------------- */
+ // XmlLayout
+
+ function XmlLayout(combineMessages) {
+ this.combineMessages = extractBooleanFromParam(combineMessages, true);
+ this.customFields = [];
+ }
+
+ XmlLayout.prototype = new Layout();
+
+ XmlLayout.prototype.isCombinedMessages = function() {
+ return this.combineMessages;
+ };
+
+ XmlLayout.prototype.getContentType = function() {
+ return "text/xml";
+ };
+
+ XmlLayout.prototype.escapeCdata = function(str) {
+ return str.replace(/\]\]>/, "]]>]]><![CDATA[");
+ };
+
+ XmlLayout.prototype.format = function(loggingEvent) {
+ var layout = this;
+ var i, len;
+ function formatMessage(message) {
+ message = (typeof message === "string") ? message : toStr(message);
+ return "<log4javascript:message><![CDATA[" +
+ layout.escapeCdata(message) + "]]></log4javascript:message>";
+ }
+
+ var str = "<log4javascript:event logger=\"" + loggingEvent.logger.name +
+ "\" timestamp=\"" + this.getTimeStampValue(loggingEvent) + "\"";
+ if (!this.isTimeStampsInMilliseconds()) {
+ str += " milliseconds=\"" + loggingEvent.milliseconds + "\"";
+ }
+ str += " level=\"" + loggingEvent.level.name + "\">" + newLine;
+ if (this.combineMessages) {
+ str += formatMessage(loggingEvent.getCombinedMessages());
+ } else {
+ str += "<log4javascript:messages>" + newLine;
+ for (i = 0, len = loggingEvent.messages.length; i < len; i++) {
+ str += formatMessage(loggingEvent.messages[i]) + newLine;
+ }
+ str += "</log4javascript:messages>" + newLine;
+ }
+ if (this.hasCustomFields()) {
+ for (i = 0, len = this.customFields.length; i < len; i++) {
+ str += "<log4javascript:customfield name=\"" +
+ this.customFields[i].name + "\"><![CDATA[" +
+ this.customFields[i].value.toString() +
+ "]]></log4javascript:customfield>" + newLine;
+ }
+ }
+ if (loggingEvent.exception) {
+ str += "<log4javascript:exception><![CDATA[" +
+ getExceptionStringRep(loggingEvent.exception) +
+ "]]></log4javascript:exception>" + newLine;
+ }
+ str += "</log4javascript:event>" + newLine + newLine;
+ return str;
+ };
+
+ XmlLayout.prototype.ignoresThrowable = function() {
+ return false;
+ };
+
+ XmlLayout.prototype.toString = function() {
+ return "XmlLayout";
+ };
+
+ log4javascript.XmlLayout = XmlLayout;
+ /* ---------------------------------------------------------------------- */
+ // JsonLayout related
+
+ function escapeNewLines(str) {
+ return str.replace(/\r\n|\r|\n/g, "\\r\\n");
+ }
+
+ function JsonLayout(readable, combineMessages) {
+ this.readable = extractBooleanFromParam(readable, false);
+ this.combineMessages = extractBooleanFromParam(combineMessages, true);
+ this.batchHeader = this.readable ? "[" + newLine : "[";
+ this.batchFooter = this.readable ? "]" + newLine : "]";
+ this.batchSeparator = this.readable ? "," + newLine : ",";
+ this.setKeys();
+ this.colon = this.readable ? ": " : ":";
+ this.tab = this.readable ? "\t" : "";
+ this.lineBreak = this.readable ? newLine : "";
+ this.customFields = [];
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // JsonLayout
+
+ JsonLayout.prototype = new Layout();
+
+ JsonLayout.prototype.isReadable = function() {
+ return this.readable;
+ };
+
+ JsonLayout.prototype.isCombinedMessages = function() {
+ return this.combineMessages;
+ };
+
+ JsonLayout.prototype.format = function(loggingEvent) {
+ var layout = this;
+ var dataValues = this.getDataValues(loggingEvent, this.combineMessages);
+ var str = "{" + this.lineBreak;
+ var i, len;
+
+ function formatValue(val, prefix, expand) {
+ // Check the type of the data value to decide whether quotation marks
+ // or expansion are required
+ var formattedValue;
+ var valType = typeof val;
+ if (val instanceof Date) {
+ formattedValue = String(val.getTime());
+ } else if (expand && (val instanceof Array)) {
+ formattedValue = "[" + layout.lineBreak;
+ for (var i = 0, len = val.length; i < len; i++) {
+ var childPrefix = prefix + layout.tab;
+ formattedValue += childPrefix + formatValue(val[i], childPrefix, false);
+ if (i < val.length - 1) {
+ formattedValue += ",";
+ }
+ formattedValue += layout.lineBreak;
+ }
+ formattedValue += prefix + "]";
+ } else if (valType !== "number" && valType !== "boolean") {
+ formattedValue = "\"" + escapeNewLines(toStr(val).replace(/\"/g, "\\\"")) + "\"";
+ } else {
+ formattedValue = val;
+ }
+ return formattedValue;
+ }
+
+ for (i = 0, len = dataValues.length - 1; i <= len; i++) {
+ str += this.tab + "\"" + dataValues[i][0] + "\"" + this.colon + formatValue(dataValues[i][1], this.tab, true);
+ if (i < len) {
+ str += ",";
+ }
+ str += this.lineBreak;
+ }
+
+ str += "}" + this.lineBreak;
+ return str;
+ };
+
+ JsonLayout.prototype.ignoresThrowable = function() {
+ return false;
+ };
+
+ JsonLayout.prototype.toString = function() {
+ return "JsonLayout";
+ };
+
+ JsonLayout.prototype.getContentType = function() {
+ return "application/json";
+ };
+
+ log4javascript.JsonLayout = JsonLayout;
+ /* ---------------------------------------------------------------------- */
+ // HttpPostDataLayout
+
+ function HttpPostDataLayout() {
+ this.setKeys();
+ this.customFields = [];
+ this.returnsPostData = true;
+ }
+
+ HttpPostDataLayout.prototype = new Layout();
+
+ // Disable batching
+ HttpPostDataLayout.prototype.allowBatching = function() {
+ return false;
+ };
+
+ HttpPostDataLayout.prototype.format = function(loggingEvent) {
+ var dataValues = this.getDataValues(loggingEvent);
+ var queryBits = [];
+ for (var i = 0, len = dataValues.length; i < len; i++) {
+ var val = (dataValues[i][1] instanceof Date) ?
+ String(dataValues[i][1].getTime()) : dataValues[i][1];
+ queryBits.push(urlEncode(dataValues[i][0]) + "=" + urlEncode(val));
+ }
+ return queryBits.join("&");
+ };
+
+ HttpPostDataLayout.prototype.ignoresThrowable = function(loggingEvent) {
+ return false;
+ };
+
+ HttpPostDataLayout.prototype.toString = function() {
+ return "HttpPostDataLayout";
+ };
+
+ log4javascript.HttpPostDataLayout = HttpPostDataLayout;
+ /* ---------------------------------------------------------------------- */
+ // formatObjectExpansion
+
+ function formatObjectExpansion(obj, depth, indentation) {
+ var objectsExpanded = [];
+
+ function doFormat(obj, depth, indentation) {
+ var i, j, len, childDepth, childIndentation, childLines, expansion,
+ childExpansion;
+
+ if (!indentation) {
+ indentation = "";
+ }
+
+ function formatString(text) {
+ var lines = splitIntoLines(text);
+ for (var j = 1, jLen = lines.length; j < jLen; j++) {
+ lines[j] = indentation + lines[j];
+ }
+ return lines.join(newLine);
+ }
+
+ if (obj === null) {
+ return "null";
+ } else if (typeof obj == "undefined") {
+ return "undefined";
+ } else if (typeof obj == "string") {
+ return formatString(obj);
+ } else if (typeof obj == "object" && array_contains(objectsExpanded, obj)) {
+ try {
+ expansion = toStr(obj);
+ } catch (ex) {
+ expansion = "Error formatting property. Details: " + getExceptionStringRep(ex);
+ }
+ return expansion + " [already expanded]";
+ } else if ((obj instanceof Array) && depth > 0) {
+ objectsExpanded.push(obj);
+ expansion = "[" + newLine;
+ childDepth = depth - 1;
+ childIndentation = indentation + " ";
+ childLines = [];
+ for (i = 0, len = obj.length; i < len; i++) {
+ try {
+ childExpansion = doFormat(obj[i], childDepth, childIndentation);
+ childLines.push(childIndentation + childExpansion);
+ } catch (ex) {
+ childLines.push(childIndentation + "Error formatting array member. Details: " +
+ getExceptionStringRep(ex) + "");
+ }
+ }
+ expansion += childLines.join("," + newLine) + newLine + indentation + "]";
+ return expansion;
+ } else if (Object.prototype.toString.call(obj) == "[object Date]") {
+ return obj.toString();
+ } else if (typeof obj == "object" && depth > 0) {
+ objectsExpanded.push(obj);
+ expansion = "{" + newLine;
+ childDepth = depth - 1;
+ childIndentation = indentation + " ";
+ childLines = [];
+ for (i in obj) {
+ try {
+ childExpansion = doFormat(obj[i], childDepth, childIndentation);
+ childLines.push(childIndentation + i + ": " + childExpansion);
+ } catch (ex) {
+ childLines.push(childIndentation + i + ": Error formatting property. Details: " +
+ getExceptionStringRep(ex));
+ }
+ }
+ expansion += childLines.join("," + newLine) + newLine + indentation + "}";
+ return expansion;
+ } else {
+ return formatString(toStr(obj));
+ }
+ }
+ return doFormat(obj, depth, indentation);
+ }
+ /* ---------------------------------------------------------------------- */
+ // Date-related stuff
+
+ var SimpleDateFormat;
+
+ (function() {
+ var regex = /('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;
+ var monthNames = ["January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"];
+ var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
+ var TEXT2 = 0, TEXT3 = 1, NUMBER = 2, YEAR = 3, MONTH = 4, TIMEZONE = 5;
+ var types = {
+ G : TEXT2,
+ y : YEAR,
+ M : MONTH,
+ w : NUMBER,
+ W : NUMBER,
+ D : NUMBER,
+ d : NUMBER,
+ F : NUMBER,
+ E : TEXT3,
+ a : TEXT2,
+ H : NUMBER,
+ k : NUMBER,
+ K : NUMBER,
+ h : NUMBER,
+ m : NUMBER,
+ s : NUMBER,
+ S : NUMBER,
+ Z : TIMEZONE
+ };
+ var ONE_DAY = 24 * 60 * 60 * 1000;
+ var ONE_WEEK = 7 * ONE_DAY;
+ var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK = 1;
+
+ var newDateAtMidnight = function(year, month, day) {
+ var d = new Date(year, month, day, 0, 0, 0);
+ d.setMilliseconds(0);
+ return d;
+ };
+
+ Date.prototype.getDifference = function(date) {
+ return this.getTime() - date.getTime();
+ };
+
+ Date.prototype.isBefore = function(d) {
+ return this.getTime() < d.getTime();
+ };
+
+ Date.prototype.getUTCTime = function() {
+ return Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(),
+ this.getSeconds(), this.getMilliseconds());
+ };
+
+ Date.prototype.getTimeSince = function(d) {
+ return this.getUTCTime() - d.getUTCTime();
+ };
+
+ Date.prototype.getPreviousSunday = function() {
+ // Using midday avoids any possibility of DST messing things up
+ var midday = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 12, 0, 0);
+ var previousSunday = new Date(midday.getTime() - this.getDay() * ONE_DAY);
+ return newDateAtMidnight(previousSunday.getFullYear(), previousSunday.getMonth(),
+ previousSunday.getDate());
+ };
+
+ Date.prototype.getWeekInYear = function(minimalDaysInFirstWeek) {
+ if (isUndefined(this.minimalDaysInFirstWeek)) {
+ minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;
+ }
+ var previousSunday = this.getPreviousSunday();
+ var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);
+ var numberOfSundays = previousSunday.isBefore(startOfYear) ?
+ 0 : 1 + Math.floor(previousSunday.getTimeSince(startOfYear) / ONE_WEEK);
+ var numberOfDaysInFirstWeek = 7 - startOfYear.getDay();
+ var weekInYear = numberOfSundays;
+ if (numberOfDaysInFirstWeek < minimalDaysInFirstWeek) {
+ weekInYear--;
+ }
+ return weekInYear;
+ };
+
+ Date.prototype.getWeekInMonth = function(minimalDaysInFirstWeek) {
+ if (isUndefined(this.minimalDaysInFirstWeek)) {
+ minimalDaysInFirstWeek = DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK;
+ }
+ var previousSunday = this.getPreviousSunday();
+ var startOfMonth = newDateAtMidnight(this.getFullYear(), this.getMonth(), 1);
+ var numberOfSundays = previousSunday.isBefore(startOfMonth) ?
+ 0 : 1 + Math.floor(previousSunday.getTimeSince(startOfMonth) / ONE_WEEK);
+ var numberOfDaysInFirstWeek = 7 - startOfMonth.getDay();
+ var weekInMonth = numberOfSundays;
+ if (numberOfDaysInFirstWeek >= minimalDaysInFirstWeek) {
+ weekInMonth++;
+ }
+ return weekInMonth;
+ };
+
+ Date.prototype.getDayInYear = function() {
+ var startOfYear = newDateAtMidnight(this.getFullYear(), 0, 1);
+ return 1 + Math.floor(this.getTimeSince(startOfYear) / ONE_DAY);
+ };
+
+ /* ------------------------------------------------------------------ */
+
+ SimpleDateFormat = function(formatString) {
+ this.formatString = formatString;
+ };
+
+ /**
+ * Sets the minimum number of days in a week in order for that week to
+ * be considered as belonging to a particular month or year
+ */
+ SimpleDateFormat.prototype.setMinimalDaysInFirstWeek = function(days) {
+ this.minimalDaysInFirstWeek = days;
+ };
+
+ SimpleDateFormat.prototype.getMinimalDaysInFirstWeek = function() {
+ return isUndefined(this.minimalDaysInFirstWeek) ?
+ DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK : this.minimalDaysInFirstWeek;
+ };
+
+ var padWithZeroes = function(str, len) {
+ while (str.length < len) {
+ str = "0" + str;
+ }
+ return str;
+ };
+
+ var formatText = function(data, numberOfLetters, minLength) {
+ return (numberOfLetters >= 4) ? data : data.substr(0, Math.max(minLength, numberOfLetters));
+ };
+
+ var formatNumber = function(data, numberOfLetters) {
+ var dataString = "" + data;
+ // Pad with 0s as necessary
+ return padWithZeroes(dataString, numberOfLetters);
+ };
+
+ SimpleDateFormat.prototype.format = function(date) {
+ var formattedString = "";
+ var result;
+ var searchString = this.formatString;
+ while ((result = regex.exec(searchString))) {
+ var quotedString = result[1];
+ var patternLetters = result[2];
+ var otherLetters = result[3];
+ var otherCharacters = result[4];
+
+ // If the pattern matched is quoted string, output the text between the quotes
+ if (quotedString) {
+ if (quotedString == "''") {
+ formattedString += "'";
+ } else {
+ formattedString += quotedString.substring(1, quotedString.length - 1);
+ }
+ } else if (otherLetters) {
+ // Swallow non-pattern letters by doing nothing here
+ } else if (otherCharacters) {
+ // Simply output other characters
+ formattedString += otherCharacters;
+ } else if (patternLetters) {
+ // Replace pattern letters
+ var patternLetter = patternLetters.charAt(0);
+ var numberOfLetters = patternLetters.length;
+ var rawData = "";
+ switch(patternLetter) {
+ case "G":
+ rawData = "AD";
+ break;
+ case "y":
+ rawData = date.getFullYear();
+ break;
+ case "M":
+ rawData = date.getMonth();
+ break;
+ case "w":
+ rawData = date.getWeekInYear(this.getMinimalDaysInFirstWeek());
+ break;
+ case "W":
+ rawData = date.getWeekInMonth(this.getMinimalDaysInFirstWeek());
+ break;
+ case "D":
+ rawData = date.getDayInYear();
+ break;
+ case "d":
+ rawData = date.getDate();
+ break;
+ case "F":
+ rawData = 1 + Math.floor((date.getDate() - 1) / 7);
+ break;
+ case "E":
+ rawData = dayNames[date.getDay()];
+ break;
+ case "a":
+ rawData = (date.getHours() >= 12) ? "PM" : "AM";
+ break;
+ case "H":
+ rawData = date.getHours();
+ break;
+ case "k":
+ rawData = date.getHours() || 24;
+ break;
+ case "K":
+ rawData = date.getHours() % 12;
+ break;
+ case "h":
+ rawData = (date.getHours() % 12) || 12;
+ break;
+ case "m":
+ rawData = date.getMinutes();
+ break;
+ case "s":
+ rawData = date.getSeconds();
+ break;
+ case "S":
+ rawData = date.getMilliseconds();
+ break;
+ case "Z":
+ rawData = date.getTimezoneOffset(); // This returns the number of minutes since GMT was this time.
+ break;
+ }
+ // Format the raw data depending on the type
+ switch(types[patternLetter]) {
+ case TEXT2:
+ formattedString += formatText(rawData, numberOfLetters, 2);
+ break;
+ case TEXT3:
+ formattedString += formatText(rawData, numberOfLetters, 3);
+ break;
+ case NUMBER:
+ formattedString += formatNumber(rawData, numberOfLetters);
+ break;
+ case YEAR:
+ if (numberOfLetters <= 3) {
+ // Output a 2-digit year
+ var dataString = "" + rawData;
+ formattedString += dataString.substr(2, 2);
+ } else {
+ formattedString += formatNumber(rawData, numberOfLetters);
+ }
+ break;
+ case MONTH:
+ if (numberOfLetters >= 3) {
+ formattedString += formatText(monthNames[rawData], numberOfLetters, numberOfLetters);
+ } else {
+ // NB. Months returned by getMonth are zero-based
+ formattedString += formatNumber(rawData + 1, numberOfLetters);
+ }
+ break;
+ case TIMEZONE:
+ var isPositive = (rawData > 0);
+ // The following line looks like a mistake but isn't
+ // because of the way getTimezoneOffset measures.
+ var prefix = isPositive ? "-" : "+";
+ var absData = Math.abs(rawData);
+
+ // Hours
+ var hours = "" + Math.floor(absData / 60);
+ hours = padWithZeroes(hours, 2);
+ // Minutes
+ var minutes = "" + (absData % 60);
+ minutes = padWithZeroes(minutes, 2);
+
+ formattedString += prefix + hours + minutes;
+ break;
+ }
+ }
+ searchString = searchString.substr(result.index + result[0].length);
+ }
+ return formattedString;
+ };
+ })();
+
+ log4javascript.SimpleDateFormat = SimpleDateFormat;
+
+ /* ---------------------------------------------------------------------- */
+ // PatternLayout
+
+ function PatternLayout(pattern) {
+ if (pattern) {
+ this.pattern = pattern;
+ } else {
+ this.pattern = PatternLayout.DEFAULT_CONVERSION_PATTERN;
+ }
+ this.customFields = [];
+ }
+
+ PatternLayout.TTCC_CONVERSION_PATTERN = "%r %p %c - %m%n";
+ PatternLayout.DEFAULT_CONVERSION_PATTERN = "%m%n";
+ PatternLayout.ISO8601_DATEFORMAT = "yyyy-MM-dd HH:mm:ss,SSS";
+ PatternLayout.DATETIME_DATEFORMAT = "dd MMM yyyy HH:mm:ss,SSS";
+ PatternLayout.ABSOLUTETIME_DATEFORMAT = "HH:mm:ss,SSS";
+
+ PatternLayout.prototype = new Layout();
+
+ PatternLayout.prototype.format = function(loggingEvent) {
+ var regex = /%(-?[0-9]+)?(\.?[0-9]+)?([acdfmMnpr%])(\{([^\}]+)\})?|([^%]+)/;
+ var formattedString = "";
+ var result;
+ var searchString = this.pattern;
+
+ // Cannot use regex global flag since it doesn't work with exec in IE5
+ while ((result = regex.exec(searchString))) {
+ var matchedString = result[0];
+ var padding = result[1];
+ var truncation = result[2];
+ var conversionCharacter = result[3];
+ var specifier = result[5];
+ var text = result[6];
+
+ // Check if the pattern matched was just normal text
+ if (text) {
+ formattedString += "" + text;
+ } else {
+ // Create a raw replacement string based on the conversion
+ // character and specifier
+ var replacement = "";
+ switch(conversionCharacter) {
+ case "a": // Array of messages
+ case "m": // Message
+ var depth = 0;
+ if (specifier) {
+ depth = parseInt(specifier, 10);
+ if (isNaN(depth)) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character '" + conversionCharacter +
+ "' - should be a number");
+ depth = 0;
+ }
+ }
+ var messages = (conversionCharacter === "a") ? loggingEvent.messages[0] : loggingEvent.messages;
+ for (var i = 0, len = messages.length; i < len; i++) {
+ if (i > 0 && (replacement.charAt(replacement.length - 1) !== " ")) {
+ replacement += " ";
+ }
+ if (depth === 0) {
+ replacement += messages[i];
+ } else {
+ replacement += formatObjectExpansion(messages[i], depth);
+ }
+ }
+ break;
+ case "c": // Logger name
+ var loggerName = loggingEvent.logger.name;
+ if (specifier) {
+ var precision = parseInt(specifier, 10);
+ var loggerNameBits = loggingEvent.logger.name.split(".");
+ if (precision >= loggerNameBits.length) {
+ replacement = loggerName;
+ } else {
+ replacement = loggerNameBits.slice(loggerNameBits.length - precision).join(".");
+ }
+ } else {
+ replacement = loggerName;
+ }
+ break;
+ case "d": // Date
+ var dateFormat = PatternLayout.ISO8601_DATEFORMAT;
+ if (specifier) {
+ dateFormat = specifier;
+ // Pick up special cases
+ if (dateFormat == "ISO8601") {
+ dateFormat = PatternLayout.ISO8601_DATEFORMAT;
+ } else if (dateFormat == "ABSOLUTE") {
+ dateFormat = PatternLayout.ABSOLUTETIME_DATEFORMAT;
+ } else if (dateFormat == "DATE") {
+ dateFormat = PatternLayout.DATETIME_DATEFORMAT;
+ }
+ }
+ // Format the date
+ replacement = (new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);
+ break;
+ case "f": // Custom field
+ if (this.hasCustomFields()) {
+ var fieldIndex = 0;
+ if (specifier) {
+ fieldIndex = parseInt(specifier, 10);
+ if (isNaN(fieldIndex)) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character 'f' - should be a number");
+ } else if (fieldIndex === 0) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character 'f' - must be greater than zero");
+ } else if (fieldIndex > this.customFields.length) {
+ handleError("PatternLayout.format: invalid specifier '" +
+ specifier + "' for conversion character 'f' - there aren't that many custom fields");
+ } else {
+ fieldIndex = fieldIndex - 1;
+ }
+ }
+ var val = this.customFields[fieldIndex].value;
+ if (typeof val == "function") {
+ val = val(this, loggingEvent);
+ }
+ replacement = val;
+ }
+ break;
+ case "n": // New line
+ replacement = newLine;
+ break;
+ case "p": // Level
+ replacement = loggingEvent.level.name;
+ break;
+ case "r": // Milliseconds since log4javascript startup
+ replacement = "" + loggingEvent.timeStamp.getDifference(applicationStartDate);
+ break;
+ case "%": // Literal % sign
+ replacement = "%";
+ break;
+ default:
+ replacement = matchedString;
+ break;
+ }
+ // Format the replacement according to any padding or
+ // truncation specified
+ var l;
+
+ // First, truncation
+ if (truncation) {
+ l = parseInt(truncation.substr(1), 10);
+ var strLen = replacement.length;
+ if (l < strLen) {
+ replacement = replacement.substring(strLen - l, strLen);
+ }
+ }
+ // Next, padding
+ if (padding) {
+ if (padding.charAt(0) == "-") {
+ l = parseInt(padding.substr(1), 10);
+ // Right pad with spaces
+ while (replacement.length < l) {
+ replacement += " ";
+ }
+ } else {
+ l = parseInt(padding, 10);
+ // Left pad with spaces
+ while (replacement.length < l) {
+ replacement = " " + replacement;
+ }
+ }
+ }
+ formattedString += replacement;
+ }
+ searchString = searchString.substr(result.index + result[0].length);
+ }
+ return formattedString;
+ };
+
+ PatternLayout.prototype.ignoresThrowable = function() {
+ return true;
+ };
+
+ PatternLayout.prototype.toString = function() {
+ return "PatternLayout";
+ };
+
+ log4javascript.PatternLayout = PatternLayout;
+ /* ---------------------------------------------------------------------- */
+ // AlertAppender
+
+ function AlertAppender() {}
+
+ AlertAppender.prototype = new Appender();
+
+ AlertAppender.prototype.layout = new SimpleLayout();
+
+ AlertAppender.prototype.append = function(loggingEvent) {
+ var formattedMessage = this.getLayout().format(loggingEvent);
+ if (this.getLayout().ignoresThrowable()) {
+ formattedMessage += loggingEvent.getThrowableStrRep();
+ }
+ alert(formattedMessage);
+ };
+
+ AlertAppender.prototype.toString = function() {
+ return "AlertAppender";
+ };
+
+ log4javascript.AlertAppender = AlertAppender;
+ /* ---------------------------------------------------------------------- */
+ // BrowserConsoleAppender (only works in Opera and Safari and Firefox with
+ // Firebug extension)
+
+ function BrowserConsoleAppender() {}
+
+ BrowserConsoleAppender.prototype = new log4javascript.Appender();
+ BrowserConsoleAppender.prototype.layout = new NullLayout();
+ BrowserConsoleAppender.prototype.threshold = Level.DEBUG;
+
+ BrowserConsoleAppender.prototype.append = function(loggingEvent) {
+ var appender = this;
+
+ var getFormattedMessage = function() {
+ var layout = appender.getLayout();
+ var formattedMessage = layout.format(loggingEvent);
+ if (layout.ignoresThrowable() && loggingEvent.exception) {
+ formattedMessage += loggingEvent.getThrowableStrRep();
+ }
+ return formattedMessage;
+ };
+
+ if ((typeof opera != "undefined") && opera.postError) { // Opera
+ opera.postError(getFormattedMessage());
+ } else if (window.console && window.console.log) { // Safari and Firebug
+ var formattedMesage = getFormattedMessage();
+ // Log to Firebug using its logging methods or revert to the console.log
+ // method in Safari
+ if (window.console.debug && Level.DEBUG.isGreaterOrEqual(loggingEvent.level)) {
+ window.console.debug(formattedMesage);
+ } else if (window.console.info && Level.INFO.equals(loggingEvent.level)) {
+ window.console.info(formattedMesage);
+ } else if (window.console.warn && Level.WARN.equals(loggingEvent.level)) {
+ window.console.warn(formattedMesage);
+ } else if (window.console.error && loggingEvent.level.isGreaterOrEqual(Level.ERROR)) {
+ window.console.error(formattedMesage);
+ } else {
+ window.console.log(formattedMesage);
+ }
+ }
+ };
+
+ BrowserConsoleAppender.prototype.group = function(name) {
+ if (window.console && window.console.group) {
+ window.console.group(name);
+ }
+ };
+
+ BrowserConsoleAppender.prototype.groupEnd = function() {
+ if (window.console && window.console.groupEnd) {
+ window.console.groupEnd();
+ }
+ };
+
+ BrowserConsoleAppender.prototype.toString = function() {
+ return "BrowserConsoleAppender";
+ };
+
+ log4javascript.BrowserConsoleAppender = BrowserConsoleAppender;
+ /* ---------------------------------------------------------------------- */
+ // AjaxAppender related
+
+ var xmlHttpFactories = [
+ function() { return new XMLHttpRequest(); },
+ function() { return new ActiveXObject("Msxml2.XMLHTTP"); },
+ function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
+ ];
+
+ var getXmlHttp = function(errorHandler) {
+ // This is only run the first time; the value of getXmlHttp gets
+ // replaced with the factory that succeeds on the first run
+ var xmlHttp = null, factory;
+ for (var i = 0, len = xmlHttpFactories.length; i < len; i++) {
+ factory = xmlHttpFactories[i];
+ try {
+ xmlHttp = factory();
+ getXmlHttp = factory;
+ return xmlHttp;
+ } catch (e) {
+ }
+ }
+ // If we're here, all factories have failed, so throw an error
+ if (errorHandler) {
+ errorHandler();
+ } else {
+ handleError("getXmlHttp: unable to obtain XMLHttpRequest object");
+ }
+ };
+
+ function isHttpRequestSuccessful(xmlHttp) {
+ return isUndefined(xmlHttp.status) || xmlHttp.status === 0 ||
+ (xmlHttp.status >= 200 && xmlHttp.status < 300) ||
+ xmlHttp.status == 1223 /* Fix for IE */;
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // AjaxAppender
+
+ function AjaxAppender(url) {
+ var appender = this;
+ var isSupported = true;
+ if (!url) {
+ handleError("AjaxAppender: URL must be specified in constructor");
+ isSupported = false;
+ }
+
+ var timed = this.defaults.timed;
+ var waitForResponse = this.defaults.waitForResponse;
+ var batchSize = this.defaults.batchSize;
+ var timerInterval = this.defaults.timerInterval;
+ var requestSuccessCallback = this.defaults.requestSuccessCallback;
+ var failCallback = this.defaults.failCallback;
+ var postVarName = this.defaults.postVarName;
+ var sendAllOnUnload = this.defaults.sendAllOnUnload;
+ var contentType = this.defaults.contentType;
+ var sessionId = null;
+
+ var queuedLoggingEvents = [];
+ var queuedRequests = [];
+ var headers = [];
+ var sending = false;
+ var initialized = false;
+
+ // Configuration methods. The function scope is used to prevent
+ // direct alteration to the appender configuration properties.
+ function checkCanConfigure(configOptionName) {
+ if (initialized) {
+ handleError("AjaxAppender: configuration option '" +
+ configOptionName +
+ "' may not be set after the appender has been initialized");
+ return false;
+ }
+ return true;
+ }
+
+ this.getSessionId = function() { return sessionId; };
+ this.setSessionId = function(sessionIdParam) {
+ sessionId = extractStringFromParam(sessionIdParam, null);
+ this.layout.setCustomField("sessionid", sessionId);
+ };
+
+ this.setLayout = function(layoutParam) {
+ if (checkCanConfigure("layout")) {
+ this.layout = layoutParam;
+ // Set the session id as a custom field on the layout, if not already present
+ if (sessionId !== null) {
+ this.setSessionId(sessionId);
+ }
+ }
+ };
+
+ this.isTimed = function() { return timed; };
+ this.setTimed = function(timedParam) {
+ if (checkCanConfigure("timed")) {
+ timed = bool(timedParam);
+ }
+ };
+
+ this.getTimerInterval = function() { return timerInterval; };
+ this.setTimerInterval = function(timerIntervalParam) {
+ if (checkCanConfigure("timerInterval")) {
+ timerInterval = extractIntFromParam(timerIntervalParam, timerInterval);
+ }
+ };
+
+ this.isWaitForResponse = function() { return waitForResponse; };
+ this.setWaitForResponse = function(waitForResponseParam) {
+ if (checkCanConfigure("waitForResponse")) {
+ waitForResponse = bool(waitForResponseParam);
+ }
+ };
+
+ this.getBatchSize = function() { return batchSize; };
+ this.setBatchSize = function(batchSizeParam) {
+ if (checkCanConfigure("batchSize")) {
+ batchSize = extractIntFromParam(batchSizeParam, batchSize);
+ }
+ };
+
+ this.isSendAllOnUnload = function() { return sendAllOnUnload; };
+ this.setSendAllOnUnload = function(sendAllOnUnloadParam) {
+ if (checkCanConfigure("sendAllOnUnload")) {
+ sendAllOnUnload = extractBooleanFromParam(sendAllOnUnloadParam, sendAllOnUnload);
+ }
+ };
+
+ this.setRequestSuccessCallback = function(requestSuccessCallbackParam) {
+ requestSuccessCallback = extractFunctionFromParam(requestSuccessCallbackParam, requestSuccessCallback);
+ };
+
+ this.setFailCallback = function(failCallbackParam) {
+ failCallback = extractFunctionFromParam(failCallbackParam, failCallback);
+ };
+
+ this.getPostVarName = function() { return postVarName; };
+ this.setPostVarName = function(postVarNameParam) {
+ if (checkCanConfigure("postVarName")) {
+ postVarName = extractStringFromParam(postVarNameParam, postVarName);
+ }
+ };
+
+ this.getHeaders = function() { return headers; };
+ this.addHeader = function(name, value) {
+ if (name.toLowerCase() == "content-type") {
+ contentType = value;
+ } else {
+ headers.push( { name: name, value: value } );
+ }
+ };
+
+ // Internal functions
+ function sendAll() {
+ if (isSupported && enabled) {
+ sending = true;
+ var currentRequestBatch;
+ if (waitForResponse) {
+ // Send the first request then use this function as the callback once
+ // the response comes back
+ if (queuedRequests.length > 0) {
+ currentRequestBatch = queuedRequests.shift();
+ sendRequest(preparePostData(currentRequestBatch), sendAll);
+ } else {
+ sending = false;
+ if (timed) {
+ scheduleSending();
+ }
+ }
+ } else {
+ // Rattle off all the requests without waiting to see the response
+ while ((currentRequestBatch = queuedRequests.shift())) {
+ sendRequest(preparePostData(currentRequestBatch));
+ }
+ sending = false;
+ if (timed) {
+ scheduleSending();
+ }
+ }
+ }
+ }
+
+ this.sendAll = sendAll;
+
+ // Called when the window unloads. At this point we're past caring about
+ // waiting for responses or timers or incomplete batches - everything
+ // must go, now
+ function sendAllRemaining() {
+ var sendingAnything = false;
+ if (isSupported && enabled) {
+ // Create requests for everything left over, batched as normal
+ var actualBatchSize = appender.getLayout().allowBatching() ? batchSize : 1;
+ var currentLoggingEvent;
+ var batchedLoggingEvents = [];
+ while ((currentLoggingEvent = queuedLoggingEvents.shift())) {
+ batchedLoggingEvents.push(currentLoggingEvent);
+ if (queuedLoggingEvents.length >= actualBatchSize) {
+ // Queue this batch of log entries
+ queuedRequests.push(batchedLoggingEvents);
+ batchedLoggingEvents = [];
+ }
+ }
+ // If there's a partially completed batch, add it
+ if (batchedLoggingEvents.length > 0) {
+ queuedRequests.push(batchedLoggingEvents);
+ }
+ sendingAnything = (queuedRequests.length > 0);
+ waitForResponse = false;
+ timed = false;
+ sendAll();
+ }
+ return sendingAnything;
+ }
+
+ this.sendAllRemaining = sendAllRemaining;
+
+ function preparePostData(batchedLoggingEvents) {
+ // Format the logging events
+ var formattedMessages = [];
+ var currentLoggingEvent;
+ var postData = "";
+ while ((currentLoggingEvent = batchedLoggingEvents.shift())) {
+ var currentFormattedMessage = appender.getLayout().format(currentLoggingEvent);
+ if (appender.getLayout().ignoresThrowable()) {
+ currentFormattedMessage += currentLoggingEvent.getThrowableStrRep();
+ }
+ formattedMessages.push(currentFormattedMessage);
+ }
+ // Create the post data string
+ if (batchedLoggingEvents.length == 1) {
+ postData = formattedMessages.join("");
+ } else {
+ postData = appender.getLayout().batchHeader +
+ formattedMessages.join(appender.getLayout().batchSeparator) +
+ appender.getLayout().batchFooter;
+ }
+ if (contentType == appender.defaults.contentType) {
+ postData = appender.getLayout().returnsPostData ? postData :
+ urlEncode(postVarName) + "=" + urlEncode(postData);
+ // Add the layout name to the post data
+ if (postData.length > 0) {
+ postData += "&";
+ }
+ postData += "layout=" + urlEncode(appender.getLayout().toString());
+ }
+ return postData;
+ }
+
+ function scheduleSending() {
+ window.setTimeout(sendAll, timerInterval);
+ }
+
+ function xmlHttpErrorHandler() {
+ var msg = "AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled";
+ handleError(msg);
+ isSupported = false;
+ if (failCallback) {
+ failCallback(msg);
+ }
+ }
+
+ function sendRequest(postData, successCallback) {
+ try {
+ var xmlHttp = getXmlHttp(xmlHttpErrorHandler);
+ if (isSupported) {
+ if (xmlHttp.overrideMimeType) {
+ xmlHttp.overrideMimeType(appender.getLayout().getContentType());
+ }
+ xmlHttp.onreadystatechange = function() {
+ if (xmlHttp.readyState == 4) {
+ if (isHttpRequestSuccessful(xmlHttp)) {
+ if (requestSuccessCallback) {
+ requestSuccessCallback(xmlHttp);
+ }
+ if (successCallback) {
+ successCallback(xmlHttp);
+ }
+ } else {
+ var msg = "AjaxAppender.append: XMLHttpRequest request to URL " +
+ url + " returned status code " + xmlHttp.status;
+ handleError(msg);
+ if (failCallback) {
+ failCallback(msg);
+ }
+ }
+ xmlHttp.onreadystatechange = emptyFunction;
+ xmlHttp = null;
+ }
+ };
+ xmlHttp.open("POST", url, true);
+ try {
+ for (var i = 0, header; header = headers[i++]; ) {
+ xmlHttp.setRequestHeader(header.name, header.value);
+ }
+ xmlHttp.setRequestHeader("Content-Type", contentType);
+ } catch (headerEx) {
+ var msg = "AjaxAppender.append: your browser's XMLHttpRequest implementation" +
+ " does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled";
+ handleError(msg);
+ isSupported = false;
+ if (failCallback) {
+ failCallback(msg);
+ }
+ return;
+ }
+ xmlHttp.send(postData);
+ }
+ } catch (ex) {
+ var errMsg = "AjaxAppender.append: error sending log message to " + url;
+ handleError(errMsg, ex);
+ isSupported = false;
+ if (failCallback) {
+ failCallback(errMsg + ". Details: " + getExceptionStringRep(ex));
+ }
+ }
+ }
+
+ this.append = function(loggingEvent) {
+ if (isSupported) {
+ if (!initialized) {
+ init();
+ }
+ queuedLoggingEvents.push(loggingEvent);
+ var actualBatchSize = this.getLayout().allowBatching() ? batchSize : 1;
+
+ if (queuedLoggingEvents.length >= actualBatchSize) {
+ var currentLoggingEvent;
+ var batchedLoggingEvents = [];
+ while ((currentLoggingEvent = queuedLoggingEvents.shift())) {
+ batchedLoggingEvents.push(currentLoggingEvent);
+ }
+ // Queue this batch of log entries
+ queuedRequests.push(batchedLoggingEvents);
+
+ // If using a timer, the queue of requests will be processed by the
+ // timer function, so nothing needs to be done here.
+ if (!timed && (!waitForResponse || (waitForResponse && !sending))) {
+ sendAll();
+ }
+ }
+ }
+ };
+
+ function init() {
+ initialized = true;
+ // Add unload event to send outstanding messages
+ if (sendAllOnUnload) {
+ var oldBeforeUnload = window.onbeforeunload;
+ window.onbeforeunload = function() {
+ if (oldBeforeUnload) {
+ oldBeforeUnload();
+ }
+ if (sendAllRemaining()) {
+ return "Sending log messages";
+ }
+ };
+ }
+ // Start timer
+ if (timed) {
+ scheduleSending();
+ }
+ }
+ }
+
+ AjaxAppender.prototype = new Appender();
+
+ AjaxAppender.prototype.defaults = {
+ waitForResponse: false,
+ timed: false,
+ timerInterval: 1000,
+ batchSize: 1,
+ sendAllOnUnload: false,
+ requestSuccessCallback: null,
+ failCallback: null,
+ postVarName: "data",
+ contentType: "application/x-www-form-urlencoded"
+ };
+
+ AjaxAppender.prototype.layout = new HttpPostDataLayout();
+
+ AjaxAppender.prototype.toString = function() {
+ return "AjaxAppender";
+ };
+
+ log4javascript.AjaxAppender = AjaxAppender;
+ /* ---------------------------------------------------------------------- */
+ // PopUpAppender and InPageAppender related
+
+ function setCookie(name, value, days, path) {
+ var expires;
+ path = path ? "; path=" + path : "";
+ if (days) {
+ var date = new Date();
+ date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
+ expires = "; expires=" + date.toGMTString();
+ } else {
+ expires = "";
+ }
+ document.cookie = escape(name) + "=" + escape(value) + expires + path;
+ }
+
+ function getCookie(name) {
+ var nameEquals = escape(name) + "=";
+ var ca = document.cookie.split(";");
+ for (var i = 0, len = ca.length; i < len; i++) {
+ var c = ca[i];
+ while (c.charAt(0) === " ") {
+ c = c.substring(1, c.length);
+ }
+ if (c.indexOf(nameEquals) === 0) {
+ return unescape(c.substring(nameEquals.length, c.length));
+ }
+ }
+ return null;
+ }
+
+ // Gets the base URL of the location of the log4javascript script.
+ // This is far from infallible.
+ function getBaseUrl() {
+ var scripts = document.getElementsByTagName("script");
+ for (var i = 0, len = scripts.length; i < len; ++i) {
+ if (scripts[i].src.indexOf("log4javascript") != -1) {
+ var lastSlash = scripts[i].src.lastIndexOf("/");
+ return (lastSlash == -1) ? "" : scripts[i].src.substr(0, lastSlash + 1);
+ }
+ }
+ return null;
+ }
+
+ function isLoaded(win) {
+ try {
+ return bool(win.loaded);
+ } catch (ex) {
+ return false;
+ }
+ }
+
+ /* ---------------------------------------------------------------------- */
+ // ConsoleAppender (prototype for PopUpAppender and InPageAppender)
+
+ var ConsoleAppender;
+
+ // Create an anonymous function to protect base console methods
+ (function() {
+ var getConsoleHtmlLines = function() {
+ return [
+'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
+'<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">',
+' <head>',
+' <title>log4javascript</title>',
+' <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />',
+' <!-- Make IE8 behave like IE7, having gone to all the trouble of making IE work -->',
+' <meta http-equiv="X-UA-Compatible" content="IE=7" />',
+' <script type="text/javascript">var isIe = false, isIePre7 = false;</script>',
+' <!--[if IE]><script type="text/javascript">isIe = true</script><![endif]-->',
+' <!--[if lt IE 7]><script type="text/javascript">isIePre7 = true</script><![endif]-->',
+' <script type="text/javascript">',
+' //<![CDATA[',
+' var loggingEnabled = true;',
+' var logQueuedEventsTimer = null;',
+' var logEntries = [];',
+' var logEntriesAndSeparators = [];',
+' var logItems = [];',
+' var renderDelay = 100;',
+' var unrenderedLogItemsExist = false;',
+' var rootGroup, currentGroup = null;',
+' var loaded = false;',
+' var currentLogItem = null;',
+' var logMainContainer;',
+'',
+' function copyProperties(obj, props) {',
+' for (var i in props) {',
+' obj[i] = props[i];',
+' }',
+' }',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogItem() {',
+' }',
+'',
+' LogItem.prototype = {',
+' mainContainer: null,',
+' wrappedContainer: null,',
+' unwrappedContainer: null,',
+' group: null,',
+'',
+' appendToLog: function() {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].appendToLog();',
+' }',
+' this.group.update();',
+' },',
+'',
+' doRemove: function(doUpdate, removeFromGroup) {',
+' if (this.rendered) {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].remove();',
+' }',
+' this.unwrappedElementContainer = null;',
+' this.wrappedElementContainer = null;',
+' this.mainElementContainer = null;',
+' }',
+' if (this.group && removeFromGroup) {',
+' this.group.removeChild(this, doUpdate);',
+' }',
+' if (this === currentLogItem) {',
+' currentLogItem = null;',
+' }',
+' },',
+'',
+' remove: function(doUpdate, removeFromGroup) {',
+' this.doRemove(doUpdate, removeFromGroup);',
+' },',
+'',
+' render: function() {},',
+'',
+' accept: function(visitor) {',
+' visitor.visit(this);',
+' },',
+'',
+' getUnwrappedDomContainer: function() {',
+' return this.group.unwrappedElementContainer.contentDiv;',
+' },',
+'',
+' getWrappedDomContainer: function() {',
+' return this.group.wrappedElementContainer.contentDiv;',
+' },',
+'',
+' getMainDomContainer: function() {',
+' return this.group.mainElementContainer.contentDiv;',
+' }',
+' };',
+'',
+' LogItem.serializedItemKeys = {LOG_ENTRY: 0, GROUP_START: 1, GROUP_END: 2};',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogItemContainerElement() {',
+' }',
+'',
+' LogItemContainerElement.prototype = {',
+' appendToLog: function() {',
+' var insertBeforeFirst = (newestAtTop && this.containerDomNode.hasChildNodes());',
+' if (insertBeforeFirst) {',
+' this.containerDomNode.insertBefore(this.mainDiv, this.containerDomNode.firstChild);',
+' } else {',
+' this.containerDomNode.appendChild(this.mainDiv);',
+' }',
+' }',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function SeparatorElementContainer(containerDomNode) {',
+' this.containerDomNode = containerDomNode;',
+' this.mainDiv = document.createElement("div");',
+' this.mainDiv.className = "separator";',
+' this.mainDiv.innerHTML = " ";',
+' }',
+'',
+' SeparatorElementContainer.prototype = new LogItemContainerElement();',
+'',
+' SeparatorElementContainer.prototype.remove = function() {',
+' this.mainDiv.parentNode.removeChild(this.mainDiv);',
+' this.mainDiv = null;',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function Separator() {',
+' this.rendered = false;',
+' }',
+'',
+' Separator.prototype = new LogItem();',
+'',
+' copyProperties(Separator.prototype, {',
+' render: function() {',
+' var containerDomNode = this.group.contentDiv;',
+' if (isIe) {',
+' this.unwrappedElementContainer = new SeparatorElementContainer(this.getUnwrappedDomContainer());',
+' this.wrappedElementContainer = new SeparatorElementContainer(this.getWrappedDomContainer());',
+' this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',
+' } else {',
+' this.mainElementContainer = new SeparatorElementContainer(this.getMainDomContainer());',
+' this.elementContainers = [this.mainElementContainer];',
+' }',
+' this.content = this.formattedMessage;',
+' this.rendered = true;',
+' }',
+' });',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function GroupElementContainer(group, containerDomNode, isRoot, isWrapped) {',
+' this.group = group;',
+' this.containerDomNode = containerDomNode;',
+' this.isRoot = isRoot;',
+' this.isWrapped = isWrapped;',
+' this.expandable = false;',
+'',
+' if (this.isRoot) {',
+' if (isIe) {',
+' this.contentDiv = logMainContainer.appendChild(document.createElement("div"));',
+' this.contentDiv.id = this.isWrapped ? "log_wrapped" : "log_unwrapped";',
+' } else {',
+' this.contentDiv = logMainContainer;',
+' }',
+' } else {',
+' var groupElementContainer = this;',
+' ',
+' this.mainDiv = document.createElement("div");',
+' this.mainDiv.className = "group";',
+'',
+' this.headingDiv = this.mainDiv.appendChild(document.createElement("div"));',
+' this.headingDiv.className = "groupheading";',
+'',
+' this.expander = this.headingDiv.appendChild(document.createElement("span"));',
+' this.expander.className = "expander unselectable greyedout";',
+' this.expander.unselectable = true;',
+' var expanderText = this.group.expanded ? "-" : "+";',
+' this.expanderTextNode = this.expander.appendChild(document.createTextNode(expanderText));',
+' ',
+' this.headingDiv.appendChild(document.createTextNode(" " + this.group.name));',
+'',
+' this.contentDiv = this.mainDiv.appendChild(document.createElement("div"));',
+' var contentCssClass = this.group.expanded ? "expanded" : "collapsed";',
+' this.contentDiv.className = "groupcontent " + contentCssClass;',
+'',
+' this.expander.onclick = function() {',
+' if (groupElementContainer.group.expandable) {',
+' groupElementContainer.group.toggleExpanded();',
+' }',
+' };',
+' }',
+' }',
+'',
+' GroupElementContainer.prototype = new LogItemContainerElement();',
+'',
+' copyProperties(GroupElementContainer.prototype, {',
+' toggleExpanded: function() {',
+' if (!this.isRoot) {',
+' var oldCssClass, newCssClass, expanderText;',
+' if (this.group.expanded) {',
+' newCssClass = "expanded";',
+' oldCssClass = "collapsed";',
+' expanderText = "-";',
+' } else {',
+' newCssClass = "collapsed";',
+' oldCssClass = "expanded";',
+' expanderText = "+";',
+' }',
+' replaceClass(this.contentDiv, newCssClass, oldCssClass);',
+' this.expanderTextNode.nodeValue = expanderText;',
+' }',
+' },',
+'',
+' remove: function() {',
+' if (!this.isRoot) {',
+' this.headingDiv = null;',
+' this.expander.onclick = null;',
+' this.expander = null;',
+' this.expanderTextNode = null;',
+' this.contentDiv = null;',
+' this.containerDomNode = null;',
+' this.mainDiv.parentNode.removeChild(this.mainDiv);',
+' this.mainDiv = null;',
+' }',
+' },',
+'',
+' reverseChildren: function() {',
+' // Invert the order of the log entries',
+' var node = null;',
+'',
+' // Remove all the log container nodes',
+' var childDomNodes = [];',
+' while ((node = this.contentDiv.firstChild)) {',
+' this.contentDiv.removeChild(node);',
+' childDomNodes.push(node);',
+' }',
+'',
+' // Put them all back in reverse order',
+' while ((node = childDomNodes.pop())) {',
+' this.contentDiv.appendChild(node);',
+' }',
+' },',
+'',
+' update: function() {',
+' if (!this.isRoot) {',
+' if (this.group.expandable) {',
+' removeClass(this.expander, "greyedout");',
+' } else {',
+' addClass(this.expander, "greyedout");',
+' }',
+' }',
+' },',
+'',
+' clear: function() {',
+' if (this.isRoot) {',
+' this.contentDiv.innerHTML = "";',
+' }',
+' }',
+' });',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function Group(name, isRoot, initiallyExpanded) {',
+' this.name = name;',
+' this.group = null;',
+' this.isRoot = isRoot;',
+' this.initiallyExpanded = initiallyExpanded;',
+' this.elementContainers = [];',
+' this.children = [];',
+' this.expanded = initiallyExpanded;',
+' this.rendered = false;',
+' this.expandable = false;',
+' }',
+'',
+' Group.prototype = new LogItem();',
+'',
+' copyProperties(Group.prototype, {',
+' addChild: function(logItem) {',
+' this.children.push(logItem);',
+' logItem.group = this;',
+' },',
+'',
+' render: function() {',
+' if (isIe) {',
+' var unwrappedDomContainer, wrappedDomContainer;',
+' if (this.isRoot) {',
+' unwrappedDomContainer = logMainContainer;',
+' wrappedDomContainer = logMainContainer;',
+' } else {',
+' unwrappedDomContainer = this.getUnwrappedDomContainer();',
+' wrappedDomContainer = this.getWrappedDomContainer();',
+' }',
+' this.unwrappedElementContainer = new GroupElementContainer(this, unwrappedDomContainer, this.isRoot, false);',
+' this.wrappedElementContainer = new GroupElementContainer(this, wrappedDomContainer, this.isRoot, true);',
+' this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',
+' } else {',
+' var mainDomContainer = this.isRoot ? logMainContainer : this.getMainDomContainer();',
+' this.mainElementContainer = new GroupElementContainer(this, mainDomContainer, this.isRoot, false);',
+' this.elementContainers = [this.mainElementContainer];',
+' }',
+' this.rendered = true;',
+' },',
+'',
+' toggleExpanded: function() {',
+' this.expanded = !this.expanded;',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].toggleExpanded();',
+' }',
+' },',
+'',
+' expand: function() {',
+' if (!this.expanded) {',
+' this.toggleExpanded();',
+' }',
+' },',
+'',
+' accept: function(visitor) {',
+' visitor.visitGroup(this);',
+' },',
+'',
+' reverseChildren: function() {',
+' if (this.rendered) {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].reverseChildren();',
+' }',
+' }',
+' },',
+'',
+' update: function() {',
+' var previouslyExpandable = this.expandable;',
+' this.expandable = (this.children.length !== 0);',
+' if (this.expandable !== previouslyExpandable) {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].update();',
+' }',
+' }',
+' },',
+'',
+' flatten: function() {',
+' var visitor = new GroupFlattener();',
+' this.accept(visitor);',
+' return visitor.logEntriesAndSeparators;',
+' },',
+'',
+' removeChild: function(child, doUpdate) {',
+' array_remove(this.children, child);',
+' child.group = null;',
+' if (doUpdate) {',
+' this.update();',
+' }',
+' },',
+'',
+' remove: function(doUpdate, removeFromGroup) {',
+' for (var i = 0, len = this.children.length; i < len; i++) {',
+' this.children[i].remove(false, false);',
+' }',
+' this.children = [];',
+' this.update();',
+' if (this === currentGroup) {',
+' currentGroup = this.group;',
+' }',
+' this.doRemove(doUpdate, removeFromGroup);',
+' },',
+'',
+' serialize: function(items) {',
+' items.push([LogItem.serializedItemKeys.GROUP_START, this.name]);',
+' for (var i = 0, len = this.children.length; i < len; i++) {',
+' this.children[i].serialize(items);',
+' }',
+' if (this !== currentGroup) {',
+' items.push([LogItem.serializedItemKeys.GROUP_END]);',
+' }',
+' },',
+'',
+' clear: function() {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].clear();',
+' }',
+' }',
+' });',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogEntryElementContainer() {',
+' }',
+'',
+' LogEntryElementContainer.prototype = new LogItemContainerElement();',
+'',
+' copyProperties(LogEntryElementContainer.prototype, {',
+' remove: function() {',
+' this.doRemove();',
+' },',
+'',
+' doRemove: function() {',
+' this.mainDiv.parentNode.removeChild(this.mainDiv);',
+' this.mainDiv = null;',
+' this.contentElement = null;',
+' this.containerDomNode = null;',
+' },',
+'',
+' setContent: function(content, wrappedContent) {',
+' if (content === this.formattedMessage) {',
+' this.contentElement.innerHTML = "";',
+' this.contentElement.appendChild(document.createTextNode(this.formattedMessage));',
+' } else {',
+' this.contentElement.innerHTML = content;',
+' }',
+' },',
+'',
+' setSearchMatch: function(isMatch) {',
+' var oldCssClass = isMatch ? "searchnonmatch" : "searchmatch";',
+' var newCssClass = isMatch ? "searchmatch" : "searchnonmatch";',
+' replaceClass(this.mainDiv, newCssClass, oldCssClass);',
+' },',
+'',
+' clearSearch: function() {',
+' removeClass(this.mainDiv, "searchmatch");',
+' removeClass(this.mainDiv, "searchnonmatch");',
+' }',
+' });',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogEntryWrappedElementContainer(logEntry, containerDomNode) {',
+' this.logEntry = logEntry;',
+' this.containerDomNode = containerDomNode;',
+' this.mainDiv = document.createElement("div");',
+' this.mainDiv.appendChild(document.createTextNode(this.logEntry.formattedMessage));',
+' this.mainDiv.className = "logentry wrapped " + this.logEntry.level;',
+' this.contentElement = this.mainDiv;',
+' }',
+'',
+' LogEntryWrappedElementContainer.prototype = new LogEntryElementContainer();',
+'',
+' LogEntryWrappedElementContainer.prototype.setContent = function(content, wrappedContent) {',
+' if (content === this.formattedMessage) {',
+' this.contentElement.innerHTML = "";',
+' this.contentElement.appendChild(document.createTextNode(this.formattedMessage));',
+' } else {',
+' this.contentElement.innerHTML = wrappedContent;',
+' }',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogEntryUnwrappedElementContainer(logEntry, containerDomNode) {',
+' this.logEntry = logEntry;',
+' this.containerDomNode = containerDomNode;',
+' this.mainDiv = document.createElement("div");',
+' this.mainDiv.className = "logentry unwrapped " + this.logEntry.level;',
+' this.pre = this.mainDiv.appendChild(document.createElement("pre"));',
+' this.pre.appendChild(document.createTextNode(this.logEntry.formattedMessage));',
+' this.pre.className = "unwrapped";',
+' this.contentElement = this.pre;',
+' }',
+'',
+' LogEntryUnwrappedElementContainer.prototype = new LogEntryElementContainer();',
+'',
+' LogEntryUnwrappedElementContainer.prototype.remove = function() {',
+' this.doRemove();',
+' this.pre = null;',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogEntryMainElementContainer(logEntry, containerDomNode) {',
+' this.logEntry = logEntry;',
+' this.containerDomNode = containerDomNode;',
+' this.mainDiv = document.createElement("div");',
+' this.mainDiv.className = "logentry nonielogentry " + this.logEntry.level;',
+' this.contentElement = this.mainDiv.appendChild(document.createElement("span"));',
+' this.contentElement.appendChild(document.createTextNode(this.logEntry.formattedMessage));',
+' }',
+'',
+' LogEntryMainElementContainer.prototype = new LogEntryElementContainer();',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogEntry(level, formattedMessage) {',
+' this.level = level;',
+' this.formattedMessage = formattedMessage;',
+' this.rendered = false;',
+' }',
+'',
+' LogEntry.prototype = new LogItem();',
+'',
+' copyProperties(LogEntry.prototype, {',
+' render: function() {',
+' var logEntry = this;',
+' var containerDomNode = this.group.contentDiv;',
+'',
+' // Support for the CSS attribute white-space in IE for Windows is',
+' // non-existent pre version 6 and slightly odd in 6, so instead',
+' // use two different HTML elements',
+' if (isIe) {',
+' this.formattedMessage = this.formattedMessage.replace(/\\r\\n/g, "\\r"); // Workaround for IE\'s treatment of white space',
+' this.unwrappedElementContainer = new LogEntryUnwrappedElementContainer(this, this.getUnwrappedDomContainer());',
+' this.wrappedElementContainer = new LogEntryWrappedElementContainer(this, this.getWrappedDomContainer());',
+' this.elementContainers = [this.unwrappedElementContainer, this.wrappedElementContainer];',
+' } else {',
+' this.mainElementContainer = new LogEntryMainElementContainer(this, this.getMainDomContainer());',
+' this.elementContainers = [this.mainElementContainer];',
+' }',
+' this.content = this.formattedMessage;',
+' this.rendered = true;',
+' },',
+'',
+' setContent: function(content, wrappedContent) {',
+' if (content != this.content) {',
+' if (isIe && (content !== this.formattedMessage)) {',
+' content = content.replace(/\\r\\n/g, "\\r"); // Workaround for IE\'s treatment of white space',
+' }',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].setContent(content, wrappedContent);',
+' }',
+' this.content = content;',
+' }',
+' },',
+'',
+' getSearchMatches: function() {',
+' var matches = [];',
+' var i, len;',
+' if (isIe) {',
+' var unwrappedEls = getElementsByClass(this.unwrappedElementContainer.mainDiv, "searchterm", "span");',
+' var wrappedEls = getElementsByClass(this.wrappedElementContainer.mainDiv, "searchterm", "span");',
+' for (i = 0, len = unwrappedEls.length; i < len; i++) {',
+' matches[i] = new Match(this.level, null, unwrappedEls[i], wrappedEls[i]);',
+' }',
+' } else {',
+' var els = getElementsByClass(this.mainElementContainer.mainDiv, "searchterm", "span");',
+' for (i = 0, len = els.length; i < len; i++) {',
+' matches[i] = new Match(this.level, els[i]);',
+' }',
+' }',
+' return matches;',
+' },',
+'',
+' setSearchMatch: function(isMatch) {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].setSearchMatch(isMatch);',
+' }',
+' },',
+'',
+' clearSearch: function() {',
+' for (var i = 0, len = this.elementContainers.length; i < len; i++) {',
+' this.elementContainers[i].clearSearch();',
+' }',
+' },',
+'',
+' accept: function(visitor) {',
+' visitor.visitLogEntry(this);',
+' },',
+'',
+' serialize: function(items) {',
+' items.push([LogItem.serializedItemKeys.LOG_ENTRY, this.level, this.formattedMessage]);',
+' }',
+' });',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogItemVisitor() {',
+' }',
+'',
+' LogItemVisitor.prototype = {',
+' visit: function(logItem) {',
+' },',
+'',
+' visitParent: function(logItem) {',
+' if (logItem.group) {',
+' logItem.group.accept(this);',
+' }',
+' },',
+'',
+' visitChildren: function(logItem) {',
+' for (var i = 0, len = logItem.children.length; i < len; i++) {',
+' logItem.children[i].accept(this);',
+' }',
+' },',
+'',
+' visitLogEntry: function(logEntry) {',
+' this.visit(logEntry);',
+' },',
+'',
+' visitSeparator: function(separator) {',
+' this.visit(separator);',
+' },',
+'',
+' visitGroup: function(group) {',
+' this.visit(group);',
+' }',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function GroupFlattener() {',
+' this.logEntriesAndSeparators = [];',
+' }',
+'',
+' GroupFlattener.prototype = new LogItemVisitor();',
+'',
+' GroupFlattener.prototype.visitGroup = function(group) {',
+' this.visitChildren(group);',
+' };',
+'',
+' GroupFlattener.prototype.visitLogEntry = function(logEntry) {',
+' this.logEntriesAndSeparators.push(logEntry);',
+' };',
+'',
+' GroupFlattener.prototype.visitSeparator = function(separator) {',
+' this.logEntriesAndSeparators.push(separator);',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' window.onload = function() {',
+' // Sort out document.domain',
+' if (location.search) {',
+' var queryBits = unescape(location.search).substr(1).split("&"), nameValueBits;',
+' for (var i = 0, len = queryBits.length; i < len; i++) {',
+' nameValueBits = queryBits[i].split("=");',
+' if (nameValueBits[0] == "log4javascript_domain") {',
+' document.domain = nameValueBits[1];',
+' break;',
+' }',
+' }',
+' }',
+'',
+' // Create DOM objects',
+' logMainContainer = $("log");',
+' if (isIePre7) {',
+' addClass(logMainContainer, "oldIe");',
+' }',
+'',
+' rootGroup = new Group("root", true);',
+' rootGroup.render();',
+' currentGroup = rootGroup;',
+' ',
+' setCommandInputWidth();',
+' setLogContainerHeight();',
+' toggleLoggingEnabled();',
+' toggleSearchEnabled();',
+' toggleSearchFilter();',
+' toggleSearchHighlight();',
+' applyFilters();',
+' checkAllLevels();',
+' toggleWrap();',
+' toggleNewestAtTop();',
+' toggleScrollToLatest();',
+' renderQueuedLogItems();',
+' loaded = true;',
+' $("command").value = "";',
+' $("command").autocomplete = "off";',
+' $("command").onkeydown = function(evt) {',
+' evt = getEvent(evt);',
+' if (evt.keyCode == 10 || evt.keyCode == 13) { // Return/Enter',
+' evalCommandLine();',
+' stopPropagation(evt);',
+' } else if (evt.keyCode == 27) { // Escape',
+' this.value = "";',
+' this.focus();',
+' } else if (evt.keyCode == 38 && commandHistory.length > 0) { // Up',
+' currentCommandIndex = Math.max(0, currentCommandIndex - 1);',
+' this.value = commandHistory[currentCommandIndex];',
+' moveCaretToEnd(this);',
+' } else if (evt.keyCode == 40 && commandHistory.length > 0) { // Down',
+' currentCommandIndex = Math.min(commandHistory.length - 1, currentCommandIndex + 1);',
+' this.value = commandHistory[currentCommandIndex];',
+' moveCaretToEnd(this);',
+' }',
+' };',
+'',
+' // Prevent the keypress moving the caret in Firefox',
+' $("command").onkeypress = function(evt) {',
+' evt = getEvent(evt);',
+' if (evt.keyCode == 38 && commandHistory.length > 0 && evt.preventDefault) { // Up',
+' evt.preventDefault();',
+' }',
+' };',
+'',
+' // Prevent the keyup event blurring the input in Opera',
+' $("command").onkeyup = function(evt) {',
+' evt = getEvent(evt);',
+' if (evt.keyCode == 27 && evt.preventDefault) { // Up',
+' evt.preventDefault();',
+' this.focus();',
+' }',
+' };',
+'',
+' // Add document keyboard shortcuts',
+' document.onkeydown = function keyEventHandler(evt) {',
+' evt = getEvent(evt);',
+' switch (evt.keyCode) {',
+' case 69: // Ctrl + shift + E: re-execute last command',
+' if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',
+' evalLastCommand();',
+' cancelKeyEvent(evt);',
+' return false;',
+' }',
+' break;',
+' case 75: // Ctrl + shift + K: focus search',
+' if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',
+' focusSearch();',
+' cancelKeyEvent(evt);',
+' return false;',
+' }',
+' break;',
+' case 40: // Ctrl + shift + down arrow: focus command line',
+' case 76: // Ctrl + shift + L: focus command line',
+' if (evt.shiftKey && (evt.ctrlKey || evt.metaKey)) {',
+' focusCommandLine();',
+' cancelKeyEvent(evt);',
+' return false;',
+' }',
+' break;',
+' }',
+' };',
+'',
+' // Workaround to make sure log div starts at the correct size',
+' setTimeout(setLogContainerHeight, 20);',
+'',
+' setShowCommandLine(showCommandLine);',
+' doSearch();',
+' };',
+'',
+' window.onunload = function() {',
+' if (mainWindowExists()) {',
+' appender.unload();',
+' }',
+' appender = null;',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function toggleLoggingEnabled() {',
+' setLoggingEnabled($("enableLogging").checked);',
+' }',
+'',
+' function setLoggingEnabled(enable) {',
+' loggingEnabled = enable;',
+' }',
+'',
+' var appender = null;',
+'',
+' function setAppender(appenderParam) {',
+' appender = appenderParam;',
+' }',
+'',
+' function setShowCloseButton(showCloseButton) {',
+' $("closeButton").style.display = showCloseButton ? "inline" : "none";',
+' }',
+'',
+' function setShowHideButton(showHideButton) {',
+' $("hideButton").style.display = showHideButton ? "inline" : "none";',
+' }',
+'',
+' var newestAtTop = false;',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function LogItemContentReverser() {',
+' }',
+' ',
+' LogItemContentReverser.prototype = new LogItemVisitor();',
+' ',
+' LogItemContentReverser.prototype.visitGroup = function(group) {',
+' group.reverseChildren();',
+' this.visitChildren(group);',
+' };',
+'',
+' /*----------------------------------------------------------------*/',
+'',
+' function setNewestAtTop(isNewestAtTop) {',
+' var oldNewestAtTop = newestAtTop;',
+' var i, iLen, j, jLen;',
+' newestAtTop = Boolean(isNewestAtTop);',
+' if (oldNewestAtTop != newestAtTop) {',
+' var visitor = new LogItemContentReverser();',
+' rootGroup.accept(visitor);',
+'',
+' // Reassemble the matches array',
+' if (currentSearch) {',
+' var currentMatch = currentSearch.matches[currentMatchIndex];',
+' var matchIndex = 0;',
+' var matches = [];',
+' var actOnLogEntry = function(logEntry) {',
+' var logEntryMatches = logEntry.getSearchMatches();',
+' for (j = 0, jLen = logEntryMatches.length; j < jLen; j++) {',
+' matches[matchIndex] = logEntryMatches[j];',
+' if (currentMatch && logEntryMatches[j].equals(currentMatch)) {',
+' currentMatchIndex = matchIndex;',
+' }',
+' matchIndex++;',
+' }',
+' };',
+' if (newestAtTop) {',
+' for (i = logEntries.length - 1; i >= 0; i--) {',
+' actOnLogEntry(logEntries[i]);',
+' }',
+' } else {',
+' for (i = 0, iLen = logEntries.length; i < iLen; i++) {',
+' actOnLogEntry(logEntries[i]);',
+' }',
+' }',
+' currentSearch.matches = matches;',
+' if (currentMatch) {',
+' currentMatch.setCurrent();',
+' }',
+' } else if (scrollToLatest) {',
+' doScrollToLatest();',
+' }',
+' }',
+' $("newestAtTop").checked = isNewestAtTop;',
+' }',
+'',
+' function toggleNewestAtTop() {',
+' var isNewestAtTop = $("newestAtTop").checked;',
+' setNewestAtTop(isNewestAtTop);',
+' }',
+'',
+' var scrollToLatest = true;',
+'',
+' function setScrollToLatest(isScrollToLatest) {',
+' scrollToLatest = isScrollToLatest;',
+' if (scrollToLatest) {',
+' doScrollToLatest();',
+' }',
+' $("scrollToLatest").checked = isScrollToLatest;',
+' }',
+'',
+' function toggleScrollToLatest() {',
+' var isScrollToLatest = $("scrollToLatest").checked;',
+' setScrollToLatest(isScrollToLatest);',
+' }',
+'',
+' function doScrollToLatest() {',
+' var l = logMainContainer;',
+' if (typeof l.scrollTop != "undefined") {',
+' if (newestAtTop) {',
+' l.scrollTop = 0;',
+' } else {',
+' var latestLogEntry = l.lastChild;',
+' if (latestLogEntry) {',
+' l.scrollTop = l.scrollHeight;',
+' }',
+' }',
+' }',
+' }',
+'',
+' var closeIfOpenerCloses = true;',
+'',
+' function setCloseIfOpenerCloses(isCloseIfOpenerCloses) {',
+' closeIfOpenerCloses = isCloseIfOpenerCloses;',
+' }',
+'',
+' var maxMessages = null;',
+'',
+' function setMaxMessages(max) {',
+' maxMessages = max;',
+' pruneLogEntries();',
+' }',
+'',
+' var showCommandLine = false;',
+'',
+' function setShowCommandLine(isShowCommandLine) {',
+' showCommandLine = isShowCommandLine;',
+' if (loaded) {',
+' $("commandLine").style.display = showCommandLine ? "block" : "none";',
+' setCommandInputWidth();',
+' setLogContainerHeight();',
+' }',
+' }',
+'',
+' function focusCommandLine() {',
+' if (loaded) {',
+' $("command").focus();',
+' }',
+' }',
+'',
+' function focusSearch() {',
+' if (loaded) {',
+' $("searchBox").focus();',
+' }',
+' }',
+'',
+' function getLogItems() {',
+' var items = [];',
+' for (var i = 0, len = logItems.length; i < len; i++) {',
+' logItems[i].serialize(items);',
+' }',
+' return items;',
+' }',
+'',
+' function setLogItems(items) {',
+' var loggingReallyEnabled = loggingEnabled;',
+' // Temporarily turn logging on',
+' loggingEnabled = true;',
+' for (var i = 0, len = items.length; i < len; i++) {',
+' switch (items[i][0]) {',
+' case LogItem.serializedItemKeys.LOG_ENTRY:',
+' log(items[i][1], items[i][2]);',
+' break;',
+' case LogItem.serializedItemKeys.GROUP_START:',
+' group(items[i][1]);',
+' break;',
+' case LogItem.serializedItemKeys.GROUP_END:',
+' groupEnd();',
+' break;',
+' }',
+' }',
+' loggingEnabled = loggingReallyEnabled;',
+' }',
+'',
+' function log(logLevel, formattedMessage) {',
+' if (loggingEnabled) {',
+' var logEntry = new LogEntry(logLevel, formattedMessage);',
+' logEntries.push(logEntry);',
+' logEntriesAndSeparators.push(logEntry);',
+' logItems.push(logEntry);',
+' currentGroup.addChild(logEntry);',
+' if (loaded) {',
+' if (logQueuedEventsTimer !== null) {',
+' clearTimeout(logQueuedEventsTimer);',
+' }',
+' logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);',
+' unrenderedLogItemsExist = true;',
+' }',
+' }',
+' }',
+'',
+' function renderQueuedLogItems() {',
+' logQueuedEventsTimer = null;',
+' var pruned = pruneLogEntries();',
+'',
+' // Render any unrendered log entries and apply the current search to them',
+' var initiallyHasMatches = currentSearch ? currentSearch.hasMatches() : false;',
+' for (var i = 0, len = logItems.length; i < len; i++) {',
+' if (!logItems[i].rendered) {',
+' logItems[i].render();',
+' logItems[i].appendToLog();',
+' if (currentSearch && (logItems[i] instanceof LogEntry)) {',
+' currentSearch.applyTo(logItems[i]);',
+' }',
+' }',
+' }',
+' if (currentSearch) {',
+' if (pruned) {',
+' if (currentSearch.hasVisibleMatches()) {',
+' if (currentMatchIndex === null) {',
+' setCurrentMatchIndex(0);',
+' }',
+' displayMatches();',
+' } else {',
+' displayNoMatches();',
+' }',
+' } else if (!initiallyHasMatches && currentSearch.hasVisibleMatches()) {',
+' setCurrentMatchIndex(0);',
+' displayMatches();',
+' }',
+' }',
+' if (scrollToLatest) {',
+' doScrollToLatest();',
+' }',
+' unrenderedLogItemsExist = false;',
+' }',
+'',
+' function pruneLogEntries() {',
+' if ((maxMessages !== null) && (logEntriesAndSeparators.length > maxMessages)) {',
+' var numberToDelete = logEntriesAndSeparators.length - maxMessages;',
+' var prunedLogEntries = logEntriesAndSeparators.slice(0, numberToDelete);',
+' if (currentSearch) {',
+' currentSearch.removeMatches(prunedLogEntries);',
+' }',
+' var group;',
+' for (var i = 0; i < numberToDelete; i++) {',
+' group = logEntriesAndSeparators[i].group;',
+' array_remove(logItems, logEntriesAndSeparators[i]);',
+' array_remove(logEntries, logEntriesAndSeparators[i]);',
+' logEntriesAndSeparators[i].remove(true, true);',
+' if (group.children.length === 0 && group !== currentGroup && group !== rootGroup) {',
+' array_remove(logItems, group);',
+' group.remove(true, true);',
+' }',
+' }',
+' logEntriesAndSeparators = array_removeFromStart(logEntriesAndSeparators, numberToDelete);',
+' return true;',
+' }',
+' return false;',
+' }',
+'',
+' function group(name, startExpanded) {',
+' if (loggingEnabled) {',
+' initiallyExpanded = (typeof startExpanded === "undefined") ? true : Boolean(startExpanded);',
+' var newGroup = new Group(name, false, initiallyExpanded);',
+' currentGroup.addChild(newGroup);',
+' currentGroup = newGroup;',
+' logItems.push(newGroup);',
+' if (loaded) {',
+' if (logQueuedEventsTimer !== null) {',
+' clearTimeout(logQueuedEventsTimer);',
+' }',
+' logQueuedEventsTimer = setTimeout(renderQueuedLogItems, renderDelay);',
+' unrenderedLogItemsExist = true;',
+' }',
+' }',
+' }',
+'',
+' function groupEnd() {',
+' currentGroup = (currentGroup === rootGroup) ? rootGroup : currentGroup.group;',
+' }',
+'',
+' function mainPageReloaded() {',
+' currentGroup = rootGroup;',
+' var separator = new Separator();',
+' logEntriesAndSeparators.push(separator);',
+' logItems.push(separator);',
+' currentGroup.addChild(separator);',
+' }',
+'',
+' function closeWindow() {',
+' if (appender && mainWindowExists()) {',
+' appender.close(true);',
+' } else {',
+' window.close();',
+' }',
+' }',
+'',
+' function hide() {',
+' if (appender && mainWindowExists()) {',
+' appender.hide();',
+' }',
+' }',
+'',
+' var mainWindow = window;',
+' var windowId = "log4javascriptConsoleWindow_" + new Date().getTime() + "_" + ("" + Math.random()).substr(2);',
+'',
+' function setMainWindow(win) {',
+' mainWindow = win;',
+' mainWindow[windowId] = window;',
+' // If this is a pop-up, poll the opener to see if it\'s closed',
+' if (opener && closeIfOpenerCloses) {',
+' pollOpener();',
+' }',
+' }',
+'',
+' function pollOpener() {',
+' if (closeIfOpenerCloses) {',
+' if (mainWindowExists()) {',
+' setTimeout(pollOpener, 500);',
+' } else {',
+' closeWindow();',
+' }',
+' }',
+' }',
+'',
+' function mainWindowExists() {',
+' try {',
+' return (mainWindow && !mainWindow.closed &&',
+' mainWindow[windowId] == window);',
+' } catch (ex) {}',
+' return false;',
+' }',
+'',
+' var logLevels = ["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"];',
+'',
+' function getCheckBox(logLevel) {',
+' return $("switch_" + logLevel);',
+' }',
+'',
+' function getIeWrappedLogContainer() {',
+' return $("log_wrapped");',
+' }',
+'',
+' function getIeUnwrappedLogContainer() {',
+' return $("log_unwrapped");',
+' }',
+'',
+' function applyFilters() {',
+' for (var i = 0; i < logLevels.length; i++) {',
+' if (getCheckBox(logLevels[i]).checked) {',
+' addClass(logMainContainer, logLevels[i]);',
+' } else {',
+' removeClass(logMainContainer, logLevels[i]);',
+' }',
+' }',
+' updateSearchFromFilters();',
+' }',
+'',
+' function toggleAllLevels() {',
+' var turnOn = $("switch_ALL").checked;',
+' for (var i = 0; i < logLevels.length; i++) {',
+' getCheckBox(logLevels[i]).checked = turnOn;',
+' if (turnOn) {',
+' addClass(logMainContainer, logLevels[i]);',
+' } else {',
+' removeClass(logMainContainer, logLevels[i]);',
+' }',
+' }',
+' }',
+'',
+' function checkAllLevels() {',
+' for (var i = 0; i < logLevels.length; i++) {',
+' if (!getCheckBox(logLevels[i]).checked) {',
+' getCheckBox("ALL").checked = false;',
+' return;',
+' }',
+' }',
+' getCheckBox("ALL").checked = true;',
+' }',
+'',
+' function clearLog() {',
+' rootGroup.clear();',
+' currentGroup = rootGroup;',
+' logEntries = [];',
+' logItems = [];',
+' logEntriesAndSeparators = [];',
+' doSearch();',
+' }',
+'',
+' function toggleWrap() {',
+' var enable = $("wrap").checked;',
+' if (enable) {',
+' addClass(logMainContainer, "wrap");',
+' } else {',
+' removeClass(logMainContainer, "wrap");',
+' }',
+' refreshCurrentMatch();',
+' }',
+'',
+' /* ------------------------------------------------------------------- */',
+'',
+' // Search',
+'',
+' var searchTimer = null;',
+'',
+' function scheduleSearch() {',
+' try {',
+' clearTimeout(searchTimer);',
+' } catch (ex) {',
+' // Do nothing',
+' }',
+' searchTimer = setTimeout(doSearch, 500);',
+' }',
+'',
+' function Search(searchTerm, isRegex, searchRegex, isCaseSensitive) {',
+' this.searchTerm = searchTerm;',
+' this.isRegex = isRegex;',
+' this.searchRegex = searchRegex;',
+' this.isCaseSensitive = isCaseSensitive;',
+' this.matches = [];',
+' }',
+'',
+' Search.prototype = {',
+' hasMatches: function() {',
+' return this.matches.length > 0;',
+' },',
+'',
+' hasVisibleMatches: function() {',
+' if (this.hasMatches()) {',
+' for (var i = 0; i < this.matches.length; i++) {',
+' if (this.matches[i].isVisible()) {',
+' return true;',
+' }',
+' }',
+' }',
+' return false;',
+' },',
+'',
+' match: function(logEntry) {',
+' var entryText = String(logEntry.formattedMessage);',
+' var matchesSearch = false;',
+' if (this.isRegex) {',
+' matchesSearch = this.searchRegex.test(entryText);',
+' } else if (this.isCaseSensitive) {',
+' matchesSearch = (entryText.indexOf(this.searchTerm) > -1);',
+' } else {',
+' matchesSearch = (entryText.toLowerCase().indexOf(this.searchTerm.toLowerCase()) > -1);',
+' }',
+' return matchesSearch;',
+' },',
+'',
+' getNextVisibleMatchIndex: function() {',
+' for (var i = currentMatchIndex + 1; i < this.matches.length; i++) {',
+' if (this.matches[i].isVisible()) {',
+' return i;',
+' }',
+' }',
+' // Start again from the first match',
+' for (i = 0; i <= currentMatchIndex; i++) {',
+' if (this.matches[i].isVisible()) {',
+' return i;',
+' }',
+' }',
+' return -1;',
+' },',
+'',
+' getPreviousVisibleMatchIndex: function() {',
+' for (var i = currentMatchIndex - 1; i >= 0; i--) {',
+' if (this.matches[i].isVisible()) {',
+' return i;',
+' }',
+' }',
+' // Start again from the last match',
+' for (var i = this.matches.length - 1; i >= currentMatchIndex; i--) {',
+' if (this.matches[i].isVisible()) {',
+' return i;',
+' }',
+' }',
+' return -1;',
+' },',
+'',
+' applyTo: function(logEntry) {',
+' var doesMatch = this.match(logEntry);',
+' if (doesMatch) {',
+' logEntry.group.expand();',
+' logEntry.setSearchMatch(true);',
+' var logEntryContent;',
+' var wrappedLogEntryContent;',
+' var searchTermReplacementStartTag = "<span class=\\\"searchterm\\\">";',
+' var searchTermReplacementEndTag = "<" + "/span>";',
+' var preTagName = isIe ? "pre" : "span";',
+' var preStartTag = "<" + preTagName + " class=\\\"pre\\\">";',
+' var preEndTag = "<" + "/" + preTagName + ">";',
+' var startIndex = 0;',
+' var searchIndex, matchedText, textBeforeMatch;',
+' if (this.isRegex) {',
+' var flags = this.isCaseSensitive ? "g" : "gi";',
+' var capturingRegex = new RegExp("(" + this.searchRegex.source + ")", flags);',
+'',
+' // Replace the search term with temporary tokens for the start and end tags',
+' var rnd = ("" + Math.random()).substr(2);',
+' var startToken = "%%s" + rnd + "%%";',
+' var endToken = "%%e" + rnd + "%%";',
+' logEntryContent = logEntry.formattedMessage.replace(capturingRegex, startToken + "$1" + endToken);',
+'',
+' // Escape the HTML to get rid of angle brackets',
+' logEntryContent = escapeHtml(logEntryContent);',
+'',
+' // Substitute the proper HTML back in for the search match',
+' var result;',
+' var searchString = logEntryContent;',
+' logEntryContent = "";',
+' wrappedLogEntryContent = "";',
+' while ((searchIndex = searchString.indexOf(startToken, startIndex)) > -1) {',
+' var endTokenIndex = searchString.indexOf(endToken, searchIndex);',
+' matchedText = searchString.substring(searchIndex + startToken.length, endTokenIndex);',
+' textBeforeMatch = searchString.substring(startIndex, searchIndex);',
+' logEntryContent += preStartTag + textBeforeMatch + preEndTag;',
+' logEntryContent += searchTermReplacementStartTag + preStartTag + matchedText +',
+' preEndTag + searchTermReplacementEndTag;',
+' if (isIe) {',
+' wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +',
+' matchedText + searchTermReplacementEndTag;',
+' }',
+' startIndex = endTokenIndex + endToken.length;',
+' }',
+' logEntryContent += preStartTag + searchString.substr(startIndex) + preEndTag;',
+' if (isIe) {',
+' wrappedLogEntryContent += searchString.substr(startIndex);',
+' }',
+' } else {',
+' logEntryContent = "";',
+' wrappedLogEntryContent = "";',
+' var searchTermReplacementLength = searchTermReplacementStartTag.length +',
+' this.searchTerm.length + searchTermReplacementEndTag.length;',
+' var searchTermLength = this.searchTerm.length;',
+' var searchTermLowerCase = this.searchTerm.toLowerCase();',
+' var logTextLowerCase = logEntry.formattedMessage.toLowerCase();',
+' while ((searchIndex = logTextLowerCase.indexOf(searchTermLowerCase, startIndex)) > -1) {',
+' matchedText = escapeHtml(logEntry.formattedMessage.substr(searchIndex, this.searchTerm.length));',
+' textBeforeMatch = escapeHtml(logEntry.formattedMessage.substring(startIndex, searchIndex));',
+' var searchTermReplacement = searchTermReplacementStartTag +',
+' preStartTag + matchedText + preEndTag + searchTermReplacementEndTag;',
+' logEntryContent += preStartTag + textBeforeMatch + preEndTag + searchTermReplacement;',
+' if (isIe) {',
+' wrappedLogEntryContent += textBeforeMatch + searchTermReplacementStartTag +',
+' matchedText + searchTermReplacementEndTag;',
+' }',
+' startIndex = searchIndex + searchTermLength;',
+' }',
+' var textAfterLastMatch = escapeHtml(logEntry.formattedMessage.substr(startIndex));',
+' logEntryContent += preStartTag + textAfterLastMatch + preEndTag;',
+' if (isIe) {',
+' wrappedLogEntryContent += textAfterLastMatch;',
+' }',
+' }',
+' logEntry.setContent(logEntryContent, wrappedLogEntryContent);',
+' var logEntryMatches = logEntry.getSearchMatches();',
+' this.matches = this.matches.concat(logEntryMatches);',
+' } else {',
+' logEntry.setSearchMatch(false);',
+' logEntry.setContent(logEntry.formattedMessage, logEntry.formattedMessage);',
+' }',
+' return doesMatch;',
+' },',
+'',
+' removeMatches: function(logEntries) {',
+' var matchesToRemoveCount = 0;',
+' var currentMatchRemoved = false;',
+' var matchesToRemove = [];',
+' var i, iLen, j, jLen;',
+'',
+' // Establish the list of matches to be removed',
+' for (i = 0, iLen = this.matches.length; i < iLen; i++) {',
+' for (j = 0, jLen = logEntries.length; j < jLen; j++) {',
+' if (this.matches[i].belongsTo(logEntries[j])) {',
+' matchesToRemove.push(this.matches[i]);',
+' if (i === currentMatchIndex) {',
+' currentMatchRemoved = true;',
+' }',
+' }',
+' }',
+' }',
+'',
+' // Set the new current match index if the current match has been deleted',
+' // This will be the first match that appears after the first log entry being',
+' // deleted, if one exists; otherwise, it\'s the first match overall',
+' var newMatch = currentMatchRemoved ? null : this.matches[currentMatchIndex];',
+' if (currentMatchRemoved) {',
+' for (i = currentMatchIndex, iLen = this.matches.length; i < iLen; i++) {',
+' if (this.matches[i].isVisible() && !array_contains(matchesToRemove, this.matches[i])) {',
+' newMatch = this.matches[i];',
+' break;',
+' }',
+' }',
+' }',
+'',
+' // Remove the matches',
+' for (i = 0, iLen = matchesToRemove.length; i < iLen; i++) {',
+' array_remove(this.matches, matchesToRemove[i]);',
+' matchesToRemove[i].remove();',
+' }',
+'',
+' // Set the new match, if one exists',
+' if (this.hasVisibleMatches()) {',
+' if (newMatch === null) {',
+' setCurrentMatchIndex(0);',
+' } else {',
+' // Get the index of the new match',
+' var newMatchIndex = 0;',
+' for (i = 0, iLen = this.matches.length; i < iLen; i++) {',
+' if (newMatch === this.matches[i]) {',
+' newMatchIndex = i;',
+' break;',
+' }',
+' }',
+' setCurrentMatchIndex(newMatchIndex);',
+' }',
+' } else {',
+' currentMatchIndex = null;',
+' displayNoMatches();',
+' }',
+' }',
+' };',
+'',
+' function getPageOffsetTop(el, container) {',
+' var currentEl = el;',
+' var y = 0;',
+' while (currentEl && currentEl != container) {',
+' y += currentEl.offsetTop;',
+' currentEl = currentEl.offsetParent;',
+' }',
+' return y;',
+' }',
+'',
+' function scrollIntoView(el) {',
+' var logContainer = logMainContainer;',
+' // Check if the whole width of the element is visible and centre if not',
+' if (!$("wrap").checked) {',
+' var logContainerLeft = logContainer.scrollLeft;',
+' var logContainerRight = logContainerLeft + logContainer.offsetWidth;',
+' var elLeft = el.offsetLeft;',
+' var elRight = elLeft + el.offsetWidth;',
+' if (elLeft < logContainerLeft || elRight > logContainerRight) {',
+' logContainer.scrollLeft = elLeft - (logContainer.offsetWidth - el.offsetWidth) / 2;',
+' }',
+' }',
+' // Check if the whole height of the element is visible and centre if not',
+' var logContainerTop = logContainer.scrollTop;',
+' var logContainerBottom = logContainerTop + logContainer.offsetHeight;',
+' var elTop = getPageOffsetTop(el) - getToolBarsHeight();',
+' var elBottom = elTop + el.offsetHeight;',
+' if (elTop < logContainerTop || elBottom > logContainerBottom) {',
+' logContainer.scrollTop = elTop - (logContainer.offsetHeight - el.offsetHeight) / 2;',
+' }',
+' }',
+'',
+' function Match(logEntryLevel, spanInMainDiv, spanInUnwrappedPre, spanInWrappedDiv) {',
+' this.logEntryLevel = logEntryLevel;',
+' this.spanInMainDiv = spanInMainDiv;',
+' if (isIe) {',
+' this.spanInUnwrappedPre = spanInUnwrappedPre;',
+' this.spanInWrappedDiv = spanInWrappedDiv;',
+' }',
+' this.mainSpan = isIe ? spanInUnwrappedPre : spanInMainDiv;',
+' }',
+'',
+' Match.prototype = {',
+' equals: function(match) {',
+' return this.mainSpan === match.mainSpan;',
+' },',
+'',
+' setCurrent: function() {',
+' if (isIe) {',
+' addClass(this.spanInUnwrappedPre, "currentmatch");',
+' addClass(this.spanInWrappedDiv, "currentmatch");',
+' // Scroll the visible one into view',
+' var elementToScroll = $("wrap").checked ? this.spanInWrappedDiv : this.spanInUnwrappedPre;',
+' scrollIntoView(elementToScroll);',
+' } else {',
+' addClass(this.spanInMainDiv, "currentmatch");',
+' scrollIntoView(this.spanInMainDiv);',
+' }',
+' },',
+'',
+' belongsTo: function(logEntry) {',
+' if (isIe) {',
+' return isDescendant(this.spanInUnwrappedPre, logEntry.unwrappedPre);',
+' } else {',
+' return isDescendant(this.spanInMainDiv, logEntry.mainDiv);',
+' }',
+' },',
+'',
+' setNotCurrent: function() {',
+' if (isIe) {',
+' removeClass(this.spanInUnwrappedPre, "currentmatch");',
+' removeClass(this.spanInWrappedDiv, "currentmatch");',
+' } else {',
+' removeClass(this.spanInMainDiv, "currentmatch");',
+' }',
+' },',
+'',
+' isOrphan: function() {',
+' return isOrphan(this.mainSpan);',
+' },',
+'',
+' isVisible: function() {',
+' return getCheckBox(this.logEntryLevel).checked;',
+' },',
+'',
+' remove: function() {',
+' if (isIe) {',
+' this.spanInUnwrappedPre = null;',
+' this.spanInWrappedDiv = null;',
+' } else {',
+' this.spanInMainDiv = null;',
+' }',
+' }',
+' };',
+'',
+' var currentSearch = null;',
+' var currentMatchIndex = null;',
+'',
+' function doSearch() {',
+' var searchBox = $("searchBox");',
+' var searchTerm = searchBox.value;',
+' var isRegex = $("searchRegex").checked;',
+' var isCaseSensitive = $("searchCaseSensitive").checked;',
+' var i;',
+'',
+' if (searchTerm === "") {',
+' $("searchReset").disabled = true;',
+' $("searchNav").style.display = "none";',
+' removeClass(document.body, "searching");',
+' removeClass(searchBox, "hasmatches");',
+' removeClass(searchBox, "nomatches");',
+' for (i = 0; i < logEntries.length; i++) {',
+' logEntries[i].clearSearch();',
+' logEntries[i].setContent(logEntries[i].formattedMessage, logEntries[i].formattedMessage);',
+' }',
+' currentSearch = null;',
+' setLogContainerHeight();',
+' } else {',
+' $("searchReset").disabled = false;',
+' $("searchNav").style.display = "block";',
+' var searchRegex;',
+' var regexValid;',
+' if (isRegex) {',
+' try {',
+' searchRegex = isCaseSensitive ? new RegExp(searchTerm, "g") : new RegExp(searchTerm, "gi");',
+' regexValid = true;',
+' replaceClass(searchBox, "validregex", "invalidregex");',
+' searchBox.title = "Valid regex";',
+' } catch (ex) {',
+' regexValid = false;',
+' replaceClass(searchBox, "invalidregex", "validregex");',
+' searchBox.title = "Invalid regex: " + (ex.message ? ex.message : (ex.description ? ex.description : "unknown error"));',
+' return;',
+' }',
+' } else {',
+' searchBox.title = "";',
+' removeClass(searchBox, "validregex");',
+' removeClass(searchBox, "invalidregex");',
+' }',
+' addClass(document.body, "searching");',
+' currentSearch = new Search(searchTerm, isRegex, searchRegex, isCaseSensitive);',
+' for (i = 0; i < logEntries.length; i++) {',
+' currentSearch.applyTo(logEntries[i]);',
+' }',
+' setLogContainerHeight();',
+'',
+' // Highlight the first search match',
+' if (currentSearch.hasVisibleMatches()) {',
+' setCurrentMatchIndex(0);',
+' displayMatches();',
+' } else {',
+' displayNoMatches();',
+' }',
+' }',
+' }',
+'',
+' function updateSearchFromFilters() {',
+' if (currentSearch) {',
+' if (currentSearch.hasMatches()) {',
+' if (currentMatchIndex === null) {',
+' currentMatchIndex = 0;',
+' }',
+' var currentMatch = currentSearch.matches[currentMatchIndex];',
+' if (currentMatch.isVisible()) {',
+' displayMatches();',
+' setCurrentMatchIndex(currentMatchIndex);',
+' } else {',
+' currentMatch.setNotCurrent();',
+' // Find the next visible match, if one exists',
+' var nextVisibleMatchIndex = currentSearch.getNextVisibleMatchIndex();',
+' if (nextVisibleMatchIndex > -1) {',
+' setCurrentMatchIndex(nextVisibleMatchIndex);',
+' displayMatches();',
+' } else {',
+' displayNoMatches();',
+' }',
+' }',
+' } else {',
+' displayNoMatches();',
+' }',
+' }',
+' }',
+'',
+' function refreshCurrentMatch() {',
+' if (currentSearch && currentSearch.hasVisibleMatches()) {',
+' setCurrentMatchIndex(currentMatchIndex);',
+' }',
+' }',
+'',
+' function displayMatches() {',
+' replaceClass($("searchBox"), "hasmatches", "nomatches");',
+' $("searchBox").title = "" + currentSearch.matches.length + " matches found";',
+' $("searchNav").style.display = "block";',
+' setLogContainerHeight();',
+' }',
+'',
+' function displayNoMatches() {',
+' replaceClass($("searchBox"), "nomatches", "hasmatches");',
+' $("searchBox").title = "No matches found";',
+' $("searchNav").style.display = "none";',
+' setLogContainerHeight();',
+' }',
+'',
+' function toggleSearchEnabled(enable) {',
+' enable = (typeof enable == "undefined") ? !$("searchDisable").checked : enable;',
+' $("searchBox").disabled = !enable;',
+' $("searchReset").disabled = !enable;',
+' $("searchRegex").disabled = !enable;',
+' $("searchNext").disabled = !enable;',
+' $("searchPrevious").disabled = !enable;',
+' $("searchCaseSensitive").disabled = !enable;',
+' $("searchNav").style.display = (enable && ($("searchBox").value !== "") &&',
+' currentSearch && currentSearch.hasVisibleMatches()) ?',
+' "block" : "none";',
+' if (enable) {',
+' removeClass($("search"), "greyedout");',
+' addClass(document.body, "searching");',
+' if ($("searchHighlight").checked) {',
+' addClass(logMainContainer, "searchhighlight");',
+' } else {',
+' removeClass(logMainContainer, "searchhighlight");',
+' }',
+' if ($("searchFilter").checked) {',
+' addClass(logMainContainer, "searchfilter");',
+' } else {',
+' removeClass(logMainContainer, "searchfilter");',
+' }',
+' $("searchDisable").checked = !enable;',
+' } else {',
+' addClass($("search"), "greyedout");',
+' removeClass(document.body, "searching");',
+' removeClass(logMainContainer, "searchhighlight");',
+' removeClass(logMainContainer, "searchfilter");',
+' }',
+' setLogContainerHeight();',
+' }',
+'',
+' function toggleSearchFilter() {',
+' var enable = $("searchFilter").checked;',
+' if (enable) {',
+' addClass(logMainContainer, "searchfilter");',
+' } else {',
+' removeClass(logMainContainer, "searchfilter");',
+' }',
+' refreshCurrentMatch();',
+' }',
+'',
+' function toggleSearchHighlight() {',
+' var enable = $("searchHighlight").checked;',
+' if (enable) {',
+' addClass(logMainContainer, "searchhighlight");',
+' } else {',
+' removeClass(logMainContainer, "searchhighlight");',
+' }',
+' }',
+'',
+' function clearSearch() {',
+' $("searchBox").value = "";',
+' doSearch();',
+' }',
+'',
+' function searchNext() {',
+' if (currentSearch !== null && currentMatchIndex !== null) {',
+' currentSearch.matches[currentMatchIndex].setNotCurrent();',
+' var nextMatchIndex = currentSearch.getNextVisibleMatchIndex();',
+' if (nextMatchIndex > currentMatchIndex || confirm("Reached the end of the page. Start from the top?")) {',
+' setCurrentMatchIndex(nextMatchIndex);',
+' }',
+' }',
+' }',
+'',
+' function searchPrevious() {',
+' if (currentSearch !== null && currentMatchIndex !== null) {',
+' currentSearch.matches[currentMatchIndex].setNotCurrent();',
+' var previousMatchIndex = currentSearch.getPreviousVisibleMatchIndex();',
+' if (previousMatchIndex < currentMatchIndex || confirm("Reached the start of the page. Continue from the bottom?")) {',
+' setCurrentMatchIndex(previousMatchIndex);',
+' }',
+' }',
+' }',
+'',
+' function setCurrentMatchIndex(index) {',
+' currentMatchIndex = index;',
+' currentSearch.matches[currentMatchIndex].setCurrent();',
+' }',
+'',
+' /* ------------------------------------------------------------------------- */',
+'',
+' // CSS Utilities',
+'',
+' function addClass(el, cssClass) {',
+' if (!hasClass(el, cssClass)) {',
+' if (el.className) {',
+' el.className += " " + cssClass;',
+' } else {',
+' el.className = cssClass;',
+' }',
+' }',
+' }',
+'',
+' function hasClass(el, cssClass) {',
+' if (el.className) {',
+' var classNames = el.className.split(" ");',
+' return array_contains(classNames, cssClass);',
+' }',
+' return false;',
+' }',
+'',
+' function removeClass(el, cssClass) {',
+' if (hasClass(el, cssClass)) {',
+' // Rebuild the className property',
+' var existingClasses = el.className.split(" ");',
+' var newClasses = [];',
+' for (var i = 0, len = existingClasses.length; i < len; i++) {',
+' if (existingClasses[i] != cssClass) {',
+' newClasses[newClasses.length] = existingClasses[i];',
+' }',
+' }',
+' el.className = newClasses.join(" ");',
+' }',
+' }',
+'',
+' function replaceClass(el, newCssClass, oldCssClass) {',
+' removeClass(el, oldCssClass);',
+' addClass(el, newCssClass);',
+' }',
+'',
+' /* ------------------------------------------------------------------------- */',
+'',
+' // Other utility functions',
+'',
+' function getElementsByClass(el, cssClass, tagName) {',
+' var elements = el.getElementsByTagName(tagName);',
+' var matches = [];',
+' for (var i = 0, len = elements.length; i < len; i++) {',
+' if (hasClass(elements[i], cssClass)) {',
+' matches.push(elements[i]);',
+' }',
+' }',
+' return matches;',
+' }',
+'',
+' // Syntax borrowed from Prototype library',
+' function $(id) {',
+' return document.getElementById(id);',
+' }',
+'',
+' function isDescendant(node, ancestorNode) {',
+' while (node != null) {',
+' if (node === ancestorNode) {',
+' return true;',
+' }',
+' node = node.parentNode;',
+' }',
+' return false;',
+' }',
+'',
+' function isOrphan(node) {',
+' var currentNode = node;',
+' while (currentNode) {',
+' if (currentNode == document.body) {',
+' return false;',
+' }',
+' currentNode = currentNode.parentNode;',
+' }',
+' return true;',
+' }',
+'',
+' function escapeHtml(str) {',
+' return str.replace(/&/g, "&").replace(/[<]/g, "<").replace(/>/g, ">");',
+' }',
+'',
+' function getWindowWidth() {',
+' if (window.innerWidth) {',
+' return window.innerWidth;',
+' } else if (document.documentElement && document.documentElement.clientWidth) {',
+' return document.documentElement.clientWidth;',
+' } else if (document.body) {',
+' return document.body.clientWidth;',
+' }',
+' return 0;',
+' }',
+'',
+' function getWindowHeight() {',
+' if (window.innerHeight) {',
+' return window.innerHeight;',
+' } else if (document.documentElement && document.documentElement.clientHeight) {',
+' return document.documentElement.clientHeight;',
+' } else if (document.body) {',
+' return document.body.clientHeight;',
+' }',
+' return 0;',
+' }',
+'',
+' function getToolBarsHeight() {',
+' return $("switches").offsetHeight;',
+' }',
+'',
+' function getChromeHeight() {',
+' var height = getToolBarsHeight();',
+' if (showCommandLine) {',
+' height += $("commandLine").offsetHeight;',
+' }',
+' return height;',
+' }',
+'',
+' function setLogContainerHeight() {',
+' if (logMainContainer) {',
+' var windowHeight = getWindowHeight();',
+' $("body").style.height = getWindowHeight() + "px";',
+' logMainContainer.style.height = "" +',
+' Math.max(0, windowHeight - getChromeHeight()) + "px";',
+' }',
+' }',
+'',
+' function setCommandInputWidth() {',
+' if (showCommandLine) {',
+' $("command").style.width = "" + Math.max(0, $("commandLineContainer").offsetWidth -',
+' ($("evaluateButton").offsetWidth + 13)) + "px";',
+' }',
+' }',
+'',
+' window.onresize = function() {',
+' setCommandInputWidth();',
+' setLogContainerHeight();',
+' };',
+'',
+' if (!Array.prototype.push) {',
+' Array.prototype.push = function() {',
+' for (var i = 0, len = arguments.length; i < len; i++){',
+' this[this.length] = arguments[i];',
+' }',
+' return this.length;',
+' };',
+' }',
+'',
+' if (!Array.prototype.pop) {',
+' Array.prototype.pop = function() {',
+' if (this.length > 0) {',
+' var val = this[this.length - 1];',
+' this.length = this.length - 1;',
+' return val;',
+' }',
+' };',
+' }',
+'',
+' if (!Array.prototype.shift) {',
+' Array.prototype.shift = function() {',
+' if (this.length > 0) {',
+' var firstItem = this[0];',
+' for (var i = 0, len = this.length - 1; i < len; i++) {',
+' this[i] = this[i + 1];',
+' }',
+' this.length = this.length - 1;',
+' return firstItem;',
+' }',
+' };',
+' }',
+'',
+' if (!Array.prototype.splice) {',
+' Array.prototype.splice = function(startIndex, deleteCount) {',
+' var itemsAfterDeleted = this.slice(startIndex + deleteCount);',
+' var itemsDeleted = this.slice(startIndex, startIndex + deleteCount);',
+' this.length = startIndex;',
+' // Copy the arguments into a proper Array object',
+' var argumentsArray = [];',
+' for (var i = 0, len = arguments.length; i < len; i++) {',
+' argumentsArray[i] = arguments[i];',
+' }',
+' var itemsToAppend = (argumentsArray.length > 2) ?',
+' itemsAfterDeleted = argumentsArray.slice(2).concat(itemsAfterDeleted) : itemsAfterDeleted;',
+' for (i = 0, len = itemsToAppend.length; i < len; i++) {',
+' this.push(itemsToAppend[i]);',
+' }',
+' return itemsDeleted;',
+' };',
+' }',
+'',
+' function array_remove(arr, val) {',
+' var index = -1;',
+' for (var i = 0, len = arr.length; i < len; i++) {',
+' if (arr[i] === val) {',
+' index = i;',
+' break;',
+' }',
+' }',
+' if (index >= 0) {',
+' arr.splice(index, 1);',
+' return index;',
+' } else {',
+' return false;',
+' }',
+' }',
+'',
+' function array_removeFromStart(array, numberToRemove) {',
+' if (Array.prototype.splice) {',
+' array.splice(0, numberToRemove);',
+' } else {',
+' for (var i = numberToRemove, len = array.length; i < len; i++) {',
+' array[i - numberToRemove] = array[i];',
+' }',
+' array.length = array.length - numberToRemove;',
+' }',
+' return array;',
+' }',
+'',
+' function array_contains(arr, val) {',
+' for (var i = 0, len = arr.length; i < len; i++) {',
+' if (arr[i] == val) {',
+' return true;',
+' }',
+' }',
+' return false;',
+' }',
+'',
+' function getErrorMessage(ex) {',
+' if (ex.message) {',
+' return ex.message;',
+' } else if (ex.description) {',
+' return ex.description;',
+' }',
+' return "" + ex;',
+' }',
+'',
+' function moveCaretToEnd(input) {',
+' if (input.setSelectionRange) {',
+' input.focus();',
+' var length = input.value.length;',
+' input.setSelectionRange(length, length);',
+' } else if (input.createTextRange) {',
+' var range = input.createTextRange();',
+' range.collapse(false);',
+' range.select();',
+' }',
+' input.focus();',
+' }',
+'',
+' function stopPropagation(evt) {',
+' if (evt.stopPropagation) {',
+' evt.stopPropagation();',
+' } else if (typeof evt.cancelBubble != "undefined") {',
+' evt.cancelBubble = true;',
+' }',
+' }',
+'',
+' function getEvent(evt) {',
+' return evt ? evt : event;',
+' }',
+'',
+' function getTarget(evt) {',
+' return evt.target ? evt.target : evt.srcElement;',
+' }',
+'',
+' function getRelatedTarget(evt) {',
+' if (evt.relatedTarget) {',
+' return evt.relatedTarget;',
+' } else if (evt.srcElement) {',
+' switch(evt.type) {',
+' case "mouseover":',
+' return evt.fromElement;',
+' case "mouseout":',
+' return evt.toElement;',
+' default:',
+' return evt.srcElement;',
+' }',
+' }',
+' }',
+'',
+' function cancelKeyEvent(evt) {',
+' evt.returnValue = false;',
+' stopPropagation(evt);',
+' }',
+'',
+' function evalCommandLine() {',
+' var expr = $("command").value;',
+' evalCommand(expr);',
+' $("command").value = "";',
+' }',
+'',
+' function evalLastCommand() {',
+' if (lastCommand != null) {',
+' evalCommand(lastCommand);',
+' }',
+' }',
+'',
+' var lastCommand = null;',
+' var commandHistory = [];',
+' var currentCommandIndex = 0;',
+'',
+' function evalCommand(expr) {',
+' if (appender) {',
+' appender.evalCommandAndAppend(expr);',
+' } else {',
+' var prefix = ">>> " + expr + "\\r\\n";',
+' try {',
+' log("INFO", prefix + eval(expr));',
+' } catch (ex) {',
+' log("ERROR", prefix + "Error: " + getErrorMessage(ex));',
+' }',
+' }',
+' // Update command history',
+' if (expr != commandHistory[commandHistory.length - 1]) {',
+' commandHistory.push(expr);',
+' // Update the appender',
+' if (appender) {',
+' appender.storeCommandHistory(commandHistory);',
+' }',
+' }',
+' currentCommandIndex = (expr == commandHistory[currentCommandIndex]) ? currentCommandIndex + 1 : commandHistory.length;',
+' lastCommand = expr;',
+' }',
+' //]]>',
+' </script>',
+' <style type="text/css">',
+' body {',
+' background-color: white;',
+' color: black;',
+' padding: 0;',
+' margin: 0;',
+' font-family: tahoma, verdana, arial, helvetica, sans-serif;',
+' overflow: hidden;',
+' }',
+'',
+' div#switchesContainer input {',
+' margin-bottom: 0;',
+' }',
+'',
+' div.toolbar {',
+' border-top: solid #ffffff 1px;',
+' border-bottom: solid #aca899 1px;',
+' background-color: #f1efe7;',
+' padding: 3px 5px;',
+' font-size: 68.75%;',
+' }',
+'',
+' div.toolbar, div#search input {',
+' font-family: tahoma, verdana, arial, helvetica, sans-serif;',
+' }',
+'',
+' div.toolbar input.button {',
+' padding: 0 5px;',
+' font-size: 100%;',
+' }',
+'',
+' div.toolbar input.hidden {',
+' display: none;',
+' }',
+'',
+' div#switches input#clearButton {',
+' margin-left: 20px;',
+' }',
+'',
+' div#levels label {',
+' font-weight: bold;',
+' }',
+'',
+' div#levels label, div#options label {',
+' margin-right: 5px;',
+' }',
+'',
+' div#levels label#wrapLabel {',
+' font-weight: normal;',
+' }',
+'',
+' div#search label {',
+' margin-right: 10px;',
+' }',
+'',
+' div#search label.searchboxlabel {',
+' margin-right: 0;',
+' }',
+'',
+' div#search input {',
+' font-size: 100%;',
+' }',
+'',
+' div#search input.validregex {',
+' color: green;',
+' }',
+'',
+' div#search input.invalidregex {',
+' color: red;',
+' }',
+'',
+' div#search input.nomatches {',
+' color: white;',
+' background-color: #ff6666;',
+' }',
+'',
+' div#search input.nomatches {',
+' color: white;',
+' background-color: #ff6666;',
+' }',
+'',
+' div#searchNav {',
+' display: none;',
+' }',
+'',
+' div#commandLine {',
+' display: none;',
+' }',
+'',
+' div#commandLine input#command {',
+' font-size: 100%;',
+' font-family: Courier New, Courier;',
+' }',
+'',
+' div#commandLine input#evaluateButton {',
+' }',
+'',
+' *.greyedout {',
+' color: gray !important;',
+' border-color: gray !important;',
+' }',
+'',
+' *.greyedout *.alwaysenabled { color: black; }',
+'',
+' *.unselectable {',
+' -khtml-user-select: none;',
+' -moz-user-select: none;',
+' user-select: none;',
+' }',
+'',
+' div#log {',
+' font-family: Courier New, Courier;',
+' font-size: 75%;',
+' width: 100%;',
+' overflow: auto;',
+' clear: both;',
+' position: relative;',
+' }',
+'',
+' div.group {',
+' border-color: #cccccc;',
+' border-style: solid;',
+' border-width: 1px 0 1px 1px;',
+' overflow: visible;',
+' }',
+'',
+' div.oldIe div.group, div.oldIe div.group *, div.oldIe *.logentry {',
+' height: 1%;',
+' }',
+'',
+' div.group div.groupheading span.expander {',
+' border: solid black 1px;',
+' font-family: Courier New, Courier;',
+' font-size: 0.833em;',
+' background-color: #eeeeee;',
+' position: relative;',
+' top: -1px;',
+' color: black;',
+' padding: 0 2px;',
+' cursor: pointer;',
+' cursor: hand;',
+' height: 1%;',
+' }',
+'',
+' div.group div.groupcontent {',
+' margin-left: 10px;',
+' padding-bottom: 2px;',
+' overflow: visible;',
+' }',
+'',
+' div.group div.expanded {',
+' display: block;',
+' }',
+'',
+' div.group div.collapsed {',
+' display: none;',
+' }',
+'',
+' *.logentry {',
+' overflow: visible;',
+' display: none;',
+' white-space: pre;',
+' }',
+'',
+' span.pre {',
+' white-space: pre;',
+' }',
+' ',
+' pre.unwrapped {',
+' display: inline !important;',
+' }',
+'',
+' pre.unwrapped pre.pre, div.wrapped pre.pre {',
+' display: inline;',
+' }',
+'',
+' div.wrapped pre.pre {',
+' white-space: normal;',
+' }',
+'',
+' div.wrapped {',
+' display: none;',
+' }',
+'',
+' body.searching *.logentry span.currentmatch {',
+' color: white !important;',
+' background-color: green !important;',
+' }',
+'',
+' body.searching div.searchhighlight *.logentry span.searchterm {',
+' color: black;',
+' background-color: yellow;',
+' }',
+'',
+' div.wrap *.logentry {',
+' white-space: normal !important;',
+' border-width: 0 0 1px 0;',
+' border-color: #dddddd;',
+' border-style: dotted;',
+' }',
+'',
+' div.wrap #log_wrapped, #log_unwrapped {',
+' display: block;',
+' }',
+'',
+' div.wrap #log_unwrapped, #log_wrapped {',
+' display: none;',
+' }',
+'',
+' div.wrap *.logentry span.pre {',
+' overflow: visible;',
+' white-space: normal;',
+' }',
+'',
+' div.wrap *.logentry pre.unwrapped {',
+' display: none;',
+' }',
+'',
+' div.wrap *.logentry span.wrapped {',
+' display: inline;',
+' }',
+'',
+' div.searchfilter *.searchnonmatch {',
+' display: none !important;',
+' }',
+'',
+' div#log *.TRACE, label#label_TRACE {',
+' color: #666666;',
+' }',
+'',
+' div#log *.DEBUG, label#label_DEBUG {',
+' color: green;',
+' }',
+'',
+' div#log *.INFO, label#label_INFO {',
+' color: #000099;',
+' }',
+'',
+' div#log *.WARN, label#label_WARN {',
+' color: #999900;',
+' }',
+'',
+' div#log *.ERROR, label#label_ERROR {',
+' color: red;',
+' }',
+'',
+' div#log *.FATAL, label#label_FATAL {',
+' color: #660066;',
+' }',
+'',
+' div.TRACE#log *.TRACE,',
+' div.DEBUG#log *.DEBUG,',
+' div.INFO#log *.INFO,',
+' div.WARN#log *.WARN,',
+' div.ERROR#log *.ERROR,',
+' div.FATAL#log *.FATAL {',
+' display: block;',
+' }',
+'',
+' div#log div.separator {',
+' background-color: #cccccc;',
+' margin: 5px 0;',
+' line-height: 1px;',
+' }',
+' </style>',
+' </head>',
+'',
+' <body id="body">',
+' <div id="switchesContainer">',
+' <div id="switches">',
+' <div id="levels" class="toolbar">',
+' Filters:',
+' <input type="checkbox" id="switch_TRACE" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide trace messages" /><label for="switch_TRACE" id="label_TRACE">trace</label>',
+' <input type="checkbox" id="switch_DEBUG" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide debug messages" /><label for="switch_DEBUG" id="label_DEBUG">debug</label>',
+' <input type="checkbox" id="switch_INFO" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide info messages" /><label for="switch_INFO" id="label_INFO">info</label>',
+' <input type="checkbox" id="switch_WARN" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide warn messages" /><label for="switch_WARN" id="label_WARN">warn</label>',
+' <input type="checkbox" id="switch_ERROR" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide error messages" /><label for="switch_ERROR" id="label_ERROR">error</label>',
+' <input type="checkbox" id="switch_FATAL" onclick="applyFilters(); checkAllLevels()" checked="checked" title="Show/hide fatal messages" /><label for="switch_FATAL" id="label_FATAL">fatal</label>',
+' <input type="checkbox" id="switch_ALL" onclick="toggleAllLevels(); applyFilters()" checked="checked" title="Show/hide all messages" /><label for="switch_ALL" id="label_ALL">all</label>',
+' </div>',
+' <div id="search" class="toolbar">',
+' <label for="searchBox" class="searchboxlabel">Search:</label> <input type="text" id="searchBox" onclick="toggleSearchEnabled(true)" onkeyup="scheduleSearch()" size="20" />',
+' <input type="button" id="searchReset" disabled="disabled" value="Reset" onclick="clearSearch()" class="button" title="Reset the search" />',
+' <input type="checkbox" id="searchRegex" onclick="doSearch()" title="If checked, search is treated as a regular expression" /><label for="searchRegex">Regex</label>',
+' <input type="checkbox" id="searchCaseSensitive" onclick="doSearch()" title="If checked, search is case sensitive" /><label for="searchCaseSensitive">Match case</label>',
+' <input type="checkbox" id="searchDisable" onclick="toggleSearchEnabled()" title="Enable/disable search" /><label for="searchDisable" class="alwaysenabled">Disable</label>',
+' <div id="searchNav">',
+' <input type="button" id="searchNext" disabled="disabled" value="Next" onclick="searchNext()" class="button" title="Go to the next matching log entry" />',
+' <input type="button" id="searchPrevious" disabled="disabled" value="Previous" onclick="searchPrevious()" class="button" title="Go to the previous matching log entry" />',
+' <input type="checkbox" id="searchFilter" onclick="toggleSearchFilter()" title="If checked, non-matching log entries are filtered out" /><label for="searchFilter">Filter</label>',
+' <input type="checkbox" id="searchHighlight" onclick="toggleSearchHighlight()" title="Highlight matched search terms" /><label for="searchHighlight" class="alwaysenabled">Highlight all</label>',
+' </div>',
+' </div>',
+' <div id="options" class="toolbar">',
+' Options:',
+' <input type="checkbox" id="enableLogging" onclick="toggleLoggingEnabled()" checked="checked" title="Enable/disable logging" /><label for="enableLogging" id="enableLoggingLabel">Log</label>',
+' <input type="checkbox" id="wrap" onclick="toggleWrap()" title="Enable / disable word wrap" /><label for="wrap" id="wrapLabel">Wrap</label>',
+' <input type="checkbox" id="newestAtTop" onclick="toggleNewestAtTop()" title="If checked, causes newest messages to appear at the top" /><label for="newestAtTop" id="newestAtTopLabel">Newest at the top</label>',
+' <input type="checkbox" id="scrollToLatest" onclick="toggleScrollToLatest()" checked="checked" title="If checked, window automatically scrolls to a new message when it is added" /><label for="scrollToLatest" id="scrollToLatestLabel">Scroll to latest</label>',
+' <input type="button" id="clearButton" value="Clear" onclick="clearLog()" class="button" title="Clear all log messages" />',
+' <input type="button" id="hideButton" value="Hide" onclick="hide()" class="hidden button" title="Hide the console" />',
+' <input type="button" id="closeButton" value="Close" onclick="closeWindow()" class="hidden button" title="Close the window" />',
+' </div>',
+' </div>',
+' </div>',
+' <div id="log" class="TRACE DEBUG INFO WARN ERROR FATAL"></div>',
+' <div id="commandLine" class="toolbar">',
+' <div id="commandLineContainer">',
+' <input type="text" id="command" title="Enter a JavaScript command here and hit return or press \'Evaluate\'" />',
+' <input type="button" id="evaluateButton" value="Evaluate" class="button" title="Evaluate the command" onclick="evalCommandLine()" />',
+' </div>',
+' </div>',
+' </body>',
+'</html>',
+''
+];
+ };
+
+ var defaultCommandLineFunctions = [];
+
+ ConsoleAppender = function() {};
+
+ var consoleAppenderIdCounter = 1;
+ ConsoleAppender.prototype = new Appender();
+
+ ConsoleAppender.prototype.create = function(inPage, container,
+ lazyInit, initiallyMinimized, useDocumentWrite, width, height, focusConsoleWindow) {
+ var appender = this;
+
+ // Common properties
+ var initialized = false;
+ var consoleWindowCreated = false;
+ var consoleWindowLoaded = false;
+ var consoleClosed = false;
+
+ var queuedLoggingEvents = [];
+ var isSupported = true;
+ var consoleAppenderId = consoleAppenderIdCounter++;
+
+ // Local variables
+ initiallyMinimized = extractBooleanFromParam(initiallyMinimized, this.defaults.initiallyMinimized);
+ lazyInit = extractBooleanFromParam(lazyInit, this.defaults.lazyInit);
+ useDocumentWrite = extractBooleanFromParam(useDocumentWrite, this.defaults.useDocumentWrite);
+ var newestMessageAtTop = this.defaults.newestMessageAtTop;
+ var scrollToLatestMessage = this.defaults.scrollToLatestMessage;
+ width = width ? width : this.defaults.width;
+ height = height ? height : this.defaults.height;
+ var maxMessages = this.defaults.maxMessages;
+ var showCommandLine = this.defaults.showCommandLine;
+ var commandLineObjectExpansionDepth = this.defaults.commandLineObjectExpansionDepth;
+ var showHideButton = this.defaults.showHideButton;
+ var showCloseButton = this.defaults.showCloseButton;
+ var showLogEntryDeleteButtons = this.defaults.showLogEntryDeleteButtons;
+
+ this.setLayout(this.defaults.layout);
+
+ // Functions whose implementations vary between subclasses
+ var init, createWindow, safeToAppend, getConsoleWindow, open;
+
+ // Configuration methods. The function scope is used to prevent
+ // direct alteration to the appender configuration properties.
+ var appenderName = inPage ? "InPageAppender" : "PopUpAppender";
+ var checkCanConfigure = function(configOptionName) {
+ if (consoleWindowCreated) {
+ handleError(appenderName + ": configuration option '" + configOptionName + "' may not be set after the appender has been initialized");
+ return false;
+ }
+ return true;
+ };
+
+ var consoleWindowExists = function() {
+ return (consoleWindowLoaded && isSupported && !consoleClosed);
+ };
+
+ this.isNewestMessageAtTop = function() { return newestMessageAtTop; };
+ this.setNewestMessageAtTop = function(newestMessageAtTopParam) {
+ newestMessageAtTop = bool(newestMessageAtTopParam);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setNewestAtTop(newestMessageAtTop);
+ }
+ };
+
+ this.isScrollToLatestMessage = function() { return scrollToLatestMessage; };
+ this.setScrollToLatestMessage = function(scrollToLatestMessageParam) {
+ scrollToLatestMessage = bool(scrollToLatestMessageParam);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setScrollToLatest(scrollToLatestMessage);
+ }
+ };
+
+ this.getWidth = function() { return width; };
+ this.setWidth = function(widthParam) {
+ if (checkCanConfigure("width")) {
+ width = extractStringFromParam(widthParam, width);
+ }
+ };
+
+ this.getHeight = function() { return height; };
+ this.setHeight = function(heightParam) {
+ if (checkCanConfigure("height")) {
+ height = extractStringFromParam(heightParam, height);
+ }
+ };
+
+ this.getMaxMessages = function() { return maxMessages; };
+ this.setMaxMessages = function(maxMessagesParam) {
+ maxMessages = extractIntFromParam(maxMessagesParam, maxMessages);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setMaxMessages(maxMessages);
+ }
+ };
+
+ this.isShowCommandLine = function() { return showCommandLine; };
+ this.setShowCommandLine = function(showCommandLineParam) {
+ showCommandLine = bool(showCommandLineParam);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setShowCommandLine(showCommandLine);
+ }
+ };
+
+ this.isShowHideButton = function() { return showHideButton; };
+ this.setShowHideButton = function(showHideButtonParam) {
+ showHideButton = bool(showHideButtonParam);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setShowHideButton(showHideButton);
+ }
+ };
+
+ this.isShowCloseButton = function() { return showCloseButton; };
+ this.setShowCloseButton = function(showCloseButtonParam) {
+ showCloseButton = bool(showCloseButtonParam);
+ if (consoleWindowExists()) {
+ getConsoleWindow().setShowCloseButton(showCloseButton);
+ }
+ };
+
+ this.getCommandLineObjectExpansionDepth = function() { return commandLineObjectExpansionDepth; };
+ this.setCommandLineObjectExpansionDepth = function(commandLineObjectExpansionDepthParam) {
+ commandLineObjectExpansionDepth = extractIntFromParam(commandLineObjectExpansionDepthParam, commandLineObjectExpansionDepth);
+ };
+
+ var minimized = initiallyMinimized;
+ this.isInitiallyMinimized = function() { return initiallyMinimized; };
+ this.setInitiallyMinimized = function(initiallyMinimizedParam) {
+ if (checkCanConfigure("initiallyMinimized")) {
+ initiallyMinimized = bool(initiallyMinimizedParam);
+ minimized = initiallyMinimized;
+ }
+ };
+
+ this.isUseDocumentWrite = function() { return useDocumentWrite; };
+ this.setUseDocumentWrite = function(useDocumentWriteParam) {
+ if (checkCanConfigure("useDocumentWrite")) {
+ useDocumentWrite = bool(useDocumentWriteParam);
+ }
+ };
+
+ // Common methods
+ function QueuedLoggingEvent(loggingEvent, formattedMessage) {
+ this.loggingEvent = loggingEvent;
+ this.levelName = loggingEvent.level.name;
+ this.formattedMessage = formattedMessage;
+ }
+
+ QueuedLoggingEvent.prototype.append = function() {
+ getConsoleWindow().log(this.levelName, this.formattedMessage);
+ };
+
+ function QueuedGroup(name, initiallyExpanded) {
+ this.name = name;
+ this.initiallyExpanded = initiallyExpanded;
+ }
+
+ QueuedGroup.prototype.append = function() {
+ getConsoleWindow().group(this.name, this.initiallyExpanded);
+ };
+
+ function QueuedGroupEnd() {}
+
+ QueuedGroupEnd.prototype.append = function() {
+ getConsoleWindow().groupEnd();
+ };
+
+ var checkAndAppend = function() {
+ // Next line forces a check of whether the window has been closed
+ safeToAppend();
+ if (!initialized) {
+ init();
+ } else if (consoleClosed && reopenWhenClosed) {
+ createWindow();
+ }
+ if (safeToAppend()) {
+ appendQueuedLoggingEvents();
+ }
+ };
+
+ this.append = function(loggingEvent) {
+ if (isSupported) {
+ // Format the message
+ var formattedMessage = appender.getLayout().format(loggingEvent);
+ if (this.getLayout().ignoresThrowable()) {
+ formattedMessage += loggingEvent.getThrowableStrRep();
+ }
+ queuedLoggingEvents.push(new QueuedLoggingEvent(loggingEvent, formattedMessage));
+ checkAndAppend();
+ }
+ };
+
+ this.group = function(name, initiallyExpanded) {
+ if (isSupported) {
+ queuedLoggingEvents.push(new QueuedGroup(name, initiallyExpanded));
+ checkAndAppend();
+ }
+ };
+
+ this.groupEnd = function() {
+ if (isSupported) {
+ queuedLoggingEvents.push(new QueuedGroupEnd());
+ checkAndAppend();
+ }
+ };
+
+ var appendQueuedLoggingEvents = function() {
+ var currentLoggingEvent;
+ while (queuedLoggingEvents.length > 0) {
+ queuedLoggingEvents.shift().append();
+ }
+ if (focusConsoleWindow) {
+ getConsoleWindow().focus();
+ }
+ };
+
+ this.setAddedToLogger = function(logger) {
+ this.loggers.push(logger);
+ if (enabled && !lazyInit) {
+ init();
+ }
+ };
+
+ this.clear = function() {
+ if (consoleWindowExists()) {
+ getConsoleWindow().clearLog();
+ }
+ queuedLoggingEvents.length = 0;
+ };
+
+ this.focus = function() {
+ if (consoleWindowExists()) {
+ getConsoleWindow().focus();
+ }
+ };
+
+ this.focusCommandLine = function() {
+ if (consoleWindowExists()) {
+ getConsoleWindow().focusCommandLine();
+ }
+ };
+
+ this.focusSearch = function() {
+ if (consoleWindowExists()) {
+ getConsoleWindow().focusSearch();
+ }
+ };
+
+ var commandWindow = window;
+
+ this.getCommandWindow = function() { return commandWindow; };
+ this.setCommandWindow = function(commandWindowParam) {
+ commandWindow = commandWindowParam;
+ };
+
+ this.executeLastCommand = function() {
+ if (consoleWindowExists()) {
+ getConsoleWindow().evalLastCommand();
+ }
+ };
+
+ var commandLayout = new PatternLayout("%m");
+ this.getCommandLayout = function() { return commandLayout; };
+ this.setCommandLayout = function(commandLayoutParam) {
+ commandLayout = commandLayoutParam;
+ };
+
+ this.evalCommandAndAppend = function(expr) {
+ var commandReturnValue = { appendResult: true, isError: false };
+ var commandOutput = "";
+ // Evaluate the command
+ try {
+ var result, i;
+ // The next three lines constitute a workaround for IE. Bizarrely, iframes seem to have no
+ // eval method on the window object initially, but once execScript has been called on
+ // it once then the eval method magically appears. See http://www.thismuchiknow.co.uk/?p=25
+ if (!commandWindow.eval && commandWindow.execScript) {
+ commandWindow.execScript("null");
+ }
+
+ var commandLineFunctionsHash = {};
+ for (i = 0, len = commandLineFunctions.length; i < len; i++) {
+ commandLineFunctionsHash[commandLineFunctions[i][0]] = commandLineFunctions[i][1];
+ }
+
+ // Keep an array of variables that are being changed in the command window so that they
+ // can be restored to their original values afterwards
+ var objectsToRestore = [];
+ var addObjectToRestore = function(name) {
+ objectsToRestore.push([name, commandWindow[name]]);
+ };
+
+ addObjectToRestore("appender");
+ commandWindow.appender = appender;
+
+ addObjectToRestore("commandReturnValue");
+ commandWindow.commandReturnValue = commandReturnValue;
+
+ addObjectToRestore("commandLineFunctionsHash");
+ commandWindow.commandLineFunctionsHash = commandLineFunctionsHash;
+
+ var addFunctionToWindow = function(name) {
+ addObjectToRestore(name);
+ commandWindow[name] = function() {
+ return this.commandLineFunctionsHash[name](appender, arguments, commandReturnValue);
+ };
+ };
+
+ for (i = 0, len = commandLineFunctions.length; i < len; i++) {
+ addFunctionToWindow(commandLineFunctions[i][0]);
+ }
+
+ // Another bizarre workaround to get IE to eval in the global scope
+ if (commandWindow === window && commandWindow.execScript) {
+ addObjectToRestore("evalExpr");
+ addObjectToRestore("result");
+ window.evalExpr = expr;
+ commandWindow.execScript("window.result=eval(window.evalExpr);");
+ result = window.result;
+ } else {
+ result = commandWindow.eval(expr);
+ }
+ commandOutput = isUndefined(result) ? result : formatObjectExpansion(result, commandLineObjectExpansionDepth);
+
+ // Restore variables in the command window to their original state
+ for (i = 0, len = objectsToRestore.length; i < len; i++) {
+ commandWindow[objectsToRestore[i][0]] = objectsToRestore[i][1];
+ }
+ } catch (ex) {
+ commandOutput = "Error evaluating command: " + getExceptionStringRep(ex);
+ commandReturnValue.isError = true;
+ }
+ // Append command output
+ if (commandReturnValue.appendResult) {
+ var message = ">>> " + expr;
+ if (!isUndefined(commandOutput)) {
+ message += newLine + commandOutput;
+ }
+ var level = commandReturnValue.isError ? Level.ERROR : Level.INFO;
+ var loggingEvent = new LoggingEvent(null, new Date(), level, [message], null);
+ var mainLayout = this.getLayout();
+ this.setLayout(commandLayout);
+ this.append(loggingEvent);
+ this.setLayout(mainLayout);
+ }
+ };
+
+ var commandLineFunctions = defaultCommandLineFunctions.concat([]);
+
+ this.addCommandLineFunction = function(functionName, commandLineFunction) {
+ commandLineFunctions.push([functionName, commandLineFunction]);
+ };
+
+ var commandHistoryCookieName = "log4javascriptCommandHistory";
+ this.storeCommandHistory = function(commandHistory) {
+ setCookie(commandHistoryCookieName, commandHistory.join(","));
+ };
+
+ var writeHtml = function(doc) {
+ var lines = getConsoleHtmlLines();
+ doc.open();
+ for (var i = 0, len = lines.length; i < len; i++) {
+ doc.writeln(lines[i]);
+ }
+ doc.close();
+ };
+
+ // Set up event listeners
+ this.setEventTypes(["load", "unload"]);
+
+ var consoleWindowLoadHandler = function() {
+ var win = getConsoleWindow();
+ win.setAppender(appender);
+ win.setNewestAtTop(newestMessageAtTop);
+ win.setScrollToLatest(scrollToLatestMessage);
+ win.setMaxMessages(maxMessages);
+ win.setShowCommandLine(showCommandLine);
+ win.setShowHideButton(showHideButton);
+ win.setShowCloseButton(showCloseButton);
+ win.setMainWindow(window);
+
+ // Restore command history stored in cookie
+ var storedValue = getCookie(commandHistoryCookieName);
+ if (storedValue) {
+ win.commandHistory = storedValue.split(",");
+ win.currentCommandIndex = win.commandHistory.length;
+ }
+
+ appender.dispatchEvent("load", { "win" : win });
+ };
+
+ this.unload = function() {
+ logLog.debug("unload " + this + ", caller: " + this.unload.caller);
+ if (!consoleClosed) {
+ logLog.debug("really doing unload " + this);
+ consoleClosed = true;
+ consoleWindowLoaded = false;
+ consoleWindowCreated = false;
+ appender.dispatchEvent("unload", {});
+ }
+ };
+
+ var pollConsoleWindow = function(windowTest, interval, successCallback, errorMessage) {
+ function doPoll() {
+ try {
+ // Test if the console has been closed while polling
+ if (consoleClosed) {
+ clearInterval(poll);
+ }
+ if (windowTest(getConsoleWindow())) {
+ clearInterval(poll);
+ successCallback();
+ }
+ } catch (ex) {
+ clearInterval(poll);
+ isSupported = false;
+ handleError(errorMessage, ex);
+ }
+ }
+
+ // Poll the pop-up since the onload event is not reliable
+ var poll = setInterval(doPoll, interval);
+ };
+
+ var getConsoleUrl = function() {
+ var documentDomainSet = (document.domain != location.hostname);
+ return useDocumentWrite ? "" : getBaseUrl() + "console_uncompressed.html" +
+ (documentDomainSet ? "?log4javascript_domain=" + escape(document.domain) : "");
+ };
+
+ // Define methods and properties that vary between subclasses
+ if (inPage) {
+ // InPageAppender
+
+ var containerElement = null;
+
+ // Configuration methods. The function scope is used to prevent
+ // direct alteration to the appender configuration properties.
+ var cssProperties = [];
+ this.addCssProperty = function(name, value) {
+ if (checkCanConfigure("cssProperties")) {
+ cssProperties.push([name, value]);
+ }
+ };
+
+ // Define useful variables
+ var windowCreationStarted = false;
+ var iframeContainerDiv;
+ var iframeId = uniqueId + "_InPageAppender_" + consoleAppenderId;
+
+ this.hide = function() {
+ if (initialized && consoleWindowCreated) {
+ if (consoleWindowExists()) {
+ getConsoleWindow().$("command").blur();
+ }
+ iframeContainerDiv.style.display = "none";
+ minimized = true;
+ }
+ };
+
+ this.show = function() {
+ if (initialized) {
+ if (consoleWindowCreated) {
+ iframeContainerDiv.style.display = "block";
+ this.setShowCommandLine(showCommandLine); // Force IE to update
+ minimized = false;
+ } else if (!windowCreationStarted) {
+ createWindow(true);
+ }
+ }
+ };
+
+ this.isVisible = function() {
+ return !minimized && !consoleClosed;
+ };
+
+ this.close = function(fromButton) {
+ if (!consoleClosed && (!fromButton || confirm("This will permanently remove the console from the page. No more messages will be logged. Do you wish to continue?"))) {
+ iframeContainerDiv.parentNode.removeChild(iframeContainerDiv);
+ this.unload();
+ }
+ };
+
+ // Create open, init, getConsoleWindow and safeToAppend functions
+ open = function() {
+ var initErrorMessage = "InPageAppender.open: unable to create console iframe";
+
+ function finalInit() {
+ try {
+ if (!initiallyMinimized) {
+ appender.show();
+ }
+ consoleWindowLoadHandler();
+ consoleWindowLoaded = true;
+ appendQueuedLoggingEvents();
+ } catch (ex) {
+ isSupported = false;
+ handleError(initErrorMessage, ex);
+ }
+ }
+
+ function writeToDocument() {
+ try {
+ var windowTest = function(win) { return isLoaded(win); };
+ if (useDocumentWrite) {
+ writeHtml(getConsoleWindow().document);
+ }
+ if (windowTest(getConsoleWindow())) {
+ finalInit();
+ } else {
+ pollConsoleWindow(windowTest, 100, finalInit, initErrorMessage);
+ }
+ } catch (ex) {
+ isSupported = false;
+ handleError(initErrorMessage, ex);
+ }
+ }
+
+ minimized = false;
+ iframeContainerDiv = containerElement.appendChild(document.createElement("div"));
+
+ iframeContainerDiv.style.width = width;
+ iframeContainerDiv.style.height = height;
+ iframeContainerDiv.style.border = "solid gray 1px";
+
+ for (var i = 0, len = cssProperties.length; i < len; i++) {
+ iframeContainerDiv.style[cssProperties[i][0]] = cssProperties[i][1];
+ }
+
+ var iframeSrc = useDocumentWrite ? "" : " src='" + getConsoleUrl() + "'";
+
+ // Adding an iframe using the DOM would be preferable, but it doesn't work
+ // in IE5 on Windows, or in Konqueror prior to version 3.5 - in Konqueror
+ // it creates the iframe fine but I haven't been able to find a way to obtain
+ // the iframe's window object
+ iframeContainerDiv.innerHTML = "<iframe id='" + iframeId + "' name='" + iframeId +
+ "' width='100%' height='100%' frameborder='0'" + iframeSrc +
+ " scrolling='no'></iframe>";
+ consoleClosed = false;
+
+ // Write the console HTML to the iframe
+ var iframeDocumentExistsTest = function(win) {
+ try {
+ return bool(win) && bool(win.document);
+ } catch (ex) {
+ return false;
+ }
+ };
+ if (iframeDocumentExistsTest(getConsoleWindow())) {
+ writeToDocument();
+ } else {
+ pollConsoleWindow(iframeDocumentExistsTest, 100, writeToDocument, initErrorMessage);
+ }
+ consoleWindowCreated = true;
+ };
+
+ createWindow = function(show) {
+ if (show || !initiallyMinimized) {
+ var pageLoadHandler = function() {
+ if (!container) {
+ // Set up default container element
+ containerElement = document.createElement("div");
+ containerElement.style.position = "fixed";
+ containerElement.style.left = "0";
+ containerElement.style.right = "0";
+ containerElement.style.bottom = "0";
+ document.body.appendChild(containerElement);
+ appender.addCssProperty("borderWidth", "1px 0 0 0");
+ appender.addCssProperty("zIndex", 1000000); // Can't find anything authoritative that says how big z-index can be
+ open();
+ } else {
+ try {
+ var el = document.getElementById(container);
+ if (el.nodeType == 1) {
+ containerElement = el;
+ }
+ open();
+ } catch (ex) {
+ handleError("InPageAppender.init: invalid container element '" + container + "' supplied", ex);
+ }
+ }
+ };
+
+ // Test the type of the container supplied. First, check if it's an element
+ if (pageLoaded && container && container.appendChild) {
+ containerElement = container;
+ open();
+ } else if (pageLoaded) {
+ pageLoadHandler();
+ } else {
+ log4javascript.addEventListener("load", pageLoadHandler);
+ }
+ windowCreationStarted = true;
+ }
+ };
+
+ init = function() {
+ createWindow();
+ initialized = true;
+ };
+
+ getConsoleWindow = function() {
+ var iframe = window.frames[iframeId];
+ if (iframe) {
+ return iframe;
+ }
+ };
+
+ safeToAppend = function() {
+ if (isSupported && !consoleClosed) {
+ if (consoleWindowCreated && !consoleWindowLoaded && getConsoleWindow() && isLoaded(getConsoleWindow())) {
+ consoleWindowLoaded = true;
+ }
+ return consoleWindowLoaded;
+ }
+ return false;
+ };
+ } else {
+ // PopUpAppender
+
+ // Extract params
+ var useOldPopUp = appender.defaults.useOldPopUp;
+ var complainAboutPopUpBlocking = appender.defaults.complainAboutPopUpBlocking;
+ var reopenWhenClosed = this.defaults.reopenWhenClosed;
+
+ // Configuration methods. The function scope is used to prevent
+ // direct alteration to the appender configuration properties.
+ this.isUseOldPopUp = function() { return useOldPopUp; };
+ this.setUseOldPopUp = function(useOldPopUpParam) {
+ if (checkCanConfigure("useOldPopUp")) {
+ useOldPopUp = bool(useOldPopUpParam);
+ }
+ };
+
+ this.isComplainAboutPopUpBlocking = function() { return complainAboutPopUpBlocking; };
+ this.setComplainAboutPopUpBlocking = function(complainAboutPopUpBlockingParam) {
+ if (checkCanConfigure("complainAboutPopUpBlocking")) {
+ complainAboutPopUpBlocking = bool(complainAboutPopUpBlockingParam);
+ }
+ };
+
+ this.isFocusPopUp = function() { return focusConsoleWindow; };
+ this.setFocusPopUp = function(focusPopUpParam) {
+ // This property can be safely altered after logging has started
+ focusConsoleWindow = bool(focusPopUpParam);
+ };
+
+ this.isReopenWhenClosed = function() { return reopenWhenClosed; };
+ this.setReopenWhenClosed = function(reopenWhenClosedParam) {
+ // This property can be safely altered after logging has started
+ reopenWhenClosed = bool(reopenWhenClosedParam);
+ };
+
+ this.close = function() {
+ logLog.debug("close " + this);
+ try {
+ popUp.close();
+ this.unload();
+ } catch (ex) {
+ // Do nothing
+ }
+ };
+
+ this.hide = function() {
+ logLog.debug("hide " + this);
+ if (consoleWindowExists()) {
+ this.close();
+ }
+ };
+
+ this.show = function() {
+ logLog.debug("show " + this);
+ if (!consoleWindowCreated) {
+ open();
+ }
+ };
+
+ this.isVisible = function() {
+ return safeToAppend();
+ };
+
+ // Define useful variables
+ var popUp;
+
+ // Create open, init, getConsoleWindow and safeToAppend functions
+ open = function() {
+ var windowProperties = "width=" + width + ",height=" + height + ",status,resizable";
+ var frameInfo = "";
+ try {
+ var frameEl = window.frameElement;
+ if (frameEl) {
+ frameInfo = "_" + frameEl.tagName + "_" + (frameEl.name || frameEl.id || "");
+ }
+ } catch (e) {
+ frameInfo = "_inaccessibleParentFrame";
+ }
+ var windowName = "PopUp_" + location.host.replace(/[^a-z0-9]/gi, "_") + "_" + consoleAppenderId + frameInfo;
+ if (!useOldPopUp || !useDocumentWrite) {
+ // Ensure a previous window isn't used by using a unique name
+ windowName = windowName + "_" + uniqueId;
+ }
+
+ var checkPopUpClosed = function(win) {
+ if (consoleClosed) {
+ return true;
+ } else {
+ try {
+ return bool(win) && win.closed;
+ } catch(ex) {}
+ }
+ return false;
+ };
+
+ var popUpClosedCallback = function() {
+ if (!consoleClosed) {
+ appender.unload();
+ }
+ };
+
+ function finalInit() {
+ getConsoleWindow().setCloseIfOpenerCloses(!useOldPopUp || !useDocumentWrite);
+ consoleWindowLoadHandler();
+ consoleWindowLoaded = true;
+ appendQueuedLoggingEvents();
+ pollConsoleWindow(checkPopUpClosed, 500, popUpClosedCallback,
+ "PopUpAppender.checkPopUpClosed: error checking pop-up window");
+ }
+
+ try {
+ popUp = window.open(getConsoleUrl(), windowName, windowProperties);
+ consoleClosed = false;
+ consoleWindowCreated = true;
+ if (popUp && popUp.document) {
+ if (useDocumentWrite && useOldPopUp && isLoaded(popUp)) {
+ popUp.mainPageReloaded();
+ finalInit();
+ } else {
+ if (useDocumentWrite) {
+ writeHtml(popUp.document);
+ }
+ // Check if the pop-up window object is available
+ var popUpLoadedTest = function(win) { return bool(win) && isLoaded(win); };
+ if (isLoaded(popUp)) {
+ finalInit();
+ } else {
+ pollConsoleWindow(popUpLoadedTest, 100, finalInit,
+ "PopUpAppender.init: unable to create console window");
+ }
+ }
+ } else {
+ isSupported = false;
+ logLog.warn("PopUpAppender.init: pop-ups blocked, please unblock to use PopUpAppender");
+ if (complainAboutPopUpBlocking) {
+ handleError("log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.");
+ }
+ }
+ } catch (ex) {
+ handleError("PopUpAppender.init: error creating pop-up", ex);
+ }
+ };
+
+ createWindow = function() {
+ if (!initiallyMinimized) {
+ open();
+ }
+ };
+
+ init = function() {
+ createWindow();
+ initialized = true;
+ };
+
+ getConsoleWindow = function() {
+ return popUp;
+ };
+
+ safeToAppend = function() {
+ if (isSupported && !isUndefined(popUp) && !consoleClosed) {
+ if (popUp.closed ||
+ (consoleWindowLoaded && isUndefined(popUp.closed))) { // Extra check for Opera
+ appender.unload();
+ logLog.debug("PopUpAppender: pop-up closed");
+ return false;
+ }
+ if (!consoleWindowLoaded && isLoaded(popUp)) {
+ consoleWindowLoaded = true;
+ }
+ }
+ return isSupported && consoleWindowLoaded && !consoleClosed;
+ };
+ }
+
+ // Expose getConsoleWindow so that automated tests can check the DOM
+ this.getConsoleWindow = getConsoleWindow;
+ };
+
+ ConsoleAppender.addGlobalCommandLineFunction = function(functionName, commandLineFunction) {
+ defaultCommandLineFunctions.push([functionName, commandLineFunction]);
+ };
+
+ /* ------------------------------------------------------------------ */
+
+ function PopUpAppender(lazyInit, initiallyMinimized, useDocumentWrite,
+ width, height) {
+ this.create(false, null, lazyInit, initiallyMinimized,
+ useDocumentWrite, width, height, this.defaults.focusPopUp);
+ }
+
+ PopUpAppender.prototype = new ConsoleAppender();
+
+ PopUpAppender.prototype.defaults = {
+ layout: new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),
+ initiallyMinimized: false,
+ focusPopUp: false,
+ lazyInit: true,
+ useOldPopUp: true,
+ complainAboutPopUpBlocking: true,
+ newestMessageAtTop: false,
+ scrollToLatestMessage: true,
+ width: "600",
+ height: "400",
+ reopenWhenClosed: false,
+ maxMessages: null,
+ showCommandLine: true,
+ commandLineObjectExpansionDepth: 1,
+ showHideButton: false,
+ showCloseButton: true,
+ showLogEntryDeleteButtons: true,
+ useDocumentWrite: true
+ };
+
+ PopUpAppender.prototype.toString = function() {
+ return "PopUpAppender";
+ };
+
+ log4javascript.PopUpAppender = PopUpAppender;
+
+ /* ------------------------------------------------------------------ */
+
+ function InPageAppender(container, lazyInit, initiallyMinimized,
+ useDocumentWrite, width, height) {
+ this.create(true, container, lazyInit, initiallyMinimized,
+ useDocumentWrite, width, height, false);
+ }
+
+ InPageAppender.prototype = new ConsoleAppender();
+
+ InPageAppender.prototype.defaults = {
+ layout: new PatternLayout("%d{HH:mm:ss} %-5p - %m{1}%n"),
+ initiallyMinimized: false,
+ lazyInit: true,
+ newestMessageAtTop: false,
+ scrollToLatestMessage: true,
+ width: "100%",
+ height: "220px",
+ maxMessages: null,
+ showCommandLine: true,
+ commandLineObjectExpansionDepth: 1,
+ showHideButton: false,
+ showCloseButton: false,
+ showLogEntryDeleteButtons: true,
+ useDocumentWrite: true
+ };
+
+ InPageAppender.prototype.toString = function() {
+ return "InPageAppender";
+ };
+
+ log4javascript.InPageAppender = InPageAppender;
+
+ // Next line for backwards compatibility
+ log4javascript.InlineAppender = InPageAppender;
+ })();
+ /* ---------------------------------------------------------------------- */
+ // Console extension functions
+
+ function padWithSpaces(str, len) {
+ if (str.length < len) {
+ var spaces = [];
+ var numberOfSpaces = Math.max(0, len - str.length);
+ for (var i = 0; i < numberOfSpaces; i++) {
+ spaces[i] = " ";
+ }
+ str += spaces.join("");
+ }
+ return str;
+ }
+
+ (function() {
+ function dir(obj) {
+ var maxLen = 0;
+ // Obtain the length of the longest property name
+ for (var p in obj) {
+ maxLen = Math.max(toStr(p).length, maxLen);
+ }
+ // Create the nicely formatted property list
+ var propList = [];
+ for (p in obj) {
+ var propNameStr = " " + padWithSpaces(toStr(p), maxLen + 2);
+ var propVal;
+ try {
+ propVal = splitIntoLines(toStr(obj[p])).join(padWithSpaces(newLine, maxLen + 6));
+ } catch (ex) {
+ propVal = "[Error obtaining property. Details: " + getExceptionMessage(ex) + "]";
+ }
+ propList.push(propNameStr + propVal);
+ }
+ return propList.join(newLine);
+ }
+
+ var nodeTypes = {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ };
+
+ var preFormattedElements = ["script", "pre"];
+
+ // This should be the definitive list, as specified by the XHTML 1.0 Transitional DTD
+ var emptyElements = ["br", "img", "hr", "param", "link", "area", "input", "col", "base", "meta"];
+ var indentationUnit = " ";
+
+ // Create and return an XHTML string from the node specified
+ function getXhtml(rootNode, includeRootNode, indentation, startNewLine, preformatted) {
+ includeRootNode = (typeof includeRootNode == "undefined") ? true : !!includeRootNode;
+ if (typeof indentation != "string") {
+ indentation = "";
+ }
+ startNewLine = !!startNewLine;
+ preformatted = !!preformatted;
+ var xhtml;
+
+ function isWhitespace(node) {
+ return ((node.nodeType == nodeTypes.TEXT_NODE) && /^[ \t\r\n]*$/.test(node.nodeValue));
+ }
+
+ function fixAttributeValue(attrValue) {
+ return attrValue.toString().replace(/&/g, "&").replace(/</g, "<").replace(/"/g, """);
+ }
+
+ function getStyleAttributeValue(el) {
+ var stylePairs = el.style.cssText.split(";");
+ var styleValue = "";
+ var isFirst = true;
+ for (var j = 0, len = stylePairs.length; j < len; j++) {
+ var nameValueBits = stylePairs[j].split(":");
+ var props = [];
+ if (!/^\s*$/.test(nameValueBits[0])) {
+ props.push(trim(nameValueBits[0]).toLowerCase() + ":" + trim(nameValueBits[1]));
+ }
+ styleValue = props.join(";");
+ }
+ return styleValue;
+ }
+
+ function getNamespace(el) {
+ if (el.prefix) {
+ return el.prefix;
+ } else if (el.outerHTML) {
+ var regex = new RegExp("<([^:]+):" + el.tagName + "[^>]*>", "i");
+ if (regex.test(el.outerHTML)) {
+ return RegExp.$1.toLowerCase();
+ }
+ }
+ return "";
+ }
+
+ var lt = "<";
+ var gt = ">";
+
+ if (includeRootNode && rootNode.nodeType != nodeTypes.DOCUMENT_FRAGMENT_NODE) {
+ switch (rootNode.nodeType) {
+ case nodeTypes.ELEMENT_NODE:
+ var tagName = rootNode.tagName.toLowerCase();
+ xhtml = startNewLine ? newLine + indentation : "";
+ xhtml += lt;
+ // Allow for namespaces, where present
+ var prefix = getNamespace(rootNode);
+ var hasPrefix = !!prefix;
+ if (hasPrefix) {
+ xhtml += prefix + ":";
+ }
+ xhtml += tagName;
+ for (i = 0, len = rootNode.attributes.length; i < len; i++) {
+ var currentAttr = rootNode.attributes[i];
+ // Check the attribute is valid.
+ if (! currentAttr.specified ||
+ currentAttr.nodeValue === null ||
+ currentAttr.nodeName.toLowerCase() === "style" ||
+ typeof currentAttr.nodeValue !== "string" ||
+ currentAttr.nodeName.indexOf("_moz") === 0) {
+ continue;
+ }
+ xhtml += " " + currentAttr.nodeName.toLowerCase() + "=\"";
+ xhtml += fixAttributeValue(currentAttr.nodeValue);
+ xhtml += "\"";
+ }
+ // Style needs to be done separately as it is not reported as an
+ // attribute in IE
+ if (rootNode.style.cssText) {
+ var styleValue = getStyleAttributeValue(rootNode);
+ if (styleValue !== "") {
+ xhtml += " style=\"" + getStyleAttributeValue(rootNode) + "\"";
+ }
+ }
+ if (array_contains(emptyElements, tagName) ||
+ (hasPrefix && !rootNode.hasChildNodes())) {
+ xhtml += "/" + gt;
+ } else {
+ xhtml += gt;
+ // Add output for childNodes collection (which doesn't include attribute nodes)
+ var childStartNewLine = !(rootNode.childNodes.length === 1 &&
+ rootNode.childNodes[0].nodeType === nodeTypes.TEXT_NODE);
+ var childPreformatted = array_contains(preFormattedElements, tagName);
+ for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {
+ xhtml += getXhtml(rootNode.childNodes[i], true, indentation + indentationUnit,
+ childStartNewLine, childPreformatted);
+ }
+ // Add the end tag
+ var endTag = lt + "/" + tagName + gt;
+ xhtml += childStartNewLine ? newLine + indentation + endTag : endTag;
+ }
+ return xhtml;
+ case nodeTypes.TEXT_NODE:
+ if (isWhitespace(rootNode)) {
+ xhtml = "";
+ } else {
+ if (preformatted) {
+ xhtml = rootNode.nodeValue;
+ } else {
+ // Trim whitespace from each line of the text node
+ var lines = splitIntoLines(trim(rootNode.nodeValue));
+ var trimmedLines = [];
+ for (var i = 0, len = lines.length; i < len; i++) {
+ trimmedLines[i] = trim(lines[i]);
+ }
+ xhtml = trimmedLines.join(newLine + indentation);
+ }
+ if (startNewLine) {
+ xhtml = newLine + indentation + xhtml;
+ }
+ }
+ return xhtml;
+ case nodeTypes.CDATA_SECTION_NODE:
+ return "<![CDA" + "TA[" + rootNode.nodeValue + "]" + "]>" + newLine;
+ case nodeTypes.DOCUMENT_NODE:
+ xhtml = "";
+ // Add output for childNodes collection (which doesn't include attribute nodes)
+ for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {
+ xhtml += getXhtml(rootNode.childNodes[i], true, indentation);
+ }
+ return xhtml;
+ default:
+ return "";
+ }
+ } else {
+ xhtml = "";
+ // Add output for childNodes collection (which doesn't include attribute nodes)
+ for (var i = 0, len = rootNode.childNodes.length; i < len; i++) {
+ xhtml += getXhtml(rootNode.childNodes[i], true, indentation + indentationUnit);
+ }
+ return xhtml;
+ }
+ }
+
+ function createCommandLineFunctions() {
+ ConsoleAppender.addGlobalCommandLineFunction("$", function(appender, args, returnValue) {
+ return document.getElementById(args[0]);
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("dir", function(appender, args, returnValue) {
+ var lines = [];
+ for (var i = 0, len = args.length; i < len; i++) {
+ lines[i] = dir(args[i]);
+ }
+ return lines.join(newLine + newLine);
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("dirxml", function(appender, args, returnValue) {
+ var lines = [];
+ for (var i = 0, len = args.length; i < len; i++) {
+ var win = appender.getCommandWindow();
+ lines[i] = getXhtml(args[i]);
+ }
+ return lines.join(newLine + newLine);
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("cd", function(appender, args, returnValue) {
+ var win, message;
+ if (args.length === 0 || args[0] === "") {
+ win = window;
+ message = "Command line set to run in main window";
+ } else {
+ if (args[0].window == args[0]) {
+ win = args[0];
+ message = "Command line set to run in frame '" + args[0].name + "'";
+ } else {
+ win = window.frames[args[0]];
+ if (win) {
+ message = "Command line set to run in frame '" + args[0] + "'";
+ } else {
+ returnValue.isError = true;
+ message = "Frame '" + args[0] + "' does not exist";
+ win = appender.getCommandWindow();
+ }
+ }
+ }
+ appender.setCommandWindow(win);
+ return message;
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("clear", function(appender, args, returnValue) {
+ returnValue.appendResult = false;
+ appender.clear();
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("keys", function(appender, args, returnValue) {
+ var keys = [];
+ for (var k in args[0]) {
+ keys.push(k);
+ }
+ return keys;
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("values", function(appender, args, returnValue) {
+ var values = [];
+ for (var k in args[0]) {
+ try {
+ values.push(args[0][k]);
+ } catch (ex) {
+ logLog.warn("values(): Unable to obtain value for key " + k + ". Details: " + getExceptionMessage(ex));
+ }
+ }
+ return values;
+ });
+
+ ConsoleAppender.addGlobalCommandLineFunction("expansionDepth", function(appender, args, returnValue) {
+ var expansionDepth = parseInt(args[0], 10);
+ if (isNaN(expansionDepth) || expansionDepth < 0) {
+ returnValue.isError = true;
+ return "" + args[0] + " is not a valid expansion depth";
+ } else {
+ appender.setCommandLineObjectExpansionDepth(expansionDepth);
+ return "Object expansion depth set to " + expansionDepth;
+ }
+ });
+ }
+
+ function init() {
+ // Add command line functions
+ createCommandLineFunctions();
+ }
+
+ /* ------------------------------------------------------------------ */
+
+ init();
+ })();
+
+ /* ---------------------------------------------------------------------- */
+ // Main load
+
+ log4javascript.setDocumentReady = function() {
+ pageLoaded = true;
+ log4javascript.dispatchEvent("load", {});
+ };
+
+ if (window.addEventListener) {
+ window.addEventListener("load", log4javascript.setDocumentReady, false);
+ } else if (window.attachEvent) {
+ window.attachEvent("onload", log4javascript.setDocumentReady);
+ } else {
+ var oldOnload = window.onload;
+ if (typeof window.onload != "function") {
+ window.onload = log4javascript.setDocumentReady;
+ } else {
+ window.onload = function(evt) {
+ if (oldOnload) {
+ oldOnload(evt);
+ }
+ log4javascript.setDocumentReady();
+ };
+ }
+ }
+
+ // Ensure that the log4javascript object is available in the window. This
+ // is necessary for log4javascript to be available in IE if loaded using
+ // Dojo's module system
+ window.log4javascript = log4javascript;
+
+ return log4javascript;
+})();
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/main.css b/planetstack/core/static/log4javascript-1.4.6/main.css
new file mode 100644
index 0000000..5ac3df3
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/main.css
@@ -0,0 +1,300 @@
+body {
+ font-family: Verdana, Arial, Helvetica, Sans-serif;
+ font-size: 75%;
+ color: black;
+ background-color: #eeeeee;
+ text-align: center;
+ padding: 0px;
+ margin: 0px;
+}
+
+div#container {
+ width: 770px;
+ text-align: left;
+ line-height: 150%;
+ border-width: 0px 1px 1px 1px;
+ border-color: #cccccc;
+ border-style: solid;
+ background-color: white;
+ color: black;
+ padding: 10px;
+ margin: 0px auto 10px auto;
+}
+
+div#header {
+ margin: 0px;
+}
+
+div#header h1 {
+ font-family: Courier New, Courier, Monospace, Serif;
+ padding: 8px 0 15px 0;
+ margin: 0px;
+ font-size: 200%;
+ font-weight: bold;
+ text-align: right;
+}
+
+div#header h1 a {
+ color: black;
+}
+
+div#nav {
+ font-size: 91.66%;
+ font-weight: bold;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ border-bottom: solid #cccccc 1px;
+ text-align: right;
+ background-color: #f0f0fa;
+}
+
+div#container.nonav div#content {
+ float: none;
+ width: auto;
+}
+
+*.externallinkinfo {
+ float: right;
+ font-style: italic;
+}
+
+div#content h1 {
+ padding: 10px 3px 5px 3px;
+ margin: 5px 0px;
+ font-size: 175%;
+ font-weight: normal;
+}
+
+div#content h2 {
+ background-color: darkgreen;
+ color: white;
+ padding: 0px 3px;
+ font-size: 116.66%;
+ font-weight: bold;
+}
+
+div#content h2 a {
+ color: white;
+}
+
+div#content h3 {
+ padding: 0px 3px;
+ font-size: 116.66%;
+ font-weight: bold;
+ border-style: solid;
+ border-color: #003399;
+ border-width: 1px 0px;
+}
+
+div#content h4 {
+ padding: 0px 3px;
+ font-size: 100%;
+ font-weight: bold;
+ border-top: solid #eeeeee 1px;
+}
+
+div#content h5 {
+ padding: 0px;
+ margin: 3px 0px;
+}
+
+div#footer {
+ margin-top: 20px;
+ padding: 2px;
+ border-top: solid #cccccc 1px;
+ font-size: 91.66%;
+}
+
+a {
+ color: #003399;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.bold {
+ font-weight: bold;
+}
+
+a.underlined {
+ text-decoration: underline;
+}
+
+a img {
+ border-width: 0px;
+}
+
+br.clear {
+ clear: both;
+}
+
+table {
+ font-size: 100%;
+}
+
+/* Code */
+pre, code {
+ font-family: Courier New, Courier;
+ font-size: 108.33%;
+}
+
+pre.code, pre.console {
+ border: solid 1px #cccccc;
+ padding: 3px;
+}
+
+pre.code {
+ background-color: #eeeeee;
+}
+
+*.trace {
+ color: #666666;
+}
+
+*.debug {
+ color: green;
+}
+
+*.info {
+ color: #000099;
+}
+
+*.warn {
+ color: #999900;
+}
+
+*.error {
+ color: red;
+}
+
+*.fatal {
+ color: #660066;
+}
+
+
+div.example, div.panel {
+ border: solid 1px #cccccc;
+ background-color: #f5f5f5;
+ padding: 3px;
+ margin-bottom: 10px;
+}
+
+div.panel h2 {
+ margin: 5px 0px;
+}
+
+div.padded {
+ padding: 10px;
+}
+
+div.hidden {
+ display: none;
+}
+
+div.active {
+ background-color: #fcfffc;
+ border-color: green;
+}
+
+label.rightofinput, input.rightoflabel {
+ margin-right: 20px;
+}
+
+/* 'Back to top' link */
+p.linktotop {
+ text-align: right;
+}
+
+ul.propertieslist li.method, ul.propertieslist li.property {
+ margin: 0;
+ padding: 0px 0px 15px 0px;
+}
+
+ul.propertieslist li *.name {
+ font-size: 116.66%;
+ font-weight: bold;
+}
+
+ul.propertieslist li.method div.methodsignature {
+ margin: 10px 0px;
+ font-size: 116.66%;
+ background-color: #eeeeee;
+}
+
+ul.propertieslist li.method *.paramsheading {
+ font-weight: bold;
+}
+
+ul.propertieslist li.method *.params {
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+ul.propertieslist li.method *.params li.param {
+ padding-bottom: 10px;
+}
+
+ul.propertieslist li.method *.params li.param *.paramname {
+ font-style: italic;
+}
+
+div.serverlog {
+ height: 200px;
+ /*border: solid 1px #cccccc;*/
+}
+
+div#inPageConsole {
+ margin-top: 10px;
+}
+
+div.iframecontainer {
+ background-color: white;
+ border: solid #cccccc 1px;
+ width: 100%;
+}
+
+div.veryprominent {
+ background-color: darkgreen;
+ color: white;
+ font-weight: bold;
+ padding: 10px;
+ font-size: 133.33%;
+ margin-bottom: 10px;
+}
+
+div.veryprominent a {
+ color: white;
+}
+
+*.largetext {
+ font-size: 116.66%;
+}
+
+div#leftcolumn {
+ float: left;
+ width: 160px;
+}
+
+div#rightcolumn {
+ float: right;
+ width: 580px;
+}
+
+td.fullsupport {
+ background-color: lightgreen;
+}
+
+td.partialsupport {
+ background-color: gold;
+}
+
+td.nosupport {
+ background-color: lightcoral;
+}
+
+p.editions {
+ text-align: right;
+ font-style: italic;
+}
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/test/index.html b/planetstack/core/static/log4javascript-1.4.6/test/index.html
new file mode 100644
index 0000000..e01f13c
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/test/index.html
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript - Tests</title>
+ </head>
+ <body>
+ <ul>
+ <li><a href="log4javascript.html">Standard edition tests</a></li>
+ <li><a href="log4javascript_uncompressed.html">Standard edition uncompressed tests</a></li>
+ <li><a href="log4javascript_production.html">Production edition tests</a></li>
+ <li><a href="log4javascript_production_uncompressed.html">Production edition uncompressed tests</a></li>
+ </ul>
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/test/log4javascript.html b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript.html
new file mode 100644
index 0000000..8e426b9
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript.html
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript - log4javascript - Tests</title>
+ <script type="text/javascript" src="../js/log4javascript.js"></script>
+ <script type="text/javascript" src="../js/stubs/log4javascript.js"></script>
+ <script type="text/javascript" src="xntest.js"></script>
+ <script type="text/javascript" src="../js/tests/log4javascript.js"></script>
+ <link rel="stylesheet" type="text/css" href="tests.css"/>
+ </head>
+ <body>
+ <div id="messages"></div>
+ <div id="inlineAppenderContainer"></div>
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_lite.html b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_lite.html
new file mode 100644
index 0000000..508dc83
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_lite.html
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript - log4javascript_lite - Tests</title>
+ <script type="text/javascript" src="../js/log4javascript_lite.js"></script>
+ <script type="text/javascript" src="../js/stubs/log4javascript_lite.js"></script>
+ <script type="text/javascript" src="xntest.js"></script>
+ <script type="text/javascript" src="../js/tests/log4javascript_lite.js"></script>
+ <link rel="stylesheet" type="text/css" href="tests.css"/>
+ </head>
+ <body>
+ <div id="messages"></div>
+ <div id="inlineAppenderContainer"></div>
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_lite_uncompressed.html b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_lite_uncompressed.html
new file mode 100644
index 0000000..968019c
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_lite_uncompressed.html
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript - log4javascript_lite_uncompressed - Tests</title>
+ <script type="text/javascript" src="../js/log4javascript_lite_uncompressed.js"></script>
+ <script type="text/javascript" src="../js/stubs/log4javascript_lite_uncompressed.js"></script>
+ <script type="text/javascript" src="xntest.js"></script>
+ <script type="text/javascript" src="../js/tests/log4javascript_lite_uncompressed.js"></script>
+ <link rel="stylesheet" type="text/css" href="tests.css"/>
+ </head>
+ <body>
+ <div id="messages"></div>
+ <div id="inlineAppenderContainer"></div>
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_production.html b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_production.html
new file mode 100644
index 0000000..e5308b1
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_production.html
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript - log4javascript_production - Tests</title>
+ <script type="text/javascript" src="../js/log4javascript_production.js"></script>
+ <script type="text/javascript" src="../js/stubs/log4javascript_production.js"></script>
+ <script type="text/javascript" src="xntest.js"></script>
+ <script type="text/javascript" src="../js/tests/log4javascript_production.js"></script>
+ <link rel="stylesheet" type="text/css" href="tests.css"/>
+ </head>
+ <body>
+ <div id="messages"></div>
+ <div id="inlineAppenderContainer"></div>
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_production_uncompressed.html b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_production_uncompressed.html
new file mode 100644
index 0000000..21f84d7
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_production_uncompressed.html
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript - log4javascript_production_uncompressed - Tests</title>
+ <script type="text/javascript" src="../js/log4javascript_production_uncompressed.js"></script>
+ <script type="text/javascript" src="../js/stubs/log4javascript_production_uncompressed.js"></script>
+ <script type="text/javascript" src="xntest.js"></script>
+ <script type="text/javascript" src="../js/tests/log4javascript_production_uncompressed.js"></script>
+ <link rel="stylesheet" type="text/css" href="tests.css"/>
+ </head>
+ <body>
+ <div id="messages"></div>
+ <div id="inlineAppenderContainer"></div>
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_uncompressed.html b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_uncompressed.html
new file mode 100644
index 0000000..3db9241
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/test/log4javascript_uncompressed.html
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript - log4javascript_uncompressed - Tests</title>
+ <script type="text/javascript" src="../js/log4javascript_uncompressed.js"></script>
+ <script type="text/javascript" src="../js/stubs/log4javascript_uncompressed.js"></script>
+ <script type="text/javascript" src="xntest.js"></script>
+ <script type="text/javascript" src="../js/tests/log4javascript_uncompressed.js"></script>
+ <link rel="stylesheet" type="text/css" href="tests.css"/>
+ </head>
+ <body>
+ <div id="messages"></div>
+ <div id="inlineAppenderContainer"></div>
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/test/main.html b/planetstack/core/static/log4javascript-1.4.6/test/main.html
new file mode 100644
index 0000000..176098f
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/test/main.html
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <head>
+ <title>log4javascript - %%build:edition%% - Tests</title>
+ <script type="text/javascript" src="../js/%%build:edition%%.js"></script>
+ <script type="text/javascript" src="../js/stubs/%%build:edition%%.js"></script>
+ <script type="text/javascript" src="xntest.js"></script>
+ <script type="text/javascript" src="../js/tests/%%build:edition%%.js"></script>
+ <link rel="stylesheet" type="text/css" href="tests.css"/>
+ </head>
+ <body>
+ <div id="messages"></div>
+ <div id="inlineAppenderContainer"></div>
+ </body>
+</html>
diff --git a/planetstack/core/static/log4javascript-1.4.6/test/tests.css b/planetstack/core/static/log4javascript-1.4.6/test/tests.css
new file mode 100644
index 0000000..9cddef8
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/test/tests.css
@@ -0,0 +1,88 @@
+body {
+ font-family: verdana, arial, helvetica, sans-serif;
+ font-size: 81.25%;
+}
+
+h2 {
+ font-size: 100%;
+ padding: 0;
+ margin: 0.1em 0 0.1em 0;
+}
+
+div.xn_test_suite_container {
+ border: solid #cccccc 1px;
+ padding: 2px 5px;
+ margin: 2px 0px;
+}
+
+div.xn_test_progressbar_container {
+ border: solid black 1px;
+}
+
+div.xn_test_progressbar_container *.success {
+ background-color: #00ff00;
+}
+
+div.xn_test_progressbar_container *.failure {
+ background-color: red;
+}
+
+div.xn_test_overallprogressbar_container {
+ position: relative;
+}
+
+div.xn_test_overallprogressbar_container h1 {
+ margin: 0;
+ padding: 2px;
+ font-size: 125%;
+ font-weight: bold;
+ white-space: nowrap;
+}
+
+dl *.success {
+ color: green;
+}
+
+dl *.failure {
+ color: red;
+}
+
+span.xn_test_expander {
+ padding: 0;
+ border: solid black 1px;
+ cursor: pointer;
+ cursor: hand;
+ line-height: 100%;
+ font-weight: bold;
+ margin-right: 1em;
+ font-size: 11px;
+}
+
+dl.xn_test_expanded {
+ display: block;
+}
+
+dl.xn_test_collapsed {
+ display: none;
+}
+
+div.xn_test_suite_success {
+ border: solid 2px limegreen;
+}
+
+div.xn_test_suite_failure {
+ border: solid 2px red;
+}
+
+pre.xn_test_log_report {
+ background-color: #f5f5f5;
+ padding: 3px;
+ border: solid gray 1px;
+ font-size: 11px;
+ font-family: Courier New, Courier, monospace;
+}
+
+code.xn_test_stacktrace {
+ color: red;
+ overflow:
+}
\ No newline at end of file
diff --git a/planetstack/core/static/log4javascript-1.4.6/test/xntest.js b/planetstack/core/static/log4javascript-1.4.6/test/xntest.js
new file mode 100644
index 0000000..1b8f475
--- /dev/null
+++ b/planetstack/core/static/log4javascript-1.4.6/test/xntest.js
@@ -0,0 +1,739 @@
+// Next three methods are primarily for IE5, which is missing them
+if (!Array.prototype.push) {
+ Array.prototype.push = function() {
+ for (var i = 0; i < arguments.length; i++){
+ this[this.length] = arguments[i];
+ }
+ return this.length;
+ };
+}
+
+if (!Array.prototype.shift) {
+ Array.prototype.shift = function() {
+ if (this.length > 0) {
+ var firstItem = this[0];
+ for (var i = 0; i < this.length - 1; i++) {
+ this[i] = this[i + 1];
+ }
+ this.length = this.length - 1;
+ return firstItem;
+ }
+ };
+}
+
+if (!Function.prototype.apply) {
+ Function.prototype.apply = function(obj, args) {
+ var methodName = "__apply__";
+ if (typeof obj[methodName] != "undefined") {
+ methodName += (String(Math.random())).substr(2);
+ }
+ obj[methodName] = this;
+
+ var argsStrings = new Array(args.length);
+ for (var i = 0; i < args.length; i++) {
+ argsStrings[i] = "args[" + i + "]";
+ }
+ var script = "obj." + methodName + "(" + argsStrings.join(",") + ")";
+ var returnValue = eval(script);
+ delete obj[methodName];
+ return returnValue;
+ };
+}
+
+/* -------------------------------------------------------------------------- */
+
+var xn = new Object();
+
+(function() {
+ // Utility functions
+
+ // Event listeners
+ var getListenersPropertyName = function(eventName) {
+ return "__listeners__" + eventName;
+ };
+
+ var addEventListener = function(node, eventName, listener, useCapture) {
+ useCapture = Boolean(useCapture);
+ if (node.addEventListener) {
+ node.addEventListener(eventName, listener, useCapture);
+ } else if (node.attachEvent) {
+ node.attachEvent("on" + eventName, listener);
+ } else {
+ var propertyName = getListenersPropertyName(eventName);
+ if (!node[propertyName]) {
+ node[propertyName] = new Array();
+
+ // Set event handler
+ node["on" + eventName] = function(evt) {
+ evt = module.getEvent(evt);
+ var listenersPropertyName = getListenersPropertyName(eventName);
+
+ // Clone the array of listeners to leave the original untouched
+ var listeners = cloneArray(this[listenersPropertyName]);
+ var currentListener;
+
+ // Call each listener in turn
+ while (currentListener = listeners.shift()) {
+ currentListener.call(this, evt);
+ }
+ };
+ }
+ node[propertyName].push(listener);
+ }
+ };
+
+ // Clones an array
+ var cloneArray = function(arr) {
+ var clonedArray = [];
+ for (var i = 0; i < arr.length; i++) {
+ clonedArray[i] = arr[i];
+ }
+ return clonedArray;
+ }
+
+ var isFunction = function(f) {
+ if (!f){ return false; }
+ return (f instanceof Function || typeof f == "function");
+ };
+
+ // CSS Utilities
+
+ function array_contains(arr, val) {
+ for (var i = 0, len = arr.length; i < len; i++) {
+ if (arr[i] === val) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function addClass(el, cssClass) {
+ if (!hasClass(el, cssClass)) {
+ if (el.className) {
+ el.className += " " + cssClass;
+ } else {
+ el.className = cssClass;
+ }
+ }
+ }
+
+ function hasClass(el, cssClass) {
+ if (el.className) {
+ var classNames = el.className.split(" ");
+ return array_contains(classNames, cssClass);
+ }
+ return false;
+ }
+
+ function removeClass(el, cssClass) {
+ if (hasClass(el, cssClass)) {
+ // Rebuild the className property
+ var existingClasses = el.className.split(" ");
+ var newClasses = [];
+ for (var i = 0; i < existingClasses.length; i++) {
+ if (existingClasses[i] != cssClass) {
+ newClasses[newClasses.length] = existingClasses[i];
+ }
+ }
+ el.className = newClasses.join(" ");
+ }
+ }
+
+ function replaceClass(el, newCssClass, oldCssClass) {
+ removeClass(el, oldCssClass);
+ addClass(el, newCssClass);
+ }
+
+ function getExceptionStringRep(ex) {
+ if (ex) {
+ var exStr = "Exception: ";
+ if (ex.message) {
+ exStr += ex.message;
+ } else if (ex.description) {
+ exStr += ex.description;
+ }
+ if (ex.lineNumber) {
+ exStr += " on line number " + ex.lineNumber;
+ }
+ if (ex.fileName) {
+ exStr += " in file " + ex.fileName;
+ }
+ return exStr;
+ }
+ return null;
+ }
+
+
+ /* ---------------------------------------------------------------------- */
+
+ /* Configure the test logger try to use FireBug */
+ var log, error;
+ if (window["console"] && typeof console.log == "function") {
+ log = function() {
+ if (xn.test.enableTestDebug) {
+ console.log.apply(console, arguments);
+ }
+ };
+ error = function() {
+ if (xn.test.enableTestDebug) {
+ console.error.apply(console, arguments);
+ }
+ };
+ } else {
+ log = function() {};
+ }
+
+ /* Set up something to report to */
+
+ var initialized = false;
+ var container;
+ var progressBarContainer, progressBar, overallSummaryText;
+ var currentTest = null;
+ var suites = [];
+ var totalTestCount = 0;
+ var currentTestIndex = 0;
+ var testFailed = false;
+ var testsPassedCount = 0;
+ var startTime;
+
+ var log4javascriptEnabled = false;
+
+ var nextSuiteIndex = 0;
+
+ function runNextSuite() {
+ if (nextSuiteIndex < suites.length) {
+ suites[nextSuiteIndex++].run();
+ }
+ }
+
+ var init = function() {
+ if (initialized) { return true; }
+
+ container = document.createElement("div");
+
+ // Create the overall progress bar
+ progressBarContainer = container.appendChild(document.createElement("div"));
+ progressBarContainer.className = "xn_test_progressbar_container xn_test_overallprogressbar_container";
+ progressBar = progressBarContainer.appendChild(document.createElement("div"));
+ progressBar.className = "success";
+
+ document.body.appendChild(container);
+
+ var h1 = progressBar.appendChild(document.createElement("h1"));
+ overallSummaryText = h1.appendChild(document.createTextNode(""));
+
+ initialized = true;
+
+ // Set up logging
+ log4javascriptEnabled = !!log4javascript && xn.test.enable_log4javascript;
+
+ function TestLogAppender() {}
+
+ if (log4javascriptEnabled) {
+ TestLogAppender.prototype = new log4javascript.Appender();
+ TestLogAppender.prototype.layout = new log4javascript.PatternLayout("%d{HH:mm:ss,SSS} %-5p %m");
+ TestLogAppender.prototype.append = function(loggingEvent) {
+ var formattedMessage = this.getLayout().format(loggingEvent);
+ if (this.getLayout().ignoresThrowable()) {
+ formattedMessage += loggingEvent.getThrowableStrRep();
+ }
+ currentTest.addLogMessage(formattedMessage);
+ };
+
+ var appender = new TestLogAppender();
+ appender.setThreshold(log4javascript.Level.ALL);
+ log4javascript.getRootLogger().addAppender(appender);
+ log4javascript.getRootLogger().setLevel(log4javascript.Level.ALL);
+ }
+
+ startTime = new Date();
+
+ // First, build each suite
+ for (var i = 0; i < suites.length; i++) {
+ suites[i].build();
+ totalTestCount += suites[i].tests.length;
+ }
+
+ // Now run each suite
+ runNextSuite();
+ };
+
+ function updateProgressBar() {
+ progressBar.style.width = "" + parseInt(100 * (currentTestIndex) / totalTestCount) + "%";
+ var s = (totalTestCount === 1) ? "" : "s";
+ var timeTaken = new Date().getTime() - startTime.getTime();
+ overallSummaryText.nodeValue = "" + testsPassedCount + " of " + totalTestCount + " test" + s + " passed in " + timeTaken + "ms";
+ }
+
+ addEventListener(window, "load", init);
+
+ /* ---------------------------------------------------------------------- */
+
+ /* Test Suite */
+ var Suite = function(name, callback, hideSuccessful) {
+ this.name = name;
+ this.callback = callback;
+ this.hideSuccessful = hideSuccessful;
+ this.tests = [];
+ this.log = log;
+ this.error = error;
+ this.expanded = true;
+ suites.push(this);
+ }
+
+ Suite.prototype.test = function(name, callback, setUp, tearDown) {
+ this.log("adding a test named " + name)
+ var t = new Test(name, callback, this, setUp, tearDown);
+ this.tests.push(t);
+ };
+
+ Suite.prototype.build = function() {
+ // Build the elements used by the suite
+ var suite = this;
+ this.testFailed = false;
+ this.container = document.createElement("div");
+ this.container.className = "xn_test_suite_container";
+
+ var heading = document.createElement("h2");
+ this.expander = document.createElement("span");
+ this.expander.className = "xn_test_expander";
+ this.expander.onclick = function() {
+ if (suite.expanded) {
+ suite.collapse();
+ } else {
+ suite.expand();
+ }
+ };
+ heading.appendChild(this.expander);
+
+ this.headingTextNode = document.createTextNode(this.name);
+ heading.appendChild(this.headingTextNode);
+ this.container.appendChild(heading);
+
+ this.reportContainer = document.createElement("dl");
+ this.container.appendChild(this.reportContainer);
+
+ this.progressBarContainer = document.createElement("div");
+ this.progressBarContainer.className = "xn_test_progressbar_container";
+ this.progressBar = document.createElement("div");
+ this.progressBar.className = "success";
+ this.progressBar.innerHTML = " ";
+ this.progressBarContainer.appendChild(this.progressBar);
+ this.reportContainer.appendChild(this.progressBarContainer);
+
+ this.expand();
+
+ container.appendChild(this.container);
+
+ // invoke callback to build the tests
+ this.callback.apply(this, [this]);
+ };
+
+ Suite.prototype.run = function() {
+ this.log("running suite '%s'", this.name)
+ this.startTime = new Date();
+
+ // now run the first test
+ this._currentIndex = 0;
+ this.runNextTest();
+ };
+
+ Suite.prototype.updateProgressBar = function() {
+ // Update progress bar
+ this.progressBar.style.width = "" + parseInt(100 * (this._currentIndex) / this.tests.length) + "%";
+ //log(this._currentIndex + ", " + this.tests.length + ", " + progressBar.style.width + ", " + progressBar.className);
+ };
+
+ Suite.prototype.expand = function() {
+ this.expander.innerHTML = "-";
+ replaceClass(this.reportContainer, "xn_test_expanded", "xn_test_collapsed");
+ this.expanded = true;
+ };
+
+ Suite.prototype.collapse = function() {
+ this.expander.innerHTML = "+";
+ replaceClass(this.reportContainer, "xn_test_collapsed", "xn_test_expanded");
+ this.expanded = false;
+ };
+
+ Suite.prototype.finish = function(timeTaken) {
+ var newClass = this.testFailed ? "xn_test_suite_failure" : "xn_test_suite_success";
+ var oldClass = this.testFailed ? "xn_test_suite_success" : "xn_test_suite_failure";
+ replaceClass(this.container, newClass, oldClass);
+
+ this.headingTextNode.nodeValue += " (" + timeTaken + "ms)";
+
+ if (this.hideSuccessful && !this.testFailed) {
+ this.collapse();
+ }
+ runNextSuite();
+ };
+
+ /**
+ * Works recursively with external state (the next index)
+ * so that we can handle async tests differently
+ */
+ Suite.prototype.runNextTest = function() {
+ if (this._currentIndex == this.tests.length) {
+ // finished!
+ var timeTaken = new Date().getTime() - this.startTime.getTime();
+
+ this.finish(timeTaken);
+ return;
+ }
+
+ var suite = this;
+ var t = this.tests[this._currentIndex++];
+ currentTestIndex++;
+
+ if (isFunction(suite.setUp)) {
+ suite.setUp.apply(suite, [t]);
+ }
+ if (isFunction(t.setUp)) {
+ t.setUp.apply(t, [t]);
+ }
+
+ t._run();
+
+ function afterTest() {
+ if (isFunction(suite.tearDown)) {
+ suite.tearDown.apply(suite, [t]);
+ }
+ if (isFunction(t.tearDown)) {
+ t.tearDown.apply(t, [t]);
+ }
+ suite.log("finished test [%s]", t.name);
+ updateProgressBar();
+ suite.updateProgressBar();
+ suite.runNextTest();
+ }
+
+ if (t.isAsync) {
+ t.whenFinished = afterTest;
+ } else {
+ setTimeout(afterTest, 1);
+ }
+ };
+
+ Suite.prototype.reportSuccess = function() {
+ };
+
+ /* ---------------------------------------------------------------------- */
+ /**
+ * Create a new test
+ */
+ var Test = function(name, callback, suite, setUp, tearDown) {
+ this.name = name;
+ this.callback = callback;
+ this.suite = suite;
+ this.setUp = setUp;
+ this.tearDown = tearDown;
+ this.log = log;
+ this.error = error;
+ this.assertCount = 0;
+ this.logMessages = [];
+ this.logExpanded = false;
+ };
+
+ /**
+ * Default success reporter, please override
+ */
+ Test.prototype.reportSuccess = function(name, timeTaken) {
+ /* default success reporting handler */
+ this.reportHeading = document.createElement("dt");
+ var text = this.name + " passed in " + timeTaken + "ms";
+
+ this.reportHeading.appendChild(document.createTextNode(text));
+
+ this.reportHeading.className = "success";
+ var dd = document.createElement("dd");
+ dd.className = "success";
+
+ this.suite.reportContainer.appendChild(this.reportHeading);
+ this.suite.reportContainer.appendChild(dd);
+ this.createLogReport();
+ };
+
+ /**
+ * Cause the test to immediately fail
+ */
+ Test.prototype.reportFailure = function(name, msg, ex) {
+ this.suite.testFailed = true;
+ this.suite.progressBar.className = "failure";
+ progressBar.className = "failure";
+ this.reportHeading = document.createElement("dt");
+ this.reportHeading.className = "failure";
+ var text = document.createTextNode(this.name);
+ this.reportHeading.appendChild(text);
+
+ var dd = document.createElement("dd");
+ dd.appendChild(document.createTextNode(msg));
+ dd.className = "failure";
+
+ this.suite.reportContainer.appendChild(this.reportHeading);
+ this.suite.reportContainer.appendChild(dd);
+ if (ex && ex.stack) {
+ var stackTraceContainer = this.suite.reportContainer.appendChild(document.createElement("code"));
+ stackTraceContainer.className = "xn_test_stacktrace";
+ stackTraceContainer.innerHTML = ex.stack.replace(/\r/g, "\n").replace(/\n{1,2}/g, "<br />");
+ }
+ this.createLogReport();
+ };
+
+ Test.prototype.createLogReport = function() {
+ if (this.logMessages.length > 0) {
+ this.reportHeading.appendChild(document.createTextNode(" ("));
+ var logToggler = this.reportHeading.appendChild(document.createElement("a"));
+ logToggler.href = "#";
+ logToggler.innerHTML = "show log";
+ var test = this;
+
+ logToggler.onclick = function() {
+ if (test.logExpanded) {
+ test.hideLogReport();
+ this.innerHTML = "show log";
+ test.logExpanded = false;
+ } else {
+ test.showLogReport();
+ this.innerHTML = "hide log";
+ test.logExpanded = true;
+ }
+ return false;
+ };
+
+ this.reportHeading.appendChild(document.createTextNode(")"));
+
+ // Create log report
+ this.logReport = this.suite.reportContainer.appendChild(document.createElement("pre"));
+ this.logReport.style.display = "none";
+ this.logReport.className = "xn_test_log_report";
+ var logMessageDiv;
+ for (var i = 0, len = this.logMessages.length; i < len; i++) {
+ logMessageDiv = this.logReport.appendChild(document.createElement("div"));
+ logMessageDiv.appendChild(document.createTextNode(this.logMessages[i]));
+ }
+ }
+ };
+
+ Test.prototype.showLogReport = function() {
+ this.logReport.style.display = "inline-block";
+ };
+
+ Test.prototype.hideLogReport = function() {
+ this.logReport.style.display = "none";
+ };
+
+ Test.prototype.async = function(timeout, callback) {
+ timeout = timeout || 250;
+ var self = this;
+ var timedOutFunc = function() {
+ if (!self.completed) {
+ var message = (typeof callback === "undefined") ?
+ "Asynchronous test timed out" : callback(self);
+ self.fail(message);
+ }
+ }
+ var timer = setTimeout(function () { timedOutFunc.apply(self, []); }, timeout)
+ this.isAsync = true;
+ };
+
+ /**
+ * Run the test
+ */
+ Test.prototype._run = function() {
+ this.log("starting test [%s]", this.name);
+ this.startTime = new Date();
+ currentTest = this;
+ try {
+ this.callback(this);
+ if (!this.completed && !this.isAsync) {
+ this.succeed();
+ }
+ } catch (e) {
+ this.log("test [%s] threw exception [%s]", this.name, e);
+ var s = (this.assertCount === 1) ? "" : "s";
+ this.fail("Exception thrown after " + this.assertCount + " successful assertion" + s + ": " + getExceptionStringRep(e), e);
+ }
+ };
+
+ /**
+ * Cause the test to immediately succeed
+ */
+ Test.prototype.succeed = function() {
+ if (this.completed) { return false; }
+ // this.log("test [%s] succeeded", this.name);
+ this.completed = true;
+ var timeTaken = new Date().getTime() - this.startTime.getTime();
+ testsPassedCount++;
+ this.reportSuccess(this.name, timeTaken);
+ if (this.whenFinished) {
+ this.whenFinished();
+ }
+ };
+
+ Test.prototype.fail = function(msg, ex) {
+ if (typeof msg != "string") {
+ msg = getExceptionStringRep(msg);
+ }
+ if (this.completed) { return false; }
+ this.completed = true;
+ // this.log("test [%s] failed", this.name);
+ this.reportFailure(this.name, msg, ex);
+ if (this.whenFinished) {
+ this.whenFinished();
+ }
+ };
+
+ Test.prototype.addLogMessage = function(logMessage) {
+ this.logMessages.push(logMessage);
+ };
+
+ /* assertions */
+ var displayStringForValue = function(obj) {
+ if (obj === null) {
+ return "null";
+ } else if (typeof obj === "undefined") {
+ return "undefined";
+ }
+ return obj.toString();
+ };
+
+ var assert = function(args, expectedArgsCount, testFunction, defaultComment) {
+ this.assertCount++;
+ var comment = defaultComment;
+ var i;
+ var success;
+ var values = [];
+ if (args.length == expectedArgsCount) {
+ for (i = 0; i < args.length; i++) {
+ values[i] = args[i];
+ }
+ } else if (args.length == expectedArgsCount + 1) {
+ comment = args[0];
+ for (i = 1; i < args.length; i++) {
+ values[i - 1] = args[i];
+ }
+ } else {
+ throw new Error("Invalid number of arguments passed to assert function");
+ }
+ success = testFunction(values);
+ if (!success) {
+ var regex = /\{([0-9]+)\}/;
+ while (regex.test(comment)) {
+ comment = comment.replace(regex, displayStringForValue(values[parseInt(RegExp.$1)]));
+ }
+ this.fail("Test failed on assertion " + this.assertCount + ": " + comment);
+ }
+ };
+
+ var testNull = function(values) {
+ return (values[0] === null);
+ };
+
+ Test.prototype.assertNull = function() {
+ assert.apply(this, [arguments, 1, testNull, "Expected to be null but was {0}"]);
+ }
+
+ var testNotNull = function(values) {
+ return (values[0] !== null);
+ };
+
+ Test.prototype.assertNotNull = function() {
+ assert.apply(this, [arguments, 1, testNotNull, "Expected not to be null but was {0}"]);
+ }
+
+ var testBoolean = function(values) {
+ return (Boolean(values[0]));
+ };
+
+ Test.prototype.assert = function() {
+ assert.apply(this, [arguments, 1, testBoolean, "Expected not to be equivalent to false"]);
+ };
+
+ var testTrue = function(values) {
+ return (values[0] === true);
+ };
+
+ Test.prototype.assertTrue = function() {
+ assert.apply(this, [arguments, 1, testTrue, "Expected to be true but was {0}"]);
+ };
+
+ Test.prototype.assert = function() {
+ assert.apply(this, [arguments, 1, testTrue, "Expected to be true but was {0}"]);
+ };
+
+ var testFalse = function(values) {
+ return (values[0] === false);
+ };
+
+ Test.prototype.assertFalse = function() {
+ assert.apply(this, [arguments, 1, testFalse, "Expected to be false but was {0}"]);
+ }
+
+ var testEquivalent = function(values) {
+ return (values[0] === values[1]);
+ };
+
+ Test.prototype.assertEquivalent = function() {
+ assert.apply(this, [arguments, 2, testEquivalent, "Expected to be equal but values were {0} and {1}"]);
+ }
+
+ var testNotEquivalent = function(values) {
+ return (values[0] !== values[1]);
+ };
+
+ Test.prototype.assertNotEquivalent = function() {
+ assert.apply(this, [arguments, 2, testNotEquivalent, "Expected to be not equal but values were {0} and {1}"]);
+ }
+
+ var testEquals = function(values) {
+ return (values[0] == values[1]);
+ };
+
+ Test.prototype.assertEquals = function() {
+ assert.apply(this, [arguments, 2, testEquals, "Expected to be equal but values were {0} and {1}"]);
+ }
+
+ var testNotEquals = function(values) {
+ return (values[0] != values[1]);
+ };
+
+ Test.prototype.assertNotEquals = function() {
+ assert.apply(this, [arguments, 2, testNotEquals, "Expected to be not equal but values were {0} and {1}"]);
+ }
+
+ var testRegexMatches = function(values) {
+ return (values[0].test(values[1]));
+ };
+
+ Test.prototype.assertRegexMatches = function() {
+ assert.apply(this, [arguments, 2, testRegexMatches, "Expected regex {0} to match value {1} but it didn't"]);
+ }
+
+ Test.prototype.assertError = function(f, errorType) {
+ try {
+ f();
+ this.fail("Expected error to be thrown");
+ } catch (e) {
+ if (errorType && (!(e instanceof errorType))) {
+ this.fail("Expected error of type " + errorType + " to be thrown but error thrown was " + e);
+ }
+ }
+ };
+
+ /**
+ * Execute a synchronous test
+ */
+ xn.test = function(name, callback) {
+ xn.test.suite("Anonymous", function(s) {
+ s.test(name, callback);
+ });
+ }
+
+ /**
+ * Create a test suite with a given name
+ */
+ xn.test.suite = function(name, callback, hideSuccessful) {
+ var s = new Suite(name, callback, hideSuccessful);
+ }
+})();
\ No newline at end of file
diff --git a/planetstack/core/static/main.js b/planetstack/core/static/main.js
new file mode 100644
index 0000000..486d65a
--- /dev/null
+++ b/planetstack/core/static/main.js
@@ -0,0 +1,153 @@
+$(document).ready(function() {
+
+
+ function getServerData(url, label, value) {
+ var jqxhr = $.getJSON( url, function(data) {
+ if (value == 'nodesValue') {
+ var unit = '';
+ window.nodesCnt = data;
+ } else if (value == 'cpuValue'){
+ var unit = '%';
+ window.cpuCnt = data;
+ } else if (value == 'bandwidthValue'){
+ var unit = '';
+ window.bandData = data;
+ }
+ var legend = data.legend;
+ var data = data.data;
+ var dataLength = data.length - 1;
+ $('.'+label).text(legend).show();
+ $('.'+value).text(Math.round(data[dataLength][1])+unit).show();
+ })
+
+ }
+ var selectedNodeTxt = $('.currentOriginalNode').text();
+ selectedNodeTxt = selectedNodeTxt.trim();
+ selectedNodeTxt = selectedNodeTxt.split(' ').join('');//selectedNodeTxt.replace(" ", "")
+ var parentNodeTxt = $('.selectedMainNav').text();
+ parentNodeTxt = parentNodeTxt.replace("/\n","");
+ parentNodeTxt = parentNodeTxt.replace("»","");
+ parentNodeTxt = parentNodeTxt.trim();
+
+ baseNodeQuery = 'SELECT Minute(time) as Minute,COUNT(distinct %hostname) FROM [vicci.demoevents]';
+ baseCpuQuery = 'SELECT Minute(time) as Minute,AVG(i0) as Cpu FROM [vicci.demoevents]';
+ baseBwQuery = 'SELECT Minute(time) as Minute,AVG(i1) as Requests FROM [vicci.demoevents]';
+ groupByClause = ' GROUP BY Minute ORDER BY Minute';
+
+ if (selectedNodeTxt ) {
+ if (parentNodeTxt.length > 0 && parentNodeTxt.charAt(parentNodeTxt.length-1)=='s') {
+ parentNodeTxt = parentNodeTxt.substring(0, parentNodeTxt.length-1);
+ }
+ if (parentNodeTxt=='Slice') {
+ whereClause = " WHERE s3='"+selectedNodeTxt+"'";
+ }
+ else if (parentNodeTxt=='Site') {
+ whereClause = " WHERE s2='"+selectedNodeTxt+"' OR %hostname CONTAINS '"+selectedNodeTxt+"'";
+ }
+ else if (parentNodeTxt=='Node') {
+ whereClause = " WHERE %hostname='"+selectedNodeTxt+"'";
+ alert(whereClause);
+ } else {
+ console.log('Error: Unkown object type:'+parentNodeTxt);
+ }
+ } else {
+ whereClause = '';
+ }
+ finalNodeQuery = encodeURIComponent(baseNodeQuery + whereClause + groupByClause);
+ finalCpuQuery = encodeURIComponent(baseCpuQuery + whereClause + groupByClause);
+ finalBwQuery = encodeURIComponent(baseBwQuery + whereClause + groupByClause);
+ getServerData('http://cloud-scrutiny.appspot.com/command?action=send_query&legend=Node+Count&tqx=saber&q='+finalNodeQuery,'nodesLabel','nodesValue');
+ getServerData('http://cloud-scrutiny.appspot.com/command?action=send_query&legend=Load&tqx=saber&q='+finalCpuQuery,'cpuLabel','cpuValue');
+ getServerData('http://cloud-scrutiny.appspot.com/command?action=send_query&legend=Bandwidth&tqx=saber&q='+finalBwQuery,'bandwidthLabel','bandwidthValue');
+
+ $('.nodesLabel, .nodesValue').click(function() {
+ var jsonData = window.nodesCnt;
+ renderChart(jsonData);
+ });
+ $('.cpuLabel, .cpuValue').click(function() {
+ var jsonData = window.cpuCnt;
+ renderChart(jsonData);
+ });
+ $('.bandwidthLabel, .bandwidthValue').click(function() {
+ var jsonData = window.bandData;
+ renderChart(jsonData);
+ });
+
+ function renderChart(jsonData) {
+ $('#graph').empty();
+ $('#chartsModal').modal('show');
+ $('.modal-body').scrollTop(0)
+ var margin = {top: 0, right: 100, bottom: 100, left: 175},
+ width = 520 - margin.left - margin.right,
+ height = 300 - margin.top - margin.bottom;
+
+ var parseDate = d3.time.format("%Y-%m-%m-%H-%M").parse;
+
+ var x = d3.time.scale()
+ .range([0, width]);
+
+ var y = d3.scale.linear()
+ .range([height, 0]);
+
+ var xAxis = d3.svg.axis()
+ .scale(x)
+ .ticks(d3.time.minutes, 15)
+ .orient("bottom");
+
+ var yAxis = d3.svg.axis()
+ .scale(y)
+ .ticks(4)
+ .orient("left");
+
+ var line = d3.svg.line()
+ .x(function(d) { return x(d.date); })
+ .y(function(d) { return y(d.value); });
+
+ var svg = d3.select("#graph").append("svg")
+ .attr("width", width + margin.left + margin.right)
+ .attr("height", height + margin.top + margin.bottom)
+ .append("g")
+ .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
+
+ /*var data_path = "http://sabertooth.cs.princeton.edu/graphs/UpNodes";
+ d3.json(data_path, function(error, input) {*/
+ //jsonData = JSON.stringify(eval("(" + jsonData + ")"));
+ data = jsonData.data;//input['data'];
+ legend = jsonData.legend;//input['legend']
+ $('#chartHeading').text(legend);
+ data.forEach(function(d) {
+ d.date = new Date(d[0]*1000);
+ d.value = +d[1];
+ });
+ x.domain(d3.extent(data, function(d) { return d.date; }));
+
+ var e = d3.extent(data, function(d) { return d.value;});
+ e = [e[0]-1,e[1]+1];
+
+ y.domain(e);
+
+ svg.append("g")
+ .attr("class", "x axis")
+ .attr("transform", "translate(0," + height + ")")
+ .attr("x", 5)
+ .call(xAxis);
+
+ svg.append("g")
+ .attr("class", "y axis")
+ .call(yAxis)
+ .append("text")
+ .attr("transform", "rotate(-90)")
+ .attr("y", 6)
+ .attr("dy", ".71em")
+ .style("text-anchor", "end")
+ .text(legend)
+ .attr("class", "legend");
+
+ svg.append("path")
+ .datum(data)
+ .attr("class", "line")
+ .attr("d", line);
+ //});
+ }
+
+})
diff --git a/planetstack/core/static/page_analytics.js b/planetstack/core/static/page_analytics.js
new file mode 100644
index 0000000..bf7e37d
--- /dev/null
+++ b/planetstack/core/static/page_analytics.js
@@ -0,0 +1,129 @@
+function getPageKind() {
+ var parentNodeTxt = $('#selectedMainNav').text();
+ parentNodeTxt = parentNodeTxt.replace("/\n","");
+ parentNodeTxt = parentNodeTxt.replace("»","");
+ parentNodeTxt = parentNodeTxt.trim();
+ if (parentNodeTxt.length > 0 && parentNodeTxt.charAt(parentNodeTxt.length-1)=='s') {
+ parentNodeTxt = parentNodeTxt.substring(0, parentNodeTxt.length-1);
+ }
+ return parentNodeTxt;
+}
+
+function getObjectQuery() {
+ var selectedNodeTxt = $('#currentOriginalNode').text();
+ selectedNodeTxt = selectedNodeTxt.trim();
+ selectedNodeTxt = selectedNodeTxt.split(' ').join('');//selectedNodeTxt.replace(" ", "")
+ parentNodeTxt = getPageKind();
+
+ if (parentNodeTxt == "Slice") {
+ return "&slice=" + selectedNodeTxt;
+ } else if (parentNodeTxt == "Site") {
+ return "&site=" + selectedNodeTxt;
+ } else if (parentNodeTxt == "Node") {
+ return "&node=" + selectedNodeTxt;
+ } else {
+ return "";
+ }
+}
+
+
+function setPageStatInt(labelName, valueName, legend, units, value) {
+ $(labelName).text(legend).show();
+ $(valueName).text(Math.round(value)+units).show();
+}
+
+function setPageStatFloat(labelName, valueName, legend, units, value, dp) {
+ $(labelName).text(legend).show();
+ $(valueName).text(Number(value).toFixed(dp)+units).show();
+}
+
+// ----------------------------------------------------------------------------
+// node count and average cpu utilization
+
+function updatePageAnalyticsData(summaryData) {
+ window.pageAnalyticsUrl = summaryData["dataSourceUrl"];
+ lastRow = summaryData.rows.length-1;
+
+ if (summaryData.msg) {
+ $("#minidashStatus").text(summaryData.msg).show();
+ } else {
+ $("#minidashStatus").text("").hide();
+ }
+
+ if (summaryData.rows.length <= 0) {
+ //console.log("no data received from page analytics ajax")
+ return;
+ }
+
+ //Old minidashboard
+ //setPageStatInt(".nodesLabel", ".nodesValue", "Node Count", "", summaryData.rows[lastRow]["count_hostname"]);
+ //setPageStatInt(".cpuLabel", ".cpuValue", "Avg Load", "%", summaryData.rows[lastRow]["avg_cpu"]);
+
+ //New miniDashboard
+ setPageStatInt("#miniDashNodeCountLabel", "#miniDashNodeCount", "Node Count", "", summaryData.rows[lastRow]["count_hostname"]);
+ setPageStatInt("#miniDashAvgLoadLabel", "#miniDashAvgLoad", "Avg Load", "%", summaryData.rows[lastRow]["avg_cpu"]);
+}
+
+function updatePageAnalytics() {
+ var url= '/analytics/bigquery/?avg=%cpu&count=%hostname&cached=default' + getObjectQuery();
+ $.ajax({
+ url: url,
+ dataType : 'json',
+ type : 'GET',
+ success: function(newData) {
+ updatePageAnalyticsData(newData);
+ setTimeout(updatePageAnalytics, 30000);
+ },
+ error: function() {
+ console.log("error retrieving statistics; retry in 5 seconds");
+ setTimeout(updatePageBandwidth, 5000);
+ }
+});
+}
+
+// ----------------------------------------------------------------------------
+// bandwidth
+
+function updatePageBandwidthData(summaryData) {
+ window.pageBandwidthUrl = summaryData["dataSourceUrl"];
+ lastRow = summaryData.rows.length-1;
+
+ if (summaryData.rows.length <= 0) {
+ //console.log("no data received from page bandwidth ajax")
+ return;
+ }
+
+ //Old minidashboard
+ //setPageStatFloat(".bandwidthLabel", ".bandwidthValue", "Bandwidth", " Gbps", summaryData.rows[lastRow]["sum_computed_bytes_sent_div_elapsed"]*8.0/1024/1024/1024,2);
+
+ //New minidashboard
+ setPageStatFloat("#miniDashBandwidthLabel", "#miniDashBandwidth", "Bandwidth", " Gbps", summaryData.rows[lastRow]["sum_computed_bytes_sent_div_elapsed"]*8.0/1024/1024/1024,2);
+}
+
+function updatePageBandwidth() {
+ var url='/analytics/bigquery/?computed=%bytes_sent/%elapsed&cached=default' + getObjectQuery();
+
+ if (getPageKind()!="Slice") {
+ url = url + "&event=node_heartbeat";
+ }
+
+ $.ajax({
+ url : url,
+ dataType : 'json',
+ type : 'GET',
+ success: function(newData) {
+ updatePageBandwidthData(newData);
+ setTimeout(updatePageBandwidth, 30000);
+ },
+ error: function() {
+ console.log("error retrieving statistics; retry in 5 seconds")
+ setTimeout(updatePageBandwidth, 5000);
+ }
+});
+}
+
+$( document ).ready(function() {
+ updatePageAnalytics();
+ updatePageBandwidth();
+});
+
diff --git a/planetstack/core/static/planetstack.css b/planetstack/core/static/planetstack.css
index 873a9d9..44d62b4 100644
--- a/planetstack/core/static/planetstack.css
+++ b/planetstack/core/static/planetstack.css
@@ -1,3 +1,242 @@
+/*************************
+colors:
+ tab - active/focus color
+ background-color: #105E9E !important;
+
+ONLab darker blue select :: background-color: #004775;
+#0170BB
+ left-nav
+ background-color: #448CCA;
+ background-color // normal: #B4CADF
+91BFE4
+
+*************************/
+
+/* CSS for jquery Tabs */
+#hometabs {
+border-bottom: 1px solid #105E9E;
+font-size: 12px;
+border: 0px;
+}
+
+.ui-tabs-active {
+ color: #ffffff;
+ background-color: #105E9E;
+ text-shadow: rgb(46, 43, 43) 0.1em 0.1em 0.2em;
+ font-weight: normal;
+}
+.nav > li > a:active {
+ color: #ffffff;
+ background-color: #105E9E;
+ text-shadow: rgb(46, 43, 43) 0.1em 0.1em 0.2em;
+
+}
+.nav > li > a:focus {
+ color: #ffffff;
+ background-color: #105E9E;
+ text-shadow: rgb(46, 43, 43) 0.1em 0.1em 0.2em;
+
+}
+.ui-state-focus a,
+.ui-state-focus a:link{
+ color: #ffffff;
+ background-color: #105E9E;
+ text-shadow: rgb(46, 43, 43) 0.1em 0.1em 0.2em;
+}
+.ui-state-active a,
+.ui-state-active a:link{
+ color: #ffffff !important;
+ background-color: #105E9E !important;
+ text-shadow: rgb(46, 43, 43) 0.1em 0.1em 0.2em;
+ font-weight: normal;
+}
+/*************************/
+/* Header elements */
+
+.logo {
+}
+.header{
+ background-color: #ffffff !important;
+ /*background-image: url('bg2.jpg');*/
+ background-size: 100% auto;
+ background-image: none !important;
+ text-shadow: none;
+ border-bottom: 3px solid #C5CCD4;
+ margin-bottom: 14px;
+ margin-top: -120px;
+ height: 85px;
+ /*min-width: 1321px;*/
+}
+
+.nav-quick-search{
+margin: 30px -10px 0px 0px !important;
+padding:0 25px 0 0 !important;
+float:right !important;
+}
+
+.nav-quick-search .search-query{
+border-radius:5px;
+border:none;
+box-shadow:0px;
+background-color:lightGrey;
+padding-left: 27px;
+}
+
+
+.header #branding {
+width: 100%;
+height:60px;
+}
+
+.header a {
+color: #08C;
+font-weight: bold;
+/*border-bottom: 1px solid #C5CCD4;*/
+}
+a {
+color: #08C;
+font-weight: bold;
+/*border-bottom: 1px solid #C5CCD4;*/
+}
+
+.header #branding {
+border-right:none;
+}
+
+#branding2{
+height:20px;
+width:100%;
+color: #333;
+/*background-color: #000000;*/
+margin-bottom: 10px;
+}
+
+.header #user-tools {
+ padding: 12px 20px 0px 0px;
+ float: right;
+ margin-top: -5px;
+}
+
+.header .header-content .date{
+padding-left:10px;
+}
+
+.header .header-content .time {
+font-weight: normal;
+}
+.header .header-content.header-content-first{
+height: 15px;
+padding-bottom: 0px;
+}
+
+.header .header-content {
+padding-bottom: 0px;
+padding: 7px 0 0 0px;
+}
+
+/*************************/
+
+.alignCenter {
+ text-align: center !important;
+ align: center !important;
+}
+table.dataTable tr.odd {
+background-color: white !important;
+}
+table.dataTable tr.odd td.sorting_1 {
+background-color: white !important;
+}
+table.dataTable tr.even td.sorting_1 {
+background-color: white !important;
+}
+table.dataTable thead th div.DataTables_sort_wrapper {
+ font-weight: bold;
+}
+.dashboard-hpc-sliver .ui-widget-header, .dashboard-hpc-sliver .ui-dialog-title, .dashboard-hpc-sliver .ui-dialog-titlebar{
+}
+.ui-widget-overlay {
+ background: black !important;
+}
+.ui-corner-all {
+border-bottom-left-radius: 0px !important;
+border-bottom-right-radius: 0px !important;
+}
+
+#suit-center {
+ /* min-width: 977px !important; */
+}
+#openCloudTopPage {
+ margin-top: -25px;
+ margin-right: -90;
+ float: right;
+}
+#minDashboard {
+ /*min-width:625px; */
+ display:inline;
+ float: right;
+ border: 2px darkGrey;
+}
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default{
+background: none !important;
+border-top: 0px !important;
+border-left: 0px !important;
+border-right: 0px !important;
+}
+.ui-widget-header {
+background: none !important;
+border-top: 0px !important;
+border-left: 0px !important;
+border-right: 0px !important;
+}
+#suit_form_tabs {
+/*border-bottom: 1px solid #B5D1EA;*/
+border-bottom: 1px solid #105E9E !important;
+border-bottom-width: 5px !important;
+border-bottom-style: solid;
+/*border-bottom-color: rgb(181, 209, 234);*/
+border-bottom-color: #448CCA;
+color:#105E9E;
+}
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited {
+color: #105E9E ;
+}
+.save-box {
+ background-color: #ffffff;
+ margin: 2px;
+}
+.save-box .btn-info {
+ font-size: 14px;
+ padding: 10px 20px 10px 20px;
+}
+.btn-success {
+ font-size: 12px;
+ font-weight: normal;
+ padding: 5px 10px 5px 10px;
+}
+.btn-success, .save-box .btn-info {
+ background: #27AE5F;
+ background-image: -webkit-linear-gradient(top, #27AE5F, #27ae60);
+ background-image: -moz-linear-gradient(top, #27AE5F, #27ae60);
+ background-image: -ms-linear-gradient(top, #27AE5F, #27ae60);
+ background-image: -o-linear-gradient(top, #27AE5F, #27ae60);
+ background-image: linear-gradient(to bottom, #27AE5F, #27ae60);
+ -webkit-border-radius: 5;
+ -moz-border-radius: 5;
+ border-radius: 5px;
+ text-shadow: 1px 1px 3px #666666;
+ font-family: Arial;
+ color: #ffffff;
+ text-decoration: none;
+ letter-spacing: 1px;
+}
+
+.btn-success:hover, .save-box .btn-info:hover {
+ background: #2ecc71;
+ text-decoration: none;
+}
+
+
+
.required:after {color: red ! important; font-size: 18px }
#.btn-success {color:black}
#suit-center {
@@ -6,9 +245,10 @@
min-width:650px;
}
.inner-two-columns .inner-center-column .tab-content {
-overflow: inherit;
+overflow-x: auto;
margin-bottom: 15px;
-min-width: 650px;
+/*min-width: auto;*/
+width:100%;
}
.inner-two-columns .inner-center-column {
#margin-right: 200px;
@@ -21,20 +261,24 @@
}
-/*Added by Beena*/
-/*For increasing the header height*/
-.header {
-height: 90px;
-}
-
/*For changing the background color of the left side navigation list items*/
/*For changing the color of the left side navigation list items*/
/*For changing the font of the left side navigation list items*/
.left-nav>ul>li>a {
-background-color: #CDE7FF;
-font-weight: bold;
-color: #105E9E;
-font-size: 13px;
+/*background-color: #CDE7FF;*/
+/* Light color nav choices */
+/*background-color: #DFECF8;*/
+/*background-color: #91BFE4;*/
+/*background-color: #DAECFC;*/
+background-color: #448CCA;
+/*ONlab.us reg color blue*/
+/*background-color: #ccffff;*/
+font-weight: normal;
+/*color: #105E9E;*/
+color: #ffffff;
+text-shadow: rgb(46, 43, 43) 0.1em 0.1em 0.2em;
+letter-spacing: 1px;
+font-size: 12px;
border-bottom: none;
}
@@ -47,16 +291,24 @@
.left-nav>ul>li {
padding-top:4px;
line-height: 35px;
-width: 180px;
+width: 200px;
}
-/*For changing background color of suit enter*/
+/*For changing background color of suit center*/
#suit-center {
background-color: #ffffff;
}
.left-nav>ul>li.active>a {
-background-color: #448CCA;
+/*background-color: #448CCA;*/
+/* Last Active
+background-color: #0061B7; */
+background-color: #515151;
+/*background-color: #448CCA;*/
+font-weight:normal;
+color:#ffffff;
+text-shadow: rgb(46, 43, 43) 0.1em 0.1em 0.2em;
+letter-spacing: 1px;
left: 10px;
background-image: url("right_arrow.png");
@@ -65,33 +317,49 @@
.nav-tabs-suit li{
-background-color: #CDE7FF;
-/*background-color: #FFFFFF;*/
+/*background-color: #CDE7FF;*/
+background-color: #FFFFFF;
+border-top-left-radius: 3px;
+border-top-right-radius: 3px;
+border-bottom-left-radius: 0px;
+border-bottom-right-radius: 0px;
}
.nav-tabs-suit li a {
-background-color: #CDE7FF;
-font-weight: bold;
+background-color:
+/*background-color: #CDE7FF;*/
+font-weight: normal;
color: #105E9E;
-border-radius: 0px;
+/*border-radius: 3px;*/
+border-top-left-radius: 3px;
+border-top-right-radius: 3px;
+border-bottom-left-radius: 0px;
+border-bottom-right-radius: 0px;
border: none;
box-shadow: none;
}
+
.nav-tabs-suit li.active{
/*Changed on Dec 11*/
-background-color: #448CCA;
- /*background-position: 50% 100%;
-background-image:url('donw_arrow.png');*/
+/*background-color: #448CCA;*/
+ background-position: 50% 100%;
+background-image:url('down_arrow.png');
}
.nav-tabs-suit li.hover{
/*Changed on Dec 11*/
-background-color: #448CCA;
+/*background-color: #448CCA;*/
+color:#ffffff;
+/*font-size: 1.2em;*/
+font-weight: bold;
}
.nav-tabs-suit li.active a {
-background-color: #448CCA;
+background-color: #ffffff;
+/*background-color: #448CCA;*/
+background-color: #105E9E;
color:#ffffff;
+font-weight:normal;
padding-top:10px;
text-decoration:none;
}
@@ -111,32 +379,49 @@
.left-nav>ul>li.active>a:hover{
-background-color: #448CCA;
-color:#ffffff;
-/*padding-top:10px;*/
-text-decoration:none;
-}
-
-.left-nav>ul>li>a:hover{
-background-color: #448CCA;
-color:#ffffff;
-/*padding-top:10px;*/
-text-decoration:none;
-border-left: 15px solid #105E9E ;
-}
-.nav-tabs-suit li.active a:hover,.nav-tabs-suit li a:hover{
-background-color: #448CCA;
+/*background-color: #448CCA;*/
+/*background-color: #91BFE4;*/
+/*background-color: #D6E7F8;*/
+font-weight:normal;
+font-size: 1.2em;
+font-weight: bold;
color:#ffffff;
padding-top:10px;
text-decoration:none;
}
+/* Adjust font weight to normal on hover, else white blurs */
+.left-nav>ul>li>a:hover{
+/*background-color: #448CCA;*/
+/*background-color: #004775;*/
+background-color: #515151;
+color:#ffffff;
+font-weight:normal;
+font-size: 1.2em;
+/*padding-top:10px;*/
+text-decoration:none;
+/*border-left: 15px solid #105E9E ;*/
+border-left: 10px solid #ffffff;
+text-shadow: rgb(46, 43, 43) 0.1em 0.1em 0.2em;
+letter-spacing: 1px;
+}
+.nav-tabs-suit li.active a:hover,.nav-tabs-suit li a:hover{
+/*background-color: #448CCA;*/
+background-color: #515151;
+font-weight:normal;
+font-size: 1.2em;
+/*color:#ffffff;*/
+padding-top:10px;
+text-decoration:none;
+}
+
.breadcrumb li a {
-font-weight:bold;
+/*font-weight:bold;*/
}
.nav-tabs {
-border-bottom: 1px solid #B5D1EA;
+/*
+border-bottom: 1px solid #B5D1EA;*/
}
.nav-tabs>li {
@@ -163,53 +448,11 @@
*/
-.header #branding{
-height:60px;
-}
-
-#branding2{
-padding-top:60px;
-height:20px;
-width:100%;
-/*background-color: #000000;*/
-/*margin-bottom: 10px;*/
-}
-.header .header-content .date{
-padding-left:10px;
-}
-
-.header .header-content .time {
-font-weight: normal;
-}
-.header .header-content.header-content-first{
-height: 15px;
-padding-bottom: 0px;
-}
-
-.header .header-content {
-padding-bottom: 0px;
-padding: 7px 0 0 0px;
-}
-
-.header #branding {
-border-right:none;
-}
-
.left-nav>ul>li.active>a:after {
content: none;
}
-.nav-quick-search{
-margin: 0px 0 0px 0px;
-padding:0 20px 0 0;
-float:right;
-}
-
-.header #branding {
-width: 100%;
-}
-
/**
* login page
*/
@@ -220,12 +463,16 @@
}*/
.login #content-main {
-width: 280px;
-height: 365px;
-border-radius: 0px;
+width: 280px !important;
+min-width: 180px;
+height: 265px;
+ -webkit-border-radius: 5;
+ -moz-border-radius: 5;
+ border-radius: 5px;
/*background: #EBF0F2;*/
background: rgba(255,255,255,0.85);
/*background: rgba(235,240,242,0.6);*/
+overflow: visible !important;
}
.login #content-main h1 {
@@ -305,10 +552,13 @@
/*Dec 11 2013*/
.nav-tabs-suit li.active a{
-text-shadow: none;
+letter-spacing: 1px;
+text-shadow: rgb(46, 43, 43) 0.1em 0.1em 0.2em;
+/*text-shadow: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
+*/
}
.nav-tabs>.active>a{
@@ -317,6 +567,9 @@
.nav-tabs-suit li a:hover{
border: none;
+color: #ffffff;
+letter-spacing: 1px;
+text-shadow: rgb(46, 43, 43) 0.1em 0.1em 0.2em;
}
.nav-tabs-suit li.active a:hover{
@@ -349,18 +602,30 @@
width: 265px;
}
-
-.header{
-background-color: #000000;
-background-image: url('bg2.jpg');
-background-size: 100% auto;
+/** Leave room for scroll bar now that contents can be appropriately scrolled **/
+.form-horizontal .inline-group .add-row {
+ margin: -1px -1px 15px 0px;
}
+/** Setting overflow and 1kpx to deal with inlines/forms overlapping on
+ browser resizes **/
+#content-main {
+ overflow-x:auto;
+ min-width: 1000px;
+}
+
+.tab-content tab-content-main {
+ overflow-x: auto !important;
+}
#wrap{
background:none;
}
+.noclearfix {
+ display:block; clear:left; width:0px; height:0px;
+}
+
body{
background-color:#ffffff;
}
@@ -368,14 +633,6 @@
.suit-column{
background-color:#ffffff;
}
-.nav-quick-search .search-query{
-border-radius:0px;
-border:none;
-box-shadow:0px;
-background-color:#282828;
-padding-left: 27px;
-}
-
/*Added on 13th*/
/*.input-icon {
@@ -403,9 +660,6 @@
background: none repeat scroll 0 0 rgba(0, 0, 0, 0);
}
#wrap {
- background: url("../img/bg_left_white.gif") repeat-y scroll left top rgba(0, 0, 0, 0);
-}
-#wrap {
height: auto !important;
margin: 0 auto -60px;
min-height: 100%;
@@ -429,7 +683,8 @@
}
.nav-tabs > .active > a, .nav-tabs > .active > a:hover, .nav-tabs > .active > a:focus {
- background-color: #448CCA;
+ /*background-color: #448CCA;*/
+ background-color: #105E9E;
color: #FFF;
border: none;
}
@@ -443,27 +698,31 @@
}
.nodetextbox{
- background-color: #ededed;
+ /*background-color: #ededed;*/
line-height: 25px;
width: 150px;
text-align: center;
font-weight: bold;
- margin-left:5px;
+ margin-left:0px;
display:inline-block;
border:none;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
- font-size: 13px;
+ font-size: 8px;
}
.nodelabel{
-width: 40px;
+width: 20px;
display: inline-block;
border-radius: 0px;
border:1px solid #000;
-line-height: 23px;
+/*line-height: 23px;*/
text-align: center;
+font-weight: normal;
}
+#user-tools {
+ font-weight: bold;
+}
.header-content .header-column {
display: none;
}
@@ -498,22 +757,23 @@
background-image: url("opencloudApp.png");
}
.icon-home {
-background-image: url("Home.png");
+/* Going with darker standard color nav -- so using over png's background-image: url("Home.png"); */
+background-image: url("Home_over.png");
}
.icon-deployment{
-background-image: url("Deployments.png");
+background-image: url("Deployments_over.png");
}
.icon-site{
-background-image: url("Sites.png");
+background-image: url("Sites_over.png");
}
.icon-slice{
-background-image: url("Slices.png");
+background-image: url("Slices_over.png");
}
.icon-user{
-background-image: url("Users.png");
+background-image: url("Users_over.png");
}
.icon-reservation{
-background-image: url("Reservations.png");
+background-image: url("Reservations_over.png");
}
.left-nav>ul>li.active>a>.icon-home , .left-nav>ul>li:hover>a>.icon-home , .left-nav>ul>li.focus>a>.icon-home{
@@ -535,3 +795,355 @@
.left-nav>ul>li.active>a>.icon-reservation , .left-nav>ul>li:hover>a>.icon-reservation , .left-nav>ul>li.focus>a>.icon-reservation{
background-image: url("Reservations_over.png");
}
+
+#dashboardHPC {
+ padding-bottom: 10px;
+}
+.summary-attr {
+ padding-right: 20px;
+}
+.summary-attr-util {
+ padding-right: 20px;
+ color: green;
+}
+.SiteDetail {
+color: darkBlue;
+ font-size: 1.5em;
+}
+#addSlivers {
+ color: green;
+text-decoration: underline;
+ padding-right: 20px;
+}
+#remSlivers {
+ color: red;
+ text-decoration: underline;
+}
+#map-us {
+ padding-top: 10px;
+ width: 700px;
+ height: 400px;
+}
+
+.minidashbutton {
+ -moz-box-shadow:inset 0px 1px 0px 0px #ffffff;
+ -webkit-box-shadow:inset 0px 1px 0px 0px #ffffff;
+ box-shadow:inset 0px 1px 0px 0px #ffffff;
+ background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #ffffff), color-stop(1, #f6f6f6));
+ background:-moz-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
+ background:-webkit-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
+ background:-o-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
+ background:-ms-linear-gradient(top, #ffffff 5%, #f6f6f6 100%);
+ background:linear-gradient(to bottom, #ffffff 5%, #f6f6f6 100%);
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f6f6f6',GradientType=0);
+ background-color:#ffffff;
+ -moz-border-radius:6px;
+ -webkit-border-radius:6px;
+ border-radius:6px;
+ border:1px solid #dcdcdc;
+ display:inline-block;
+ cursor:pointer;
+ color:#666666;
+ font-family:arial;
+ font-size:15px;
+ font-weight:bold;
+ padding:6px 24px;
+ text-decoration:none;
+ text-shadow:0px 1px 0px #ffffff;
+}
+.minidashbutton:hover {
+ background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #f6f6f6), color-stop(1, #ffffff));
+ background:-moz-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
+ background:-webkit-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
+ background:-o-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
+ background:-ms-linear-gradient(top, #f6f6f6 5%, #ffffff 100%);
+ background:linear-gradient(to bottom, #f6f6f6 5%, #ffffff 100%);
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6f6f6', endColorstr='#ffffff',GradientType=0);
+ background-color:#f6f6f6;
+}
+
+.newMiniDashboard {
+ border: 1px solid green;
+ width: auto;
+}
+
+.endDashPair {
+ clear: left;
+}
+.miniDashPair {
+ float: left;
+ width: auto;
+ margin-left: 20px;
+}
+
+.miniDashPair label {
+ text-align: center;
+}
+/* Charts CSS */
+p.numeral
+{
+ font-size:32pt;
+ color:#ffffff;
+ opacity: 0.7;
+ font-family:Helvetica Neue;
+ font-weight:100;
+ text-align:center;
+ line-height:75%;
+}
+
+.helper-text
+{
+ border: 1px solid #fff;
+ padding: 7px;
+ border-radius: 18px;
+ font-size:13pt;
+ color:#ffffff;
+ opacity: 0.7;
+ font-family:Helvetica Neue;
+ font-weight:200;
+ text-align:center;
+ line-height:100%;
+}
+p.osobject
+{
+ font-size:12pt;
+ color:#ffffff;
+ opacity: 0.7;
+ font-family:Helvetica Neue;
+ font-weight:200;
+ text-align:center;
+ line-height:100%;
+}
+
+p.heading
+{
+ font-size:20px;
+ letter-spacing: 1px;
+ color: black;
+ font-family:Arial;
+ font-weight:bold;
+ text-align:center;
+}
+
+/*p.heading
+{
+ font-size:32pt;
+ color:#ffffff;
+ opacity: 0.7;
+ font-family:Helvetica Neue;
+ font-weight:200;
+ text-align:center;
+}*/
+
+div.graph
+{
+ height:340px;
+}
+
+div.numeral
+{
+ height:120px;
+}
+
+div.heading
+{
+ height:10px;
+}
+
+div.padding
+{
+ height:20px;
+}
+
+div.chartContainer
+{
+ /*background-image:url('chartsBg.jpg');*/
+ width:527px;
+ height:400px;
+ border:1px;
+}
+
+/* D3 */
+
+.axis path,
+.axis line {
+ fill: none;
+ stroke: #ffffff;
+ opacity: 0.7;
+ shape-rendering: crispEdges;
+}
+
+
+.x.axis path {
+ display: none;
+}
+
+.x.axis text {
+ fill: white;
+ opacity: 0.5;
+}
+
+.y.axis text {
+ opacity: 0.5;
+ fill: white;
+}
+
+.y.axis text.legend {
+ opacity: 1.0;
+ fill: white;
+ font-size:8pt;
+}
+
+.line {
+ fill: none;
+ stroke: white;
+ stroke-width: 3px;
+ opacity: 0.6;
+}
+
+
+/****** Added in so that we can have a loader show as charts get ready to render ***/
+.loading {
+ //background-color: orange;
+ background-image: url(spinner.gif) no-repeat center middle;
+ text-align: center;
+ font-size: 20px;
+ height: 100%
+/* width: auto;*/
+ float: left;
+ padding: 10px;
+}
+/* Charts CSS */
+
+#tabs-4 {
+ margin: 40px;
+ font-size: 24px;
+ font-weight: bold;
+}
+
+.tenant-row{
+ padding-bottom: 0.7%;
+}
+
+/***********TENANT VIEW*************/
+
+#image-dropdown,#slice-image-value,#adv-slice-image-value{
+ margin-left: 5%;
+}
+
+#network-dropdown,#adv-network-dropdown,#adv-network-value{
+ margin-left: 3.7%;
+}
+
+#service-level-dropdown,#service-level-value,#adv-service-level-dropdown,#adv-service-level-value{
+ margin-left: 0.2% !important;
+}
+
+#slice-name-value,#adv-slice-name-value{
+ margin-left: 2%;
+}
+#adv-dataset-dropdown{
+margin-left: 3%;
+}
+#advanced-tenant,#basic-tenant,#sliver-btn,#save-btn{
+ float:right;
+}
+ #delete-slice-btn,#download-details{
+ margin-left:1%;
+}
+
+#sliver-btn,#save-btn,#create-slice-btn,#delete-slice-btn,#download-details{
+ margin-top:1%;
+}
+
+.tenantDialog.ui-widget input{
+ border-radius: 0px !important;
+ height: 12px !important;
+ width: 180px !important;
+ margin-right: 10% !important;
+ float: right;
+}
+
+.tenantDialog .ui-dialog-buttonset .ui-button{
+border-radius: 0 !important;
+background-color: grey !important;
+font-weight: bold !important;
+font-size: 0.9em; !important
+}
+
+.tenantDialog .ui-dialog-titlebar{
+border-radius: 0 !important;
+background-color: grey !important;
+}
+
+.create-slice-row{
+ margin-bottom: 4%;
+ clear: both;
+ height: 25px;
+}
+
+.create-slice-row label, .tenantDialog label{
+ margin-right:1%;
+ float:left;
+}
+
+.create-slice-row select{
+ height:24px;
+ width: 196px;
+ font-size: 0.9em !important;
+}
+
+.tenant-create-slice{
+ float:right;
+ margin-right: 10% !important;
+}
+
+#delete-slice{
+float: right;
+}
+
+#tooltip,#adv-tooltip,#basic-tooltip{
+font-size:0.7em;
+color:red;
+display:none;
+}
+
+#tenantSliceDataWrapper {
+ padding: 1% 0;
+}
+
+#advancedTenantSliceDataWrapper .help-inline{
+ font-size: 11px;
+ color: #999;
+ padding-bottom: 1%;
+}
+
+.create-slice-row label{
+ clear:both;
+ margin-right: 1%;
+}
+
+#advNumOfSlivers{
+ margin-right: 1% !important;
+}
+
+#private-vol-checkbox{
+margin: 0 0 1% 1%;
+}
+
+.public-key-warning{
+text-align: center;
+display:none;
+}
+
+#private-vol{
+margin-right: 15% !important;
+}
+
+.customize_row {
+ display: table;
+}
+.customize_column {
+ display: table-cell;
+ padding: 10px;
+}
diff --git a/planetstack/core/static/planetstack_graphs.js b/planetstack/core/static/planetstack_graphs.js
new file mode 100644
index 0000000..d8690ed
--- /dev/null
+++ b/planetstack/core/static/planetstack_graphs.js
@@ -0,0 +1,120 @@
+google.load('visualization', '1', {'packages' : ['controls','table','corechart','geochart']});
+
+function renderChart(newStyle, dialog, container, dataSourceUrl, yColumn, xColumn, aggFunc, options) {
+ if ( newStyle ) {
+ $(dialog).dialog("open");
+ }
+ else {
+ $(container).empty();
+ $(dialog).modal('show');
+ $('.modal-body').scrollTop(0);
+ }
+
+ startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options)
+}
+
+function startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options) {
+ var query = new google.visualization.Query(dataSourceUrl);
+ query && query.abort();
+ query.send(function(response) {handleResponse_psg(container, dataSourceUrl, response, yColumn, xColumn, aggFunc, options);});
+}
+
+// NOTE: appended _psg to showLine() and handleResponse() to prevent conflict
+// with Sapan's analytics page.
+
+function agg_bandwidth(arr) {
+ var ret = 0;
+ for (var i = 0; i < arr.length; i++) {
+ ret+=arr[i]*8.0/1024.0/1024.0/1024.0;
+ }
+ return ret;
+}
+
+function showLine_psg(container, dt, options) {
+ var base_options = {
+ 'width': 520,
+ 'height': 300,
+ 'pages': true,
+ 'numRows': 9,
+ 'backgroundColor': 'transparent',
+ 'titleTextStyle': {"color": "black"},
+ 'legend': 'none',
+ 'hAxis': {"baselineColor": "darkBlue",
+ "textStyle": {"color": "black"}},
+ 'vAxis': {"baselineColor": "darkBlue",
+ "textStyle": {"color": "black"}},
+ }
+
+ options = $.extend(true, {}, base_options, options);
+
+ var lineChart = new google.visualization.ChartWrapper({
+ 'chartType': 'LineChart',
+ 'containerId': container.substring(1),
+ 'view': {'columns': [0, 1]},
+ 'options': options
+ });
+ lineChart.setDataTable(dt);
+ lineChart.draw();
+
+}
+
+function fixDate(unixDate) {
+ return new Date(unixDate*1000);
+}
+
+function fixDate2(unixDate) {
+ return new Date(unixDate);
+}
+
+function handleResponse_psg(container, dataSourceUrl, response, yColumn, xColumn, aggFunc, options) {
+ var supportedClasses = {
+ 'Table':google.visualization.Table,
+ 'LineChart':google.visualization.LineChart,
+ 'ScatterChart':google.visualization.ScatterChart,
+ 'ColumnChart':google.visualization.ColumnChart,
+ 'GeoChart':google.visualization.GeoChart,
+ 'PieChart':google.visualization.PieChart,
+ 'Histogram':google.visualization.Histogram};
+
+ if (response.isError()) {
+ //console.log("retry chart");
+ setTimeout(function () { startQuery(container, dataSourceUrl, yColumn, xColumn, aggFunc, options) }, 5000);
+ return
+ }
+
+ var proxy = new google.visualization.ChartWrapper({
+ 'chartType': 'Table',
+ 'containerId': 'graph_work',
+ 'options': {
+ 'width': 800,
+ 'height': 300,
+ pageSize:5,
+ page:'enable',
+ 'legend': 'none',
+ 'title': 'Nodes'
+ },
+ 'view': {'columns': [0,1]}
+ });
+
+ google.visualization.events.addListener(proxy, 'ready', function () {
+ var dt = proxy.getDataTable();
+ var groupedData1 = google.visualization.data.group(dt, [{
+ column: yColumn,
+ type: 'datetime',
+ modifier: fixDate2,
+ }],
+ [{
+ column: xColumn,
+ type: 'number',
+ label: dt.getColumnLabel(xColumn),
+ aggregation: aggFunc}]);
+
+ showLine_psg(container, groupedData1, options);
+ });
+
+ proxy.setDataTable(response.getDataTable());
+
+ proxy.draw();
+}
+
+
diff --git a/planetstack/core/static/planetstack_graphs_old.js b/planetstack/core/static/planetstack_graphs_old.js
new file mode 100644
index 0000000..806afe6
--- /dev/null
+++ b/planetstack/core/static/planetstack_graphs_old.js
@@ -0,0 +1,89 @@
+$(document).ready(function() {
+
+function renderChart(jsonData, yField, xField, legend) {
+ $('#graph').empty();
+ $('#chartsModal').modal('show');
+ $('.modal-body').scrollTop(0)
+ var margin = {top: 0, right: 100, bottom: 100, left: 175},
+ width = 520 - margin.left - margin.right,
+ height = 300 - margin.top - margin.bottom;
+
+ var parseDate = d3.time.format("%Y-%m-%m-%H-%M").parse;
+
+ var x = d3.time.scale()
+ .range([0, width]);
+
+ var y = d3.scale.linear()
+ .range([height, 0]);
+
+ var xAxis = d3.svg.axis()
+ .scale(x)
+ .ticks(d3.time.minutes, 15)
+ .orient("bottom");
+
+ var yAxis = d3.svg.axis()
+ .scale(y)
+ .ticks(4)
+ .orient("left");
+
+ var line = d3.svg.line()
+ .x(function(d) { return x(d.date); })
+ .y(function(d) { return y(d.value); });
+
+ var svg = d3.select("#graph").append("svg")
+ .attr("width", width + margin.left + margin.right)
+ .attr("height", height + margin.top + margin.bottom)
+ .append("g")
+ .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
+
+ data = jsonData.rows;
+ $('#chartHeading').text(legend);
+ data.forEach(function(d) {
+ d.date = new Date(d[yField]*1000);
+ d.value = +d[xField];
+ });
+
+ x.domain(d3.extent(data, function(d) { return d.date; }));
+
+ var e = d3.extent(data, function(d) { return d.value;});
+ e = [e[0]-1,e[1]+1];
+
+ y.domain(e);
+
+ svg.append("g")
+ .attr("class", "x axis")
+ .attr("transform", "translate(0," + height + ")")
+ .attr("x", 5)
+ .call(xAxis);
+
+ svg.append("g")
+ .attr("class", "y axis")
+ .call(yAxis)
+ .append("text")
+ .attr("transform", "rotate(-90)")
+ .attr("y", 6)
+ .attr("dy", ".71em")
+ .style("text-anchor", "end")
+ .text(legend)
+ .attr("class", "legend");
+
+ svg.append("path")
+ .datum(data)
+ .attr("class", "line")
+ .attr("d", line);
+}
+
+$('.nodesLabel, .nodesValue').click(function() {
+ var jsonData = window.pageAnalyticsData;
+ renderChart(jsonData, "MinuteTime", "count_hostname", "Node Count");
+});
+$('.cpuLabel, .cpuValue').click(function() {
+ var jsonData = window.pageAnalyticsData;
+ renderChart(jsonData, "MinuteTime", "avg_cpu", "Average Cpu");
+});
+$('.bandwidthLabel, .bandwidthValue').click(function() {
+ var jsonData = window.pageBandData;
+ renderChart(jsonData, "MinuteTime", "sum_computed_bytes_sent_div_elapsed", "Bandwidth");
+});
+
+})
diff --git a/planetstack/deployment_auth.py b/planetstack/deployment_auth.py
new file mode 100644
index 0000000..f7383ea
--- /dev/null
+++ b/planetstack/deployment_auth.py
@@ -0,0 +1,25 @@
+##
+# This file contains the auth credentials used to access openstack deployments
+# we wish to manage. The 'default' credentials will be used for any deployments
+# not specifed here.
+#
+
+deployment_auth = {
+# Example
+# 'deployment_name': {
+# 'user': 'email@domain.com',
+# 'pasword': 'password',
+# 'tenant': 'tenant',
+# 'url': 'http://localhost:5000/v2.0/',
+# 'token': 'ADMIN',
+# 'endpoint': 'http://localhost:35357/v2.0/'
+# },
+
+ 'default': {
+ 'user': 'admin@domain.com',
+ 'password': 'admin',
+ 'tenant': 'admin',
+ 'url': 'http://localhost:5000/v2.0/'
+ },
+
+}
diff --git a/planetstack/dmdot b/planetstack/dmdot
old mode 100755
new mode 100644
index 0075f59..f38650d
--- a/planetstack/dmdot
+++ b/planetstack/dmdot
@@ -10,39 +10,63 @@
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
from django.db.models.fields.related import ForeignKey
-from core.models import *
-try:
- output = sys.args[1]
-except:
- output = '-json'
+# defaults
+app = "core"
+output = "-json"
-g = globals()
+# syntax: dmdot [-json | -dot] [app_name]
+
+# poor man's argument parser
+for arg in sys.argv[1:]:
+ if arg.startswith("-"):
+ output = arg
+ else:
+ app = arg
+
+app = app + ".models"
+#models_module = imp.load_source(app, ".")
+models_module = __import__(app)
+for part in app.split(".")[1:]:
+ if hasattr(models_module, "PlCoreBase"):
+ break
+ models_module = getattr(models_module,part)
+
+PlCoreBase = getattr(models_module,"PlCoreBase")
+
model_classes = []
class_names = []
-
-for c in g.values():
+lower_class_names = {}
+for classname in dir(models_module):
+ c = getattr(models_module, classname, None)
if type(c)==type(PlCoreBase):
model_classes.append(c)
class_names.append(c.__name__)
+ lower_class_names[c.__name__.lower()] = c
+# django doesn't use the correct case in field.name.title() for objects that
+# have CamelCased class names. So, compare everything in lower case.
if (output=='-dot'):
print "digraph plstack {";
for c in model_classes:
fields = c._meta.fields
for f in fields:
- if type(f)==ForeignKey and f.name.title() in class_names:
- print '\t"%s"->"%s";'%(c.__name__,f.name.title())
+ if type(f)==ForeignKey and f.name.lower() in lower_class_names:
+ linked_class = lower_class_names[f.name.lower()]
+ print '\t"%s"->"%s";'%(c.__name__,linked_class.__name__)
print "}\n";
elif (output=='-json'):
d = {}
for c in model_classes:
fields = c._meta.fields
for f in fields:
- if type(f)==ForeignKey and f.name.title() in class_names:
+ if type(f)==ForeignKey and f.name.lower() in lower_class_names:
+ linked_class = lower_class_names[f.name.lower()]
try:
- d[c.__name__].append(f.name.title())
+ d[c.__name__].append(linked_class.__name__)
except KeyError:
- d[c.__name__]=[f.name.title()]
+ d[c.__name__]=[linked_class.__name__]
print json.dumps(d,indent=4)
+
+
diff --git a/planetstack/hpc/admin.py b/planetstack/hpc/admin.py
index efd9eb3..2a6d518 100644
--- a/planetstack/hpc/admin.py
+++ b/planetstack/hpc/admin.py
@@ -10,43 +10,83 @@
from django.utils import timezone
from django.contrib.contenttypes import generic
from suit.widgets import LinkedSelect
+from core.admin import SingletonAdmin,SliceInline,ServiceAttrAsTabInline, SliceROInline,ServiceAttrAsTabROInline, ReadOnlyAwareAdmin, PlStackTabularInline, ReadOnlyTabularInline
-#class HPCRRBaseAdmin(admin.ModelAdmin):
- #exclude = ['enacted']
+class HpcServiceAdmin(SingletonAdmin):
+ model = HpcService
+ verbose_name = "HPC Service"
+ verbose_name_plural = "HPC Service"
+ list_display = ("name","enabled")
+ fieldsets = [(None, {'fields': ['name','enabled','versionNumber', 'description'], 'classes':['suit-tab suit-tab-general']})]
+ inlines = [SliceInline,ServiceAttrAsTabInline]
-class CDNPrefixInline(admin.TabularInline):
+ user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
+ user_readonly_inlines = [SliceROInline, ServiceAttrAsTabROInline]
+
+ suit_form_tabs =(('general', 'HPC Service Details'),
+ ('slices','Slices'),
+ ('serviceattrs','Additional Attributes'),
+ )
+
+class CDNPrefixInline(PlStackTabularInline):
model = CDNPrefix
extra = 0
suit_classes = 'suit-tab suit-tab-prefixes'
+ fields = ('cdn_prefix_id', 'prefix', 'defaultOriginServer', 'enabled')
+ readonly_fields = ('cdn_prefix_id',)
-class ContentProviderInline(admin.TabularInline):
+class CDNPrefixROInline(ReadOnlyTabularInline):
+ model = CDNPrefix
+ extra = 0
+ suit_classes = 'suit-tab suit-tab-prefixes'
+ fields = ('cdn_prefix_id', 'prefix', 'defaultOriginServer', 'enabled')
+ readonly_fields = ('cdn_prefix_id',)
+
+class ContentProviderInline(PlStackTabularInline):
+ model = ContentProvider
+ extra = 0
+ suit_classes = 'suit-tab suit-tab-cps'
+ fields = ('content_provider_id', 'name', 'enabled')
+ readonly_fields = ('content_provider_id',)
+
+class ContentProviderROInline(ReadOnlyTabularInline):
model = ContentProvider
extra = 0
suit_classes = 'suit-tab suit-tab-cps'
-class OriginServerAdmin(admin.ModelAdmin):
+class OriginServerAdmin(ReadOnlyAwareAdmin):
list_display = ('url','protocol','redirects','contentProvider','authenticated','enabled' )
+ fields = ('url','protocol','redirects','contentProvider','authenticated','enabled','origin_server_id','description' )
+ readonly_fields = ('origin_server_id',)
+ user_readonly_fields = ('url','protocol','redirects','contentProvider','authenticated','enabled','origin_server_id','description')
+
class ContentProviderForm(forms.ModelForm):
class Meta:
widgets = {
'serviceProvider' : LinkedSelect
}
-class ContentProviderAdmin(admin.ModelAdmin):
+class ContentProviderAdmin(ReadOnlyAwareAdmin):
form = ContentProviderForm
list_display = ('name','description','enabled' )
fieldsets = [ (None, {'fields': ['name','enabled','description','serviceProvider','users'], 'classes':['suit-tab suit-tab-general']})]
inlines = [CDNPrefixInline]
+ user_readonly_fields = ('name','description','enabled','serviceProvider','users')
+ user_readonly_inlines = [CDNPrefixROInline]
+
suit_form_tabs = (('general','Details'),('prefixes','CDN Prefixes'))
-class ServiceProviderAdmin(admin.ModelAdmin):
+class ServiceProviderAdmin(ReadOnlyAwareAdmin):
list_display = ('name', 'description', 'enabled')
fieldsets = [
(None, {'fields': ['name','description','enabled'], 'classes':['suit-tab suit-tab-general']})]
-#, ('Content Providers', {'fields':['contentProviders'],'classes':['suit-tab suit-tab-cps']})]
+#, ('Content Providers', {'fields':['contentProviders'],'classes':['suit-tab suit-tab-cps']})]
+
+ user_readonly_fields = ('name', 'description', 'enabled')
+ user_readonly_inlines = [ContentProviderROInline]
suit_form_tabs = (('general','Details'),('cps','Content Providers'))
inlines = [ContentProviderInline]
@@ -57,13 +97,31 @@
'contentProvider' : LinkedSelect
}
-class CDNPrefixAdmin(admin.ModelAdmin):
+class CDNPrefixAdmin(ReadOnlyAwareAdmin):
form = CDNPrefixForm
list_display = ['prefix','contentProvider']
+ fields = ['prefix', 'contentProvider', 'cdn_prefix_id', 'description', 'defaultOriginServer', 'enabled']
+ user_readonly_fields = ['prefix','contentProvider', "cdn_prefix_id", "description", "defaultOriginServer", "enabled"]
+
+class SiteMapAdmin(ReadOnlyAwareAdmin):
+ model = SiteMap
+ verbose_name = "Site Map"
+ verbose_name_plural = "Site Map"
+ list_display = ("name", "contentProvider", "serviceProvider")
+ user_readonly_fields = ("name", "contentProvider", "serviceProvider", "description", "map")
+
+class AccessMapAdmin(ReadOnlyAwareAdmin):
+ model = AccessMap
+ verbose_name = "Access Map"
+ verbose_name_plural = "Access Map"
+ list_display = ("name", "contentProvider")
+ user_readonly_fields = ("name", "contentProvider", "description", "map")
admin.site.register(ServiceProvider, ServiceProviderAdmin)
admin.site.register(ContentProvider, ContentProviderAdmin)
admin.site.register(CDNPrefix, CDNPrefixAdmin)
admin.site.register(OriginServer,OriginServerAdmin)
-admin.site.register(HpcService)
+admin.site.register(HpcService, HpcServiceAdmin)
+admin.site.register(SiteMap, SiteMapAdmin)
+admin.site.register(AccessMap, AccessMapAdmin)
diff --git a/planetstack/hpc/models.py b/planetstack/hpc/models.py
index 9f5f165..2980ce7 100644
--- a/planetstack/hpc/models.py
+++ b/planetstack/hpc/models.py
@@ -28,6 +28,10 @@
class Meta:
app_label = "hpc"
+ # legacy vicci content providers already have names.
+ CP_TO_ACCOUNT = {"ON.LAB": "onlabcp",
+ "Syndicate": "syndicatecp"}
+
content_provider_id = models.IntegerField(null=True, blank=True)
name = models.CharField(max_length=254)
enabled = models.BooleanField(default=True)
@@ -39,6 +43,10 @@
def __unicode__(self): return u'%s' % (self.name)
+ @property
+ def account(self):
+ return self.CP_TO_ACCOUNT.get(self.name, self.name)
+
class OriginServer(PlCoreBase):
class Meta:
app_label = "hpc"
@@ -70,3 +78,20 @@
def __unicode__(self): return u'%s' % (self.prefix)
+class AccessMap(models.Model):
+ contentProvider = models.ForeignKey(ContentProvider)
+ name = models.CharField(max_length=64, help_text="Name of the Access Map")
+ description = models.TextField(null=True, blank=True,max_length=130)
+ map = models.FileField(upload_to="maps/", help_text="specifies which client requests are allowed")
+
+ def __unicode__(self): return self.name
+
+class SiteMap(models.Model):
+ """ can be bound to a ContentProvider, ServiceProvider, or neither """
+ contentProvider = models.ForeignKey(ContentProvider, blank=True, null=True)
+ serviceProvider = models.ForeignKey(ServiceProvider, blank=True, null=True)
+ name = models.CharField(max_length=64, help_text="Name of the Site Map")
+ description = models.TextField(null=True, blank=True,max_length=130)
+ map = models.FileField(upload_to="maps/", help_text="specifies how to map requests to hpc instances")
+
+ def __unicode__(self): return self.name
diff --git a/planetstack/hpc_wizard/README b/planetstack/hpc_wizard/README
new file mode 100644
index 0000000..06b12b5
--- /dev/null
+++ b/planetstack/hpc_wizard/README
@@ -0,0 +1,10 @@
+Two files are purposely not included in the git repository:
+ bigquery_credentials.dat
+ client_secrets.json
+
+These files must be manually installed.
+
+Additionally, the following packages must be installed:
+ yum -y install python-httplib2
+ easy_install python_gflags
+ easy_install google_api_python_client
diff --git a/planetstack/hpc_wizard/bigquery_analytics.py b/planetstack/hpc_wizard/bigquery_analytics.py
new file mode 100644
index 0000000..4a90c2b
--- /dev/null
+++ b/planetstack/hpc_wizard/bigquery_analytics.py
@@ -0,0 +1,288 @@
+import re
+import base64
+import requests
+import urllib
+import json
+import httplib2
+import threading
+import os
+import sys
+import time
+import traceback
+
+from apiclient.discovery import build
+from apiclient.errors import HttpError
+from oauth2client.client import AccessTokenRefreshError
+from oauth2client.client import OAuth2WebServerFlow
+from oauth2client.client import flow_from_clientsecrets
+from oauth2client.file import Storage
+from oauth2client.tools import run_flow,run
+
+"""
+yum -y install python-httplib2
+easy_install python_gflags
+easy_install google_api_python_client
+"""
+
+PROJECT_NUMBER = '549187599759'
+
+try:
+ FLOW = flow_from_clientsecrets('/opt/planetstack/hpc_wizard/client_secrets.json',
+ scope='https://www.googleapis.com/auth/bigquery')
+ BIGQUERY_AVAILABLE = True
+except:
+ print >> sys.stderr, "exception while initializing bigquery flow"
+ traceback.print_exc()
+ FLOW = None
+ BIGQUERY_AVAILABLE = False
+
+MINUTE_MS = 60*1000
+HOUR_MS = 60*60*1000
+
+# global to hold cached mappings
+mappings = {}
+reverse_mappings = {}
+
+def to_number(s):
+ try:
+ if "." in str(s):
+ return float(s)
+ else:
+ return int(s)
+ except:
+ return 0
+
+class MappingException(Exception):
+ pass
+
+class BigQueryAnalytics:
+ def __init__(self, table = "demoevents"):
+ self.projectName = "vicci"
+ self.tableName = table
+
+ def reload_mapping(self):
+ global mappings, reverse_mappings
+ mappings[self.tableName] = json.loads(self.fetch_mapping(table=self.tableName))
+ reverse_mappings[self.tableName] = {v:k for k, v in mappings[self.tableName].items()}
+
+ def fetch_mapping(self, m=0, table="events"):
+ req = 'http://cloud-scrutiny.appspot.com/command?action=get_allocations&multiplexer=%d&table=%s'% (m,table)
+ resp = requests.get(req)
+ if (resp.status_code==200):
+ return resp.text
+ else:
+ raise Exception('Error accessing register allocations: %d'%resp.status_code)
+
+ def run_query_raw(self, query):
+ try:
+ file("/tmp/query_log","a").write("query %s\n" % query)
+ except:
+ pass
+
+ p = re.compile('%[a-zA-z_]*')
+
+ try:
+ query = p.sub(self.remap, query)
+ except MappingException:
+ self.reload_mapping()
+ query = p.sub(self.remap, query)
+
+ try:
+ file("/tmp/query_log","a").write("remapped query %s\n" % query)
+ except:
+ pass
+
+ storage = Storage('/opt/planetstack/hpc_wizard/bigquery_credentials.dat')
+ credentials = storage.get()
+
+ if credentials is None or credentials.invalid:
+ credentials = run(FLOW, storage)
+
+ http = httplib2.Http()
+ http = credentials.authorize(http)
+
+ service = build('bigquery', 'v2', http=http)
+
+ body = {"query": query,
+ "timeoutMs": 60000}
+ response = service.jobs().query(projectId=PROJECT_NUMBER, body=body).execute()
+
+ return response
+
+ def translate_schema(self, response):
+ for field in response["schema"]["fields"]:
+ field["name"] = reverse_mappings[self.tableName].get(field["name"], field["name"])
+
+ def run_query(self, query):
+ if not BIGQUERY_AVAILABLE:
+ print >> sys.stderr, "bigquery_analytics: bigquery flow is not available. returning empty result."
+ return []
+
+ response = self.run_query_raw(query)
+
+ fieldNames = []
+ for field in response["schema"]["fields"]:
+ fieldNames.append(field["name"])
+
+ result = []
+ if "rows" in response:
+ for row in response["rows"]:
+ this_result = {}
+ for (i,column) in enumerate(row["f"]):
+ this_result[reverse_mappings[self.tableName].get(fieldNames[i],fieldNames[i])] = column["v"]
+ result.append(this_result)
+
+ return result
+
+ """ Filter_results, groupby_results, do_computed_fields, and postprocess_results
+ are all used for postprocessing queries. The idea is to do one query that
+ includes the ungrouped and unfiltered data, and cache it for multiple
+ consumers who will filter and group it as necessary.
+
+ TODO: Find a more generalized source for these sorts operations. Perhaps
+ put the results in SQLite and then run SQL queries against it.
+ """
+
+ def filter_results(self, rows, name, value):
+ result = [row for row in rows if row.get(name)==value]
+ return result
+
+ def groupby_results(self, rows, groupBy=[], sum=[], count=[], avg=[], maxi=[]):
+ new_rows = {}
+ for row in rows:
+ groupby_key = [row.get(k, None) for k in groupBy]
+
+ if str(groupby_key) not in new_rows:
+ new_row = {}
+ for k in groupBy:
+ new_row[k] = row.get(k, None)
+
+ new_rows[str(groupby_key)] = new_row
+ else:
+ new_row = new_rows[str(groupby_key)]
+
+ for k in sum:
+ new_row["sum_" + k] = new_row.get("sum_" + k, 0) + to_number(row.get(k,0))
+
+ for k in avg:
+ new_row["avg_" + k] = new_row.get("avg_" + k, 0) + to_number(row.get(k,0))
+ new_row["avg_base_" + k] = new_row.get("avg_base_"+k,0) + 1
+
+ for k in maxi:
+ new_row["max_" + k] = max(new_row.get("max_" + k, 0), to_number(row.get(k,0)))
+
+ for k in count:
+ v = row.get(k,None)
+ dl = new_row["distinct_" + k] = new_row.get("distinct_" + k, [])
+ if (v not in dl):
+ dl.append(v)
+
+ #new_row["count_" + k] = new_row.get("count_" + k, 0) + 1
+
+ for row in new_rows.values():
+ for k in avg:
+ row["avg_" + k] = float(row["avg_" + k]) / row["avg_base_" + k]
+ del row["avg_base_" + k]
+
+ for k in count:
+ new_row["count_" + k] = len(new_row.get("distinct_" + k, []))
+
+ return new_rows.values()
+
+ def do_computed_fields(self, rows, computed=[]):
+ computedFieldNames=[]
+ for row in rows:
+ for k in computed:
+ if "/" in k:
+ parts = k.split("/")
+ computedFieldName = "computed_" + parts[0].replace("%","")+"_div_"+parts[1].replace("%","")
+ try:
+ row[computedFieldName] = to_number(row[parts[0]]) / to_number(row[parts[1]])
+ except:
+ pass
+
+ if computedFieldName not in computedFieldNames:
+ computedFieldNames.append(computedFieldName)
+ return (computedFieldNames, rows)
+
+ def postprocess_results(self, rows, filter={}, groupBy=[], sum=[], count=[], avg=[], computed=[], maxi=[], maxDeltaTime=None):
+ sum = [x.replace("%","") for x in sum]
+ count = [x.replace("%","") for x in count]
+ avg = [x.replace("%","") for x in avg]
+ computed = [x.replace("%","") for x in computed]
+ maxi = [x.replace("%","") for x in maxi]
+ groupBy = [x.replace("%","") for x in groupBy]
+
+ for (k,v) in filter.items():
+ rows = self.filter_results(rows, k, v)
+
+ if rows:
+ if maxDeltaTime is not None:
+ maxTime = max([float(row["time"]) for row in rows])
+ rows = [row for row in rows if float(row["time"])>=maxTime-maxDeltaTime]
+
+ (computedFieldNames, rows) = self.do_computed_fields(rows, computed)
+ sum = sum + computedFieldNames
+ if groupBy:
+ rows = self.groupby_results(rows, groupBy, sum, count, avg, maxi)
+ return rows
+
+ def remap(self, match):
+ if not self.tableName in mappings:
+ raise MappingException("no mapping for table %s" % self.tableName)
+
+ mapping = mappings[self.tableName]
+
+ token = match.group()[1:]
+ if token in mapping:
+ return mapping[token]
+ else:
+ raise MappingException('unknown token %s' % token)
+
+ def dump_table(self, rows, keys=None):
+ if not keys:
+ keys = rows[0].keys()
+
+ lens = {}
+ for key in keys:
+ lens[key] = len(key)
+
+ for row in rows:
+ for key in keys:
+ thislen = len(str(row.get(key,"")))
+ lens[key] = max(lens.get(key,0), thislen)
+
+ for key in keys:
+ print "%*s" % (lens[key], key),
+ print
+
+ for row in rows:
+ for key in keys:
+ print "%*s" % (lens[key], str(row.get(key,""))),
+ print
+
+ def schema_to_cols(self, schema):
+ fields = schema["fields"]
+
+ colTypes = {"STRING": "string", "INTEGER": "number", "FLOAT": "number", "TIMESTAMP": "date"}
+
+ cols = []
+ i=0
+ for field in fields:
+ col = {"type": colTypes[field["type"]],
+ "id": "Col%d" % i,
+ "label": reverse_mappings[self.tableName].get(field["name"],field["name"])}
+ cols.append(col)
+ i=i+1
+
+ return cols
+
+def main():
+ bq = BigQueryAnalytics()
+
+ rows = bq.run_query("select %hostname,SUM(%bytes_sent) from [vicci.demoevents] group by %hostname")
+
+ bq.dump_table(rows)
+
+if __name__ == "__main__":
+ main()
diff --git a/planetstack/hpc_wizard/hpc_wizard.py b/planetstack/hpc_wizard/hpc_wizard.py
new file mode 100644
index 0000000..5c5a3f9
--- /dev/null
+++ b/planetstack/hpc_wizard/hpc_wizard.py
@@ -0,0 +1,340 @@
+import datetime
+import os
+import operator
+import socket
+import pytz
+import json
+import random
+import sys
+import time
+
+if os.path.exists("/home/smbaker/projects/vicci/plstackapi/planetstack"):
+ sys.path.append("/home/smbaker/projects/vicci/plstackapi/planetstack")
+else:
+ sys.path.append("/opt/planetstack")
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
+from django import db
+from django.db import connection
+from core.models import Slice, Sliver, ServiceClass, Reservation, Tag, Network, User, Node, Image, Deployment, Site, NetworkTemplate, NetworkSlice, Service
+from hpc.models import HpcService, ServiceProvider, ContentProvider, OriginServer, CDNPrefix, HpcService
+
+# amount of time in milliseconds which will be queried for HPC statistics.
+QUERY_TIME=150000
+
+# Constants used for computing 'hotness'
+# BLUE_LOAD = MB/s which should be a "0" on the hotness scale
+# RED_LOAD = MB/s which should be a "1" on the hotness scale
+BLUE_LOAD=5000000
+RED_LOAD=15000000
+
+MAX_LOAD=RED_LOAD
+
+def log(what, showdate=True):
+ try:
+ if showdate:
+ file("/tmp/scott-hpcwizard.log", "a").write(time.strftime("%Y-%m-%d %H:%M:%S ", time.gmtime()))
+ file("/tmp/scott-hpcwizard.log", "a").write("%s\n" % what)
+ except:
+ pass # uh oh
+
+def log_exc(what):
+ log(what)
+ log(traceback.format_exc(), showdate=False)
+
+def avg(x):
+ return float(sum(x))/len(x)
+
+def format_float(x):
+ try:
+ return "%10.5f" % x
+ except:
+ return str(x)
+
+class HpcWizard:
+ def __init__(self):
+ try:
+ self.hpcService = HpcService.objects.get()
+ except:
+ # OpenCloud.us currently has a Service object instantiated instead
+ # of a HpcService. Fallback for now.
+ self.hpcService = Service.objects.get(name="HPC Service")
+
+ self.hpcQueryThread = None
+
+ def get_hpc_slices(self):
+ try:
+ slices = self.hpcService.slices.all()
+ except:
+ # BUG in data model -- Slice.service has related name 'service' and
+ # it should be 'slices'
+ slices = self.hpcService.service.all()
+ return slices
+
+ def get_hpc_slivers(self):
+ slivers = []
+ for slice in self.get_hpc_slices():
+ for sliver in slice.slivers.all():
+ slivers.append(sliver)
+ return slivers
+
+ def fill_site_nodes(self, site, hpc_slivers=None):
+ if hpc_slivers is None:
+ hpc_slivers = self.get_hpc_slivers()
+
+ site.availNodes = []
+ site.hpcNodes = []
+ for node in site.nodes.all():
+ has_hpc = False
+
+ for sliver in node.slivers.all():
+ if sliver in hpc_slivers:
+ has_hpc = True
+
+ if has_hpc:
+ site.hpcNodes.append(node)
+ else:
+ site.availNodes.append(node)
+
+ def merge_site_statistics(self, sites):
+ """ this does it based on the sumb of all bandwidth
+
+ The issue here is that we the computed load reacts immediately to
+ the addition or deletion of nodes. i.e. 5 nodes at 80% + 1 node at
+ 0% = average load 66%.
+ """
+ site_dict = {}
+ for site in self.hpcQueryThread.site_rows:
+ site_dict[site["site"]] = site
+
+ for site in sites:
+ if site.name in site_dict:
+ site.bytes_sent = site_dict[site.name]["sum_bytes_sent"]
+ time_delta = site_dict[site.name]["time_delta"]
+ computed_duration = (int(time_delta/30)+1)*30
+ if (computed_duration > 0):
+ site.bandwidth = site.bytes_sent/computed_duration
+ if len(site.hpcNodes)>0:
+ # figure out how many bytes_sent would be represented
+ # by blue and red
+ blue_load = len(site.hpcNodes) * BLUE_LOAD * computed_duration
+ red_load = len(site.hpcNodes) * RED_LOAD * computed_duration
+ max_load = len(site.hpcNodes) * MAX_LOAD * computed_duration
+
+ site.hotness = (min(red_load, max(blue_load, float(site.bytes_sent))) - blue_load)/(red_load-blue_load)
+ site.load = int(min(100, site.bytes_sent*100/max_load))
+
+ file("/tmp/scott2.txt","a").write("%s %d %0.2f %0.2f %0.2f %0.2f %d\n" % (site.name, site.bytes_sent, blue_load, red_load, site.hotness, time_delta, computed_duration))
+
+ def merge_site_statistics_new(self, sites):
+ """ This does it based on max load
+
+ Advantage of this method is that since we're effectively reporting
+ the maximally loaded node, we don't get instantaneous reactions
+ to adding additional nodes. On the contrary, it will take a while
+ for the load to balance from the loaded node to the new less-loaded
+ node.
+ """
+ site_dict = {}
+ for site in self.hpcQueryThread.site_rows:
+ site_dict[site["site"]] = site
+
+ for site in sites:
+ if site.name in site_dict:
+ site.max_avg_bandwidth = site_dict[site.name]["max_avg_bandwidth"]
+ site.bytes_sent = site_dict[site.name]["sum_bytes_sent"]
+
+ site.hotness = min(1.0, float(max(BLUE_LOAD, site.max_avg_bandwidth) - BLUE_LOAD) / (RED_LOAD-BLUE_LOAD))
+ site.load = int(site.max_avg_bandwidth*100/MAX_LOAD)
+
+ # we still need site["bandwidth"] for the summary statistics
+ time_delta = site_dict[site.name]["time_delta"]
+ computed_duration = (int(time_delta/30)+1)*30
+ if (computed_duration > 0):
+ site.bandwidth = site.bytes_sent/computed_duration
+ else:
+ site.bandwidth = 0
+
+ if len(site.hpcNodes)>0:
+ file("/tmp/scott3.txt","a").write("%s %d %0.2f %d %0.2f\n" % (site.name, site.bytes_sent, site.hotness, site.load, site.bandwidth))
+
+ def get_sites(self):
+ sites = list(Site.objects.all())
+
+ for site in sites:
+ self.fill_site_nodes(site, self.get_hpc_slivers())
+ site.load = 0
+ site.hotness = 0
+ site.bandwidth = 0
+ site.numNodes = len(site.hpcNodes) + len(site.availNodes)
+
+ if (self.hpcQueryThread is not None) and (self.hpcQueryThread.is_stalled()):
+ self.initialize_statistics()
+
+ # merge in the statistics data if it is available
+ if self.hpcQueryThread and self.hpcQueryThread.data_version>0:
+ self.merge_site_statistics(sites)
+
+ # django will leak extraordinary amounts of memory without this line
+ db.reset_queries()
+
+ return sites
+
+ def get_nodes_to_sites(self):
+ nodes_to_sites = {}
+
+ sites = list(Site.objects.all())
+
+ for site in sites:
+ for node in site.nodes.all():
+ nodes_to_sites[node.name] = site.name
+
+ return nodes_to_sites
+
+ def get_slice_sites(self, slice_name):
+ sites = list(Site.objects.all())
+ slivers = list(Slice.objects.get(name=slice_name).slivers.all())
+ for site in sites:
+ self.fill_site_nodes(site, slivers)
+ return sites
+
+ def get_sites_for_view(self):
+ sites = {}
+ for site in self.get_sites():
+ if site.name in ["ON.Lab", "I2 Atlanta"]:
+ continue
+
+ d = {"lat": float(site.location.latitude),
+ "long": float(site.location.longitude),
+ "health": 0,
+ "numNodes": site.numNodes,
+ "numHPCSlivers": len(site.hpcNodes),
+ "siteUrl": str(site.site_url),
+ "hot": getattr(site,"hotness",0.0),
+ "load": getattr(site,"load",0)}
+ sites[str(site.name)] = d
+
+ import pprint
+ f = file("/tmp/scott.txt","w")
+ pprint.pprint(sites, f)
+ f.close()
+
+ return sites
+
+ def get_summary_for_view(self):
+ total_slivers = 0
+ total_bandwidth = 0
+ average_cpu = 0
+
+ sites = [site for site in self.get_sites() if len(site.hpcNodes)>0]
+
+ total_slivers = sum( [len(site.hpcNodes) for site in sites] )
+ total_bandwidth = sum( [site.bandwidth for site in sites] )
+ average_cpu = int(avg( [site.load for site in sites] ))
+
+ return {"total_slivers": total_slivers,
+ "total_bandwidth": total_bandwidth,
+ "average_cpu": average_cpu}
+
+ def initialize_statistics(self):
+ from query import HpcQueryThread
+
+ if (self.hpcQueryThread is not None):
+ log("dropping old query thread")
+ self.hpcQueryThread.please_die = True
+ self.hpcQueryThread = None
+
+ log("launching new query thread")
+
+ nodes_to_sites = self.get_nodes_to_sites()
+ self.hpcQueryThread = HpcQueryThread(nodes_to_sites = nodes_to_sites, timeStart=-QUERY_TIME, slice="HyperCache")
+
+ def get_site(self, site_name):
+ site = Site.objects.get(name=site_name)
+ self.fill_site_nodes(site)
+ return site
+
+ def increase_slivers(self, site_name, count):
+ site = self.get_site(site_name)
+ hpc_slice = self.get_hpc_slices()[0]
+ while (len(site.availNodes) > 0) and (count > 0):
+ node = site.availNodes.pop()
+ hostname = node.name
+ sliver = Sliver(name=node.name,
+ slice=hpc_slice,
+ node=node,
+ image = Image.objects.all()[0],
+ creator = User.objects.get(email="scott@onlab.us"),
+ deploymentNetwork=node.deployment,
+ numberCores = 1,
+ ip=socket.gethostbyname(hostname))
+ sliver.save()
+
+ print "created sliver", sliver
+
+ site.hpcNodes.append(node)
+
+ count = count - 1
+
+ def decrease_slivers(self, site_name, count):
+ site = self.get_site(site_name)
+ hpc_slices = self.get_hpc_slices()
+ while (len(site.hpcNodes) > 0) and (count > 0):
+ node = site.hpcNodes.pop()
+ for sliver in node.slivers.all():
+ if sliver.slice in hpc_slices:
+ print "deleting sliver", sliver
+ sliver.delete()
+
+ site.availNodes.append(node)
+ count = count - 1
+
+ def dump(self):
+ print "slices:"
+ for slice in self.get_hpc_slices():
+ print " ", slice
+
+ print "sites:"
+ print "%20s %10s %10s %10s %10s %10s %10s" % ("name", "avail", "hpc", "lat", "long", "sent", "hot")
+ for site in self.get_sites():
+ print "%20s %10d %10d %10s %10s %10d %10.2f" % (site.name,
+ len(site.availNodes),
+ len(site.hpcNodes),
+ format_float(site.location.latitude),
+ format_float(site.location.longitude),
+ getattr(site,"bytes_sent",0),
+ getattr(site,"hotness",0.5))
+
+ #print "slivers:"
+ #for sliver in self.get_hpc_slivers():
+ # print " ", sliver
+
+glo_hpc_wizard = None
+
+def get_hpc_wizard():
+ global glo_hpc_wizard
+
+ if (glo_hpc_wizard is None):
+ glo_hpc_wizard = HpcWizard()
+# glo_hpc_wizard.initialize_statistics()
+
+ return glo_hpc_wizard
+
+def main():
+ x = HpcWizard()
+
+ # initialized the Statistics thread, and wait for some data to show up
+ x.initialize_statistics()
+ while x.hpcQueryThread.data_version==0:
+ time.sleep(1)
+
+ x.dump()
+
+ # quick test of the increase / decrease functions
+
+ x.increase_slivers("Princeton", 1)
+ x.decrease_slivers("Princeton", 1)
+
+if __name__=="__main__":
+ main()
+
diff --git a/planetstack/hpc_wizard/planetstack_analytics.py b/planetstack/hpc_wizard/planetstack_analytics.py
new file mode 100644
index 0000000..75462d4
--- /dev/null
+++ b/planetstack/hpc_wizard/planetstack_analytics.py
@@ -0,0 +1,477 @@
+from bigquery_analytics import BigQueryAnalytics, BIGQUERY_AVAILABLE
+import datetime
+import re
+import os
+import sys
+import time
+import json
+import traceback
+import urllib2
+
+if os.path.exists("/home/smbaker/projects/vicci/plstackapi/planetstack"):
+ sys.path.append("/home/smbaker/projects/vicci/plstackapi/planetstack")
+else:
+ sys.path.append("/opt/planetstack")
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
+from django.conf import settings
+from django import db
+from django.db import connection
+from core.models import Slice, Sliver, ServiceClass, Reservation, Tag, Network, User, Node, Image, Deployment, Site, NetworkTemplate, NetworkSlice, Service
+
+BLUE_LOAD=5000000
+RED_LOAD=15000000
+
+glo_cached_queries = {}
+
+class PlanetStackAnalytics(BigQueryAnalytics):
+ def __init__(self, tableName=None):
+ if not tableName:
+ tableName = settings.BIGQUERY_TABLE
+
+ BigQueryAnalytics.__init__(self, tableName)
+
+ def service_to_sliceNames(self, serviceName):
+ service=Service.objects.get(name=serviceName)
+ try:
+ slices = service.slices.all()
+ except:
+ # BUG in data model -- Slice.service has related name 'service' and
+ # it should be 'slices'
+ slices = service.service.all()
+
+ return [slice.name for slice in slices]
+
+ def compose_query(self, filter={}, timeBucket="60", avg=[], sum=[], count=[], computed=[], val=[], groupBy=["Time"], orderBy=["Time"], tableName=None, latest=False, maxAge=60*60):
+ if tableName is None:
+ tableName = self.tableName
+
+ maxAge = maxAge * 1000
+ tablePart = "[%s.%s@-%d--1]" % ("vicci", tableName, maxAge)
+
+ fields = []
+ fieldNames = []
+ srcFieldNames = ["time"]
+
+ fields.append("SEC_TO_TIMESTAMP(INTEGER(TIMESTAMP_TO_SEC(time)/%s)*%s) as Time" % (str(timeBucket),str(timeBucket)))
+ #fields.append("INTEGER(TIMESTAMP_TO_SEC(time)/%s)*%s as Time" % (str(timeBucket),str(timeBucket)))
+
+ for fieldName in avg:
+ fields.append("AVG(%s) as avg_%s" % (fieldName, fieldName.replace("%","")))
+ fieldNames.append("avg_%s" % fieldName.replace("%",""))
+ srcFieldNames.append(fieldName)
+
+ for fieldName in sum:
+ fields.append("SUM(%s) as sum_%s" % (fieldName, fieldName.replace("%","")))
+ fieldNames.append("sum_%s" % fieldName.replace("%",""))
+ srcFieldNames.append(fieldName)
+
+ for fieldName in count:
+ fields.append("COUNT(distinct %s) as count_%s" % (fieldName, fieldName.replace("%","")))
+ fieldNames.append("count_%s" % fieldName.replace("%",""))
+ srcFieldNames.append(fieldName)
+
+ for fieldName in val:
+ fields.append(fieldName)
+ fieldNames.append(fieldName)
+ srcFieldNames.append(fieldName)
+
+ for fieldName in computed:
+ operator = "/"
+ parts = fieldName.split("/")
+ computedFieldName = "computed_" + parts[0].replace("%","")+"_div_"+parts[1].replace("%","")
+ if len(parts)==1:
+ operator = "*"
+ parts = computed.split("*")
+ computedFieldName = "computed_" + parts[0].replace("%","")+"_mult_"+parts[1].replace("%","")
+ fields.append("SUM(%s)%sSUM(%s) as %s" % (parts[0], operator, parts[1], computedFieldName))
+ fieldNames.append(computedFieldName)
+ srcFieldNames.append(parts[0])
+ srcFieldNames.append(parts[1])
+
+ for fieldName in groupBy:
+ if (fieldName not in ["Time"]):
+ fields.append(fieldName)
+ fieldNames.append(fieldName)
+ srcFieldNames.append(fieldName)
+
+ fields = ", ".join(fields)
+
+ where = []
+
+ if filter.get("slice",None):
+ where.append("%%slice='%s'" % filter["slice"])
+ if filter.get("site",None):
+ where.append("%%site='%s'" % filter["site"])
+ if filter.get("node",None):
+ where.append("%%hostname='%s'" % filter["node"])
+ if filter.get("event",None):
+ where.append("event='%s'" % filter["event"])
+ if filter.get("service",None):
+ sliceNames = self.service_to_sliceNames(filter["service"])
+ if sliceNames:
+ where.append("(" + " OR ".join(["%%slice='%s'" % sliceName for sliceName in sliceNames]) +")")
+
+ if where:
+ where = " WHERE " + " AND ".join(where)
+ else:
+ where =""
+
+ if groupBy:
+ groupBySub = " GROUP BY " + ",".join(groupBy + ["%hostname"])
+ groupBy = " GROUP BY " + ",".join(groupBy)
+ else:
+ groupBySub = " GROUP BY %hostname"
+ groupBy = ""
+
+ if orderBy:
+ orderBy = " ORDER BY " + ",".join(orderBy)
+ else:
+ orderBy = ""
+
+ if latest:
+ latestFields = ["table1.%s as %s" % (x,x) for x in srcFieldNames]
+ latestFields = ", ".join(latestFields)
+ tablePart = """(SELECT %s FROM %s AS table1
+ JOIN
+ (SELECT %%hostname, event, max(time) as maxtime from %s GROUP BY %%hostname, event) AS latest
+ ON
+ table1.%%hostname = latest.%%hostname AND table1.event = latest.event AND table1.time = latest.maxtime)""" % (latestFields, tablePart, tablePart)
+
+ if computed:
+ subQuery = "SELECT %%hostname, %s FROM %s" % (fields, tablePart)
+ if where:
+ subQuery = subQuery + where
+ subQuery = subQuery + groupBySub
+
+ sumFields = []
+ for fieldName in fieldNames:
+ if fieldName.startswith("avg"):
+ sumFields.append("AVG(%s) as avg_%s"%(fieldName,fieldName))
+ sumFields.append("MAX(%s) as max_%s"%(fieldName,fieldName))
+ elif (fieldName.startswith("count")) or (fieldName.startswith("sum")) or (fieldName.startswith("computed")):
+ sumFields.append("SUM(%s) as sum_%s"%(fieldName,fieldName))
+ else:
+ sumFields.append(fieldName)
+
+ sumFields = ",".join(sumFields)
+
+ query = "SELECT %s, %s FROM (%s)" % ("Time", sumFields, subQuery)
+ if groupBy:
+ query = query + groupBy
+ if orderBy:
+ query = query + orderBy
+ else:
+ query = "SELECT %s FROM %s" % (fields, tablePart)
+ if where:
+ query = query + " " + where
+ if groupBy:
+ query = query + groupBy
+ if orderBy:
+ query = query + orderBy
+
+ return query
+
+ def get_list_from_req(self, req, name, default=[]):
+ value = req.GET.get(name, None)
+ if not value:
+ return default
+ value=value.replace("@","%")
+ return value.split(",")
+
+ def format_result(self, format, result, query, dataSourceUrl):
+ if not BIGQUERY_AVAILABLE:
+ msg = "BigQuery Statistics Unavaiable"
+ else:
+ msg = None
+
+ if (format == "json_dicts"):
+ result = {"query": query, "rows": result, "dataSourceUrl": dataSourceUrl, "msg": msg}
+ return ("application/javascript", json.dumps(result))
+
+ elif (format == "json_arrays"):
+ new_result = []
+ for row in result:
+ new_row = []
+ for key in sorted(row.keys()):
+ new_row.append(row[key])
+ new_result.append(new_row)
+ new_result = {"query": query, "rows": new_result, "msg": msg}
+ return ("application/javascript", json.dumps(new_result))
+
+ elif (format == "html_table"):
+ new_rows = []
+ for row in result:
+ new_row = []
+ for key in sorted(row.keys()):
+ new_row.append("<TD>%s</TD>" % str(row[key]))
+ new_rows.append("<TR>%s</TR>" % "".join(new_row))
+
+ new_result = "<TABLE>%s</TABLE>" % "\n".join(new_rows)
+
+ return ("text/html", new_result)
+
+ def merge_datamodel_sites(self, rows, slice=None):
+ """ For a query that included "site" in its groupby, merge in the
+ opencloud site information.
+ """
+
+ if slice:
+ try:
+ slice = Slice.objects.get(name=slice)
+ except:
+ slice = None
+
+ for row in rows:
+ sitename = row["site"]
+ try:
+ model_site = Site.objects.get(name=sitename)
+ except:
+ # we didn't find it in the data model
+ continue
+
+ allocated_slivers = 0
+ if model_site and slice:
+ for sliver in slice.slivers.all():
+ if sliver.node.site == model_site:
+ allocated_slivers = allocated_slivers + 1
+
+ row["lat"] = float(model_site.location.latitude)
+ row["long"] = float(model_site.location.longitude)
+ row["url"] = model_site.site_url
+ row["numNodes"] = model_site.nodes.count()
+ row["allocated_slivers"] = allocated_slivers
+
+ max_cpu = row.get("max_avg_cpu", row.get("max_cpu",0))
+ cpu=float(max_cpu)/100.0
+ row["hotness"] = max(0.0, ((cpu*RED_LOAD) - BLUE_LOAD)/(RED_LOAD-BLUE_LOAD))
+
+ def compose_cached_query(self, querySpec='default'):
+ """ Compose a query that returns the 'most recent' row for each (hostname, event)
+ pair.
+
+ Note that groupByFields cannot contain any values that are 'Null' or those
+ rows will be excluded. For example, if groupByFields includes cp, then
+ there will be no libvirt_event rows, since libvirt_event does not have
+ cp.
+
+ This means we can't really have 'one query to rule them'. Settle on
+ having a couple of different queries, and have the caller specify
+ which one he wants.
+ """
+
+ fieldNames = ["%hostname", "%bytes_sent", "%bytes_hit", "%healthy", "time", "event", "%site", "%elapsed", "%cpu"]
+
+ if querySpec=="default":
+ groupByFields = ["%hostname", "event"]
+ elif (querySpec=="hpc"):
+ fieldNames.append("%cp")
+ groupByFields = ["%hostname", "event", "%cp"]
+ else:
+ raise ValueError("Unknown queryspec %s" % querySpec)
+
+ fields = ["table1.%s AS %s" % (x,x) for x in fieldNames]
+ fields = ", ".join(fields)
+
+ tableDesc = "%s.%s" % (self.projectName, self.tableName)
+
+ groupByOn = ["table1.time = latest.maxtime"]
+ for field in groupByFields:
+ groupByOn.append("table1.%s = latest.%s" % (field, field))
+
+ groupByOn = " AND ".join(groupByOn)
+ groupByFields = ", ".join(groupByFields)
+
+ base_query = "SELECT %s FROM [%s@-3600000--1] AS table1 JOIN (SELECT %s, max(time) as maxtime from [%s@-3600000--1] GROUP BY %s) AS latest ON %s" % \
+ (fields, tableDesc, groupByFields, tableDesc, groupByFields, groupByOn)
+
+ return base_query
+
+ def get_cached_query_results(self, q, wait=True):
+ global glo_cached_queries
+
+ if q in glo_cached_queries:
+ if (time.time() - glo_cached_queries[q]["time"]) <= 60:
+ print "using cached query"
+ return glo_cached_queries[q]["rows"]
+
+ if not wait:
+ return None
+
+ print "refreshing cached query"
+ result = self.run_query(q)
+ glo_cached_queries[q] = {"time": time.time(), "rows": result}
+
+ return result
+
+ def process_request(self, req):
+ print req.GET
+
+ tqx = req.GET.get("tqx", None)
+
+ slice = req.GET.get("slice", None)
+ site = req.GET.get("site", None)
+ node = req.GET.get("node", None)
+ service = req.GET.get("service", None)
+ event = req.GET.get("event", "libvirt_heartbeat")
+ cp = req.GET.get("cp", None)
+
+ format = req.GET.get("format", "json_dicts")
+
+ timeBucket = int(req.GET.get("timeBucket", 60))
+ avg = self.get_list_from_req(req, "avg")
+ sum = self.get_list_from_req(req, "sum")
+ count = self.get_list_from_req(req, "count")
+ computed = self.get_list_from_req(req, "computed")
+ groupBy = self.get_list_from_req(req, "groupBy", ["Time"])
+ orderBy = self.get_list_from_req(req, "orderBy", ["Time"])
+
+ maxRows = req.GET.get("maxRows", None)
+ mergeDataModelSites = req.GET.get("mergeDataModelSites", None)
+
+ maxAge = int(req.GET.get("maxAge", 60*60))
+
+ cached = req.GET.get("cached", None)
+ cachedGroupBy = self.get_list_from_req(req, "cachedGroupBy", ["doesnotexist"])
+
+ filter={}
+ if slice:
+ filter["slice"] = slice
+ if site:
+ filter["site"] = site
+ if node:
+ filter["hostname"] = node
+ if event:
+ filter["event"] = event
+ if cp:
+ filter["cp"] = cp
+
+ q = self.compose_query(filter, timeBucket, avg, sum, count, computed, [], groupBy, orderBy, maxAge=maxAge)
+
+ print q
+
+ dataSourceUrl = "http://" + req.META["SERVER_NAME"] + ":" + req.META["SERVER_PORT"] + req.META["PATH_INFO"] + "?" + req.META["QUERY_STRING"].replace("format=","origFormat=").replace("%","%25") + "&format=charts";
+
+ if (format=="dataSourceUrl"):
+ result = {"dataSourceUrl": dataSourceUrl}
+ return ("application/javascript", result)
+
+ elif (format=="raw"):
+ result = self.run_query_raw(q)
+ result["dataSourceUrl"] = dataSourceUrl
+
+ result = json.dumps(result);
+
+ return ("application/javascript", result)
+
+ elif (format=="nodata"):
+ result = {"dataSourceUrl": dataSourceUrl, "query": q}
+ result = json.dumps(result);
+ return {"application/javascript", result}
+
+ elif (format=="charts"):
+ bq_result = self.run_query_raw(q)
+
+ # cloudscrutiny code is probably better!
+ table = {}
+ table["cols"] = self.schema_to_cols(bq_result["schema"])
+ rows = []
+ if "rows" in bq_result:
+ for row in bq_result["rows"]:
+ rowcols = []
+ for (colnum,col) in enumerate(row["f"]):
+ if (colnum==0):
+ dt = datetime.datetime.fromtimestamp(float(col["v"]))
+ rowcols.append({"v": 'new Date("%s")' % dt.isoformat()})
+ else:
+ try:
+ rowcols.append({"v": float(col["v"])})
+ except:
+ rowcols.append({"v": col["v"]})
+ rows.append({"c": rowcols})
+ table["rows"] = rows
+
+ if tqx:
+ reqId = tqx.strip("reqId:")
+ else:
+ reqId = "0"
+
+ result = {"status": "okColumnChart", "reqId": reqId, "table": table, "version": "0.6"}
+
+ result = "google.visualization.Query.setResponse(" + json.dumps(result) + ");"
+
+ def unquote_it(x): return x.group()[1:-1].replace('\\"', '"')
+
+ p = re.compile(r'"new Date\(\\"[^"]*\\"\)"')
+ result=p.sub(unquote_it, result)
+
+ return ("application/javascript", result)
+
+ else:
+ if cached:
+ results = self.get_cached_query_results(self.compose_cached_query(cached))
+
+ result = self.postprocess_results(results, filter=filter, sum=sum, count=count, avg=avg, computed=computed, maxDeltaTime=120, groupBy=cachedGroupBy)
+ else:
+ result = self.run_query(q)
+
+ if maxRows:
+ result = result[-int(maxRows):]
+
+ if mergeDataModelSites:
+ self.merge_datamodel_sites(result)
+
+ return self.format_result(format, result, q, dataSourceUrl)
+
+def DoPlanetStackAnalytics(request):
+ bq = PlanetStackAnalytics()
+ result = bq.process_request(request)
+
+ return result
+
+def main():
+ bq = PlanetStackAnalytics(tableName="demoevents")
+
+ q = bq.compose_cached_query()
+ results = bq.run_query(q)
+
+ #results = bq.postprocess_results(results,
+ # filter={"slice": "HyperCache"},
+ # groupBy=["site"],
+ # computed=["bytes_sent/elapsed"],
+ # sum=["bytes_sent", "computed_bytes_sent_div_elapsed"], avg=["cpu"],
+ # maxDeltaTime=60)
+
+ #results = bq.postprocess_results(results, filter={"slice": "HyperCache"}, maxi=["cpu"], count=["hostname"], computed=["bytes_sent/elapsed"], groupBy=["Time", "site"], maxDeltaTime=80)
+
+ results = bq.postprocess_results(results,filter={"event": "libvirt_heartbeat"}, avg=["cpu"], count=["hostname"], groupBy=["doesnotexist"])
+
+ bq.dump_table(results)
+
+ sys.exit(0)
+
+ q=bq.compose_query(sum=["%bytes_sent"], avg=["%cpu"], latest=True, groupBy=["Time", "%site"])
+ print q
+ bq.dump_table(bq.run_query(q))
+
+ q=bq.compose_query(avg=["%cpu","%bandwidth"], count=["%hostname"], slice="HyperCache")
+ print q
+ bq.dump_table(bq.run_query(q))
+
+ q=bq.compose_query(computed=["%bytes_sent/%elapsed"])
+ print
+ print q
+ bq.dump_table(bq.run_query(q))
+
+ q=bq.compose_query(timeBucket=60*60, avg=["%cpu"], count=["%hostname"], computed=["%bytes_sent/%elapsed"])
+ print
+ print q
+ bq.dump_table(bq.run_query(q))
+
+if __name__ == "__main__":
+ main()
+
+
+
+
+
diff --git a/planetstack/hpc_wizard/query.py b/planetstack/hpc_wizard/query.py
new file mode 100644
index 0000000..4ddf4f6
--- /dev/null
+++ b/planetstack/hpc_wizard/query.py
@@ -0,0 +1,276 @@
+import re
+import base64
+import requests
+import urllib
+import json
+import httplib2
+import threading
+import os
+import time
+import traceback
+
+from apiclient.discovery import build
+from apiclient.errors import HttpError
+from oauth2client.client import AccessTokenRefreshError
+from oauth2client.client import OAuth2WebServerFlow
+from oauth2client.client import flow_from_clientsecrets
+from oauth2client.file import Storage
+from oauth2client.tools import run_flow,run
+
+"""
+yum -y install python-httplib2
+easy_install python_gflags
+easy_install google_api_python_client
+"""
+
+
+PROJECT_NUMBER = '549187599759'
+
+try:
+ FLOW = flow_from_clientsecrets('/opt/planetstack/hpc_wizard/client_secrets.json',
+ scope='https://www.googleapis.com/auth/bigquery')
+except:
+ print "exception while initializing bigquery flow"
+ traceback.print_exc()
+ FLOW = None
+
+MINUTE_MS = 60*1000
+HOUR_MS = 60*60*1000
+
+class HpcQuery:
+ def __init__(self):
+ self.mapping = json.loads(self.fetch_mapping(table="demoevents"))
+ self.reverse_mapping = {v:k for k, v in self.mapping.items()}
+
+ def fetch_mapping(self, m=0, table="events"):
+ req = 'http://cloud-scrutiny.appspot.com/command?action=get_allocations&multiplexer=%d&table=%s'% (m,table)
+ resp = requests.get(req)
+ if (resp.status_code==200):
+ return resp.text
+ else:
+ raise Exception('Error accessing register allocations: %d'%resp.status_code)
+
+ def run_query_old(self, query):
+ req = 'http://cloud-scrutiny.appspot.com/command?action=send_query&q=%s' % urllib.quote(query)
+ resp = requests.get(req)
+ if (resp.status_code==200):
+ return resp.text
+ else:
+ raise Exception('Error running query: %d'%resp.status_code)
+ return resp
+
+ def run_query(self, query):
+ storage = Storage('/opt/planetstack/hpc_wizard/bigquery_credentials.dat')
+ credentials = storage.get()
+
+ if credentials is None or credentials.invalid:
+ credentials = run(FLOW, storage)
+
+ http = httplib2.Http()
+ http = credentials.authorize(http)
+
+ service = build('bigquery', 'v2', http=http)
+
+ body = {"query": query}
+ response = service.jobs().query(projectId=PROJECT_NUMBER, body=body).execute()
+
+ fieldNames = []
+ for field in response["schema"]["fields"]:
+ fieldNames.append(field["name"])
+
+ result = []
+ if "rows" in response:
+ for row in response["rows"]:
+ this_result = {}
+ for (i,column) in enumerate(row["f"]):
+ this_result[self.reverse_mapping.get(fieldNames[i],fieldNames[i])] = column["v"]
+ result.append(this_result)
+
+ return result
+
+ def remap(self, match):
+ token = match.group()[1:]
+ if token in self.mapping:
+ return self.mapping[token]
+ else:
+ raise Exception('unknown token %s' % token)
+
+ def get_usage(self, cp=None, hostname=None, site=None, slice=None, timeStart=-HOUR_MS, timeStop=-1, groupBy=["%hostname", "%cp"]):
+ where = []
+ if slice is not None:
+ where.append("%slice='" + slice + "'")
+ if cp is not None:
+ where.append("%cp='" + cp + "'")
+ if hostname is not None:
+ where.append("%hostname='" + hostname + "'")
+ if site is not None:
+ where.append("%hostname contains " + site)
+ where.append("%bytes_sent>0")
+ where = "WHERE " + " AND ".join(where)
+
+ if timeStart is not None:
+ tableName = "[vicci.demoevents@%d-%d]" % (timeStart,timeStop)
+ else:
+ tableName = "[vicci.demoevents]"
+
+ query = "SELECT %hostname,%cp,sum(%bytes_sent) as sum_bytes_sent,sum(%bytes_hit) as sum_bytes_hit, AVG(%bandwidth) as avg_bandwidth," + \
+ " MAX(TIMESTAMP_TO_MSEC(time))-MIN(TIMESTAMP_TO_MSEC(time)) as time_delta FROM " + \
+ tableName + " " + where
+
+ if groupBy:
+ query = query + " GROUP BY " + ",".join(groupBy)
+
+ p = re.compile('%[a-zA-z_]*')
+ query = p.sub(self.remap, query)
+
+ rows = self.run_query(query)
+
+ for row in rows:
+ row["sum_bytes_sent"] = int(row.get("sum_bytes_sent",0))
+ row["sum_bytes_hit"] = int(row.get("sum_bytes_hit",0))
+ row["avg_bandwidth"] = int(float(row.get("avg_bandwidth",0)))
+ row["time_delta"] = float(row.get("time_delta",0.0))/1000.0
+
+ elapsed = (timeStop-timeStart)/1000
+ KBps = int(row.get("sum_bytes_sent",0)) / elapsed / 1024
+ row["KBps"] = KBps
+
+ return rows
+
+ def sites_from_usage(self, rows, nodes_to_sites={}):
+ sites = {}
+ for row in rows:
+ hostname = row["hostname"]
+
+ if hostname in nodes_to_sites:
+ site_name = nodes_to_sites[hostname]
+ else:
+ parts = hostname.split(".")
+ if len(parts)<=2:
+ continue
+ site_name = parts[1]
+
+ if not (site_name in sites):
+ row = row.copy()
+ row["site"] = site_name
+ row["max_avg_bandwidth"] = row["avg_bandwidth"]
+ # sites table doesn't care about hostnames or avg_bandwidth
+ del row["hostname"]
+ del row["avg_bandwidth"]
+ sites[site_name] = row
+ else:
+ site_row = sites[site_name]
+ site_row["sum_bytes_sent"] = site_row["sum_bytes_sent"] + row["sum_bytes_sent"]
+ site_row["sum_bytes_hit"] = site_row["sum_bytes_hit"] + row["sum_bytes_hit"]
+ site_row["max_avg_bandwidth"] = max(site_row["max_avg_bandwidth"], row["avg_bandwidth"])
+ site_row["time_delta"] = max(site_row["time_delta"], row["time_delta"])
+
+ return sites.values()
+
+ def get_usage_sites(self, cp=None, slice=None, timeStart=-HOUR_MS, timeStop=-1):
+ rows = self.get_usage(cp=cp, slice=slice, timeStart=timeStart, timeStop=timeStop)
+
+ return self.sites_from_usage(rows)
+
+ def dump_table(self, rows, keys=None):
+ if not keys:
+ keys = rows[0].keys()
+
+ lens = {}
+ for key in keys:
+ lens[key] = len(key)
+
+ for row in rows:
+ for key in keys:
+ thislen = len(str(row.get(key,"")))
+ lens[key] = max(lens.get(key,0), thislen)
+
+ for key in keys:
+ print "%*s" % (lens[key], key),
+ print
+
+ for row in rows:
+ for key in keys:
+ print "%*s" % (lens[key], str(row.get(key,""))),
+ print
+
+class HpcQueryThread(HpcQuery, threading.Thread):
+ def __init__(self, interval=30, slice=None, timeStart=-HOUR_MS, cp=None, nodes_to_sites={}):
+ threading.Thread.__init__(self)
+ HpcQuery.__init__(self)
+ self.daemon = True
+ self.interval = interval
+ self.timeStart = timeStart
+ self.nodes_to_sites = nodes_to_sites
+ self.slice = slice
+ self.cp = cp
+ self.data_version = 0
+ self.please_die = False
+ self.update_time = time.time()
+ self.start()
+
+ def is_stalled(self):
+ if time.time()-self.update_time > 300:
+ return True
+ else:
+ return False
+
+ def run(self):
+ while not self.please_die:
+ try:
+ self.rows = self.get_usage(timeStart=self.timeStart, cp=self.cp, slice=self.slice)
+ self.site_rows = self.sites_from_usage(self.rows, self.nodes_to_sites)
+ self.update_time = time.time()
+ self.new_data()
+ self.data_version += 1
+ except:
+ file("/tmp/hpcquery_fail.txt","a").write(traceback.format_exc() + "\n")
+ time.sleep(self.interval)
+
+ def new_data(self):
+ pass
+
+class HpcDumpThread(HpcQueryThread):
+ def __init__(self, interval=30, slice=None, timeStart=-HOUR_MS, cp=None):
+ HpcQueryThread.__init__(self, interval, slice, timeStart, cp)
+
+ def new_data(self):
+ os.system("clear")
+
+ print "update %d, data for last %d minutes" % (self.data_version, -self.timeStart/1000/60)
+ print
+
+ self.dump_table(self.rows, ["hostname", "cp", "sum_bytes_sent", "sum_bytes_hit", "KBps"])
+ print
+ self.dump_table(self.site_rows, ["site", "cp", "sum_bytes_sent", "sum_bytes_hit", "KBps"])
+ print
+
+
+def main_old():
+ hq = HpcQuery()
+# print hq.mapping
+
+ print "5 minute"
+ hq.dump_table(hq.get_usage(timeStart=-MINUTE_MS*5), ["hostname", "cp", "sum_bytes_sent", "sum_bytes_hit", "KBps"])
+ print
+ hq.dump_table(hq.get_usage_sites(timeStart=-MINUTE_MS*5), ["site", "cp", "sum_bytes_sent", "sum_bytes_hit", "KBps"])
+ print
+
+ print "1 hour"
+ hq.dump_table(hq.get_usage(), ["hostname", "cp", "sum_bytes_sent", "sum_bytes_hit", "KBps"])
+ print
+ hq.dump_table(hq.get_usage_sites(), ["site", "cp", "sum_bytes_sent", "sum_bytes_hit", "KBps"])
+ print
+
+ print "24 hours"
+ hq.dump_table(hq.get_usage(timeStart=-HOUR_MS*24), ["hostname", "cp", "sum_bytes_sent", "sum_bytes_hit", "KBps"])
+ hq.dump_table(hq.get_usage_sites(timeStart=-HOUR_MS*24), ["site", "cp", "sum_bytes_sent", "sum_bytes_hit", "KBps"])
+ print
+
+def main():
+ hd = HpcDumpThread()
+ while True:
+ time.sleep(30)
+
+if __name__ == "__main__":
+ main()
diff --git a/planetstack/kairos/__init__.py b/planetstack/kairos/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/planetstack/kairos/__init__.py
diff --git a/planetstack/kairos/admin.py b/planetstack/kairos/admin.py
new file mode 100644
index 0000000..1eeb426
--- /dev/null
+++ b/planetstack/kairos/admin.py
@@ -0,0 +1,30 @@
+from django.contrib import admin
+
+from nagios.models import *
+from django import forms
+from django.utils.safestring import mark_safe
+from django.contrib.auth.admin import UserAdmin
+from django.contrib.admin.widgets import FilteredSelectMultiple
+from django.contrib.auth.forms import ReadOnlyPasswordHashField
+from django.contrib.auth.signals import user_logged_in
+from django.utils import timezone
+from django.contrib.contenttypes import generic
+from suit.widgets import LinkedSelect
+from core.admin import SingletonAdmin,SliceInline,ServiceAttrAsTabInline, SliceROInline,ServiceAttrAsTabROInline, ReadOnlyAwareAdmin
+
+class NagiosServiceAdmin(SingletonAdmin):
+ model = NagiosService
+ verbose_name = "Nagios Service"
+ verbose_name_plural = "Nagios Service"
+ list_display = ("name","enabled")
+ fieldsets = [(None, {'fields': ['name','enabled','versionNumber', 'description'], 'classes':['suit-tab suit-tab-general']})]
+ inlines = [SliceInline,ServiceAttrAsTabInline]
+
+ user_readonly_inlines = [SliceROInline, ServiceAttrAsTabROInline]
+ suit_form_tabs =(('general', 'Nagios Service Details'),
+ ('slices','Slices'),
+ ('serviceattrs','Additional Attributes'),
+ )
+
+admin.site.register(NagiosService, NagiosServiceAdmin)
+
diff --git a/planetstack/kairos/models.py b/planetstack/kairos/models.py
new file mode 100644
index 0000000..ed916d7
--- /dev/null
+++ b/planetstack/kairos/models.py
@@ -0,0 +1,14 @@
+from core.models import User,Site,Service,SingletonModel,PlCoreBase, Slice
+import os
+from django.db import models
+from django.forms.models import model_to_dict
+
+# Create your models here.
+
+class KairosDBService(SingletonModel,Service):
+ class Meta:
+ app_label = "kairos"
+ verbose_name = "KairosDB Service"
+
+ def __unicode__(self): return u'KairosDB Service'
+
diff --git a/planetstack/nagios/__init__.py b/planetstack/nagios/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/planetstack/nagios/__init__.py
diff --git a/planetstack/nagios/admin.py b/planetstack/nagios/admin.py
new file mode 100644
index 0000000..156e376
--- /dev/null
+++ b/planetstack/nagios/admin.py
@@ -0,0 +1,30 @@
+from django.contrib import admin
+
+from kairos.models import *
+from django import forms
+from django.utils.safestring import mark_safe
+from django.contrib.auth.admin import UserAdmin
+from django.contrib.admin.widgets import FilteredSelectMultiple
+from django.contrib.auth.forms import ReadOnlyPasswordHashField
+from django.contrib.auth.signals import user_logged_in
+from django.utils import timezone
+from django.contrib.contenttypes import generic
+from suit.widgets import LinkedSelect
+from core.admin import SingletonAdmin,SliceInline,ServiceAttrAsTabInline, SliceROInline,ServiceAttrAsTabROInline, ReadOnlyAwareAdmin
+
+class KairosDBServiceAdmin(SingletonAdmin):
+ model = KairosDBService
+ verbose_name = "KairosDB Service"
+ verbose_name_plural = "KairosDB Service"
+ list_display = ("name","enabled")
+ fieldsets = [(None, {'fields': ['name','enabled','versionNumber', 'description'], 'classes':['suit-tab suit-tab-general']})]
+ inlines = [SliceInline,ServiceAttrAsTabInline]
+
+ user_readonly_inlines = [SliceROInline, ServiceAttrAsTabROInline]
+ suit_form_tabs =(('general', 'KairosDB Service Details'),
+ ('slices','Slices'),
+ ('serviceattrs','Additional Attributes'),
+ )
+
+admin.site.register(KairosDBService, KairosDBServiceAdmin)
+
diff --git a/planetstack/nagios/models.py b/planetstack/nagios/models.py
new file mode 100644
index 0000000..ec7b6bb
--- /dev/null
+++ b/planetstack/nagios/models.py
@@ -0,0 +1,14 @@
+from core.models import User,Site,Service,SingletonModel,PlCoreBase, Slice
+import os
+from django.db import models
+from django.forms.models import model_to_dict
+
+# Create your models here.
+
+class NagiosService(SingletonModel,Service):
+ class Meta:
+ app_label = "nagios"
+ verbose_name = "Nagios Service"
+
+ def __unicode__(self): return u'Nagios Service'
+
diff --git a/planetstack/nginx/planetstack.conf b/planetstack/nginx/planetstack.conf
new file mode 100644
index 0000000..d25ab0b
--- /dev/null
+++ b/planetstack/nginx/planetstack.conf
@@ -0,0 +1,22 @@
+upstream backend {
+ # least_conn;
+ server 127.0.0.1:9001;
+ server unix:/var/run/planetstack.uwsgi.sock;
+}
+
+
+server {
+ listen 8081;
+ server_name 128.112.139.48;
+
+ location /static/ {
+ alias /opt/planetstack/core/static/;
+ expires 30d;
+ access_log off;
+ }
+
+ location / {
+ include /etc/nginx/uwsgi_params;
+ uwsgi_pass backend;
+ }
+}
diff --git a/planetstack/observer/__init__.py b/planetstack/observer/__init__.py
index 0d6c550..d9a63be 100644
--- a/planetstack/observer/__init__.py
+++ b/planetstack/observer/__init__.py
@@ -24,8 +24,9 @@
print "Exception in Observer. This should not disrupt the front end. %s"%str(e)
else:
- def notify_observer(model=None, delete=False):
-# if (print_once):
-# print "The observer is disabled"
-# print_once = False
+ def notify_observer(model=None, delete=False, pk=None, model_dict={}):
+ global print_once
+ if (print_once):
+ print "The observer is disabled"
+ print_once = False
return
diff --git a/planetstack/observer/backend.py b/planetstack/observer/backend.py
index d8ae306..293a325 100644
--- a/planetstack/observer/backend.py
+++ b/planetstack/observer/backend.py
@@ -1,17 +1,24 @@
import threading
+import time
from observer.event_loop import PlanetStackObserver
from observer.event_manager import EventListener
+from util.logger import Logger, logging
+
+logger = Logger(level=logging.INFO)
class Backend:
def run(self):
- # start the openstack observer
- observer = PlanetStackObserver()
- observer_thread = threading.Thread(target=observer.run)
- observer_thread.start()
+ try:
+ # start the openstack observer
+ observer = PlanetStackObserver()
+ observer_thread = threading.Thread(target=observer.run)
+ observer_thread.start()
+
+ # start event listene
+ event_manager = EventListener(wake_up=observer.wake_up)
+ event_manager_thread = threading.Thread(target=event_manager.run)
+ event_manager_thread.start()
+ except:
+ logger.log_exc("Exception in child thread")
- # start event listene
- event_manager = EventListener(wake_up=observer.wake_up)
- event_manager_thread = threading.Thread(target=event_manager.run)
- event_manager_thread.start()
-
diff --git a/planetstack/observer/deleters/network_deleter.py b/planetstack/observer/deleters/network_deleter.py
index 51f9fcb..0d21fda 100644
--- a/planetstack/observer/deleters/network_deleter.py
+++ b/planetstack/observer/deleters/network_deleter.py
@@ -1,17 +1,19 @@
-from core.models import Network
-from deleter import Deleter
+from core.models import Network, NetworkDeployments
+from observer.deleter import Deleter
+from observer.deleters.network_deployment_deleter import NetworkDeploymentDeleter
+from util.logger import Logger, logging
+
+logger = Logger(level=logging.INFO)
class NetworkDeleter(Deleter):
model='Network'
def call(self, pk):
network = Network.objects.get(pk=pk)
- if (network.router_id) and (network.subnet_id):
- self.driver.delete_router_interface(network.router_id, network.subnet_id)
- if network.subnet_id:
- self.driver.delete_subnet(network.subnet_id)
- if network.router_id:
- self.driver.delete_router(network.router_id)
- if network.network_id:
- self.driver.delete_network(network.network_id)
+ network_deployment_deleter = NetworkDeploymentDeleter()
+ for network_deployment in NetworkDeployments.objects.filter(network=network):
+ try:
+ network_deployment_deleter(network_deployment.id)
+ except:
+ logger.log_exc("Failed to delte network deployment %s" % network_deployment)
network.delete()
diff --git a/planetstack/observer/deleters/network_deployment_deleter.py b/planetstack/observer/deleters/network_deployment_deleter.py
new file mode 100644
index 0000000..72b10b2
--- /dev/null
+++ b/planetstack/observer/deleters/network_deployment_deleter.py
@@ -0,0 +1,21 @@
+from core.models import Network, NetworkDeployments
+from observer.deleter import Deleter
+from openstack.driver import OpenStackDriver
+
+class NetworkDeploymentDeleter(Deleter):
+ model='NetworkDeployment'
+
+ def call(self, pk):
+ network_deployment = NetworkDeployments.objects.get(pk=pk)
+ driver = OpenStackDriver().client_driver(caller=network_deployment.network.owner.creator,
+ tenant=network_deployment.network.owner.name,
+ deployment=network_deployment.deployment.name)
+ if (network_deployment.router_id) and (network_deployment.subnet_id):
+ driver.delete_router_interface(network_deployment.router_id, network_deployment.subnet_id)
+ if network_deployment.subnet_id:
+ driver.delete_subnet(network_deployment.subnet_id)
+ if network_deployment.router_id:
+ driver.delete_router(network_deployment.router_id)
+ if network_deployment.net_id:
+ driver.delete_network(network_deployment.net_id)
+ network_deployment.delete()
diff --git a/planetstack/observer/deleters/site_deleter.py b/planetstack/observer/deleters/site_deleter.py
index bb29c94..c97dee1 100644
--- a/planetstack/observer/deleters/site_deleter.py
+++ b/planetstack/observer/deleters/site_deleter.py
@@ -1,11 +1,14 @@
-from core.models import Site
-from observer.delete import Deleter
+from core.models import Site, SiteDeployments
+from observer.deleter import Deleter
+from observer.deleters.site_deployment_deleter import SiteDeploymentDeleter
class SiteDeleter(Deleter):
model='Site'
def call(self, pk):
site = Site.objects.get(pk=pk)
- if site.tenant_id:
- self.driver.delete_tenant(site.tenant_id)
+ site_deployments = SiteDeployments.objects.filter(site=site)
+ site_deployment_deleter = SiteDeploymentDeleter()
+ for site_deployment in site_deployments:
+ site_deployment_deleter(site_deployment.id)
site.delete()
diff --git a/planetstack/observer/deleters/site_deployment_deleter.py b/planetstack/observer/deleters/site_deployment_deleter.py
new file mode 100644
index 0000000..fa97be2
--- /dev/null
+++ b/planetstack/observer/deleters/site_deployment_deleter.py
@@ -0,0 +1,12 @@
+from core.models import Site, SiteDeployments
+from observer.deleter import Deleter
+
+class SiteDeploymentDeleter(Deleter):
+ model='SiteDeployments'
+
+ def call(self, pk):
+ site_deployment = SiteDeployments.objects.get(pk=pk)
+ if site_deployment.tenant_id:
+ driver = self.driver.admin_driver(deployment=site_deployment.deployment.name)
+ driver.delete_tenant(site_deployment.tenant_id)
+ site_deployment.delete()
diff --git a/planetstack/observer/deleters/slice_deleter.py b/planetstack/observer/deleters/slice_deleter.py
index 6796d7a..90b58c3 100644
--- a/planetstack/observer/deleters/slice_deleter.py
+++ b/planetstack/observer/deleters/slice_deleter.py
@@ -1,22 +1,19 @@
-from core.models import Slice
+from core.models import Slice, SliceDeployments, User
from observer.deleter import Deleter
+from observer.deleters.slice_deployment_deleter import SliceDeploymentDeleter
+from util.logger import Logger, logging
+
+logger = Logger(level=logging.INFO)
class SliceDeleter(Deleter):
- model='Slice'
+ model='Slice'
- def call(self, pk):
- slice = Slice.objects.get(pk=pk)
- self.driver.delete_router_interface(slice.router_id, slice.subnet_id)
- self.driver.delete_subnet(slice.subnet_id)
- self.driver.delete_router(slice.router_id)
- self.driver.delete_network(slice.network_id)
- self.driver.delete_tenant(slice.tenant_id)
- # delete external route
- subnet = None
- subnets = self.driver.shell.quantum.list_subnets()['subnets']
- for snet in subnets:
- if snet['id'] == slice.subnet_id:
- subnet = snet
- if subnet:
- self.driver.delete_external_route(subnet)
+ def call(self, pk):
+ slice = Slice.objects.get(pk=pk)
+ slice_deployment_deleter = SliceDeploymentDeleter()
+ for slice_deployment in SliceDeployments.objects.filter(slice=slice):
+ try:
+ slice_deployment_deleter(slice_deployment.id)
+ except:
+ logger.log_exc("Failed to delete slice_deployment %s" % slice_deployment)
slice.delete()
diff --git a/planetstack/observer/deleters/slice_deployment_deleter.py b/planetstack/observer/deleters/slice_deployment_deleter.py
new file mode 100644
index 0000000..33e0836
--- /dev/null
+++ b/planetstack/observer/deleters/slice_deployment_deleter.py
@@ -0,0 +1,34 @@
+from core.models import Slice, SliceDeployments, User
+from observer.deleter import Deleter
+from openstack.driver import OpenStackDriver
+
+class SliceDeploymentDeleter(Deleter):
+ model='SliceDeployments'
+
+ def call(self, pk):
+ slice_deployment = SliceDeployments.objects.get(pk=pk)
+ user = User.objects.get(id=slice_deployment.slice.creator.id)
+ driver = OpenStackDriver().admin_driver(deployment=slice_deployment.deployment.name)
+ client_driver = driver.client_driver(caller=user,
+ tenant=slice_deployment.slice.name,
+ deployment=slice_deployment.deployment.name)
+
+ if slice_deployment.router_id and slice_deployment.subnet_id:
+ client_driver.delete_router_interface(slice_deployment.router_id, slice_deployment.subnet_id)
+ if slice_deployment.subnet_id:
+ client_driver.delete_subnet(slice_deployment.subnet_id)
+ if slice_deployment.router_id:
+ client_driver.delete_router(slice_deployment.router_id)
+ if slice_deployment.network_id:
+ client_driver.delete_network(slice_deployment.network_id)
+ if slice_deployment.tenant_id:
+ driver.delete_tenant(slice_deployment.tenant_id)
+ # delete external route
+ #subnet = None
+ #subnets = client_driver.shell.quantum.list_subnets()['subnets']
+ #for snet in subnets:
+ # if snet['id'] == slice_deployment.subnet_id:
+ # subnet = snet
+ #if subnet:
+ # driver.delete_external_route(subnet)
+ slice_deployment.delete()
diff --git a/planetstack/observer/deleters/sliver_deleter.py b/planetstack/observer/deleters/sliver_deleter.py
index d76b533..097f0f7 100644
--- a/planetstack/observer/deleters/sliver_deleter.py
+++ b/planetstack/observer/deleters/sliver_deleter.py
@@ -1,4 +1,4 @@
-from core.models import Sliver
+from core.models import Sliver, SliceDeployments
from observer.deleter import Deleter
class SliverDeleter(Deleter):
@@ -7,5 +7,8 @@
def call(self, pk):
sliver = Sliver.objects.get(pk=pk)
if sliver.instance_id:
- self.driver.destroy_instance(sliver.instance_id)
+ driver = self.driver.client_driver(caller=sliver.creator,
+ tenant=sliver.slice.name,
+ deployment=sliver.deploymentNetwork.name)
+ driver.destroy_instance(sliver.instance_id)
sliver.delete()
diff --git a/planetstack/observer/deleters/user_deleter.py b/planetstack/observer/deleters/user_deleter.py
index f250993..3573f8d 100644
--- a/planetstack/observer/deleters/user_deleter.py
+++ b/planetstack/observer/deleters/user_deleter.py
@@ -1,11 +1,13 @@
-from core.models import User
+from core.models import User, UserDeployments
from observer.deleter import Deleter
+from observer.deleters.user_deployment_deleter import UserDeploymentDeleter
class UserDeleter(Deleter):
model='User'
def call(self, pk):
user = User.objects.get(pk=pk)
- if user.kuser_id:
- self.driver.delete_user(user.kuser_id)
+ user_deployment_deleter = UserDeploymentDeleter()
+ for user_deployment in UserDeployments.objects.filter(user=user):
+ user_deployment_deleter(user_deployment.id)
user.delete()
diff --git a/planetstack/observer/deleters/user_deployment_deleter.py b/planetstack/observer/deleters/user_deployment_deleter.py
new file mode 100644
index 0000000..49d349b
--- /dev/null
+++ b/planetstack/observer/deleters/user_deployment_deleter.py
@@ -0,0 +1,12 @@
+from core.models import User, UserDeployments
+from observer.deleter import Deleter
+
+class UserDeploymentDeleter(Deleter):
+ model='UserDeployment'
+
+ def call(self, pk):
+ user_deployment = UserDeployments.objects.get(pk=pk)
+ if user_deployment.user.kuser_id:
+ driver = self.driver.admin_driver(deployment=user_deployment.deployment.name)
+ driver.delete_user(user_deployment.user.kuser_id)
+ user_deployment.delete()
diff --git a/planetstack/observer/event_loop.py b/planetstack/observer/event_loop.py
index bdf5ce3..6c19215 100644
--- a/planetstack/observer/event_loop.py
+++ b/planetstack/observer/event_loop.py
@@ -16,8 +16,9 @@
from util.logger import Logger, logging, logger
#from timeout import timeout
from planetstack.config import Config
-from observer.steps import *
+#from observer.steps import *
from syncstep import SyncStep
+from toposort import toposort
debug_mode = False
@@ -26,52 +27,6 @@
class StepNotReady(Exception):
pass
-def toposort(g, steps=None):
- if (not steps):
- keys = set(g.keys())
- values = set({})
- for v in g.values():
- values=values | set(v)
-
- steps=list(keys|values)
- reverse = {}
-
- for k,v in g.items():
- for rk in v:
- try:
- reverse[rk].append(k)
- except:
- reverse[rk]=k
-
- sources = []
- for k,v in g.items():
- if not reverse.has_key(k):
- sources.append(k)
-
-
- for k,v in reverse.iteritems():
- if (not v):
- sources.append(k)
-
- order = []
- marked = []
-
- while sources:
- n = sources.pop()
- try:
- for m in g[n]:
- if m not in marked:
- sources.append(m)
- marked.append(m)
- except KeyError:
- pass
- if (n in steps):
- order.append(n)
-
- order.reverse()
- order.extend(set(steps)-set(order))
- return order
-
class NoOpDriver:
def __init__(self):
self.enabled = True
@@ -95,6 +50,7 @@
self.driver = NoOpDriver()
def wait_for_event(self, timeout):
+ logger.info('Waiting for event')
self.event_cond.acquire()
self.event_cond.wait(timeout)
self.event_cond.release()
@@ -166,7 +122,8 @@
for dest in provides_dict[m]:
# no deps, pass
try:
- step_graph[source].append(dest)
+ if (dest not in step_graph[source]):
+ step_graph[source].append(dest)
except:
step_graph[source]=[dest]
except KeyError:
@@ -248,73 +205,91 @@
if (failed_step in step.dependencies):
raise StepNotReady
- def run(self):
- if not self.driver.enabled:
- return
- if (self.driver_kind=="openstack") and (not self.driver.has_openstack):
- return
- while True:
- try:
- logger.info('Waiting for event')
- tBeforeWait = time.time()
- self.wait_for_event(timeout=30)
- logger.info('Observer woke up')
+ def run_steps(self):
+ try:
+ logger.info('Observer run steps')
- # Set of whole steps that failed
- failed_steps = []
+ # Set of whole steps that failed
+ failed_steps = []
- # Set of individual objects within steps that failed
- failed_step_objects = set()
+ # Set of individual objects within steps that failed
+ failed_step_objects = set()
- for S in self.ordered_steps:
- step = self.step_lookup[S]
- start_time=time.time()
+ for S in self.ordered_steps:
+ step = self.step_lookup[S]
+ start_time=time.time()
+
+ sync_step = step(driver=self.driver)
+ sync_step.__name__ = step.__name__
+ sync_step.dependencies = []
+ try:
+ mlist = sync_step.provides
- sync_step = step(driver=self.driver)
- sync_step.__name__ = step.__name__
- sync_step.dependencies = []
- try:
- mlist = sync_step.provides
-
- for m in mlist:
- sync_step.dependencies.extend(self.model_dependency_graph[m.__name__])
- except KeyError:
- pass
- sync_step.debug_mode = debug_mode
+ for m in mlist:
+ sync_step.dependencies.extend(self.model_dependency_graph[m.__name__])
+ except KeyError:
+ pass
+ sync_step.debug_mode = debug_mode
- should_run = False
+ should_run = False
+ try:
+ # Various checks that decide whether
+ # this step runs or not
+ self.check_class_dependency(sync_step, failed_steps) # dont run Slices if Sites failed
+ self.check_schedule(sync_step) # dont run sync_network_routes if time since last run < 1 hour
+ should_run = True
+ except StepNotReady:
+ logger.info('Step not ready: %s'%sync_step.__name__)
+ failed_steps.append(sync_step)
+ except:
+ logger.info('Exception when checking schedule: %s'%sync_step.__name__)
+ failed_steps.append(sync_step)
+
+ if (should_run):
try:
- # Various checks that decide whether
- # this step runs or not
- self.check_class_dependency(sync_step, failed_steps) # dont run Slices if Sites failed
- self.check_schedule(sync_step) # dont run sync_network_routes if time since last run < 1 hour
- should_run = True
- except StepNotReady:
- logging.info('Step not ready: %s'%sync_step.__name__)
- failed_steps.append(sync_step)
+ duration=time.time() - start_time
+
+ logger.info('Executing step %s' % sync_step.__name__)
+
+ # ********* This is the actual sync step
+ #import pdb
+ #pdb.set_trace()
+ failed_objects = sync_step(failed=list(failed_step_objects))
+
+
+ self.check_duration(sync_step, duration)
+ if failed_objects:
+ failed_step_objects.update(failed_objects)
+ self.update_run_time(sync_step)
except:
- failed_steps.append(sync_step)
+ logger.log_exc('Failure in step: %s'%sync_step.__name__)
+ failed_steps.append(S)
+ self.save_run_times()
+ except:
+ logger.log_exc("Exception in observer run loop")
+ traceback.print_exc()
- if (should_run):
- try:
- duration=time.time() - start_time
+ def run(self):
+ try:
+ logger.info('Observer start run loop')
+ if not self.driver.enabled:
+ return
+ if (self.driver_kind=="openstack") and (not self.driver.has_openstack):
+ return
- logger.info('Executing step %s' % sync_step.__name__)
+ while True:
+ try:
+ self.wait_for_event(timeout=30)
+ except:
+ logger.log_exc("Exception in observer wait for event")
+ traceback.print_exc()
- # ********* This is the actual sync step
- #import pdb
- #pdb.set_trace()
- failed_objects = sync_step(failed=list(failed_step_objects))
-
-
- self.check_duration(sync_step, duration)
- if failed_objects:
- failed_step_objects.update(failed_objects)
- self.update_run_time(sync_step)
- except:
- failed_steps.append(S)
- self.save_run_times()
- except:
- logger.log_exc("Exception in observer run loop")
- traceback.print_exc()
+ try:
+ self.run_steps()
+ except:
+ logger.log_exc("Exception in observer run steps")
+ traceback.print_exc()
+ except:
+ logger.log_exc("Exception in observer run loop")
+ traceback.print_exc()
diff --git a/planetstack/observer/event_manager.py b/planetstack/observer/event_manager.py
index 112564a..bd04ced 100644
--- a/planetstack/observer/event_manager.py
+++ b/planetstack/observer/event_manager.py
@@ -13,15 +13,39 @@
import json
import traceback
-# decorator that marks dispatachable event methods
+random_client_id=None
+def get_random_client_id():
+ global random_client_id
+
+ if (random_client_id is None) and os.path.exists("/opt/planetstack/random_client_id"):
+ # try to use the last one we used, if we saved it
+ try:
+ random_client_id = open("/opt/planetstack/random_client_id","r").readline().strip()
+ print "get_random_client_id: loaded %s" % random_client_id
+ except:
+ print "get_random_client_id: failed to read /opt/planetstack/random_client_id"
+
+ if random_client_id is None:
+ random_client_id = base64.urlsafe_b64encode(os.urandom(12))
+ print "get_random_client_id: generated new id %s" % random_client_id
+
+ # try to save it for later (XXX: could race with another client here)
+ try:
+ open("/opt/planetstack/random_client_id","w").write("%s\n" % random_client_id)
+ except:
+ print "get_random_client_id: failed to write /opt/planetstack/random_client_id"
+
+ return random_client_id
+
+# decorator that marks dispatachable event methods
def event(func):
setattr(func, 'event', func.__name__)
- return func
+ return func
class EventHandler:
# This code is currently not in use.
def __init__(self):
- pass
+ pass
@staticmethod
def get_events():
@@ -36,7 +60,7 @@
if hasattr(self, event):
return getattr(self, event)(*args, **kwds)
-
+
class EventSender:
def __init__(self,user=None,clientid=None):
try:
@@ -47,8 +71,8 @@
try:
clid = Config().feefie_client_id
except:
- clid = self.random_client_id()
-
+ clid = get_random_client_id()
+ print "EventSender: no feefie_client_id configured. Using random id %s" % clid
self.fofum = Fofum(user=user)
self.fofum.make(clid)
@@ -116,13 +140,6 @@
if (not deletion and self.wake_up):
self.wake_up()
- def random_client_id(self):
- try:
- return self.client_id
- except AttributeError:
- self.client_id = base64.urlsafe_b64encode(os.urandom(12))
- return self.client_id
-
def run(self):
# This is our unique client id, to be used when firing and receiving events
# It needs to be generated once and placed in the config file
@@ -135,7 +152,8 @@
try:
clid = Config().feefie_client_id
except:
- clid = self.random_client_id()
+ clid = get_random_client_id()
+ print "EventListener: no feefie_client_id configured. Using random id %s" % clid
f = Fofum(user=user)
diff --git a/planetstack/observer/steps/__init__.py b/planetstack/observer/steps/__init__.py
index 926a7dc..2ef6922 100644
--- a/planetstack/observer/steps/__init__.py
+++ b/planetstack/observer/steps/__init__.py
@@ -1,14 +1,16 @@
-from .sync_external_routes import SyncExternalRoutes
+#from .sync_external_routes import SyncExternalRoutes
from .sync_network_slivers import SyncNetworkSlivers
from .sync_networks import SyncNetworks
+from .sync_network_deployments import SyncNetworkDeployments
from .sync_site_privileges import SyncSitePrivileges
from .sync_sites import SyncSites
from .sync_slice_memberships import SyncSliceMemberships
from .sync_slices import SyncSlices
-from .sync_sliver_ips import SyncSliverIps
+#from .sync_sliver_ips import SyncSliverIps
from .sync_slivers import SyncSlivers
from .sync_users import SyncUsers
from .sync_roles import SyncRoles
from .sync_nodes import SyncNodes
from .sync_images import SyncImages
+from .sync_image_deployments import SyncImageDeployments
from .garbage_collector import GarbageCollector
diff --git a/planetstack/observer/steps/garbage_collector.py b/planetstack/observer/steps/garbage_collector.py
index a13fd22..6feff14 100644
--- a/planetstack/observer/steps/garbage_collector.py
+++ b/planetstack/observer/steps/garbage_collector.py
@@ -6,9 +6,10 @@
from planetstack.config import Config
from util.logger import Logger, logging
from observer.openstacksyncstep import OpenStackSyncStep
+from core.models.deployment import Deployment
from core.models import *
-logger = Logger(level=logging.INFO)
+logger = Logger(logfile='/var/log/observer.log', level=logging.INFO)
class GarbageCollector(OpenStackSyncStep):
requested_interval = 86400
@@ -16,44 +17,66 @@
def call(self, **args):
try:
- #self.gc_roles()
- self.gc_tenants()
- self.gc_users()
- self.gc_user_tenant_roles()
+ self.gc_networks()
+ #self.gc_user_tenant_roles()
+ #self.gc_tenants()
+ #self.gc_users()
self.gc_slivers()
- self.gc_sliver_ips()
- self.gc_external_routes()
+ #self.gc_sliver_ips()
+ pass
except:
- traceback.print_exc()
+ traceback.print_exc()
- def gc_roles(self):
+ def gc_networks(self):
"""
- all role that don't already exist in keystone. Remove keystone roles that
- don't exist in planetstack
- """
- # sync all roles that don't already in keystone
- keystone_roles = self.driver.shell.keystone.roles.findall()
- keystone_role_names = [kr.name for kr in keystone_roles]
- pending_roles = Role.objects.all()
- pending_role_names = [r.role_type for r in pending_roles]
- # don't delete roles for now
+ Remove all neutron networks that do not exist in the planetstack db.
"""
- # delete keystone roles that don't exist in planetstack
- for keystone_role in keystone_roles:
- if keystone_role.name == 'admin':
+ # some networks cannot be deleted
+ system_networks = ['nat-net','private-admin']
+ for network_template in NetworkTemplate.objects.all():
+ if network_template.sharedNetworkName and \
+ network_template.sharedNetworkName not in system_networks:
+ system_networks.append(network_template.sharedNetworkName)
+
+ networks = Network.objects.filter(enacted__isnull=False)
+ networks_dict = {}
+ for network in networks:
+ networks_dict[network.name] = network
+
+ # some deployments are at the same url. Keep track of the urls we've visited
+ # to make sure we aren't making redundant calls
+ completed_urls = []
+ for deployment in Deployment.objects.all():
+ # skip deployments that we've already processed
+ if deployment.auth_url in completed_urls:
continue
- if keystone_role.name not in pending_role_names:
- try:
- self.driver.delete_role({id: keystone_role.id})
- except:
- traceback.print_exc()
- """
+ try:
+ driver = self.driver.admin_driver(deployment=deployment)
+ neutron_networks = driver.shell.quantum.list_networks()['networks']
+ for neutron_network in neutron_networks:
+ # skip system networks
+ if neutron_network['name'] in system_networks:
+ continue
+ if neutron_network['name'] not in networks_dict:
+ try:
+ logger.info("GarbageCollector: deleting network %s" % neutron_network['name'])
+ for subnet_id in neutron_network['subnets']:
+ driver.delete_subnet(subnet_id)
+ driver.delete_network(neutron_network['id'])
+ except:
+ logger.log_exc("GarbageCollector: delete network %s failed" % neutron_network['name'])
+ except:
+ logger.log_exc("GarbageCollector: Error at deployment %s" % deployment)
+
+ completed_urls.append(deployment.auth_url)
def gc_tenants(self):
"""
Remove sites and slices that no don't exist in openstack db if they
have an enacted time (enacted != None).
"""
+ # some tenants cannot be deleted
+ system_tenants = ['admin','service', 'invisible_to_admin']
# get all sites that where enacted != null. We can assume these sites
# have previously been synced and need to be checed for deletion.
sites = Site.objects.filter(enacted__isnull=False)
@@ -69,24 +92,36 @@
slice_dict[slice.name] = slice
# delete keystone tenants that don't have a site record
- tenants = self.driver.shell.keystone.tenants.findall()
- system_tenants = ['admin','service', 'invisible_to_admin']
- for tenant in tenants:
- if tenant.name in system_tenants:
+ # some deployments are at the same url. Keep track of the urls we've visited
+ # to make sure we aren't making redundant calls
+ completed_urls = []
+ for deployment in Deployment.objects.all():
+ # skip deployments that we've already processed
+ if deployment.auth_url in completed_urls:
continue
- if tenant.name not in site_dict and tenant.name not in slice_dict:
- try:
- self.driver.delete_tenant(tenant.id)
- logger.info("deleted tenant: %s" % (tenant))
- except:
- logger.log_exc("delete tenant failed: %s" % tenant)
+ driver = self.driver.admin_driver(deployment=deployment)
+ tenants = driver.shell.keystone.tenants.findall()
+ for tenant in tenants:
+ if tenant.name in system_tenants:
+ continue
+ if tenant.name not in site_dict and tenant.name not in slice_dict:
+ try:
+ logger.info("GarbageCollector: deleting tenant: %s" % (tenant))
+ driver.delete_tenant(tenant.id)
+ except:
+ logger.log_exc("GarbageCollector: delete tenant failed: %s" % tenant)
+ completed_urls.append(deployment.auth_url)
def gc_users(self):
"""
- Remove users that no don't exist in openstack db if they have an
+ Remove users that do not exist in openstack db if they have an
enacted time (enacted != None).
"""
+ # some users cannot be deleted
+ system_users = ['admin', 'nova', 'quantum', 'neutron' 'glance', \
+ 'cinder', 'swift', 'service', 'demo']
+
# get all users that where enacted != null. We can assume these users
# have previously been synced and need to be checed for deletion.
users = User.objects.filter(enacted__isnull=False)
@@ -95,18 +130,26 @@
user_dict[user.kuser_id] = user
# delete keystone users that don't have a user record
- system_users = ['admin', 'nova', 'quantum', 'glance', 'cinder', 'swift', 'service', 'demo']
- users = self.driver.shell.keystone.users.findall()
- for user in users:
- if user.name in system_users:
+ # some deployments are at the same url. Keep track of the urls we've visited
+ # to make sure we aren't making redundant calls
+ completed_urls = []
+ for deployment in Deployment.objects.all():
+ # skip deployments that we've already processed
+ if deployment.auth_url in completed_urls:
continue
- if user.id not in user_dict:
- try:
- self.driver.delete_user(user.id)
- logger.info("deleted user: %s" % user)
- except:
- logger.log_exc("delete user failed: %s" % user)
-
+
+ driver = self.driver.admin_driver(deployment=deployment)
+ users = driver.shell.keystone.users.findall()
+ for user in users:
+ if user.name in system_users:
+ continue
+ if user.id not in user_dict:
+ try:
+ logger.info("GarbageCollector: deleting user: %s" % user)
+ self.driver.delete_user(user.id)
+ except:
+ logger.log_exc("GarbageCollector: delete user failed: %s" % user)
+ completed_urls.append(deployment.auth_url)
def gc_user_tenant_roles(self):
"""
@@ -119,46 +162,58 @@
user_tenant_roles[(site_priv.user.kuser_id, site_priv.site.tenant_id)].append(site_priv.role.role)
for slice_memb in SlicePrivilege.objects.filter(enacted__isnull=False):
user_tenant_roles[(slice_memb.user.kuser_id, slice_memb.slice.tenant_id)].append(slice_memb.role.role)
-
+
+ # some deployments are at the same url. Keep track of the urls we've visited
+ # to make sure we aren't making redundant calls
+ completed_urls = []
# Some user tenant role aren't stored in planetstack but they must be preserved.
# Role that fall in this category are
# 1. Never remove a user's role that their home site
# 2. Never remove a user's role at a slice they've created.
# Keep track of all roles that must be preserved.
users = User.objects.all()
- preserved_roles = {}
- for user in users:
- tenant_ids = [s['tenant_id'] for s in user.slices.values()]
- if user.site:
- tenant_ids.append(user.site.tenant_id)
- preserved_roles[user.kuser_id] = tenant_ids
-
-
- # begin removing user tenant roles from keystone. This is stored in the
- # Metadata table.
- for metadata in self.driver.shell.keystone_db.get_metadata():
- # skip admin roles
- if metadata.user_id == self.driver.admin_user.id:
+ for deployment in Deployment.objects.all():
+ # skip deployments that we've already processed
+ if deployment.auth_url in completed_urls:
continue
- # skip preserved tenant ids
- if metadata.user_id in preserved_roles and \
- metadata.tenant_id in preserved_roles[metadata.user_id]:
- continue
- # get roles for user at this tenant
- user_tenant_role_ids = user_tenant_roles.get((metadata.user_id, metadata.tenant_id), [])
- if user_tenant_role_ids:
- # The user has roles at the tenant. Check if roles need to
- # be updated.
- user_keystone_role_ids = metadata.data.get('roles', [])
- for role_id in user_keystone_role_ids:
- if role_id not in user_tenant_role_ids:
- user_keystone_role_ids.pop(user_keystone_role_ids.index(role_id))
- else:
- # The user has no roles at this tenant.
- metadata.data['roles'] = []
- #session.add(metadata)
- logger.info("pruning metadata for %s at %s" % (metadata.user_id, metadata.tenant_id))
+ driver = self.driver.admin_driver(deployment=deployment)
+ tenants = driver.shell.keystone.tenants.list()
+ for user in users:
+ # skip admin roles
+ if user.kuser_id == self.driver.admin_user.id:
+ continue
+
+ ignore_tenant_ids = []
+ k_user = driver.shell.keystone.users.find(id=user.kuser_id)
+ ignore_tenant_ids = [s['tenant_id'] for s in user.slices.values()]
+ if user.site:
+ ignore_tenant_ids.append(user.site.tenant_id)
+
+ # get user roles in keystone
+ for tenant in tenants:
+ # skip preserved tenant ids
+ if tenant.tenant_id in ignore_tenant_ids:
+ continue
+ # compare user tenant roles
+ user_tenant_role_ids = user_tenant_roles.get((user.kuser_id, tenant.id), [])
+
+ if user_tenant_role_ids:
+ # The user has roles at the tenant. Check if roles need to
+ # be updated.
+ k_user_roles = driver.shell.keystone.roles.roles_for_user(k_user, tenant)
+ for k_user_role in k_user_roles:
+ if k_user_role.role_id not in user_tenant_role_ids:
+ logger.info("GarbageCollector: removing user role %s for %s at %s" % \
+ (k_user_role, k_user.username, tenant.name))
+ driver.shell.keyston.remove_user_role(k_user, k_user_role, tenant)
+ else:
+ # remove all roles the user has at the tenant.
+ for k_user_role in k_user_roles:
+ logger.info("GarbageCollector: removing user role %s for %s at %s" % \
+ (k_user_role, k_user.username, tenant.name))
+ driver.shell.keyston.remove_user_role(k_user, k_user_role, tenant)
+ completed_urls.append(deployment.auth_url)
def gc_slivers(self):
"""
@@ -172,20 +227,33 @@
for sliver in slivers:
sliver_dict[sliver.instance_id] = sliver
- # delete sliver that don't have a sliver record
- ctx = self.driver.shell.nova_db.ctx
- instances = self.driver.shell.nova_db.instance_get_all(ctx)
- for instance in instances:
- if instance.uuid not in sliver_dict:
- try:
- # lookup tenant and update context
- tenant = self.driver.shell.keystone.tenants.find(id=instance.project_id)
- driver = self.driver.client_driver(tenant=tenant.name)
- driver.destroy_instance(instance.uuid)
- logger.info("destroyed sliver: %s" % (instance))
- except:
- logger.log_exc("destroy sliver failed: %s" % instance)
-
+
+ # some deployments are at the same url. Keep track of the urls we've visited
+ # to make sure we aren't making redundant calls
+ completed_urls = []
+ for deployment in Deployment.objects.all():
+ # skip deployments that we've already processed
+ if deployment.auth_url in completed_urls:
+ continue
+
+ try:
+ driver = self.driver.admin_driver(deployment=deployment)
+ for tenant in driver.shell.keystone.tenants.list():
+ if tenant.name in ['admin', 'services']:
+ continue
+ # delete sliver that don't have a sliver record
+ tenant_driver = self.driver.client_driver(tenant=tenant.name, deployment=deployment)
+ for instance in tenant_driver.shell.nova.servers.list():
+ if instance.id not in sliver_dict:
+ try:
+ logger.info("GarbageCollector: destroying sliver: %s %s" % (instance, instance.id))
+ tenant_driver.destroy_instance(instance.id)
+ except:
+ logger.log_exc("GarbageCollector: destroy sliver failed: %s" % instance)
+ except:
+ logger.log_exc("GarbageCollector: Error at deployment %s" % deployment)
+ completed_urls.append(deployment.auth_url)
+
def gc_sliver_ips(self):
"""
@@ -195,7 +263,8 @@
slivers = Sliver.objects.filter(ip=None)
for sliver in slivers:
# update connection
- driver = self.driver.client_driver(tenant=sliver.slice.name)
+
+ driver = self.driver.client_driver(tenant=sliver.slice.name, deployment=sliver.node.deployment)
servers = driver.shell.nova.servers.findall(id=sliver.instance_id)
if not servers:
continue
@@ -206,9 +275,6 @@
sliver.save()
logger.info("updated sliver ip: %s %s" % (sliver, ips[0]))
- def gc_external_routes(self):
- pass
-
def gc_nodes(self):
# collect local nodes
nodes = Node.objects.all()
@@ -217,10 +283,12 @@
nodes_dict[node.name] = node
# collect nova nodes:
- compute_nodes = self.client.nova.hypervisors.list()
compute_nodes_dict = {}
- for compute_node in compute_nodes:
- compute_nodes_dict[compute_node.hypervisor_hostname] = compute_node
+ for deployment in Deployment.objets.all():
+ driver = self.driver.admin_driver(deployment=deployment)
+ compute_nodes = driver.nova.hypervisors.list()
+ for compute_node in compute_nodes:
+ compute_nodes_dict[compute_node.hypervisor_hostname] = compute_node
# remove old nodes
old_node_names = set(nodes_dict.keys()).difference(compute_nodes_dict.keys())
@@ -234,10 +302,12 @@
images_dict[image.name] = image
# collect glance images
- glance_images = self.driver.shell.glance.get_images()
glance_images_dict = {}
- for glance_image in glance_images:
- glance_images_dict[glance_image['name']] = glance_image
+ for deployment in Deployment.objects.all():
+ driver = self.driver.admin_driver(deployment=deployment)
+ glance_images = driver.shell.glance.get_images()
+ for glance_image in glance_images:
+ glance_images_dict[glance_image['name']] = glance_image
# remove old images
old_image_names = set(images_dict.keys()).difference(glance_images_dict.keys())
diff --git a/planetstack/observer/steps/sync_image_deployments.py b/planetstack/observer/steps/sync_image_deployments.py
new file mode 100644
index 0000000..52aaeef
--- /dev/null
+++ b/planetstack/observer/steps/sync_image_deployments.py
@@ -0,0 +1,71 @@
+import os
+import base64
+from collections import defaultdict
+from django.db.models import F, Q
+from planetstack.config import Config
+from observer.openstacksyncstep import OpenStackSyncStep
+from core.models.deployment import Deployment
+from core.models.image import Image, ImageDeployments
+from util.logger import Logger, logging
+
+logger = Logger(level=logging.INFO)
+
+class SyncImageDeployments(OpenStackSyncStep):
+ provides=[ImageDeployments]
+ requested_interval=0
+
+ def fetch_pending(self):
+ # ensure images are available across all deployments
+ image_deployments = ImageDeployments.objects.all()
+ image_deploy_lookup = defaultdict(list)
+ for image_deployment in image_deployments:
+ image_deploy_lookup[image_deployment.image].append(image_deployment.deployment)
+
+ all_deployments = Deployment.objects.all()
+ for image in Image.objects.all():
+ expected_deployments = all_deployments
+ for expected_deployment in expected_deployments:
+ if image not in image_deploy_lookup or \
+ expected_deployment not in image_deploy_lookup[image]:
+ id = ImageDeployments(image=image, deployment=expected_deployment)
+ id.save()
+
+ # now we return all images that need to be enacted
+ return ImageDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
+ def sync_record(self, image_deployment):
+ logger.info("Working on image %s on deployment %s" % (image_deployment.image.name, image_deployment.deployment.name))
+ driver = self.driver.admin_driver(deployment=image_deployment.deployment.name)
+ images = driver.shell.glance.get_images()
+ glance_image = None
+ for image in images:
+ if image['name'] == image_deployment.image.name:
+ glance_image = image
+ break
+ if glance_image:
+ logger.info("Found image %s on deployment %s" % (image_deployment.image.name, image_deployment.deployment.name))
+ image_deployment.glance_image_id = glance_image['id']
+ elif image_deployment.image.path:
+ image = {
+ 'name': image_deployment.image.name,
+ 'is_public': True,
+ 'disk_format': 'raw',
+ 'container_format': 'bare',
+ 'file': image_deployment.image.path,
+ }
+
+ logger.info("Creating image %s on deployment %s" % (image_deployment.image.name, image_deployment.deployment.name))
+
+ glance_image = driver.shell.glanceclient.images.create(name=image_deployment.image.name,
+ is_public=True,
+ disk_format='raw',
+ container_format='bare')
+ glance_image.update(data=open(image_deployment.image.path, 'rb'))
+
+ # While the images returned by driver.shell.glance.get_images()
+ # are dicts, the images returned by driver.shell.glanceclient.images.create
+ # are not dicts. We have to use getattr() instead of [] operator.
+ if not glance_image or not getattr(glance_image,"id",None):
+ raise Exception, "Add image failed at deployment %s" % image_deployment.deployment.name
+ image_deployment.glance_image_id = getattr(glance_image, "id")
+ image_deployment.save()
diff --git a/planetstack/observer/steps/sync_images.py b/planetstack/observer/steps/sync_images.py
index 2dbd74d..2c24e83 100644
--- a/planetstack/observer/steps/sync_images.py
+++ b/planetstack/observer/steps/sync_images.py
@@ -10,20 +10,28 @@
requested_interval=0
def fetch_pending(self):
+ # get list of images on disk
+ images_path = Config().observer_images_directory
+ available_images = {}
+ for f in os.listdir(images_path):
+ if os.path.isfile(os.path.join(images_path ,f)):
+ available_images[f] = os.path.join(images_path ,f)
+
images = Image.objects.all()
image_names = [image.name for image in images]
+
+ for image_name in available_images:
+ #remove file extension
+ clean_name = ".".join(image_name.split('.')[:-1])
+ if clean_name not in image_names:
+ image = Image(name=clean_name,
+ disk_format='raw',
+ container_format='bare',
+ path = available_images[image_name])
+ image.save()
- new_images = []
- glance_images = self.driver.shell.glance.get_images()
- for glance_image in glance_images:
- if glance_image['name'] not in image_names:
- image = Image(image_id=glance_image['id'],
- name=glance_image['name'],
- disk_format=glance_image['disk_format'],
- container_format=glance_image['container_format'])
- new_images.append(image)
-
- return new_images
+
+ return Image.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
def sync_record(self, image):
image.save()
diff --git a/planetstack/observer/steps/sync_network_deployments.py b/planetstack/observer/steps/sync_network_deployments.py
new file mode 100644
index 0000000..04f3270
--- /dev/null
+++ b/planetstack/observer/steps/sync_network_deployments.py
@@ -0,0 +1,117 @@
+import os
+import base64
+from collections import defaultdict
+from netaddr import IPAddress, IPNetwork
+from django.db.models import F, Q
+from planetstack.config import Config
+from observer.openstacksyncstep import OpenStackSyncStep
+from core.models.network import *
+from core.models.slice import *
+from core.models.sliver import Sliver
+from util.logger import Logger, logging
+
+logger = Logger(level=logging.INFO)
+
+class SyncNetworkDeployments(OpenStackSyncStep):
+ requested_interval = 0
+ provides=[Network, NetworkDeployments, Sliver]
+
+ def fetch_pending(self):
+ # network deployments are not visible to users. We must ensure
+ # networks are deployed at all deploymets available to their slices.
+ slice_deployments = SliceDeployments.objects.all()
+ slice_deploy_lookup = defaultdict(list)
+ for slice_deployment in slice_deployments:
+ slice_deploy_lookup[slice_deployment.slice].append(slice_deployment.deployment)
+
+ network_deployments = NetworkDeployments.objects.all()
+ network_deploy_lookup = defaultdict(list)
+ for network_deployment in network_deployments:
+ network_deploy_lookup[network_deployment.network].append(network_deployment.deployment)
+
+ for network in Network.objects.filter():
+ # ignore networks that have
+ # template.visibility = private and translation = none
+ if network.template.visibility == 'private' and not network.template.translation == 'none':
+ continue
+ expected_deployments = slice_deploy_lookup[network.owner]
+ for expected_deployment in expected_deployments:
+ if network not in network_deploy_lookup or \
+ expected_deployment not in network_deploy_lookup[network]:
+ nd = NetworkDeployments(network=network, deployment=expected_deployment)
+ nd.save()
+ return NetworkDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
+ def get_next_subnet(self, deployment=None):
+ # limit ourself to 10.0.x.x for now
+ valid_subnet = lambda net: net.startswith('10.0')
+ driver = self.driver.admin_driver(deployment=deployment)
+ subnets = driver.shell.quantum.list_subnets()['subnets']
+ ints = [int(IPNetwork(subnet['cidr']).ip) for subnet in subnets \
+ if valid_subnet(subnet['cidr'])]
+ ints.sort()
+ if ints:
+ last_ip = IPAddress(ints[-1])
+ else:
+ last_ip = IPAddress('10.0.0.0')
+ last_network = IPNetwork(str(last_ip) + "/24")
+ next_network = IPNetwork(str(IPAddress(last_network) + last_network.size) + "/24")
+ return next_network
+
+ def save_network_deployment(self, network_deployment):
+ if not network_deployment.network_id and network_deployment.network.template.sharedNetworkName:
+ network_deployment.network_id = network_deployment.network.template.sharedNetworkId
+
+ if not network_deployment.net_id:
+ network_name = network_deployment.network.name
+
+ # create network
+ os_network = self.driver.create_network(network_name, shared=True)
+ network_deployment.net_id = os_network['id']
+
+ # create router
+ #router = self.driver.create_router(network_name)
+ #network_deployment.router_id = router['id']
+
+ # create subnet
+ next_subnet = self.get_next_subnet(deployment=network_deployment.deployment.name)
+ cidr = str(next_subnet.cidr)
+ ip_version = next_subnet.version
+ start = str(next_subnet[2])
+ end = str(next_subnet[-2])
+ subnet = self.driver.create_subnet(name=network_name,
+ network_id = network_deployment.net_id,
+ cidr_ip = cidr,
+ ip_version = ip_version,
+ start = start,
+ end = end)
+ network_deployment.subnet = cidr
+ network_deployment.subnet_id = subnet['id']
+ # add subnet as interface to slice's router
+ #self.driver.add_router_interface(router['id'], subnet['id'])
+ # add external route
+ #self.driver.add_external_route(subnet)
+ logger.info("created private subnet (%s) for network: %s" % (cidr, network_deployment.network))
+ else:
+ (network_deployment.subnet_id, network_deployment.subnet) = self.driver.get_network_subnet(network_deployment.net_id)
+ logger.info("sync'ed subnet (%s) for network: %s" % (network_deployment.subnet, network_deployment.network))
+
+ network_deployment.save()
+
+ def sync_record(self, network_deployment):
+ if network_deployment.network.owner and network_deployment.network.owner.creator:
+ try:
+ # update manager context
+ real_driver = self.driver
+ self.driver = self.driver.client_driver(caller=network_deployment.network.owner.creator,
+ tenant=network_deployment.network.owner.name,
+ deployment=network_deployment.deployment.name)
+ self.save_network_deployment(network_deployment)
+ self.driver = real_driver
+ logger.info("saved network deployment: %s" % (network_deployment))
+ except Exception,e:
+ logger.log_exc("save network deployment failed: %s" % network_deployment)
+ raise e
+
+
+
diff --git a/planetstack/observer/steps/sync_network_slivers.py b/planetstack/observer/steps/sync_network_slivers.py
index 09dc7ed..92485a5 100644
--- a/planetstack/observer/steps/sync_network_slivers.py
+++ b/planetstack/observer/steps/sync_network_slivers.py
@@ -30,7 +30,8 @@
for sliver in slivers:
slivers_by_instance_id[sliver.instance_id] = sliver
- ports = self.driver.shell.quantum.list_ports()["ports"]
+ driver = self.driver.client_driver(caller=sliver.creator, tenant=sliver.slice.name, deployment=sliver.node.deployment.name)
+ ports = driver.shell.quantum.list_ports()["ports"]
for port in ports:
if port["id"] in networkSlivers_by_port:
# we already have it
diff --git a/planetstack/observer/steps/sync_networks.py b/planetstack/observer/steps/sync_networks.py
index cb1d52a..fd42f4e 100644
--- a/planetstack/observer/steps/sync_networks.py
+++ b/planetstack/observer/steps/sync_networks.py
@@ -15,55 +15,6 @@
def fetch_pending(self):
return Network.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
- def save_network(self, network):
- if not network.network_id and network.template.sharedNetworkName:
- network.network_id = network.template.sharedNetworkId
-
- if not network.network_id:
- network_name = network.name
-
- # create network
- os_network = self.driver.create_network(network_name, shared=True)
- network.network_id = os_network['id']
-
- # create router
- router = self.driver.create_router(network_name)
- network.router_id = router['id']
-
- # create subnet
- next_subnet = self.get_next_subnet()
- cidr = str(next_subnet.cidr)
- ip_version = next_subnet.version
- start = str(next_subnet[2])
- end = str(next_subnet[-2])
- subnet = self.driver.create_subnet(name=network_name,
- network_id = network.network_id,
- cidr_ip = cidr,
- ip_version = ip_version,
- start = start,
- end = end)
- network.subnet = cidr
- network.subnet_id = subnet['id']
- # add subnet as interface to slice's router
- self.driver.add_router_interface(router['id'], subnet['id'])
- # add external route
- self.driver.add_external_route(subnet)
- logger.info("created private subnet (%s) for network: %s" % (cidr, network))
- else:
- (network.subnet_id, network.subnet) = self.driver.get_network_subnet(network.network_id)
- logger.info("sync'ed subnet (%s) for network: %s" % (network.subnet, network))
- network.save()
-
def sync_record(self, network):
- if network.owner and network.owner.creator:
- try:
- # update manager context
- real_driver = self.driver
- self.driver = self.driver.client_driver(network.owner.creator, network.owner.name)
- self.save_network(network)
- self.driver = real_driver
- logger.info("saved network: %s" % (network))
- except Exception,e:
- logger.log_exc("save network failed: %s" % network)
- raise e
+ network.save()
diff --git a/planetstack/observer/steps/sync_nodes.py b/planetstack/observer/steps/sync_nodes.py
index a1f0803..ecd32b4 100644
--- a/planetstack/observer/steps/sync_nodes.py
+++ b/planetstack/observer/steps/sync_nodes.py
@@ -14,28 +14,28 @@
requested_interval=0
def fetch_pending(self):
- config = Config()
- deployment = Deployment.objects.filter(name=config.plc_deployment)[0]
- login_bases = ['princeton', 'stanford', 'gt', 'uw', 'mpisws']
- sites = Site.objects.filter(login_base__in=login_bases)
-
# collect local nodes
+ sites = Site.objects.all()
nodes = Node.objects.all()
node_hostnames = [node.name for node in nodes]
- # collect nova nodes
- # generate list of new nodes
+ # fetch all nodes from each deployment
+ deployments = Deployment.objects.all()
new_nodes = []
- compute_nodes = self.driver.shell.nova.hypervisors.list()
- for compute_node in compute_nodes:
- if compute_node.hypervisor_hostname not in node_hostnames:
- # pick a random site to add the node to for now
- site_index = random.randint(0, len(sites))
- node = Node(name=compute_node.hypervisor_hostname,
- site=sites[site_index], deployment=deployment)
- new_nodes.append(node)
-
- return new_nodes
+ for deployment in deployments:
+ driver = self.driver.admin_driver(deployment=deployment.name)
+ compute_nodes = driver.shell.nova.hypervisors.list()
+ for compute_node in compute_nodes:
+ if compute_node.hypervisor_hostname not in node_hostnames:
+ # XX TODO:figure out how to correctly identify a node's site.
+ # XX pick a random site to add the node to for now
+ site_index = random.randint(0, len(sites))
+ node = Node(name=compute_node.hypervisor_hostname,
+ site=sites[site_index], deployment=deployment)
+ new_nodes.append(node)
+
+ return new_nodes
+
def sync_record(self, node):
node.save()
diff --git a/planetstack/observer/steps/sync_roles.py b/planetstack/observer/steps/sync_roles.py
index 18a784a..ca85d57 100644
--- a/planetstack/observer/steps/sync_roles.py
+++ b/planetstack/observer/steps/sync_roles.py
@@ -6,7 +6,7 @@
from core.models.role import Role
from core.models.site import SiteRole
from core.models.slice import SliceRole
-from core.models.deployment import DeploymentRole
+from core.models.deployment import Deployment, DeploymentRole
class SyncRoles(OpenStackSyncStep):
provides=[Role]
@@ -29,12 +29,10 @@
def sync_record(self, role):
- save_role = False
- if not role.krole_id:
- krole = self.driver.create_role(role.role)
- role.krole_id = krole.id
- save_role = True
-
- if (save_role):
+ if not role.enacted:
+ deployments = Deployment.objects.all()
+ for deployment in deployments:
+ driver = self.driver.admin_driver(deployment=deployment.name)
+ driver.create_role(role.role)
role.save()
diff --git a/planetstack/observer/steps/sync_site_deployments.py b/planetstack/observer/steps/sync_site_deployments.py
new file mode 100644
index 0000000..a996c85
--- /dev/null
+++ b/planetstack/observer/steps/sync_site_deployments.py
@@ -0,0 +1,28 @@
+import os
+import base64
+from django.db.models import F, Q
+from planetstack.config import Config
+from observer.openstacksyncstep import OpenStackSyncStep
+from core.models.site import *
+
+class SyncSiteDeployments(OpenStackSyncStep):
+ requested_interval=0
+ provides=[Site, SiteDeployments]
+
+ def fetch_pending(self):
+ return SiteDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
+ def sync_record(self, site_deployment):
+ if not site_deployment.tenant_id:
+ driver = self.driver.admin_driver(deployment=site_deployment.deployment.name)
+ tenant = driver.create_tenant(tenant_name=site_deployment.site.login_base,
+ description=site_deployment.site.name,
+ enabled=site_deployment.site.enabled)
+ site_deployment.tenant_id = tenant.id
+ site_deployment.save()
+ elif site_deployment.site.id and site_deployment.tenant_id:
+ driver = self.driver.admin_driver(deployment=site_deployment.name)
+ driver.update_tenant(site_deployment.tenant_id,
+ description=site_deployment.site.name,
+ enabled=site_deployment.site.enabled)
+
diff --git a/planetstack/observer/steps/sync_site_privileges.py b/planetstack/observer/steps/sync_site_privileges.py
index 8287d44..b57ae43 100644
--- a/planetstack/observer/steps/sync_site_privileges.py
+++ b/planetstack/observer/steps/sync_site_privileges.py
@@ -4,6 +4,7 @@
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
from core.models.site import *
+from core.models.user import User, UserDeployments
class SyncSitePrivileges(OpenStackSyncStep):
requested_interval=0
@@ -17,3 +18,14 @@
self.driver.add_user_role(site_priv.user.kuser_id,
site_priv.site.tenant_id,
site_priv.role.role)
+
+ # sync site privileges at all site deployments
+ site_deployments = SiteDeployments.objects.filter(site=site_priv.site)
+ for site_deployment in site_deployments:
+ user_deployments = UserDeployments.objects.filter(deployment=site_deployment.deployment)
+ if user_deployments:
+ kuser_id = user_deployments[0].kuser_id
+ driver = self.driver.admin_driver(deployment=site_deployment.deployment.name)
+ driver.add_user_role(kuser_id,
+ site_deployment.tenant_id,
+ site_priv.role.role)
diff --git a/planetstack/observer/steps/sync_sites.py b/planetstack/observer/steps/sync_sites.py
index 2013c6d..e128e9a 100644
--- a/planetstack/observer/steps/sync_sites.py
+++ b/planetstack/observer/steps/sync_sites.py
@@ -13,22 +13,5 @@
return Site.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
def sync_record(self, site):
- save_site = False
- if not site.tenant_id:
- tenant = self.driver.create_tenant(tenant_name=site.login_base,
- description=site.name,
- enabled=site.enabled)
- site.tenant_id = tenant.id
- save_site = True
- # XXX - What's caller?
- # self.driver.add_user_role(self.caller.kuser_id, tenant.id, 'admin')
-
- # update the record
- if site.id and site.tenant_id:
- self.driver.update_tenant(site.tenant_id,
- description=site.name,
- enabled=site.enabled)
-
- if (save_site):
- site.save() #
+ site.save()
diff --git a/planetstack/observer/steps/sync_slice_deployments.py b/planetstack/observer/steps/sync_slice_deployments.py
new file mode 100644
index 0000000..b40eb6b
--- /dev/null
+++ b/planetstack/observer/steps/sync_slice_deployments.py
@@ -0,0 +1,106 @@
+import os
+import base64
+from collections import defaultdict
+from netaddr import IPAddress, IPNetwork
+from django.db.models import F, Q
+from planetstack.config import Config
+from observer.openstacksyncstep import OpenStackSyncStep
+from core.models.deployment import Deployment
+from core.models.site import SiteDeployments
+from core.models.slice import Slice, SliceDeployments
+from core.models.user import UserDeployments
+from util.logger import Logger, logging
+
+logger = Logger(level=logging.INFO)
+
+class SyncSliceDeployments(OpenStackSyncStep):
+ provides=[SliceDeployments]
+ requested_interval=0
+
+ def fetch_pending(self):
+ # slice deployments are not visible to users. We must ensure
+ # slices are deployed at all deploymets available to their site.
+ site_deployments = SiteDeployments.objects.all()
+ site_deploy_lookup = defaultdict(list)
+ for site_deployment in site_deployments:
+ site_deploy_lookup[site_deployment.site].append(site_deployment.deployment)
+
+ slice_deployments = SliceDeployments.objects.all()
+ slice_deploy_lookup = defaultdict(list)
+ for slice_deployment in slice_deployments:
+ slice_deploy_lookup[slice_deployment.slice].append(slice_deployment.deployment)
+
+ all_deployments = Deployment.objects.all()
+ for slice in Slice.objects.all():
+ # slices are added to all deployments for now
+ expected_deployments = all_deployments
+ #expected_deployments = site_deploy_lookup[slice.site]
+ for expected_deployment in expected_deployments:
+ if slice not in slice_deploy_lookup or \
+ expected_deployment not in slice_deploy_lookup[slice]:
+ sd = SliceDeployments(slice=slice, deployment=expected_deployment)
+ sd.save()
+
+ # now we can return all slice deployments that need to be enacted
+ return SliceDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
+ def get_next_subnet(self, deployment=None):
+ # limit ourself to 10.0.x.x for now
+ valid_subnet = lambda net: net.startswith('10.0')
+ driver = self.driver.admin_driver(deployment=deployment)
+ subnets = driver.shell.quantum.list_subnets()['subnets']
+ ints = [int(IPNetwork(subnet['cidr']).ip) for subnet in subnets \
+ if valid_subnet(subnet['cidr'])]
+ ints.sort()
+ if ints:
+ last_ip = IPAddress(ints[-1])
+ else:
+ last_ip = IPAddress('10.0.0.1')
+ last_ip = IPAddress(ints[-1])
+ last_network = IPNetwork(str(last_ip) + "/24")
+ next_network = IPNetwork(str(IPAddress(last_network) + last_network.size) + "/24")
+ return next_network
+
+
+ def sync_record(self, slice_deployment):
+ logger.info("sync'ing slice deployment %s" % slice_deployment)
+ if not slice_deployment.tenant_id:
+ nova_fields = {'tenant_name': slice_deployment.slice.name,
+ 'description': slice_deployment.slice.description,
+ 'enabled': slice_deployment.slice.enabled}
+ driver = self.driver.admin_driver(deployment=slice_deployment.deployment.name)
+ tenant = driver.create_tenant(**nova_fields)
+ slice_deployment.tenant_id = tenant.id
+
+ # XXX give caller an admin role at the tenant they've created
+ deployment_users = UserDeployments.objects.filter(user=slice_deployment.slice.creator,
+ deployment=slice_deployment.deployment)
+ if not deployment_users:
+ logger.info("slice createor %s has not accout at deployment %s" % (slice_deployment.slice.creator, slice_deployment.deployment.name))
+ else:
+ deployment_user = deployment_users[0]
+ # lookup user id at this deployment
+ kuser= driver.shell.keystone.users.find(email=slice_deployment.slice.creator.email)
+
+ # add required roles at the slice's tenant
+ driver.add_user_role(kuser.id, tenant.id, 'admin')
+
+ # refresh credentials using this tenant
+ client_driver = self.driver.client_driver(caller=deployment_user.user,
+ tenant=tenant.name,
+ deployment=slice_deployment.deployment.name)
+
+
+ if slice_deployment.id and slice_deployment.tenant_id:
+ # update existing tenant
+ driver = self.driver.admin_driver(deployment=slice_deployment.deployment.name)
+ driver.update_tenant(slice_deployment.tenant_id,
+ description=slice_deployment.slice.description,
+ enabled=slice_deployment.slice.enabled)
+
+ if slice_deployment.tenant_id:
+ # update slice/tenant quota
+ driver = self.driver.client_driver(deployment=slice_deployment.deployment.name, tenant=slice_deployment.slice.name)
+ driver.shell.nova.quotas.update(tenant_id=slice_deployment.tenant_id, instances=int(slice_deployment.slice.max_slivers))
+
+ slice_deployment.save()
diff --git a/planetstack/observer/steps/sync_slice_memberships.py b/planetstack/observer/steps/sync_slice_memberships.py
index ffc6eb8..38bd26c 100644
--- a/planetstack/observer/steps/sync_slice_memberships.py
+++ b/planetstack/observer/steps/sync_slice_memberships.py
@@ -4,6 +4,10 @@
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
from core.models.slice import *
+from core.models.user import UserDeployments
+from util.logger import Logger, logging
+
+logger = Logger(level=logging.INFO)
class SyncSliceMemberships(OpenStackSyncStep):
requested_interval=0
@@ -13,7 +17,17 @@
return SlicePrivilege.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
def sync_record(self, slice_memb):
- if slice_memb.user.kuser_id and slice_memb.slice.tenant_id:
- self.driver.add_user_role(slice_memb.user.kuser_id,
- slice_memb.slice.tenant_id,
- slice_memb.role.role)
+ # sync slice memberships at all slice deployments
+ logger.info("syncing slice privilege: %s %s" % (slice_memb.slice.name, slice_memb.user.email))
+ slice_deployments = SliceDeployments.objects.filter(slice=slice_memb.slice)
+ for slice_deployment in slice_deployments:
+ if not slice_deployment.tenant_id:
+ continue
+ user_deployments = UserDeployments.objects.filter(deployment=slice_deployment.deployment,
+ user=slice_memb.user)
+ if user_deployments:
+ kuser_id = user_deployments[0].kuser_id
+ driver = self.driver.admin_driver(deployment=slice_deployment.deployment.name)
+ driver.add_user_role(kuser_id,
+ slice_deployment.tenant_id,
+ slice_memb.role.role)
diff --git a/planetstack/observer/steps/sync_slices.py b/planetstack/observer/steps/sync_slices.py
index f91c0fc..6cf0772 100644
--- a/planetstack/observer/steps/sync_slices.py
+++ b/planetstack/observer/steps/sync_slices.py
@@ -4,7 +4,7 @@
from django.db.models import F, Q
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.slice import Slice
+from core.models.slice import Slice, SliceDeployments
from util.logger import Logger, logging
logger = Logger(level=logging.INFO)
@@ -16,63 +16,8 @@
def fetch_pending(self):
return Slice.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
- def get_next_subnet(self):
- # limit ourself to 10.0.x.x for now
- valid_subnet = lambda net: net.startswith('10.0')
- subnets = self.driver.shell.quantum.list_subnets()['subnets']
- ints = [int(IPNetwork(subnet['cidr']).ip) for subnet in subnets \
- if valid_subnet(subnet['cidr'])]
- ints.sort()
- last_ip = IPAddress(ints[-1])
- last_network = IPNetwork(str(last_ip) + "/24")
- next_network = IPNetwork(str(IPAddress(last_network) + last_network.size) + "/24")
- return next_network
-
def sync_record(self, slice):
- logger.info("sync'ing slice %s" % slice.name)
- if not slice.tenant_id:
- nova_fields = {'tenant_name': slice.name,
- 'description': slice.description,
- 'enabled': slice.enabled}
- tenant = self.driver.create_tenant(**nova_fields)
- slice.tenant_id = tenant.id
-
- # XXX give caller an admin role at the tenant they've created
- self.driver.add_user_role(slice.creator.kuser_id, tenant.id, 'admin')
-
- # refresh credentials using this tenant
- client_driver = self.driver.client_driver(tenant=tenant.name)
-
- # create network
- network = client_driver.create_network(slice.name)
- slice.network_id = network['id']
-
- # create router
- router = client_driver.create_router(slice.name)
- slice.router_id = router['id']
-
- # create subnet for slice's private network
- next_subnet = self.get_next_subnet()
- cidr = str(next_subnet.cidr)
- ip_version = next_subnet.version
- start = str(next_subnet[2])
- end = str(next_subnet[-2])
- subnet = client_driver.create_subnet(name=slice.name,
- network_id = network['id'],
- cidr_ip = cidr,
- ip_version = ip_version,
- start = start,
- end = end)
- slice.subnet_id = subnet['id']
- # add subnet as interface to slice's router
- client_driver.add_router_interface(router['id'], subnet['id'])
- # add external route
- client_driver.add_external_route(subnet)
-
-
- if slice.id and slice.tenant_id:
- self.driver.update_tenant(slice.tenant_id,
- description=slice.description,
- enabled=slice.enabled)
-
- slice.save()
+ for slice_deployment in SliceDeployments.objects.filter(slice=slice):
+ # bump the 'updated' timestamp and trigger observer to update
+ # slice across all deployments
+ slice_deployment.save()
diff --git a/planetstack/observer/steps/sync_sliver_ips.py b/planetstack/observer/steps/sync_sliver_ips.py
index 2d7f1f8..e2212d1 100644
--- a/planetstack/observer/steps/sync_sliver_ips.py
+++ b/planetstack/observer/steps/sync_sliver_ips.py
@@ -14,7 +14,8 @@
return slivers
def sync_record(self, sliver):
- driver = self.driver.client_driver(tenant=sliver.slice.name)
+ driver = self.driver.client_driver(tenant=sliver.slice.name,
+ deployment=sliver.node.deployment.name)
servers = driver.shell.nova.servers.findall(id=sliver.instance_id)
if not servers:
return
@@ -23,5 +24,6 @@
if not ips:
return
sliver.ip = ips[0]['addr']
- sliver.save()
- logger.info("saved sliver ip: %s %s" % (sliver, ips[0]))
+ if sliver.ip:
+ sliver.save()
+ logger.info("saved sliver ip: %s %s" % (sliver, ips[0]))
diff --git a/planetstack/observer/steps/sync_slivers.py b/planetstack/observer/steps/sync_slivers.py
index a3f423c..3b81766 100644
--- a/planetstack/observer/steps/sync_slivers.py
+++ b/planetstack/observer/steps/sync_slivers.py
@@ -4,7 +4,11 @@
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
from core.models.sliver import Sliver
-from core.models.slice import SlicePrivilege
+from core.models.slice import Slice, SlicePrivilege, SliceDeployments
+from core.models.network import Network, NetworkSlice, NetworkDeployments
+from util.logger import Logger, logging
+
+logger = Logger(level=logging.INFO)
class SyncSlivers(OpenStackSyncStep):
provides=[Sliver]
@@ -13,19 +17,8 @@
def fetch_pending(self):
return Sliver.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
- def get_requested_networks(self, slice):
- network_ids = [x.network_id for x in slice.networks.all()]
-
- if slice.network_id is not None:
- network_ids.append(slice.network_id)
-
- networks = []
- for network_id in network_ids:
- networks.append({"net-id": network_id})
-
- return networks
-
def sync_record(self, sliver):
+ logger.info("sync'ing sliver:%s deployment:%s " % (sliver, sliver.node.deployment))
metadata_update = {}
if ("numberCores" in sliver.changed_fields):
metadata_update["cpu_cores"] = str(sliver.numberCores)
@@ -35,22 +28,64 @@
metadata_update[tag.name] = tag.value
if not sliver.instance_id:
- nics = self.get_requested_networks(sliver.slice)
- file("/tmp/scott-manager","a").write("slice: %s\nreq: %s\n" % (str(sliver.slice.name), str(nics)))
+ driver = self.driver.client_driver(caller=sliver.creator, tenant=sliver.slice.name, deployment=sliver.deploymentNetwork.name)
+ # public keys
slice_memberships = SlicePrivilege.objects.filter(slice=sliver.slice)
pubkeys = [sm.user.public_key for sm in slice_memberships if sm.user.public_key]
- pubkeys.append(sliver.creator.public_key)
- driver = self.driver.client_driver(caller=sliver.creator, tenant=sliver.slice.name)
+ if sliver.creator.public_key:
+ pubkeys.append(sliver.creator.public_key)
+ if sliver.slice.creator.public_key:
+ pubkeys.append(sliver.slice.creator.public_key)
+ # netowrks
+ # include all networks available to the slice and/or associated network templates
+ nics = []
+ networks = [ns.network for ns in NetworkSlice.objects.filter(slice=sliver.slice)]
+ network_deployments = NetworkDeployments.objects.filter(network__in=networks,
+ deployment=sliver.node.deployment)
+ # Gather private networks first. This includes networks with a template that has
+ # visibility = private and translation = none
+ for network_deployment in network_deployments:
+ if network_deployment.network.template.visibility == 'private' and \
+ network_deployment.network.template.translation == 'none':
+ nics.append({'net-id': network_deployment.net_id})
+
+ # now include network template
+ network_templates = [network.template.sharedNetworkName for network in networks \
+ if network.template.sharedNetworkName]
+ #logger.info("%s %s %s %s" % (driver.shell.quantum.username, driver.shell.quantum.password, driver.shell.quantum.tenant, driver.shell.quantum.url))
+ for net in driver.shell.quantum.list_networks()['networks']:
+ if net['name'] in network_templates:
+ nics.append({'net-id': net['id']})
+
+ # look up image id
+ deployment_driver = self.driver.admin_driver(deployment=sliver.deploymentNetwork.name)
+ image_id = None
+ images = deployment_driver.shell.glance.get_images()
+ for image in images:
+ if image['name'] == sliver.image.name:
+ image_id = image['id']
+
+ # look up key name at the deployment
+ # create/fetch keypair
+ keyname = None
+ if sliver.creator.public_key:
+ keyname = sliver.creator.email.lower().replace('@', 'AT').replace('.', '') +\
+ sliver.slice.name
+ key_fields = {'name': keyname,
+ 'public_key': sliver.creator.public_key}
+ driver.create_keypair(**key_fields)
+
instance = driver.spawn_instance(name=sliver.name,
- key_name = sliver.creator.keyname,
- image_id = sliver.image.image_id,
+ key_name = keyname,
+ image_id = image_id,
hostname = sliver.node.name,
pubkeys = pubkeys,
- nics = nics )
+ nics = nics,
+ userdata = sliver.userData )
sliver.instance_id = instance.id
sliver.instance_name = getattr(instance, 'OS-EXT-SRV-ATTR:instance_name')
+ sliver.save()
if sliver.instance_id and metadata_update:
- self.driver.update_instance_metadata(sliver.instance_id, metadata_update)
+ driver.update_instance_metadata(sliver.instance_id, metadata_update)
- sliver.save()
diff --git a/planetstack/observer/steps/sync_user_deployments.py b/planetstack/observer/steps/sync_user_deployments.py
new file mode 100644
index 0000000..39943f7
--- /dev/null
+++ b/planetstack/observer/steps/sync_user_deployments.py
@@ -0,0 +1,98 @@
+import os
+import base64
+import hashlib
+from collections import defaultdict
+from django.db.models import F, Q
+from planetstack.config import Config
+from observer.openstacksyncstep import OpenStackSyncStep
+from core.models.site import SiteDeployments, Deployment
+from core.models.user import User, UserDeployments
+from util.logger import Logger, logging
+
+logger = Logger(level=logging.INFO)
+
+class SyncUserDeployments(OpenStackSyncStep):
+ provides=[User, UserDeployments]
+ requested_interval=0
+
+ def fetch_pending(self):
+ # user deployments are not visible to users. We must ensure
+ # user are deployed at all deploymets available to their sites.
+
+ deployments = Deployment.objects.all()
+ site_deployments = SiteDeployments.objects.all()
+ site_deploy_lookup = defaultdict(list)
+ for site_deployment in site_deployments:
+ site_deploy_lookup[site_deployment.site].append(site_deployment.deployment)
+
+ user_deploy_lookup = defaultdict(list)
+ for user_deployment in UserDeployments.objects.all():
+ user_deploy_lookup[user_deployment.user].append(user_deployment.deployment)
+
+ all_deployments = Deployment.objects.filter()
+ for user in User.objects.all():
+ if user.is_admin:
+ # admins should have an account at all deployments
+ expected_deployments = deployments
+ else:
+ # normal users should have an account at their site's deployments
+ #expected_deployments = site_deploy_lookup[user.site]
+ # users are added to all deployments for now
+ expected_deployments = deployments
+ for expected_deployment in expected_deployments:
+ if not user in user_deploy_lookup or \
+ expected_deployment not in user_deploy_lookup[user]:
+ # add new record
+ ud = UserDeployments(user=user, deployment=expected_deployment)
+ ud.save()
+ #user_deployments.append(ud)
+ #else:
+ # # update existing record
+ # ud = UserDeployments.objects.get(user=user, deployment=expected_deployment)
+ # user_deployments.append(ud)
+
+ return UserDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
+ def sync_record(self, user_deployment):
+ logger.info("sync'ing user %s at deployment %s" % (user_deployment.user, user_deployment.deployment.name))
+ name = user_deployment.user.email[:user_deployment.user.email.find('@')]
+ user_fields = {'name': user_deployment.user.email,
+ 'email': user_deployment.user.email,
+ 'password': hashlib.md5(user_deployment.user.password).hexdigest()[:6],
+ 'enabled': True}
+ driver = self.driver.admin_driver(deployment=user_deployment.deployment.name)
+ if not user_deployment.kuser_id:
+ keystone_user = driver.create_user(**user_fields)
+ user_deployment.kuser_id = keystone_user.id
+ else:
+ driver.update_user(user_deployment.kuser_id, user_fields)
+
+ # setup user deployment home site roles
+ if user_deployment.user.site:
+ site_deployments = SiteDeployments.objects.filter(site=user_deployment.user.site,
+ deployment=user_deployment.deployment)
+ if site_deployments:
+ # need the correct tenant id for site at the deployment
+ tenant_id = site_deployments[0].tenant_id
+ driver.add_user_role(user_deployment.kuser_id,
+ tenant_id, 'user')
+ if user_deployment.user.is_admin:
+ driver.add_user_role(user_deployment.kuser_id, tenant_id, 'admin')
+ else:
+ # may have admin role so attempt to remove it
+ driver.delete_user_role(user_deployment.kuser_id, tenant_id, 'admin')
+
+ #if user_deployment.user.public_key:
+ # if not user_deployment.user.keyname:
+ # keyname = user_deployment.user.email.lower().replace('@', 'AT').replace('.', '')
+ # user_deployment.user.keyname = keyname
+ # user_deployment.user.save()
+ #
+ # user_driver = driver.client_driver(caller=user_deployment.user,
+ # tenant=user_deployment.user.site.login_base,
+ # deployment=user_deployment.deployment.name)
+ # key_fields = {'name': user_deployment.user.keyname,
+ # 'public_key': user_deployment.user.public_key}
+ # user_driver.create_keypair(**key_fields)
+
+ user_deployment.save()
diff --git a/planetstack/observer/steps/sync_users.py b/planetstack/observer/steps/sync_users.py
index 25f093e..71f9c0f 100644
--- a/planetstack/observer/steps/sync_users.py
+++ b/planetstack/observer/steps/sync_users.py
@@ -4,7 +4,7 @@
from django.db.models import F, Q
from planetstack.config import Config
from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.user import User
+from core.models.user import User, UserDeployments
class SyncUsers(OpenStackSyncStep):
provides=[User]
@@ -14,29 +14,7 @@
return User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
def sync_record(self, user):
- name = user.email[:user.email.find('@')]
- user_fields = {'name': name,
- 'email': user.email,
- 'password': hashlib.md5(user.password).hexdigest()[:6],
- 'enabled': True}
- if not user.kuser_id:
- keystone_user = self.driver.create_user(**user_fields)
- user.kuser_id = keystone_user.id
- else:
- self.driver.update_user(user.kuser_id, user_fields)
-
- if user.site:
- self.driver.add_user_role(user.kuser_id, user.site.tenant_id, 'user')
- if user.is_admin:
- self.driver.add_user_role(user.kuser_id, user.site.tenant_id, 'admin')
- else:
- # may have admin role so attempt to remove it
- self.driver.delete_user_role(user.kuser_id, user.site.tenant_id, 'admin')
-
- if user.public_key:
- driver = self.driver.client_driver(caller=user, tenant=user.site.login_base)
- key_fields = {'name': user.keyname,
- 'public_key': user.public_key}
- driver.create_keypair(**key_fields)
-
- user.save()
+ for user_deployment in UserDeployments.objects.filter(user=user):
+ # bump the 'updated' field so user account are updated across
+ # deployments.
+ user_deployment.save()
diff --git a/planetstack/observer/syncstep.py b/planetstack/observer/syncstep.py
index fb8c77a..c41628a 100644
--- a/planetstack/observer/syncstep.py
+++ b/planetstack/observer/syncstep.py
@@ -46,7 +46,8 @@
def check_dependencies(self, obj, failed):
for dep in self.dependencies:
- peer_object = getattr(obj, dep.lower())
+ peer_name = dep[0].lower() + dep[1:] # django names are camelCased with the first letter lower
+ peer_object = getattr(obj, peer_name)
if (peer_object.pk==failed.pk):
raise FailedDependency
@@ -60,7 +61,7 @@
o.enacted = datetime.now() # Is this the same timezone? XXX
o.save(update_fields=['enacted'])
except:
- logger.log_exc("sync step failed!")
+ logger.log_exc("sync step %s failed!" % self.__name__)
failed.append(o)
return failed
diff --git a/planetstack/observer/toposort.py b/planetstack/observer/toposort.py
old mode 100755
new mode 100644
index 959cea3..a2c9389
--- a/planetstack/observer/toposort.py
+++ b/planetstack/observer/toposort.py
@@ -5,58 +5,69 @@
import commands
import threading
import json
+import pdb
from datetime import datetime
from collections import defaultdict
+# Topological sort
+# Notes:
+# - Uses a stack instead of recursion
+# - Forfeits optimization involving tracking currently visited nodes
def toposort(g, steps=None):
+ # Get set of all nodes, including those without outgoing edges
+ keys = set(g.keys())
+ values = set({})
+ for v in g.values():
+ values=values | set(v)
+
+ all_nodes=list(keys|values)
if (not steps):
- keys = set(g.keys())
- values = set({})
- for v in g.values():
- values=values | set(v)
-
- steps=list(keys|values)
+ steps = all_nodes
- reverse = {}
-
- for k,v in g.items():
- for rk in v:
- try:
- reverse[rk].append(k)
- except:
- reverse[rk]=k
-
- sources = []
- for k,v in g.items():
- if not reverse.has_key(k):
- sources.append(k)
-
- for k,v in reverse.iteritems():
- if (not v):
- sources.append(k)
-
+ # Final order
order = []
- marked = []
- while sources:
- n = sources.pop(0)
- try:
- for m in g[n]:
- if m not in marked:
- sources.append(m)
- marked.append(m)
- except KeyError:
- pass
- if (n in steps):
- order.append(n)
+ # DFS stack, not using recursion
+ stack = []
- order.reverse()
+ # Unmarked set
+ unmarked = all_nodes
- return order
+ # visiting = [] - skip, don't expect 1000s of nodes, |E|/|V| is small
-graph_file=open('model-deps').read()
-g = json.loads(graph_file)
-print toposort(g)
+ while unmarked:
+ stack.insert(0,unmarked[0]) # push first unmarked
+
+ while (stack):
+ n = stack[0]
+ add = True
+ try:
+ for m in g[n]:
+ if (m in unmarked):
+ if (m not in stack):
+ add = False
+ stack.insert(0,m)
+ else:
+ # Should not happen, if so there's a loop
+ print 'Loop at %s'%m
+ except KeyError:
+ pass
+ if (add):
+ if (n in steps):
+ order.append(n)
+ item = stack.pop(0)
+ unmarked.remove(item)
+
+ noorder = list(set(steps) - set(order))
+ return order + noorder
+
+def main():
+ graph_file=open('planetstack.deps').read()
+ g = json.loads(graph_file)
+ print toposort(g)
+
+if (__name__=='__main__'):
+ main()
#print toposort({'a':'b','b':'c','c':'d','d':'c'},['d','c','b','a'])
diff --git a/planetstack/openstack/client.py b/planetstack/openstack/client.py
index 1a6386d..162e506 100644
--- a/planetstack/openstack/client.py
+++ b/planetstack/openstack/client.py
@@ -1,6 +1,8 @@
+import urlparse
try:
from keystoneclient.v2_0 import client as keystone_client
from glance import client as glance_client
+ import glanceclient
from novaclient.v1_1 import client as nova_client
from quantumclient.v2_0 import client as quantum_client
from nova.db.sqlalchemy import api as nova_db_api
@@ -39,16 +41,18 @@
return opts
class Client:
- def __init__(self, username=None, password=None, tenant=None, url=None, config=None, *args, **kwds):
- if config:
- config = Config(config)
- else:
- config = Config()
+ def __init__(self, username=None, password=None, tenant=None, url=None, token=None, endpoint=None, deployment=None, admin=True, *args, **kwds):
+
self.has_openstack = has_openstack
- self.username = config.nova_admin_user
- self.password = config.nova_admin_password
- self.tenant = config.nova_admin_tenant
- self.url = config.nova_url
+ self.url = deployment.auth_url
+ if admin:
+ self.username = deployment.admin_user
+ self.password = deployment.admin_password
+ self.tenant = deployment.admin_tenant
+ else:
+ self.username = None
+ self.password = None
+ self.tenant = None
if username:
self.username = username
@@ -58,9 +62,13 @@
self.tenant = tenant
if url:
self.url = url
+ if token:
+ self.token = token
+ if endpoint:
+ self.endpoint = endpoint
- if '@' in self.username:
- self.username = self.username[:self.username.index('@')]
+ #if '@' in self.username:
+ # self.username = self.username[:self.username.index('@')]
class KeystoneDB:
@require_enabled
@@ -80,7 +88,8 @@
self.client = keystone_client.Client(username=self.username,
password=self.password,
tenant_name=self.tenant,
- auth_url=self.url)
+ auth_url=self.url
+ )
@require_enabled
def connect(self, *args, **kwds):
@@ -104,6 +113,16 @@
def __getattr__(self, name):
return getattr(self.client, name)
+class GlanceClientNew(Client):
+ def __init__(self, version, endpoint, token, *args, **kwds):
+ Client.__init__(self, *args, **kwds)
+ if has_openstack:
+ self.client = glanceclient.Client(version, endpoint=endpoint, token=token)
+
+ @require_enabled
+ def __getattr__(self, name):
+ return getattr(self.client, name)
+
class NovaClient(Client):
def __init__(self, *args, **kwds):
Client.__init__(self, *args, **kwds)
@@ -168,11 +187,17 @@
def __init__ ( self, *args, **kwds) :
# instantiate managers
self.keystone = KeystoneClient(*args, **kwds)
+ url_parsed = urlparse.urlparse(self.keystone.url)
+ hostname = url_parsed.netloc.split(':')[0]
+ token = self.keystone.client.tokens.authenticate(username=self.keystone.username, password=self.keystone.password, tenant_name=self.keystone.tenant)
self.keystone_db = KeystoneDB()
self.glance = GlanceClient(*args, **kwds)
+
+ self.glanceclient = GlanceClientNew('1', endpoint='http://%s:9292' % hostname, token=token.id)
self.nova = NovaClient(*args, **kwds)
self.nova_db = NovaDB(*args, **kwds)
self.quantum = QuantumClient(*args, **kwds)
+
@require_enabled
def connect(self, *args, **kwds):
diff --git a/planetstack/openstack/driver.py b/planetstack/openstack/driver.py
index 8224c17..8ebea68 100644
--- a/planetstack/openstack/driver.py
+++ b/planetstack/openstack/driver.py
@@ -12,44 +12,48 @@
class OpenStackDriver:
- def __init__(self, config = None, client=None):
+ def __init__(self, config = None, client=None, deployment=None):
if config:
self.config = Config(config)
else:
- self.config = Config()
+ self.config = Config()
- self.admin_client = OpenStackClient()
+ self.admin_client = OpenStackClient(deployment=deployment)
self.admin_user = self.admin_client.keystone.users.find(name=self.admin_client.keystone.username)
if client:
self.shell = client
else:
- self.shell = OpenStackClient()
+ self.shell = OpenStackClient(deployment=deployment)
self.enabled = manager_enabled
self.has_openstack = has_openstack
- def client_driver(self, caller=None, tenant=None):
+ def client_driver(self, caller=None, tenant=None, deployment=None):
if caller:
auth = {'username': caller.email,
'password': hashlib.md5(caller.password).hexdigest()[:6],
'tenant': tenant}
- client = OpenStackClient(**auth)
+ client = OpenStackClient(deployment=deployment, **auth)
else:
- client = OpenStackClient(tenant=tenant)
- driver = OpenStackDriver(client=client)
+ client = OpenStackClient(tenant=tenant, deployment=deployment)
+
+ driver = OpenStackDriver(client=client, deployment=deployment)
return driver
- def admin_driver(self, tenant=None):
- client = OpenStackClient(tenant=tenant)
- driver = OpenStackDriver(client=client)
+ def admin_driver(self, tenant=None, deployment=None):
+ client = OpenStackClient(tenant=tenant, deployment=deployment)
+ driver = OpenStackDriver(client=client, deployment=deployment)
+ return driver
def create_role(self, name):
roles = self.shell.keystone.roles.findall(name=name)
- if not roles:
+ roles_title = self.shell.keystone.roles.findall(name=name.title())
+ roles_found = roles + roles_title
+ if not roles_found:
role = self.shell.keystone.roles.create(name)
else:
- role = roles[0]
+ role = roles_found[0]
return role
def delete_role(self, filter):
@@ -109,12 +113,27 @@
for key in keys:
self.shell.nova.keypairs.delete(key)
self.shell.keystone.users.delete(user)
- return 1
+ return 1
+
+ def get_admin_role(self):
+ role = None
+ for admin_role_name in ['admin', 'Admin']:
+ roles = self.shell.keystone.roles.findall(name=admin_role_name)
+ if roles:
+ role = roles[0]
+ break
+ return role
def add_user_role(self, kuser_id, tenant_id, role_name):
user = self.shell.keystone.users.find(id=kuser_id)
tenant = self.shell.keystone.tenants.find(id=tenant_id)
- role = self.shell.keystone.roles.find(name=role_name)
+ # admin role can be lowercase or title. Look for both
+ role = None
+ if role_name.lower() == 'admin':
+ role = self.get_admin_role()
+ else:
+ # look up non admin role or force exception when admin role isnt found
+ role = self.shell.keystone.roles.find(name=role_name)
role_found = False
user_roles = user.list_roles(tenant.id)
@@ -129,7 +148,13 @@
def delete_user_role(self, kuser_id, tenant_id, role_name):
user = self.shell.keystone.users.find(id=kuser_id)
tenant = self.shell.keystone.tenants.find(id=tenant_id)
- role = self.shell.keystone.roles.find(name=role_name)
+ # admin role can be lowercase or title. Look for both
+ role = None
+ if role_name.lower() == 'admin':
+ role = self.get_admin_role()
+ else:
+ # look up non admin role or force exception when admin role isnt found
+ role = self.shell.keystone.roles.find(name=role_name)
role_found = False
user_roles = user.list_roles(tenant.id)
@@ -238,17 +263,21 @@
subnet = snet
if not subnet:
+ # HACK: Add metadata route -- Neutron does not reliably supply this
+ metadata_ip = cidr_ip.replace("0/24", "3")
+
allocation_pools = [{'start': start, 'end': end}]
subnet = {'subnet': {'name': name,
'network_id': network_id,
'ip_version': ip_version,
'cidr': cidr_ip,
- 'dns_nameservers': ['8.8.8.8', '8.8.4.4'],
+ #'dns_nameservers': ['8.8.8.8', '8.8.4.4'],
+ 'host_routes': [{'destination':'169.254.169.254/32','nexthop':metadata_ip}],
+ 'gateway_ip': None,
'allocation_pools': allocation_pools}}
subnet = self.shell.quantum.create_subnet(subnet)['subnet']
- self.add_external_route(subnet)
- # TODO: Add route to external network
- # e.g. # route add -net 10.0.3.0/24 dev br-ex gw 10.100.0.5
+ # self.add_external_route(subnet)
+
return subnet
def update_subnet(self, id, fields):
@@ -384,7 +413,7 @@
return (subnet_id, subnet)
- def spawn_instance(self, name, key_name=None, hostname=None, image_id=None, security_group=None, pubkeys=[], nics=None, metadata=None):
+ def spawn_instance(self, name, key_name=None, hostname=None, image_id=None, security_group=None, pubkeys=[], nics=None, metadata=None, userdata=None):
flavor_name = self.config.nova_default_flavor
flavor = self.shell.nova.flavors.find(name=flavor_name)
#if not image:
@@ -393,24 +422,25 @@
security_group = self.config.nova_default_security_group
files = {}
- if pubkeys:
- files['/root/.ssh/authorized_keys'] = "\n".join(pubkeys)
-
+ #if pubkeys:
+ # files["/root/.ssh/authorized_keys"] = "\n".join(pubkeys).encode('base64')
hints = {}
availability_zone = None
if hostname:
- availability_zone = 'nova:%s' % hostname
+ availability_zone = 'nova:%s' % hostname.split('.')[0]
server = self.shell.nova.servers.create(
name=name,
key_name = key_name,
flavor=flavor.id,
image=image_id,
security_group = security_group,
- files=files,
+ #files = files,
scheduler_hints=hints,
availability_zone=availability_zone,
nics=nics,
- meta=metadata)
+ networks=nics,
+ meta=metadata,
+ userdata=userdata)
return server
def destroy_instance(self, id):
diff --git a/planetstack/planetstack-backend.py b/planetstack/planetstack-backend.py
index 7d94b67..596ecdd 100755
--- a/planetstack/planetstack-backend.py
+++ b/planetstack/planetstack-backend.py
@@ -1,10 +1,45 @@
#!/usr/bin/env python
import os
+import argparse
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
-from observer.backend import Backend
+from observer.backend import Backend
+from planetstack.config import Config
-if __name__ == '__main__':
+config = Config()
+
+# after http://www.erlenstar.demon.co.uk/unix/faq_2.html
+def daemon():
+ """Daemonize the current process."""
+ if os.fork() != 0: os._exit(0)
+ os.setsid()
+ if os.fork() != 0: os._exit(0)
+ os.umask(0)
+ devnull = os.open(os.devnull, os.O_RDWR)
+ os.dup2(devnull, 0)
+ # xxx fixme - this is just to make sure that nothing gets stupidly lost - should use devnull
+ logdir=os.path.dirname(config.observer_logfile)
+ # when installed in standalone we might not have httpd installed
+ if not os.path.isdir(logdir): os.mkdir(logdir)
+ crashlog = os.open('%s'%config.observer_logfile, os.O_RDWR | os.O_APPEND | os.O_CREAT, 0644)
+ os.dup2(crashlog, 1)
+ os.dup2(crashlog, 2)
+
+def main():
+ # Generate command line parser
+ parser = argparse.ArgumentParser(usage='%(prog)s [options]')
+ parser.add_argument('-d', '--daemon', dest='daemon', action='store_true', default=False,
+ help='Run as daemon.')
+ # smbaker: util/config.py parses sys.argv[] directly to get config file name; include the option here to avoid
+ # throwing unrecognized argument exceptions
+ parser.add_argument('-C', '--config', dest='config_file', action='store', default="/opt/planetstack/plstackapi_config",
+ help='Name of config file.')
+ args = parser.parse_args()
+
+ if args.daemon: daemon()
backend = Backend()
- backend.run()
-
+ backend.run()
+
+if __name__ == '__main__':
+
+ main()
diff --git a/planetstack/planetstack-config.py b/planetstack/planetstack-config.py
new file mode 100755
index 0000000..7aa375b
--- /dev/null
+++ b/planetstack/planetstack-config.py
@@ -0,0 +1,25 @@
+#!/usr/bin/python
+import sys
+from planetstack.config import Config
+
+def help():
+ print "syntax: %s get name [default]" % sys.argv[0]
+
+def main():
+ c = Config()
+
+ if len(sys.argv)<=1:
+ help()
+ return
+
+ if sys.argv[1] == "get":
+ if len(sys.argv)==4:
+ print getattr(c, sys.argv[2], sys.argv[3])
+ elif len(sys.argv)==3:
+ print getattr(c, sys.argv[2])
+ else:
+ help()
+ else:
+ help()
+
+main()
diff --git a/planetstack/planetstack/settings.py b/planetstack/planetstack/settings.py
index c8da725..1f01e96 100644
--- a/planetstack/planetstack/settings.py
+++ b/planetstack/planetstack/settings.py
@@ -4,6 +4,8 @@
from config import Config
config = Config()
+GEOIP_PATH = "/usr/share/GeoIP"
+
DEBUG = True
TEMPLATE_DEBUG = DEBUG
@@ -59,12 +61,12 @@
# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/var/www/example.com/media/"
-MEDIA_ROOT = ''
+MEDIA_ROOT = '/var/www/html/files/'
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
-MEDIA_URL = ''
+MEDIA_URL = '/files/'
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
@@ -141,6 +143,9 @@
'core',
'hpc',
'requestrouter',
+ 'cassandra',
+ 'kairos',
+ 'nagios',
'syndicate',
'geoposition',
)
@@ -149,6 +154,7 @@
# Added for django-suit form
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
'django.core.context_processors.request',
+ 'core.context_processors.planetstack',
)
# Django Suit configuration example
@@ -195,9 +201,13 @@
{'label': 'Sites', 'icon':'icon-site', 'url': '/admin/core/site/'},
{'label': 'Slices', 'icon':'icon-slice', 'url': '/admin/core/slice/'},
{'label': 'Users', 'icon':'icon-user', 'url': '/admin/core/user/'},
- {'label': 'Request Routing', 'icon':'icon-cog', 'app': 'requestrouter'},
+ {'label': 'RequestRouter', 'icon':'icon-cog', 'app': 'requestrouter'},
{'label': 'HyperCache', 'icon':'icon-cog', 'app': 'hpc'},
{'label': 'Syndicate', 'icon':'icon-cog', 'app': 'syndicate'},
+ {'label': 'Cassandra', 'icon':'icon-cog', 'app': 'cassandra'},
+# {'label': 'KairosDB', 'icon':'icon-cog', 'app': 'kairos'},
+# {'label': 'Nagios', 'icon':'icon-cog', 'app': 'nagios'},
+
#{'label': 'Configured Services', 'icon':'icon-cog', 'models': [{'label': 'Content Delivery Network', 'app':'hpc'}]},
# 'sites',
# {'app': 'auth', 'icon':'icon-lock', 'models': ('user', 'group')},
@@ -238,3 +248,7 @@
},
}
}
+
+BIGQUERY_TABLE = getattr(config, "bigquery_table", "demoevents")
+
+DISABLE_MINIDASHBOARD = getattr(config, "gui_disable_minidashboard", False)
diff --git a/planetstack/planetstack/urls.py b/planetstack/planetstack/urls.py
index 9dceea9..599b20b 100644
--- a/planetstack/planetstack/urls.py
+++ b/planetstack/planetstack/urls.py
@@ -18,14 +18,21 @@
from core.views.tags import TagList, TagDetail
from genapi import UserList, UserDetail
from core.views.legacyapi import LegacyXMLRPC
+#from core.views.analytics import AnalyticsAjaxView
from core.models import *
from core.api_root import api_root
from rest_framework import generics
-from core.plus.sites import SitePlus
+from core.dashboard.sites import SitePlus
+from django.http import HttpResponseRedirect
admin.site = SitePlus()
admin.autodiscover()
+def redirect_to_apache(request):
+ """ bounce a request back to the apache server that is running on the machine """
+ apache_url = "http://%s%s" % (request.META['HOSTNAME'], request.path)
+ return HttpResponseRedirect(apache_url)
+
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'planetstack.views.home', name='home'),
@@ -40,7 +47,7 @@
#url(r'^profile/home', 'core.views.home'),
url(r'^plstackapi/$', api_root),
-
+
url(r'^plstackapi/deployments/$', DeploymentList.as_view(), name='deployment-list'),
url(r'^plstackapi/deployments/(?P<pk>[a-zA-Z0-9\-]+)/$', DeploymentDetail.as_view(), name='deployment-detail'),
@@ -89,6 +96,9 @@
url(r'^legacyapi/$', 'core.views.legacyapi.LegacyXMLRPC', name='xmlrpc'),
+# url(r'^analytics/(?P<name>\w+)/$', AnalyticsAjaxView.as_view(), name="analytics"),
+
+ url(r'^files/', redirect_to_apache),
#Adding in rest_framework urls
url(r'^plstackapi/', include('rest_framework.urls', namespace='rest_framework')),
diff --git a/planetstack/plstackapi_config b/planetstack/plstackapi_config
index 6abdaaf..a61e7ed 100644
--- a/planetstack/plstackapi_config
+++ b/planetstack/plstackapi_config
@@ -19,6 +19,7 @@
omf_enabled=0
mail_support_address=support@localhost
nova_enabled=True
+logfile=/var/log/planetstack.log
[nova]
admin_user=admin@domain.com
@@ -30,4 +31,6 @@
default_security_group=default
[observer]
+images_directory=/opt/planetstack/images
dependency_graph=/opt/planetstack/model-deps
+logfile=/var/log/planetstack_backend.log
diff --git a/planetstack/requestrouter/admin.py b/planetstack/requestrouter/admin.py
index 30b7fad..36e5fc6 100644
--- a/planetstack/requestrouter/admin.py
+++ b/planetstack/requestrouter/admin.py
@@ -10,7 +10,7 @@
from django.utils import timezone
from django.contrib.contenttypes import generic
from suit.widgets import LinkedSelect
-from core.admin import SingletonAdmin,SliceInline,ServiceAttrAsTabInline
+from core.admin import SingletonAdmin,SliceInline,ServiceAttrAsTabInline, SliceROInline,ServiceAttrAsTabROInline, ReadOnlyAwareAdmin
class RequestRouterServiceAdmin(SingletonAdmin):
model = RequestRouterService
@@ -20,12 +20,26 @@
fieldsets = [(None, {'fields': ['name','enabled','versionNumber', 'description','behindNat','defaultTTL','defaultAction','lastResortAction','maxAnswers'], 'classes':['suit-tab suit-tab-general']})]
inlines = [SliceInline,ServiceAttrAsTabInline]
+ user_readonly_fields = ["name", "enabled", "versionNumber", "description", "behindNat", "defaultTTL", "defaultAction", "lastResortAction", "maxAnswers"]
+ user_readonly_inlines = [SliceROInline, ServiceAttrAsTabROInline]
+
suit_form_tabs =(('general', 'Request Router Service Details'),
('slices','Slices'),
('serviceattrs','Additional Attributes'),
)
+class ServiceMapAdmin(ReadOnlyAwareAdmin):
+ model = ServiceMap
+ verbose_name = "Service Map"
+ verbose_name_plural = "Service Map"
+ list_display = ("name", "owner", "slice", "prefix")
+ fieldsets = [(None, {'fields': ['name','owner','slice', 'prefix','siteMap','accessMap'], 'classes':['suit-tab suit-tab-general']})]
+
+ user_readonly_fields = ["name", "owner", "slice", "prefix", "siteMap", "accessMap"]
+
+ suit_form_tabs =(('general', 'Service Map Details'),
+ )
admin.site.register(RequestRouterService, RequestRouterServiceAdmin)
-admin.site.register(ClientMap)
+admin.site.register(ServiceMap, ServiceMapAdmin)
diff --git a/planetstack/requestrouter/models.py b/planetstack/requestrouter/models.py
index 4350030..8e4cc43 100644
--- a/planetstack/requestrouter/models.py
+++ b/planetstack/requestrouter/models.py
@@ -1,4 +1,4 @@
-from core.models import User,Site,Service,SingletonModel,PlCoreBase
+from core.models import User,Site,Service,SingletonModel,PlCoreBase, Slice
import os
from django.db import models
from django.forms.models import model_to_dict
@@ -15,13 +15,27 @@
defaultAction = models.CharField(max_length=30, default = "best", help_text="Review if this should be enum")
lastResortAction = models.CharField(max_length=30, default = "random", help_text="Review if this should be enum")
maxAnswers = models.PositiveIntegerField(default=3, help_text="Maximum number of answers in DNS response.")
-
- def __unicode__(self): return u'RequestRouterService'
-class ClientMap(models.Model):
- site = models.OneToOneField(Site, unique=True)
- name = models.CharField(max_length=64, help_text="Name of the Client Map")
- description = models.TextField(null=True, blank=True,max_length=130)
+ def __unicode__(self): return u'Request Router Service'
- def __unicode__(self): return self.name
-
+class ServiceMap(PlCoreBase):
+
+ class Meta:
+ app_label = "requestrouter"
+
+ name = models.SlugField(max_length=50, unique=True, blank=False, null=False, help_text="name of this service map")
+ owner = models.ForeignKey(Service, help_text="service which owns this map")
+ slice = models.ForeignKey(Slice, help_text="slice that implements this service")
+ prefix = models.CharField(max_length=256, help_text="FQDN of the region of URI space managed by RR on behalf of this service")
+ # need to fix the upload location appropriately, for now we are not using access/site map
+ siteMap = models.FileField(upload_to="maps/", help_text="maps client requests to service instances", blank=True)
+ accessMap = models.FileField(upload_to="maps/", help_text="specifies which client requests are allowed", blank=True)
+
+ def siteMapName(self):
+ return self.name + ".site"
+
+ def accessMapName(self):
+ return self.name + ".access"
+
+ def __unicode__(self): return u'%s' % self.name
+
diff --git a/planetstack/rr_observer/configurationPush.py b/planetstack/rr_observer/configurationPush.py
new file mode 100644
index 0000000..857de8b
--- /dev/null
+++ b/planetstack/rr_observer/configurationPush.py
@@ -0,0 +1,30 @@
+import ansible.playbook
+import ansible.constants as C
+import ansible.utils.template
+from ansible import errors
+from ansible import callbacks
+from ansible import utils
+from subprocess import call
+
+class ConfigurationPush:
+ def __init__(self):
+ pass
+
+ def config_push(self, service_name, user, playbook_name,hostfile):
+ '''stats = callbacks.AggregateStats()
+ playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
+ runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)
+ pb = ansible.playbook.PlayBook(playbook="playbook/site.yml",
+ callbacks=playbook_cb,
+ runner_callbacks=runner_cb,
+ stats=stats
+ )
+ result = pb.run()
+ print result
+ '''
+
+ call("ansible-playbook --private-key=planetw "+playbook_name+" -i "+hostfile+" -u "+user+" --extra-vars \"name="+service_name+"\"", shell=True)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/planetstack/rr_observer/deleters/servicemap_deleter.py b/planetstack/rr_observer/deleters/servicemap_deleter.py
new file mode 100644
index 0000000..b5d4509
--- /dev/null
+++ b/planetstack/rr_observer/deleters/servicemap_deleter.py
@@ -0,0 +1,41 @@
+import os
+import sys
+import traceback
+from requestrouter.models import ServiceMap
+from observer.deleter import Deleter
+from util.logger import Logger, logging
+
+parentdir = os.path.join(os.path.dirname(__file__),"..")
+sys.path.insert(0,parentdir)
+
+from rrlib import RequestRouterLibrary
+from configurationPush import ConfigurationPush
+import rrlib_config
+
+logger = Logger(level=logging.INFO)
+
+class ServiceMapDeleter(Deleter, RequestRouterLibrary, ConfigurationPush):
+ model='ServiceMap'
+
+ def __init__(self, **args):
+ Deleter.__init__(self, **args)
+ RequestRouterLibrary.__init__(self)
+ ConfigurationPush.__init__(self)
+
+
+ def call(self, pk, model_dict):
+ try:
+ servicemap = ServiceMap.objects.get(pk=pk)
+ service_uid = self.get_servicemap_uid(servicemap)
+ self.config_push(service_uid, rrlib_config.REDIR_USER, "/opt/planetstack/rr_observer/playbook/site_redir_delete.yml", "/etc/ansible/requestrouter/dnsredir/hosts")
+ self.config_push(service_uid, rrlib_config.DEMUX_USER, "/opt/planetstack/rr_observer/playbook/site_demux_delete.yml", "/etc/ansible/requestrouter/dnsdemux/hosts")
+ print "XXX delete ServiceMap %s", servicemap.name
+ return True
+ except Exception, e:
+ traceback.print_exc()
+ logger.exception("Failed to erase map '%s'" % map_name)
+ return False
+
+if __name__ == "__main__":
+ smap = ServiceMapDeleter()
+ smap.call( 6, {'name': 'Service23'} )
diff --git a/planetstack/rr_observer/model-deps b/planetstack/rr_observer/model-deps
new file mode 100644
index 0000000..36ef620
--- /dev/null
+++ b/planetstack/rr_observer/model-deps
@@ -0,0 +1,12 @@
+{
+ "ServiceMap": [
+ "Slice"
+ ],
+ "Slice": [
+ "Site",
+ "Service"
+ ],
+ "User": [
+ "Site"
+ ]
+}
diff --git a/planetstack/rr_observer/playbook/roles/delete_demux/handlers/main.yml b/planetstack/rr_observer/playbook/roles/delete_demux/handlers/main.yml
new file mode 100644
index 0000000..a888468
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/delete_demux/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: restart dnsdemux
+ service: name=dnsdemux state=restarted
diff --git a/planetstack/rr_observer/playbook/roles/delete_demux/tasks/main.yml b/planetstack/rr_observer/playbook/roles/delete_demux/tasks/main.yml
new file mode 100644
index 0000000..417401a
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/delete_demux/tasks/main.yml
@@ -0,0 +1,5 @@
+---
+# This playbook contains plays to delete configuration files from dnsdemux slice
+- name: delete dnsdemux config files
+ file: path={{dst_dnsdemux_conf}}/{{name}}.conf state=absent
+ notify: restart dnsdemux
diff --git a/planetstack/rr_observer/playbook/roles/delete_demux/vars/main.yml b/planetstack/rr_observer/playbook/roles/delete_demux/vars/main.yml
new file mode 100644
index 0000000..b457050
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/delete_demux/vars/main.yml
@@ -0,0 +1,6 @@
+---
+# Variables listed here are applicable to all host groups
+
+src_dnsdemux: ../../../../temp_config/dnsdemux
+dst_dnsdemux_conf: /etc/dnsdemux/default/
+
diff --git a/planetstack/rr_observer/playbook/roles/delete_redir/handlers/main.yml b/planetstack/rr_observer/playbook/roles/delete_redir/handlers/main.yml
new file mode 100644
index 0000000..8aa497e
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/delete_redir/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: restart dnsredir
+ service: name=dnsredir state=restarted
diff --git a/planetstack/rr_observer/playbook/roles/delete_redir/tasks/main.yml b/planetstack/rr_observer/playbook/roles/delete_redir/tasks/main.yml
new file mode 100644
index 0000000..58833bb
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/delete_redir/tasks/main.yml
@@ -0,0 +1,13 @@
+---
+# This playbook contains plays to delete configuration files from dnsredir slice
+- name: delete maps.d directory ( and deletes all intermeadiate directories )
+ #copy: src={{src_dnsredir}}/{{name}}.d dest={{dst_dnsredir_confdir}}
+ file: path={{dst_dnsredir_confdir}}/{{name}}.d/maps.d state=absent
+
+- name: delete config directory
+ file: path={{dst_dnsredir_confdir}}/{{name}}.d/ state=absent
+
+- name: copy dnsredir config file
+ file: path={{dst_dnsredir_conf}}/{{name}}.conf state=absent
+ notify: restart dnsredir
+
diff --git a/planetstack/rr_observer/playbook/roles/delete_redir/vars/main.yml b/planetstack/rr_observer/playbook/roles/delete_redir/vars/main.yml
new file mode 100644
index 0000000..dc79d35
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/delete_redir/vars/main.yml
@@ -0,0 +1,6 @@
+---
+# Variables listed here are applicable to all host groups
+
+src_dnsredir: ../../../../temp_config/dnsredir
+dst_dnsredir_conf: /etc/dnsredir/conf.d/
+dst_dnsredir_confdir: /etc/dnsredir
diff --git a/planetstack/rr_observer/playbook/roles/demux/handlers/main.yml b/planetstack/rr_observer/playbook/roles/demux/handlers/main.yml
new file mode 100644
index 0000000..a888468
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/demux/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: restart dnsdemux
+ service: name=dnsdemux state=restarted
diff --git a/planetstack/rr_observer/playbook/roles/demux/tasks/main.yml b/planetstack/rr_observer/playbook/roles/demux/tasks/main.yml
new file mode 100644
index 0000000..0339aed
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/demux/tasks/main.yml
@@ -0,0 +1,9 @@
+---
+# This playbook contains plays to copy configurations to destination
+- name: copy dnsdemux config files
+ copy: src={{src_dnsdemux}}/{{name}}.conf dest={{dst_dnsdemux_conf}}/{{name}}.conf
+ notify: restart dnsdemux
+
+#- name: Start the dnsdemux service
+ #service: name=dnsdemux state=started enabled=true
+
diff --git a/planetstack/rr_observer/playbook/roles/demux/vars/main.yml b/planetstack/rr_observer/playbook/roles/demux/vars/main.yml
new file mode 100644
index 0000000..b457050
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/demux/vars/main.yml
@@ -0,0 +1,6 @@
+---
+# Variables listed here are applicable to all host groups
+
+src_dnsdemux: ../../../../temp_config/dnsdemux
+dst_dnsdemux_conf: /etc/dnsdemux/default/
+
diff --git a/planetstack/rr_observer/playbook/roles/redir/handlers/main.yml b/planetstack/rr_observer/playbook/roles/redir/handlers/main.yml
new file mode 100644
index 0000000..8aa497e
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/redir/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: restart dnsredir
+ service: name=dnsredir state=restarted
diff --git a/planetstack/rr_observer/playbook/roles/redir/tasks/main.yml b/planetstack/rr_observer/playbook/roles/redir/tasks/main.yml
new file mode 100644
index 0000000..e390ed9
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/redir/tasks/main.yml
@@ -0,0 +1,19 @@
+---
+# This playbook contains plays to copy configurations to destination
+- name: create maps.d directory ( and creates all intermeadiate directories )
+ #copy: src={{src_dnsredir}}/{{name}}.d dest={{dst_dnsredir_confdir}}
+ file: src={{src_dnsredir}}/{{name}}.d/maps.d dest={{dst_dnsredir_confdir}}/{{name}}.d/maps.d state=directory
+
+- name: copy map.conf
+ copy: src={{src_dnsredir}}/{{name}}.d/maps.d/map.conf dest={{dst_dnsredir_confdir}}/{{name}}.d/maps.d/map.conf
+
+- name: copy codeen_nodes.conf
+ copy: src={{src_dnsredir}}/{{name}}.d/codeen_nodes.conf dest={{dst_dnsredir_confdir}}/{{name}}.d/codeen_nodes.conf
+
+- name: copy node-to-ip.txt
+ copy: src={{src_dnsredir}}/{{name}}.d/node-to-ip.txt dest={{dst_dnsredir_confdir}}/{{name}}.d/node-to-ip.txt
+
+- name: copy dnsredir config file
+ copy: src={{src_dnsredir}}/{{name}}.conf dest={{dst_dnsredir_conf}}/{{name}}.conf
+ notify: restart dnsredir
+
diff --git a/planetstack/rr_observer/playbook/roles/redir/vars/main.yml b/planetstack/rr_observer/playbook/roles/redir/vars/main.yml
new file mode 100644
index 0000000..dc79d35
--- /dev/null
+++ b/planetstack/rr_observer/playbook/roles/redir/vars/main.yml
@@ -0,0 +1,6 @@
+---
+# Variables listed here are applicable to all host groups
+
+src_dnsredir: ../../../../temp_config/dnsredir
+dst_dnsredir_conf: /etc/dnsredir/conf.d/
+dst_dnsredir_confdir: /etc/dnsredir
diff --git a/planetstack/rr_observer/playbook/site_demux.yml b/planetstack/rr_observer/playbook/site_demux.yml
new file mode 100644
index 0000000..b5261dc
--- /dev/null
+++ b/planetstack/rr_observer/playbook/site_demux.yml
@@ -0,0 +1,9 @@
+---
+# This playbook copies the dnsdemux configuration files from temp directory.
+
+- name: copies the configuration files from temp directory
+ hosts: all
+ #remote_user: {{r_user}}
+
+ roles:
+ - demux
diff --git a/planetstack/rr_observer/playbook/site_demux_delete.yml b/planetstack/rr_observer/playbook/site_demux_delete.yml
new file mode 100644
index 0000000..49a7c87
--- /dev/null
+++ b/planetstack/rr_observer/playbook/site_demux_delete.yml
@@ -0,0 +1,9 @@
+---
+# This playbook deletes the dnsdemux configuration files from request router instances
+
+- name: deletes the configuration files from request router instances
+ hosts: all
+ #remote_user: {{r_user}}
+
+ roles:
+ - delete_demux
diff --git a/planetstack/rr_observer/playbook/site_redir.yml b/planetstack/rr_observer/playbook/site_redir.yml
new file mode 100644
index 0000000..50a7284
--- /dev/null
+++ b/planetstack/rr_observer/playbook/site_redir.yml
@@ -0,0 +1,9 @@
+---
+# This playbook copies the dnsredir configuration files from temp directory.
+
+- name: copies the configuration files from temp directory
+ hosts: all
+ #remote_user: {{r_user}}
+
+ roles:
+ - redir
diff --git a/planetstack/rr_observer/playbook/site_redir_delete.yml b/planetstack/rr_observer/playbook/site_redir_delete.yml
new file mode 100644
index 0000000..9a8611d
--- /dev/null
+++ b/planetstack/rr_observer/playbook/site_redir_delete.yml
@@ -0,0 +1,9 @@
+---
+# This playbook deletes the dnsredir configuration files from request router instances
+
+- name: deletes the configuration files from request router instances
+ hosts: all
+ #remote_user: {{r_user}}
+
+ roles:
+ - delete_redir
diff --git a/planetstack/rr_observer/rr_observer_config b/planetstack/rr_observer/rr_observer_config
new file mode 100644
index 0000000..1fb52d0
--- /dev/null
+++ b/planetstack/rr_observer/rr_observer_config
@@ -0,0 +1,36 @@
+
+[plc]
+name=plc
+#deployment=VICCI
+deployment=VINI
+
+[db]
+name=planetstack
+user=plstackuser
+#password=2uMDYtJK
+password=1HL07C0E
+host=localhost
+port=5432
+
+[api]
+host=128.112.171.237
+port=8000
+ssl_key=None
+ssl_cert=None
+ca_ssl_cert=None
+ratelimit_enabled=0
+omf_enabled=0
+mail_support_address=support@localhost
+nova_enabled=True
+
+[observer]
+dependency_graph=/opt/planetstack/rr_observer/model-deps
+steps_dir=/opt/planetstack/rr_observer/steps
+deleters_dir=/opt/planetstack/rr_observer/deleters
+log_file=console
+#/var/log/hpc.log
+driver=None
+
+#[feefie]
+#client_id='vicci_dev_central'
+#user_id='pl'
diff --git a/planetstack/rr_observer/rrlib.py b/planetstack/rr_observer/rrlib.py
new file mode 100644
index 0000000..10a5171
--- /dev/null
+++ b/planetstack/rr_observer/rrlib.py
@@ -0,0 +1,203 @@
+import os
+import base64
+import string
+import sys
+import socket
+from sets import Set
+if __name__ == '__main__':
+ sys.path.append("/opt/planetstack")
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
+
+from planetstack.config import Config
+from core.models import Service
+from requestrouter.models import RequestRouterService, ServiceMap
+from util.logger import Logger, logging
+import rrlib_config
+
+logger = Logger(level=logging.INFO)
+
+'''
+Conventions:
+1) All dnsredir backend will listen at port 9000+ servicemap.pk ( where pk is the primary key generated in django model)
+'''
+
+class RequestRouterLibrary:
+
+ def __init__(self):
+ pass
+
+ def gen_slice_info(self, service=None):
+ """generates sliver information from slice of request router
+ """
+
+ if (service is None ):
+ service = RequestRouterService.objects.get()
+
+ mapping = {}
+ #static mapping for demo purpose
+ #mapping["node47.princeton.vicci.org"] = "128.112.171.112"
+ mapping["node48.princeton.vicci.org"] = "128.112.171.114"
+
+ '''for slice in service.service.all():
+ name = slice.name
+ for sliver in slice.slivers.all():
+ mapping[sliver.name] = str(sliver.ip)
+ '''
+ return mapping
+
+ def gen_servicemap_slice_info(self, servicemap):
+ """generates sliver information from slice of servicemap
+ """
+
+ wzone = Set(['arizona', 'stanford', 'on.lab', 'housten']) # zone=1 in cooden.conf
+ ezone = Set(['princeton', 'atlanta', 'new york', 'georgia tech']) # zone=2 in coodeen.conf
+
+ mapping_zone = {}
+ mapping_ip = {}
+ slice = servicemap.slice
+ name = slice.name
+ for sliver in slice.slivers.all():
+ mapping_ip[sliver.node.name] = socket.gethostbyname(sliver.node.name)
+ #print "sliver name "+sliver.name+str(sliver.ip)+"\n"
+ site = sliver.node.site.name
+ if(site.lower() in wzone):
+ mapping_zone[sliver.node.name] = str(1)
+ else:
+ mapping_zone[sliver.node.name] = str(2)
+
+ return mapping_ip, mapping_zone
+
+
+
+ def gen_slice_file(self, service):
+ """ generates host file for the slice information
+ to be used by ansible to push configuration files
+ """
+
+ mapping = self.gen_slice_info(service)
+
+ fn = "/etc/ansible/requestrouter/dnsredir/hosts"
+ f = open(fn, "w")
+ for (k,v) in mapping.items():
+ f.write("%s\n" % k)
+
+ fn = "/etc/ansible/requestrouter/dnsdemux/hosts"
+ f = open(fn, "w")
+ for (k,v) in mapping.items():
+ f.write("%s\n" % k)
+
+
+ def get_servicemap_uid(self, servicemap):
+ seq = ("service_", str(servicemap.pk));
+ return "".join(seq)
+
+ def get_service_port(self, servicemap):
+ return str(9000+servicemap.pk)
+
+ def gen_dnsredir_serviceconf(self, servicemap):
+ objname = self.get_servicemap_uid(servicemap)
+
+ rr_mapping = self.gen_slice_info(None)
+
+ #generate dnsredir.conf file parameters to be used in static file.
+ mapping = {}
+ mapping["port_listen"] = self.get_service_port(servicemap)
+ mapping["configdir"] = rrlib_config.DNSREDIR_CONFIGDIR_PREFIX+objname+".d/"
+ mapping["logdir"] = rrlib_config.DNSREDIR_LOGDIR_PREFIX+objname+".d"
+ mapping["pidfile"] = rrlib_config.DNSREDIR_PIDFILE_PREFIX+objname+".pid"
+ mapping["domain_name"] = servicemap.prefix
+ mapping["heartbeat_port"] = rrlib_config.HEARTBEAT_PORT
+
+ #generate dnsredir.conf file
+
+ fn = "./temp_config/dnsredir/"+objname+".conf"
+ f = open(fn, "w")
+ for (k,v) in rr_mapping.items():
+ f.write(mapping["domain_name"]+". NS "+k+". "+v+" 3600 \n" % mapping)
+
+
+ f.write("""
+Default_TTL 30
+
+Port %(port_listen)s
+
+ConfigDir %(configdir)s
+
+MapsDir maps.d
+
+HTTPPort %(heartbeat_port)d
+
+PidFile %(pidfile)s
+
+HttpRequestPort 8081
+
+""" % mapping)
+
+ #generate configdirectory
+
+ os.mkdir("./temp_config/dnsredir/"+objname+".d")
+
+ #geenrate codeen_nodes.conf
+ mapping_ip, mapping_zone = self.gen_servicemap_slice_info(servicemap)
+
+ codeen_name = "./temp_config/dnsredir/"+objname+".d/codeen_nodes.conf"
+ f = open(codeen_name, "w")
+ for (k,v) in mapping_zone.items():
+ f.write(k+" zone="+v+" \n")
+
+ iptxt = "./temp_config/dnsredir/"+objname+".d/node-to-ip.txt"
+ f = open(iptxt, "w")
+ for (k,v) in mapping_ip.items():
+ f.write(k+" "+v+" \n")
+
+ #generate maps directory
+ os.mkdir("./temp_config/dnsredir/"+objname+".d/maps.d")
+
+ # redirection map
+ map = "./temp_config/dnsredir/"+objname+".d/maps.d/map.conf"
+ f = open(map, "w")
+ #hardcoded probable public IP masks from arizona and princeton region respectively
+ f.write("prefix "+servicemap.prefix+" \n")
+ f.write("map 150.135.211.252/32 zone 1 || zone 2 \n")
+ f.write("map 128.112.171.112/24 zone 2 || zone 1 \n")
+ f.write("map 0.0.0.0/0 zone 1 || zone 2 \n")
+
+
+ def gen_dnsdemux_serviceconf(self, servicemap):
+ '''
+ generates frontend service*.conf file for each of the service
+ It assumes that there is a dnsdemux frontend running on the RR istallation and will
+ just add a conf file for each service in /etc/dnsdemux/default
+ '''
+ objname = self.get_servicemap_uid(servicemap)
+ #generate dnsdemux.conf file parameters to be used in static file.
+
+ port_listen = self.get_service_port(servicemap)
+ domain_name = servicemap.prefix
+ #generate service specific .conf file
+
+ rr_mapping = self.gen_slice_info(None)
+
+ fn = "./temp_config/dnsdemux/"+objname+".conf"
+ f = open(fn, "w")
+
+ for (k,v) in rr_mapping.items():
+ f.write("Forward "+v+" "+port_listen+" 8081 "+domain_name+".\n")
+
+
+ def teardown_temp_configfiles(self, objname):
+ if os.path.exists("./temp_config/dnsdemux/"+objname+".conf"):
+ os.remove("./temp_config/dnsdemux/"+objname+".conf")
+ if os.path.exists("./temp_config/dnsredir/"+objname+".d/maps.d/map.conf"):
+ os.remove("./temp_config/dnsredir/"+objname+".d/maps.d/map.conf")
+ if os.path.exists("./temp_config/dnsredir/"+objname+".d/maps.d"):
+ os.rmdir("./temp_config/dnsredir/"+objname+".d/maps.d")
+ if os.path.exists("./temp_config/dnsredir/"+objname+".d/node-to-ip.txt"):
+ os.remove("./temp_config/dnsredir/"+objname+".d/node-to-ip.txt")
+ if os.path.exists("./temp_config/dnsredir/"+objname+".d/codeen_nodes.conf"):
+ os.remove("./temp_config/dnsredir/"+objname+".d/codeen_nodes.conf")
+ if os.path.exists("./temp_config/dnsredir/"+objname+".d"):
+ os.rmdir("./temp_config/dnsredir/"+objname+".d")
+ if os.path.exists("./temp_config/dnsredir/"+objname+".conf"):
+ os.remove("./temp_config/dnsredir/"+objname+".conf")
+
diff --git a/planetstack/rr_observer/rrlib_config.py b/planetstack/rr_observer/rrlib_config.py
new file mode 100644
index 0000000..6d785e7
--- /dev/null
+++ b/planetstack/rr_observer/rrlib_config.py
@@ -0,0 +1,16 @@
+#!/usr/bin/python
+
+DNSREDIR_CONFIGDIR_PREFIX = "/etc/dnsredir/"
+DNSREDIR_LOGDIR_PREFIX = "/var/log/dnsredir/"
+DNSREDIR_PIDFILE_PREFIX = "/var/run/dnsredir."
+REDIR_USER = "princeton_coredirect"
+#REDIR_USER = "arizona_tools1"
+#DEMUX_USER = "arizona_tools1"
+DEMUX_USER = "princeton_codnsdemux"
+HEARTBEAT_PORT = 9000
+#not required as of now, as there will be only one frontend dnsdemux for all the services
+#DNSDEMUX_CONFIGDIR_PREFIX = "/etc/dnsdemux/"
+#DNSDEMUX_LOGDIR_PREFIX = "/var/log/dnsdemux/"
+#DNSDEMUX_PIDFILE_PREFIX = "/var/run/dnsdemux."
+
+TBD = "TBD"
diff --git a/planetstack/rr_observer/steps/sync_requestrouterservices.py b/planetstack/rr_observer/steps/sync_requestrouterservices.py
new file mode 100644
index 0000000..546b45d
--- /dev/null
+++ b/planetstack/rr_observer/steps/sync_requestrouterservices.py
@@ -0,0 +1,46 @@
+import os
+import sys
+import base64
+import traceback
+from django.db.models import F, Q
+from planetstack.config import Config
+from observer.syncstep import SyncStep
+from core.models import Service
+from requestrouter.models import RequestRouterService
+from util.logger import Logger, logging
+
+parentdir = os.path.join(os.path.dirname(__file__),"..")
+sys.path.insert(0,parentdir)
+
+from rrlib import RequestRouterLibrary
+
+logger = Logger(level=logging.INFO)
+
+class SyncRequestRouterService(SyncStep, RequestRouterLibrary):
+ provides=[RequestRouterService]
+ requested_interval=0
+
+ def __init__(self, **args):
+ SyncStep.__init__(self, **args)
+ RequestRouterLibrary.__init__(self)
+
+ def fetch_pending(self):
+ try:
+ ret = RequestRouterService.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+ return ret
+ except Exception, e:
+ traceback.print_exc()
+ return None
+
+ def sync_record(self, rr_service):
+ try:
+ print "syncing service!"
+ logger.info("sync'ing rr_service %s" % str(rr_service))
+ self.gen_slice_file(rr_service)
+ rr_service.save()
+ return True
+ except Exception, e:
+ traceback.print_exc()
+ return False
+
+
diff --git a/planetstack/rr_observer/steps/sync_servicemap.py b/planetstack/rr_observer/steps/sync_servicemap.py
new file mode 100644
index 0000000..76d2fdd
--- /dev/null
+++ b/planetstack/rr_observer/steps/sync_servicemap.py
@@ -0,0 +1,60 @@
+#!/usr/bin/python
+
+import os
+import sys
+import base64
+import traceback
+from django.db.models import F, Q
+from planetstack.config import Config
+from observer.syncstep import SyncStep
+from core.models import Service
+from requestrouter.models import ServiceMap
+from util.logger import Logger, logging
+
+parentdir = os.path.join(os.path.dirname(__file__),"..")
+sys.path.insert(0,parentdir)
+
+from rrlib import RequestRouterLibrary
+from configurationPush import ConfigurationPush
+import rrlib_config
+
+logger = Logger(level=logging.INFO)
+
+class SyncServiceMap(SyncStep, RequestRouterLibrary, ConfigurationPush):
+ provides=[ServiceMap]
+ requested_interval=0
+
+ def __init__(self, **args):
+ SyncStep.__init__(self, **args)
+ RequestRouterLibrary.__init__(self)
+ ConfigurationPush.__init__(self)
+
+ def fetch_pending(self):
+ try:
+ ret = ServiceMap.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+ return ret
+ except Exception, e:
+ traceback.print_exc()
+ return None
+
+ def sync_record(self, servicemap):
+ try:
+ print "sync! %s " % self.get_servicemap_uid(servicemap)
+ self.gen_dnsredir_serviceconf(servicemap)
+ self.gen_dnsdemux_serviceconf(servicemap)
+ # push generated files from temp_config
+ service_uid = self.get_servicemap_uid(servicemap)
+ self.config_push(service_uid, rrlib_config.REDIR_USER, "/opt/planetstack/rr_observer/playbook/site_redir.yml", "/etc/ansible/requestrouter/dnsredir/hosts")
+ self.config_push(service_uid, rrlib_config.DEMUX_USER, "/opt/planetstack/rr_observer/playbook/site_demux.yml", "/etc/ansible/requestrouter/dnsdemux/hosts")
+ self.teardown_temp_configfiles(service_uid)
+ except Exception, e:
+ traceback.print_exc()
+ return False
+
+if __name__ == "__main__":
+ sv = SyncServiceMap()
+
+ recs = sv.fetch_pending()
+
+ for rec in recs:
+ sv.sync_record( rec )
diff --git a/planetstack/scripts/opencloud b/planetstack/scripts/opencloud
new file mode 100755
index 0000000..d8e367a
--- /dev/null
+++ b/planetstack/scripts/opencloud
@@ -0,0 +1,138 @@
+#!/bin/sh
+
+if [ -z "$1" ]; then
+ echo usage: $0 "[initdb | createdb | dropdb | syncdb | runserver | resetdb | dumpdata]"
+ exit
+fi
+
+BACKUP_DIR=/opt/planetstack_backups
+
+cd /opt/planetstack
+
+function ensure_postgres_running {
+ # "sudo -u postgres pg_ctl -D /var/lib/postgres/data status" doesn't work
+ # right on Vicci, so let's try to detect it by seeing if the port is
+ # being listened on
+
+ netstat -nl | grep -i ":5432 "
+ if [[ $? == 0 ]]; then
+ echo "Postgres is already running"
+ return
+ fi
+
+ /sbin/service postgresql initdb
+ /sbin/service postgresql start
+ /sbin/chkconfig postgresql on
+
+ netstat -nl | grep -i ":5432 "
+ if [[ $? != 0 ]]; then
+ # it's still not running
+ echo "Trying fallback mechanism to start Postgres"
+ sudo -u postgres initdb -D /var/lib/pgsql/data/
+ sudo -u postgres pg_ctl -D /var/lib/pgsql/data -l logfile start
+ fi
+
+}
+function createdb {
+ echo "Creating OpenCloud database..."
+ sudo -u postgres createdb planetstack
+}
+function dropdb {
+ echo "Dropping OpenCloud database..."
+ sudo -u postgres dropdb planetstack
+}
+function syncdb {
+ echo "Syncing OpenCloud services..."
+ python /opt/planetstack/manage.py syncdb --noinput
+}
+function evolvedb {
+ echo "Syncing OpenCloud services..."
+ python /opt/planetstack/manage.py evolve --hint --execute --noinput
+}
+function stopserver {
+ echo "Stopping any running OpenCloud Service(s)"
+ pkill -f "python.*runserver"
+}
+function runserver {
+ PUBLIC_HOSTNAME=`/opt/planetstack/planetstack-config.py get server_hostname $HOSTNAME`
+ echo "Starting OpenCloud Service on $PUBLIC_HOSTNAME:8000"
+ python manage.py runserver $PUBLIC_HOSTNAME:8000&
+}
+
+function dumpdata {
+ mkdir -p $BACKUP_DIR
+ FN="$BACKUP_DIR/dumpdata-`date +%Y-%m-%d_%H:%M:%S`.json"
+ echo "Saving data to $FN"
+ python manage.py dumpdata core hpc syndicate requestrouter --indent 4 > $FN
+ if [[ ! -f $FN ]]; then
+ echo "FAILED to create $FN"
+ exit
+ fi
+ SIZE=$(du -k "$FN" | cut -f 1)
+ if [[ $SIZE -lt 9 ]]; then
+ echo "Dumpdata was empty. Deleting and aborting"
+ rm $FN
+ exit
+ fi
+ rm -f $BACKUP_DIR/dumpdata-latest.json
+ ln -s $FN $BACKUP_DIR/dumpdata-latest.json
+}
+
+COMMAND=$1
+
+if [ "$COMMAND" = "initdb" ]; then
+ stopserver
+ ensure_postgres_running
+ createdb
+ syncdb
+fi
+if [ "$COMMAND" = "repairdb" ]; then
+ stopserver
+ ensure_postgres_running
+ dumpdata
+ # TODO: This is where we could run migration scripts to upgrade the
+ # dumped data to the new models.
+ mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old
+ cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json
+ dropdb
+ createdb
+ syncdb
+fi
+if [ "$COMMAND" = "restoredb" ]; then
+ if [[ ! -f $BACKUP_DIR/dumpdata-latest.json ]]; then
+ echo There is no dumpdata to restore
+ exit
+ fi
+ stopserver
+ ensure_postgres_running
+ mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old
+ cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json
+ dropdb
+ createdb
+ syncdb
+fi
+if [ "$COMMAND" = "evolvedb" ]; then
+ stopserver
+ ensure_postgres_running
+ evolvedb
+fi
+if [ "$COMMAND" = "resetdb" ]; then
+ stopserver
+ dropdb
+ createdb
+ syncdb
+fi
+if [ "$COMMAND" = "syncdb" ]; then
+ stopserver
+ syncdb
+fi
+if [ "$COMMAND" = "runserver" ]; then
+ stopserver
+ runserver
+fi
+if [ "$COMMAND" = "stopserver" ]; then
+ stopserver
+fi
+if [ "$COMMAND" = "dumpdata" ]; then
+ dumpdata
+fi
diff --git a/planetstack/syndicate/admin.py b/planetstack/syndicate/admin.py
index 85c3ebd..e9f499c 100644
--- a/planetstack/syndicate/admin.py
+++ b/planetstack/syndicate/admin.py
@@ -14,6 +14,7 @@
from suit.widgets import LinkedSelect
from bitfield import BitField
from bitfield.forms import BitFieldCheckboxSelectMultiple
+from django.core.exceptions import ValidationError, ObjectDoesNotExist
class SyndicateServiceAdmin(SingletonAdmin,ReadOnlyAwareAdmin):
model = SyndicateService
@@ -31,6 +32,7 @@
('serviceattrs','Additional Attributes'),
)
+
class VolumeAccessRightForUserROInline(ReadOnlyTabularInline):
model = VolumeAccessRight
extra = 0
@@ -47,40 +49,10 @@
model = VolumeAccessRight
extra = 0
suit_classes = 'suit-tab suit-tab-volumeAccessRights'
-
-class VolumeAccessRightAdmin(ReadOnlyAwareAdmin):
- model = VolumeAccessRight
-
- formfield_overrides = { BitField: {'widget': BitFieldCheckboxSelectMultiple},}
- list_display = ['owner_id', 'volume']
- user_readonly_fields = ['owner_id','volume','gateway_caps']
- user_readonly_inlines = []
-
-class VolumeAccessRequestForUserROInline(ReadOnlyTabularInline):
- model = VolumeAccessRequest
- extra = 0
- suit_classes = 'suit-tab suit-tab-volumeAccessRequests'
- fields = ['volume', 'message']
-
-class VolumeAccessRequestROInline(ReadOnlyTabularInline):
- model = VolumeAccessRequest
- extra = 0
- suit_classes = 'suit-tab suit-tab-volumeAccessRequests'
- fields = ['owner_id', 'message']
-
-class VolumeAccessRequestInline(PlStackTabularInline):
- model = VolumeAccessRequest
- extra = 0
- suit_classes = 'suit-tab suit-tab-volumeAccessRequests'
- fields = ['owner_id', 'message']
-
-class VolumeAccessRequestAdmin(ReadOnlyAwareAdmin):
- model = VolumeAccessRequest
-
- formfield_overrides = { BitField: {'widget': BitFieldCheckboxSelectMultiple},}
- list_display = ['owner_id', 'volume', 'message']
- user_readonly_fields = ['volume','owner_id','message','message', 'gateway_caps']
- user_readonly_inlines = []
+ formfield_overrides = {
+ BitField: {'widget': BitFieldCheckboxSelectMultiple}
+ }
+ fields = ('owner_id', 'gateway_caps')
class VolumeInline(PlStackTabularInline):
model = Volume
@@ -94,56 +66,123 @@
suit_classes = 'suit-tab suit-tab-volumes'
fields = ['name', 'owner_id']
+
+class VolumeSliceFormSet( forms.models.BaseInlineFormSet ):
+ # verify that our VolumeSlice is valid
+
+ @classmethod
+ def verify_unchanged( cls, volume_pk, slice_pk, field_name, new_value ):
+ vs = None
+ try:
+ vs = VolumeSlice.objects.get( volume_id=volume_pk, slice_id=slice_pk )
+ except ObjectDoesNotExist, dne:
+ return True, None
+
+ old_value = getattr( vs, field_name )
+ if old_value != new_value:
+ return False, old_value
+ else:
+ return True, None
+
+
+ def clean( self ):
+ for form in self.forms:
+ # check each inline's cleaned data, if it's valid
+ cleaned_data = None
+ try:
+ if form.cleaned_data:
+ cleaned_data = form.cleaned_data
+ except AttributeError:
+ continue
+
+ # verify that the ports haven't changed
+ volume_pk = cleaned_data['volume_id'].pk
+ slice_pk = cleaned_data['slice_id'].pk
+
+ if not cleaned_data.has_key('peer_portnum'):
+ raise ValidationError("Missing client peer-to-peer cache port number")
+
+ if not cleaned_data.has_key('replicate_portnum'):
+ raise ValidationError("Missing replication service port number")
+
+ rc1, old_peer_port = VolumeSliceFormSet.verify_unchanged( volume_pk, slice_pk, 'peer_portnum', cleaned_data['peer_portnum'] )
+ rc2, old_replicate_port = VolumeSliceFormSet.verify_unchanged( volume_pk, slice_pk, 'replicate_portnum', cleaned_data['replicate_portnum'] )
+
+ err1str = ""
+ err2str = ""
+ if not rc1:
+ err1str = "change %s back to %s" % (cleaned_data['peer_portnum'], old_peer_port)
+ if not rc2:
+ err2str = " and change %s back to %s" % (cleaned_data['replicate_portnum'], old_replicate_port )
+
+ if not rc1 or not rc2:
+ raise ValidationError("Port numbers cannot be changed once they are set. Please %s %s" % (err1str, err2str))
+
+
+
+class VolumeSliceInline(PlStackTabularInline):
+ model = VolumeSlice
+ extra = 0
+ suit_classes = 'suit-tab suit-tab-volumeSlices'
+ fields = ['volume_id', 'slice_id', 'gateway_caps', 'peer_portnum', 'replicate_portnum']
+ formfield_overrides = { BitField: {'widget': BitFieldCheckboxSelectMultiple},}
+
+ formset = VolumeSliceFormSet
+
+ readonly_fields = ['credentials_blob']
+
+
+class VolumeSliceROInline(ReadOnlyTabularInline):
+ model = VolumeSlice
+ extra = 0
+ suit_classes = 'suit-tab suit-tab-volumeSlices'
+ fields = ['volume_id', 'slice_id', 'gateway_caps', 'peer_portnum', 'replicate_portnum']
+ formfield_overrides = { BitField: {'widget': BitFieldCheckboxSelectMultiple},}
+
+ formset = VolumeSliceFormSet
+
+ readonly_fields = ['credentials_blob']
+
+
class VolumeAdmin(ReadOnlyAwareAdmin):
model = Volume
- read_only_fields = ['blockSize']
+
+ def get_readonly_fields(self, request, obj=None ):
+ always_readonly = list(super(VolumeAdmin, self).get_readonly_fields(request, obj))
+ if obj == None:
+ # all fields are editable on add
+ return always_readonly
+
+ else:
+ # can't change owner, slice id, or block size on update
+ return ['blocksize', 'owner_id'] + always_readonly
+
+
list_display = ['name', 'owner_id']
formfield_overrides = { BitField: {'widget': BitFieldCheckboxSelectMultiple},}
- detailsFieldList = ['name', 'owner_id', 'description','file_quota','blocksize', 'private','archive', 'default_gateway_caps' ]
- keyList = ['metadata_public_key','metadata_private_key','api_public_key']
-
+ #detailsFieldList = ['name', 'owner_id', 'description','file_quota','blocksize', 'private','archive', 'default_gateway_caps' ]
+ detailsFieldList = ['name', 'owner_id', 'description','blocksize', 'private','archive', 'default_gateway_caps' ]
+
fieldsets = [
(None, {'fields': detailsFieldList, 'classes':['suit-tab suit-tab-general']}),
- (None, {'fields': keyList, 'classes':['suit-tab suit-tab-volumeKeys']}),
+ #(None, {'fields': keyList, 'classes':['suit-tab suit-tab-volumeKeys']}),
]
- inlines = [VolumeAccessRightInline, VolumeAccessRequestInline]
+ inlines = [VolumeAccessRightInline, VolumeSliceInline]
- user_readonly_fields = ['name','owner_id','description','blocksize','private','metadata_public_key','metadata_private_key','api_public_key','file_quota','default_gateway_caps']
- user_readonly_inlines = [VolumeAccessRightROInline, VolumeAccessRequestROInline]
+ user_readonly_fields = ['name','owner_id','description','blocksize','private','default_gateway_caps']
+
+ user_readonly_inlines = [VolumeAccessRightROInline, VolumeSliceROInline]
suit_form_tabs =(('general', 'Volume Details'),
- ('volumeKeys', 'Access Keys'),
- ('volumeAccessRequests', 'Volume Access Requests'),
+ #('volumeKeys', 'Access Keys'),
+ ('volumeSlices', 'Slices'),
('volumeAccessRights', 'Volume Access Rights'),
)
-
-class SyndicateUserAdmin(ReadOnlyAwareAdmin):
- model = SyndicateUser
- verbose_name = "Users"
- verbose_name = "Users"
- list_display = ['user','is_admin', 'max_volumes']
- inlines = [VolumeInline,VolumeAccessRequestInline,VolumeAccessRightInline]
- user_readonly_fields = ['user','is_admin','max_volumes','max_UGs','max_RGs','max_AGs']
- user_readonly_inlines = [VolumeROInline,VolumeAccessRequestForUserROInline,VolumeAccessRightForUserROInline]
-
- fieldsets = [
- (None, {'fields': ['user','is_admin','max_volumes','max_UGs','max_RGs','max_AGs'], 'classes':['suit-tab suit-tab-general']}),
- ]
-
- suit_form_tabs =(('general', 'Volume Details'),
- ('volumes', 'Volumes'),
- ('volumeAccessRequests', 'Volume Access Requests'),
- ('volumeAccessRights', 'Volume Access Rights'),
- )
-
+# left panel:
admin.site.register(SyndicateService, SyndicateServiceAdmin)
-admin.site.register(VolumeAccessRight, VolumeAccessRightAdmin)
-admin.site.register(VolumeAccessRequest, VolumeAccessRequestAdmin)
admin.site.register(Volume, VolumeAdmin)
-admin.site.register(SyndicateUser, SyndicateUserAdmin)
-
diff --git a/planetstack/syndicate/models.py b/planetstack/syndicate/models.py
index efc08c6..656e881 100644
--- a/planetstack/syndicate/models.py
+++ b/planetstack/syndicate/models.py
@@ -1,8 +1,9 @@
-from core.models import User,Site,Service,SingletonModel,PlCoreBase
+from core.models import User,Site,Service,SingletonModel,PlCoreBase,Slice
import os
from django.db import models
from django.forms.models import model_to_dict
from bitfield import BitField
+from django.core.exceptions import ValidationError
# Create your models here.
@@ -14,51 +15,79 @@
def __unicode__(self): return u'Syndicate Service'
-class SyndicateUser(models.Model):
- user = models.ForeignKey(User)
- is_admin = models.BooleanField(default=False, help_text="Indicates this user has Administrative purposes for the Syndicate Service")
- max_volumes = models.PositiveIntegerField(help_text="Maximum number of Volumes this user may create.", default=1)
- max_UGs = models.PositiveIntegerField(help_text="Maximum number of User Gateways this user may create.", default=500)
- max_RGs = models.PositiveIntegerField(help_text="Maximum number of Replica Gateways this user may create.", default=500)
- max_AGs = models.PositiveIntegerField(help_text="Maximum number of Aquisition Gateways this user may create.", default=10)
-
- def __unicode__(self): return self.user.email
-
-class Volume(models.Model):
+class SyndicatePrincipal(PlCoreBase):
+ class Meta:
+ app_label = "syndicate"
+
+ # for now, this is a user email address
+ principal_id = models.TextField()
+ public_key_pem = models.TextField()
+ sealed_private_key = models.TextField()
+
+ def __unicode__self(self): return "%s" % self.principal_id
+
+
+class Volume(PlCoreBase):
+ class Meta:
+ app_label = "syndicate"
+
name = models.CharField(max_length=64, help_text="Human-readable, searchable name of the Volume")
- owner_id = models.ForeignKey(SyndicateUser, verbose_name='Owner')
+
+ owner_id = models.ForeignKey(User, verbose_name='Owner')
+
description = models.TextField(null=True, blank=True,max_length=130, help_text="Human-readable description of what this Volume is used for.")
blocksize = models.PositiveIntegerField(help_text="Number of bytes per block.")
private = models.BooleanField(default=True, help_text="Indicates if the Volume is visible to users other than the Volume Owner and Syndicate Administrators.")
- archive = models.BooleanField(default=True, help_text="Indicates if this Volume is read-only, and only an Aquisition Gateway owned by the Volume owner (or Syndicate admin) can write to it.")
- metadata_public_key = models.TextField(null=True, blank=True, max_length=1024, help_text="Public key Gateways will use to verify the authenticity of metadata from this Volume")
- metadata_private_key = models.TextField(null=True, blank=True, max_length=1024, help_text="Private key the Volume should use to sign metadata served to Gateways")
- api_public_key = models.TextField(null=True, blank=True, max_length=1024, help_text="Public key used to verify writes to these fields from Volume owner")
+ archive = models.BooleanField(default=False, help_text="Indicates if this Volume is read-only, and only an Aquisition Gateway owned by the Volume owner (or Syndicate admin) can write to it.")
- file_quota = models.IntegerField(help_text='Maximum number of files and directories allowed in this Volume (-1 means "unlimited")')
-
- default_gateway_caps = BitField(flags=('GATEWAY_CAP_READ_DATA','GATEWAY_CAP_READ_METADATA', 'GATEWAY_CAP_WRITE_DATA', 'GATEWAY_CAP_WRITE_METADATA', 'GATEWAY_CAP_COORDINATE'), verbose_name='Default Gateway Capabilities')
- #default_gateway_caps = models.PositiveIntegerField(verbose_name='Default Gateway Capabilities')
- #default_gateway_caps2 = models.CharField(max_length=32,null=True,default = "readonly", verbose_name='Default Gateway Capabilities')
+ CAP_READ_DATA = 1
+ CAP_WRITE_DATA = 2
+ CAP_HOST_DATA = 4
+
+ # NOTE: preserve order of capabilities here...
+ default_gateway_caps = BitField(flags=("read data", "write data", "host files"), verbose_name='Default User Capabilities')
def __unicode__(self): return self.name
-class VolumeAccessRight(models.Model):
- owner_id = models.ForeignKey(SyndicateUser, verbose_name='user')
+
+class VolumeAccessRight(PlCoreBase):
+ class Meta:
+ app_label = "syndicate"
+
+ owner_id = models.ForeignKey(User, verbose_name='user')
+
volume = models.ForeignKey(Volume)
- gateway_caps = BitField(flags=('GATEWAY_CAP_READ_DATA','GATEWAY_CAP_READ_METADATA', 'GATEWAY_CAP_WRITE_DATA', 'GATEWAY_CAP_WRITE_METADATA', 'GATEWAY_CAP_COORDINATE'), verbose_name='Gateway Capabilities')
- #gateway_caps = models.PositiveIntegerField(verbose_name='Gateway Capabilities')
- #gateway_caps2 = models.CharField(max_length=32, default='readonly',null=True,verbose_name='Default Gateway Capabilities')
+ gateway_caps = BitField(flags=("read data", "write data", "host files"), verbose_name="User Capabilities")
- def __unicode__(self): return self.owner_id.user.email
+ def __unicode__(self): return "%s-%s" % (self.owner_id.email, self.volume.name)
-class VolumeAccessRequest(models.Model):
- owner_id = models.ForeignKey(SyndicateUser, verbose_name='user')
- volume = models.ForeignKey(Volume)
- message = models.TextField(null=True, blank=True, max_length=1024, help_text="Description of why the user wants access to the volume.")
- gateway_caps = BitField(flags=('GATEWAY_CAP_READ_DATA','GATEWAY_CAP_READ_METADATA', 'GATEWAY_CAP_WRITE_DATA', 'GATEWAY_CAP_WRITE_METADATA', 'GATEWAY_CAP_COORDINATE'), verbose_name='Gateway Capabilities')
- #gateway_caps = models.PositiveIntegerField(verbose_name='Gateway Capabilities')
- #gateway_caps2 = models.CharField(max_length=32,default='readonly',null=True,verbose_name='Default Gateway Capabilities')
- def __unicode__(self): return self.owner_id.user.email
+class VolumeSlice(PlCoreBase):
+ class Meta:
+ app_label = "syndicate"
+
+ volume_id = models.ForeignKey(Volume, verbose_name="Volume")
+ slice_id = models.ForeignKey(Slice, verbose_name="Slice")
+ gateway_caps = BitField(flags=("read data", "write data", "host files"), verbose_name="Slice Capabilities")
+
+ peer_portnum = models.PositiveIntegerField(help_text="User Gateway port", verbose_name="Client peer-to-peer cache port")
+ replicate_portnum = models.PositiveIntegerField(help_text="Replica Gateway port", verbose_name="Replication service port")
+
+ credentials_blob = models.TextField(null=True, blank=True, help_text="Encrypted slice credentials")
+
+ def __unicode__(self): return "%s-%s" % (self.volume_id.name, self.slice_id.name)
+
+ def clean(self):
+ """
+ Verify that our fields are in order:
+ * peer_portnum and replicate_portnum have to be valid port numbers between 1025 and 65534
+ * peer_portnum and replicate_portnum cannot be changed once set.
+ """
+
+ if self.peer_portnum < 1025 or self.peer_portnum > 65534:
+ raise ValidationError( "Client peer-to-peer cache port number must be between 1025 and 65534" )
+
+ if self.replicate_portnum < 1025 or self.replicate_portnum > 65534:
+ raise ValidationError( "Replication service port number must be between 1025 and 65534" )
+
diff --git a/planetstack/templates/admin/base.html b/planetstack/templates/admin/base.html
index b9ea01c..b361058 100644
--- a/planetstack/templates/admin/base.html
+++ b/planetstack/templates/admin/base.html
@@ -1,4 +1,4 @@
-{% load admin_static %}{% load suit_tags %}{% load url from future %}<!DOCTYPE html>
+{% load admin_static %}{% load suit_tags %}{% load url from future %}<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
<head>
<title>{% block title %} {%if title %} {{ title }} | {% endif %} {{ 'ADMIN_NAME'|suit_conf }}{% endblock %}</title>
@@ -9,7 +9,12 @@
{% block extrastyle %}{% endblock %}
{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}"/>{% endif %}
<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
- <script src="{% static 'suit/js/jquery-1.8.3.min.js' %}"></script>
+ <script src="{% static 'suit/js/jquery-1.9.1.min.js' %}"></script>
+ <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
+ <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
+<script type="text/javascript" src="{% static 'log4javascript-1.4.6/log4javascript.js' %}"></script>
+
+
<script type="text/javascript">var Suit = { $: $.noConflict() }; if (!$) $ = Suit.$; </script>
{% if 'SHOW_REQUIRED_ASTERISK'|suit_conf %}
<style type="text/css">.required:after { content: '*'; margin: 0 0 0 5px; position: absolute; color: #ccc;}</style>
@@ -18,7 +23,6 @@
{% block blockbots %}
<meta name="robots" content="NONE,NOARCHIVE"/>{% endblock %}
<link rel="shortcut icon" href="{% static 'favicon.png' %}">
-
</head>
{% load i18n %}
@@ -31,19 +35,13 @@
{% block container %}
<div id="container">
+ <a href="{% url 'admin:index' %}"><h1 id="site-name"><img class="logo" height="70" width="259" src="{% static 'open-cloud-login-themed-light.png' %}"/></h1></a>
{% block header %}
{% if not is_popup %}
<!-- Header -->
<div id="header" class="header">
<div id="branding">
- <table width="100%">
- <tr>
- <td width="70%">
- <!-- <a href="{% url 'admin:index' %}"><h1 id="site-name">{% block branding %}{{ 'ADMIN_NAME'|suit_conf }}{% endblock %}</h1></a>-->
- <a href="{% url 'admin:index' %}"><h1 id="site-name"><img src="{% static 'open-cloud-themed.png' %}"/></h1></a>
- </td>
- <td width="30%">
{% block quick-search %}
{% with 'SEARCH_URL'|suit_conf as search_url %}
{% if search_url %}
@@ -55,9 +53,6 @@
{% endif %}
{% endwith %}
{% endblock %}
- </td>
- </tr>
- </table>
</div>
{% block header_time %}
@@ -88,9 +83,7 @@
{% if user.is_active and user.is_staff %}
<div id="user-tools">
{% trans 'Welcome,' %}
- <strong>
- {% filter force_escape %}
- {% firstof user.first_name user.username %}{% endfilter %}</strong>.
+ <a href="http://{{ request.get_host}}/admin/core/user/{{user.id}}">{{user.email}}</a>
<span class="user-links">
{% block userlinks %}
{% url 'django-admindocs-docroot' as docsroot %}
@@ -121,6 +114,10 @@
<div id="suit-center" class="suit-column">
{% if not is_popup %}
+ <div id=openCloudTopPage>
+ {% include "/opt/planetstack/templates/admin/newminidashboard.html" %}
+ </div>
+
{% block breadcrumbs %}
<ul class="breadcrumb">
<li><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
@@ -133,12 +130,6 @@
</li>
</ul>
{% endblock %}
- <label class="nodetextbox" >Active Nodes: </label>
- <label class="nodelabel" >37</label>
- <label class="nodetextbox">CPU Utilization: </label>
- <label class="nodelabel" >12%</label>
- <label class="nodetextbox">Bytes Transferred:</label>
- <label class="nodelabel" style="width:60px;">4321GB</label>
{% endif %}
{% block messages %}
@@ -171,6 +162,7 @@
{% endblock %}
</div>
<!-- END Content -->
+ <span class="clearfix"></span>
</div>
{% endblock %}
@@ -209,11 +201,11 @@
{% endblock %}
</div>
- <div class="copyright">
+ <!-- <div class="copyright">
{% block copyright %}
Copyright © 2013 DjangoSuit.com<br>Developed by <a href="http://djangosuit.com" target="_blank">DjangoSuit.com</a>
{% endblock %}
- </div>
+ </div> -->
<div class="branding">{% block footer_branding %}
{% with 'ADMIN_NAME'|suit_conf as admin_name %}
@@ -230,7 +222,56 @@
<script src="{% static 'suit/bootstrap/js/bootstrap.min.js' %}"></script>
<script src="{% static 'suit/js/suit.js' %}"></script>
- {% block extrajs %}{% endblock %}
+ <script src="{% static 'page_analytics.js' %}"></script>
+ <script type="text/javascript" src="//www.google.com/jsapi"></script>
+ <script src="{% static 'planetstack_graphs.js' %}"></script>
+ <!-- src="{% static 'planetstack_graphs_old.js' %}" -->
+ {% block extrajs %}{% endblock %}
+<script src="http://d3js.org/d3.v3.js"></script>
+ <div class="modal fade hide" id="chartsModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <!--<div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+ <h4 class="modal-title" id="myModalLabel">OpenCloud</h4>
+ </div>-->
+ <div class="modal-body" style="overflow-y:hidden; overflow-x:hidden;">
+ <div class="chartContainer">
+ <div class="row">
+ <div class=" padding">
+ </div>
+ </div>
+
+ <div class="row">
+ <div class=" heading">
+ <p id="chartHeading" class="heading">OpenCloud</p>
+ </div>
+ </div>
+ <div class="row">
+ <div class="padding"></div>
+ <div class="padding"></div>
+ </div>
+ <div class="row">
+ <div id="graph" class="graph">
+ </div>
+ </div>
+ </div>
+ <div id="graph_work" style="display:none"></div>
+ </div>
+ <!--<div class="modal-footer">
+ <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
+ </div>-->
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+ </div><!-- /.modal -->
+
+
+<script>
+
+
+
+
+</script>
</body>
</html>
diff --git a/planetstack/templates/admin/dashboard/cdn_nodes.html b/planetstack/templates/admin/dashboard/cdn_nodes.html
new file mode 100644
index 0000000..d93667d
--- /dev/null
+++ b/planetstack/templates/admin/dashboard/cdn_nodes.html
@@ -0,0 +1,106 @@
+<div id="tabs-6">
+<div class="row">
+ <span><b>Content Provider:</b></span>
+ <span><select id="cdn-node-data-slicename">
+ <option value="all">all</option>
+ {% for cp in cdnContentProviders %}
+ <option value="{{ cp.account }}">{{ cp.name }}</option>
+ {% endfor %}
+ </select></span>
+</div>
+<div id="cdn-node-table"></div>
+</div>
+<script>
+
+function domain_name_sort(a,b) {
+ parts_a = a.split(".");
+ parts_b = b.split(".");
+ parts_a = parts_a.reverse();
+ parts_b = parts_b.reverse();
+ a = parts_a.join(".");
+ b = parts_b.join(".");
+ return ((a < b) ? -1 : ((a > b) ? 1 : 0));
+}
+
+jQuery.fn.dataTableExt.oSort['domain-name-asc'] = function(a,b) {
+ return domain_name_sort(a,b);
+};
+
+jQuery.fn.dataTableExt.oSort['domain-name-desc'] = function(a,b) {
+ retuirn -domain_name_sort(a,b);
+};
+
+function updateCDNNodeData(data) {
+ $('#cdn-node-table').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="dynamic_cdn_nodes"></table>' );
+ var actualEntries = [];
+
+ var rows = data.rows;
+ for (row in rows) {
+ hostname = rows[row]['hostname'];
+ bytes_sent = rows[row]['sum_bytes_sent'];
+ bytes_hit = rows[row]['sum_bytes_hit'];
+ elapsed = rows[row]['sum_elapsed'];
+ healthy = rows[row]['sum_healthy'];
+
+ if (bytes_sent > 0) {
+ hit_ratio = parseInt( bytes_hit * 100.0 / bytes_sent );
+ } else {
+ hit_ratio = 0;
+ }
+
+ Mbps = parseInt(rows[row]['sum_computed_bytes_sent_div_elapsed'] * 8.0 / 1024.0 / 1024.0);
+
+ if (healthy>0) {
+ healthyStr = "ok";
+ } else {
+ healthyStr = "bad";
+ }
+
+ actualEntries.push([hostname, healthyStr, Mbps, hit_ratio]);
+ }
+ oTable = $('#dynamic_cdn_nodes').dataTable( {
+ "bJQueryUI": true,
+ "aaData": actualEntries,
+ "bStateSave": true,
+ "aoColumns": [
+ { "sTitle": "Hostname", sType: "domain-name" },
+ { "sTitle": "Healthy" },
+ { "sTitle": "Mbps" , sClass: "alignCenter"},
+ { "sTitle": "Hit Ratio" , sClass: "alignCenter"},
+ ],
+ } );
+}
+
+function updateCDNNodes() {
+ var contentProvider = $("#cdn-node-data-slicename").val();
+
+ var filterPart = ""
+ if ((contentProvider!="") && (contentProvider!="all")) {
+ filterPart = "&cp=" + contentProvider
+ }
+
+ var url= '/analytics/bigquery/?event=hpc_heartbeat&sum=@bytes_sent,@bytes_hit,@healthy,@elapsed&computed=@bytes_sent/@elapsed&groupBy=@hostname&cached=hpc&cachedGroupBy=@hostname' + filterPart;
+
+ $.ajax({
+ url: url,
+ dataType : 'json',
+ type : 'GET',
+ success: function(newData)
+ {
+ updateCDNNodeData(newData);
+ }
+});
+ setTimeout(updateCDNNodes, 30000);
+}
+
+google.setOnLoadCallback(function () {
+ $('#cdn-node-data-slicename').change(function()
+ {
+ updateCDNNodes();
+ });
+
+ updateCDNNodes();
+});
+
+//setTimeout(updateCDNNodes, 5000);
+</script>
diff --git a/planetstack/templates/admin/dashboard/cdnoperations.html b/planetstack/templates/admin/dashboard/cdnoperations.html
new file mode 100644
index 0000000..167b558
--- /dev/null
+++ b/planetstack/templates/admin/dashboard/cdnoperations.html
@@ -0,0 +1,263 @@
+ <div id="HPCDashboard">
+ <h1>CDN Operations View</h1>
+ <span id="hpcSummary">
+ <span class="summary-attr"><b>Allocated Slivers:</b> <span id="active-slivers-value"> </span> </span>
+ <span class="summary-attr"><b>CDN Bandwidth:</b> <span id="overall-throughput-value"> </span> </span>
+ <span class="summary-attr-util"><b>CDN Load:</b> <span id="cpu-utilization-value"> </span> </span>
+ </span>
+ <div id="map-us" ></div>
+ <div style="line-height: 30%"><br></div><table border=0><tr>
+ <td>Least Loaded </td>
+ <td bgcolor="#0000FF" width=40> </td>
+ <td bgcolor="#00FFFF" width=40> </td>
+ <td bgcolor="#00FF00" width=40> </td>
+ <td bgcolor="#FFFF00" width=40> </td>
+ <td bgcolor="#FF0000" width=40> </td>
+ <td> Most Loaded</td>
+ </tr></table>
+ </div>
+
+ <div id="confirmNodeAdded" title="Added Node to Site"><p>Added Node to Site</p></div>
+ <div id="confirmNodeRemoved" title="Removed Node from Site"><p>Added Node to Site</p></div>
+
+<script>
+$( "#confirmNodeAdded" ).dialog({ autoOpen: false,
+ modal: true,
+ buttons: {
+ Ok: function() {
+ $( this ).dialog( "close" );
+ }
+ }});
+$( "#confirmNodeRemoved" ).dialog({ autoOpen: false });
+
+L.Map = L.Map.extend({
+ openPopup: function(popup) {
+ this._popup = popup;
+
+ return this.addLayer(popup).fire('popupopen', {
+ popup: this._popup
+ });
+ }
+});
+
+
+//Iterate through data and find the max/min coordinates to include all of our points to start
+var map = L.map('map-us'); //.setView([0, 0], 1);
+map.scrollWheelZoom.disable();
+
+//
+// Great tiles, but starting to occasionally see 403 errors on certain tiles causing grey out effect
+//L.tileLayer('http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png', {
+//
+// Swapping out cloudmade tiles to openstreetmap - too many grey tiles showing
+L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
+ maxZoom: 18,
+ attribution: 'Test'
+}).addTo(map);
+
+var arrayOfLatLngs = [];
+var mapData = {{ cdnData|safe }};
+log.debug( mapData );
+
+for ( var key in mapData ) {
+ arrayOfLatLngs.push([mapData[key]['lat'],mapData[key]['long']]);
+ log.debug( arrayOfLatLngs );
+
+ mapData[key]['marker'] = L.marker([mapData[key]['lat'], mapData[key]['long']], {icon: getIcon(mapData[key]['numNodes'], mapData[key]['numHPCSlivers'], 0, mapData[key]['hot']) });
+ mapData[key]['marker'].addTo(map).bindPopup(setPopupVals(key, mapData[key]));
+
+}
+var bounds = new L.LatLngBounds(arrayOfLatLngs);
+map.fitBounds(bounds);
+
+var popup = L.popup();
+
+
+function setPopupVals (site, siteData) {
+ var retVal = '<span class="SiteDetail"><b>' + site + '</b></span>' +
+ '</br><a href="' + siteData['siteUrl'] + '">' + siteData['siteUrl'] + '</a>' +
+ '</br><b>HPC Slivers: </b>' + siteData['numHPCSlivers'] +
+ '</br><b>Total Nodes: </b>' + siteData['numNodes'] +
+// '</br><b>Hot: </b>' + Math.round(siteData['hot']*100) +
+ '</br><b>Measured Load: </b>' + siteData['load'] + '%' +
+ '<span id="addSlivers"></br><a href="#" id="addHPCSliver" data-site="' + site + '" data-availNodes="' + siteData['numNodes'] +'">Add HPC Slivers</a> </span>' +
+ '<span id="remSlivers"><a href="#" id="remHPCSliver" data-site="' + site + '">Remove HPC Slivers</a> </span>';
+
+ return retVal;
+}
+
+$('#map-us').on('click', '#remHPCSliver', function() {
+
+ $.ajax({
+ url : '/dashboardaddorremsliver/',
+ dataType : 'json',
+ data: {site: $(this).data('site'),
+ actionToDo: "rem",
+ csrfmiddlewaretoken: "{{ csrf_token }}", // < here
+ state:"inactive" },
+ type : 'POST',
+ success:function(){
+ confirmDialog("Info","Removed an HPC Sliver from Site ");
+ },
+ error:function (xhr, textStatus, thrownError){
+ errorDialog("Error", textStatus + " " + xhr.responseText);
+ }
+ });
+});
+
+$('#map-us').on('click', '#addHPCSliver', function() {
+
+ $.ajax({
+ url : '/dashboardaddorremsliver/',
+ dataType : 'json',
+ data: {site: $(this).data('site'),
+ actionToDo: "add",
+ csrfmiddlewaretoken: "{{ csrf_token }}", // < here
+ state:"inactive" },
+ type : 'POST',
+ success: function(response)
+ {
+ confirmDialog("Info","Added an HPC Sliver to Site ");
+ },
+ error:function (xhr, textStatus, thrownError){
+ errorDialog("Error", textStatus + " " + xhr.responseText);
+ }
+ });
+});
+
+function getIcon(numNodes, numHPCSlivers, currentBW, hot) {
+ //var colorChoices = ["#007FFF", "#0000FF", "#7f00ff", "#FF00FF", "#FF007F", "#FF0000"];
+ var colorChoices = ["#0000FF", "#00FFFF", "#00FF00", "#FFFF00", "#FF0000"];
+
+ var ratio = hot * 100; //(numHPCSlivers/numNodes) * 100;
+ var numColors = colorChoices.length;
+ var colorBands = 100/numColors;
+
+ //Algorithm for color tone should consider the number of available nodes
+ // on the site, and then how much the current dedicated nodes are impacted
+ //var iconColor = 0;
+ var iconColor = colorChoices.length-1;
+ for (colorBand = 0; colorBand < numColors; colorBand ++) {
+ if (ratio < colorBands * colorBand+1) {
+ iconColor = colorBand
+ break;
+ }
+ }
+
+ if (numHPCSlivers < 1) {
+ iconColor = "#7F7F7F";
+ } else {
+ iconColor = colorChoices[iconColor];
+ }
+
+ var icon = L.MakiMarkers.icon({icon: "star-stroked", color: iconColor , size: "s"});
+ return icon;
+}
+
+function updateMaps() {
+ log.debug("Attempting to update Maps");
+ $.ajax({
+ url : '/hpcdashboard',
+ dataType : 'json',
+ type : 'GET',
+ success: function(newData)
+ {
+ log.debug("Successfully got data back...");
+ log.debug(newData);
+ log.debug("Still have old data too");
+ log.debug(mapData);
+ updateMapData(newData);
+ }
+});
+ setTimeout(updateMaps, 30000)
+
+}
+
+function updateMapData(newData) {
+ for ( site in newData ) {
+ var isNewSite = false;
+ //check to see if the site is new or not
+ if (site in mapData) {
+ log.debug("Site " + site + " already mapped");
+ //take ownership of marker
+ newData[site]['marker'] = mapData[site]['marker'];
+ delete mapData[site];
+ newData[site]['marker'].setIcon(getIcon(newData[site]['numNodes'], newData[site]['numHPCSlivers'], 0, newData[site]['hot']));
+ // workaround, markers currently don't have a setPopup Content method -- so have to grab object directly
+ newData[site]['marker']._popup.setContent(setPopupVals(site, newData[site]));
+ }
+ else {
+ isNewSite = true;
+ log.debug("New Site detected: " + site);
+ newData[site]['marker'] = L.marker([newData[site]['lat'], newData[site]['long']],
+ {icon: getIcon(newData[site]['numNodes'], newData[site]['numHPCSlivers'], 0, newData[site]['hot']) });
+ newData[site]['marker'].addTo(map).bindPopup(setPopupVals(site, newData[site])); //.openPopup();
+ log.debug("Should have added the new site");
+
+ }
+ }
+
+ // Anything still in data needs to be removed since it is no longer a valid site
+ for (remSite in mapData) {
+ log.warn("Site: " + remSite + " is no longer valid, removing from map");
+ map.removeLayer(data[remSite]['marker']);
+ }
+ mapData = newData;
+}
+
+function onMapClick(e) {
+ popup
+ .setLatLng(e.latlng)
+ .setContent("You clicked the map at " + e.latlng.toString())
+ .openOn(map);
+}
+
+setTimeout(updateMaps, 5000)
+
+// from stackexchange
+function setInnerText (elementId, text) {
+ var element;
+ if (document.getElementById) {
+ element = document.getElementById(elementId);
+ } else if (document.all) {
+ element = document.all[elementId];
+ }
+ if (element) {
+ if (typeof element.textContent != 'undefined') {
+ element.textContent = text;
+ } else if (typeof element.innerText != 'undefined') {
+ element.innerText = text;
+ } else if (typeof element.removeChild != 'undefined') {
+ while (element.hasChildNodes()) {
+ element.removeChild(element.lastChild);
+ }
+ element.appendChild(document.createTextNode(text)) ;
+ }
+ }
+}
+
+function updateLabelData(summaryData) {
+ setInnerText("active-slivers-value", summaryData["total_slivers"]);
+ setInnerText("overall-throughput-value", (summaryData["total_bandwidth"]*8/1024/1024/1024).toFixed(2) + " Gbps");
+ setInnerText("cpu-utilization-value", summaryData["average_cpu"] + "%");
+}
+
+function updateLabels() {
+ log.debug("Attempting to update Labels");
+ $.ajax({
+ url : '/hpcsummary',
+ dataType : 'json',
+ type : 'GET',
+ success: function(newData)
+ {
+ updateLabelData(newData);
+ }
+});
+ setTimeout(updateLabels, 30000)
+
+}
+
+setTimeout(updateLabels, 5000)
+
+
+</script>
diff --git a/planetstack/templates/admin/dashboard/customize.html b/planetstack/templates/admin/dashboard/customize.html
new file mode 100644
index 0000000..d2e8a20
--- /dev/null
+++ b/planetstack/templates/admin/dashboard/customize.html
@@ -0,0 +1,93 @@
+<form>
+ <div class="customize_row">
+ <div class="customize_column">
+ <div>Available Dashboard Views</div>
+ <select name="selectfrom" id="select-from" multiple size="5">
+ {% for cp in unusedDashboards %}
+ <option value="{{ cp }}">{{ cp }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ <div class="customize_column">
+ <br>
+ <div class="btn btn-success" id="customize-btn-add">Add »</div><br><br>
+ <div class="btn btn-success" id="customize-btn-remove">« Remove</div>
+ </div>
+ <div class="customize_column">
+ <div>Selected Dashboard Views</div>
+ <select name="selectto" id="select-to" multiple size="5">
+ {% for cp in dashboards %}
+ <option value="{{ cp }}">{{ cp }}</option>
+ {% endfor %}
+ </select>
+ <br>
+ <div class="btn btn-high btn-info" id="customize-btn-save">Save</div>
+ <div style="display: none" id="customize-msg-saving">Saving...</div>
+ </div>
+ <div class="customize_column">
+ <br>
+ <div class="btn btn-success" id="customize-btn-up">Up</div><br><br>
+ <div class="btn btn-success" id="customize-btn-down">Down</div>
+ </div>
+ </div>
+</form>
+
+<script>
+$(document).ready(function() {
+ $('#customize-btn-add').click(function(){
+ $('#select-from option:selected').each( function() {
+ $('#select-to').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>");
+ $(this).remove();
+ });
+ });
+ $('#customize-btn-remove').click(function(){
+ $('#select-to option:selected').each( function() {
+ $('#select-from').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>");
+ $(this).remove();
+ });
+ });
+ $('#customize-btn-up').bind('click', function() {
+ $('#select-to option:selected').each( function() {
+ var newPos = $('#select-to option').index(this) - 1;
+ if (newPos > -1) {
+ $('#select-to option').eq(newPos).before("<option value='"+$(this).val()+"' selected='selected'>"+$(this).text()+"</option>");
+ $(this).remove();
+ }
+ });
+ });
+ $('#customize-btn-down').bind('click', function() {
+ var countOptions = $('#select-to option').size();
+ $('#select-to option:selected').each( function() {
+ var newPos = $('#select-to option').index(this) + 1;
+ if (newPos < countOptions) {
+ $('#select-to option').eq(newPos).after("<option value='"+$(this).val()+"' selected='selected'>"+$(this).text()+"</option>");
+ $(this).remove();
+ }
+ });
+ });
+ $('#customize-btn-save').bind('click', function() {
+ $("#customize-btn-save").hide();
+ $("#customize-msg-saving").show();
+ var items=[];
+ $("#select-to option").each(function() { items.push($(this).val()); });
+ $.ajax({
+ url: '/customize/',
+ dataType: 'json',
+ data: {
+ dashboards: items.join(","),
+ csrfmiddlewaretoken: "{{ csrf_token }}" // < here
+ },
+ type: 'POST',
+ error: function (jqXHR, textStatus, errorThrown) {
+ errorDialog("Error", textStatus + " " + jqXHR.responseText);
+ $("#customize-btn-save").show();
+ $("#customize-msg-saving").hide();
+ },
+ success: function () {
+ location.reload();
+ }
+ });
+ });
+});
+</script>
+
diff --git a/planetstack/templates/admin/dashboard/dashboard_base.html b/planetstack/templates/admin/dashboard/dashboard_base.html
new file mode 100644
index 0000000..903f3fd
--- /dev/null
+++ b/planetstack/templates/admin/dashboard/dashboard_base.html
@@ -0,0 +1,91 @@
+{% extends "admin/base.html" %}
+{% load admin_static %}
+
+{% block extrahead %}
+<link rel="stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.0/css/jquery.dataTables.css">
+<link rel="stylesheet" type="text/css" href="{% static 'suit/css/suit.css' %}" media="all">
+<link rel="stylesheet" type="text/css" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.0/css/jquery.dataTables_themeroller.css">
+<link rel="stylesheet" type="text/css" href="{% static 'planetstack.css' %}" media="all">
+<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
+<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" />
+<script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"></script>
+
+
+<!-- no need to include jquery here as it's already included by base.html. Including it multiple times will break mtuity statistics. -->
+<!-- src="http://code.jquery.com/jquery-1.9.1.js" -->
+
+<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
+<script src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
+<script type="text/javascript" src="{% static 'log4javascript-1.4.6/log4javascript.js' %}"></script>
+<script src="{% static 'js/Leaflet.MakiMarkers.js' %}" > </script>
+
+<script>
+ $(function() {
+ $( "#hometabs" ).tabs({active: 0, //event: "mouseover"
+ //collapsible: true
+ });
+ });
+
+var consoleAppender = new log4javascript.BrowserConsoleAppender();
+var patternLayout = new log4javascript.PatternLayout("%d{HH:mm:ss,SSS} %l{s:l} %-5p - %m{1}%n");
+consoleAppender.setLayout(patternLayout);
+//var log = log4javascript.getDefaultLogger();
+var log = log4javascript.getRootLogger();
+log.addAppender(consoleAppender);
+log.setLevel(log4javascript.Level.ERROR);
+
+function confirmDialog(title,msg) {
+ var dialog = $('<div>'+msg+'</div>');
+ var def = $.Deferred();
+
+ $(dialog).dialog({
+ resizable: false,
+ title: title,
+ autoOpen: true,
+ modal: true,
+ dialogClass: "dashboard-hpc-sliver",
+ buttons: {
+ 'OK': function() {
+ def.resolve();
+ log.debug("Chose to add a sliver");
+ $( this ).dialog( "close" );
+ },
+ 'Cancel': function() {
+ def.reject();
+ $( this ).dialog( "close" );
+ }
+ },
+ close: {
+ }
+ });
+ return def.promise();
+}
+
+function errorDialog(title,msg) {
+ var dialog = $('<div>'+msg+'</div>');
+ var def = $.Deferred();
+
+ $(dialog).dialog({
+ resizable: false,
+ title: title,
+ autoOpen: true,
+ modal: true,
+ dialogClass: "dashboard-hpc-sliver",
+ buttons: {
+ 'OK': function() {
+ def.resolve();
+ $( this ).dialog( "close" );
+ },
+ },
+ close: {
+ }
+ });
+ return def.promise();
+}
+
+</script>
+{% endblock %}
+
+{% block content %}
+dashboard goes here
+{% endblock %}
diff --git a/planetstack/templates/admin/dashboard/developer.html b/planetstack/templates/admin/dashboard/developer.html
new file mode 100644
index 0000000..00c49c7
--- /dev/null
+++ b/planetstack/templates/admin/dashboard/developer.html
@@ -0,0 +1,84 @@
+<div id="developerview"></div>
+
+<script>
+var oTable;
+
+function updateUserSliceTable(){
+ log.debug("Should grab user slice info");
+ jQuery.ajax({
+ async:true,
+ dataType: 'json',
+ url: '/hpcdashuserslices',
+ success: function(data){
+ log.info("Got Data back for User SliceTable");
+ //parseData(data);
+ //createUserSliceTable(data);
+ setTimeout(function () { updateUserSliceTable() }, 5000);
+ },
+ error: function(data){
+ log.debug("COULDNT GET DATA BACK");
+ setTimeout(function () { updateUserSliceTable() }, 5000);
+ }
+ });
+}
+
+function createUserSliceTable(data) {
+ log.debug("Creating User Slice Table");
+
+ //Add check for #dynamicusersliceinfo_filter label-> input having focus here
+
+ $('#developerview').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="dynamicusersliceinfo"></table>' );
+ var actualEntries = [];
+ log.debug(data['userSliceInfo']['rows'][0]['slicename']);
+
+ var rows = data['userSliceInfo']['rows'];
+ for (row in rows) {
+ log.debug(row[0]);
+ slicename = rows[row]['slicename'];
+ sliceid = rows[row]['sliceid'];
+ role = rows[row]['role'];
+ slivercount = rows[row]['slivercount'];
+ sitecount = rows[row]['sitecount'];
+ actualEntries.push(['<a href="http://{{request.get_host}}/admin/core/slice/' + sliceid + '">' + slicename + '</a>',
+ role, slivercount, sitecount]);
+ }
+ oTable = $('#dynamicusersliceinfo').dataTable( {
+ "bJQueryUI": true,
+ "aaData": actualEntries ,
+ "bStateSave": true,
+ "aoColumns": [
+ { "sTitle": "Slice" },
+ { "sTitle": "Privilege" , sClass: "alignCenter"},
+ { "sTitle": "Number of Slivers" , sClass: "alignCenter"},
+ { "sTitle": "Number of Sites" , sClass: "alignCenter"},
+ ]
+ } );
+
+ // If the filter had focus, reapply here
+
+ setTimeout(function() {
+ jQuery.ajax({
+ url: '/hpcdashuserslices',
+ dataType: 'json',
+ success: function(data){ createUserSliceTable(data); },
+ complete: function(){ },
+ });
+ }, 10000);
+}
+
+function initTable(){
+ log.debug("Initializing Table")
+ jQuery.ajax({
+ url: '/hpcdashuserslices',
+ dataType: 'json',
+ success: function(data){ createUserSliceTable(data); },
+ complete: function(){
+ }
+ });
+ updateUserSliceTable();
+}
+
+
+initTable();
+
+</script>
diff --git a/planetstack/templates/admin/dashboard/hpc_historical.html b/planetstack/templates/admin/dashboard/hpc_historical.html
new file mode 100644
index 0000000..2e3b85e
--- /dev/null
+++ b/planetstack/templates/admin/dashboard/hpc_historical.html
@@ -0,0 +1,303 @@
+
+ <script type="text/javascript" src="//www.google.com/jsapi"></script>
+ <link rel="stylesheet" href="/static/hpc_historical.css">
+ <script type="text/javascript">
+ google.load('visualization', '1', {'packages' : ['controls','table','corechart','geochart']});
+ </script>
+
+ <script type="text/javascript">
+
+ var options = {
+
width: 600,
+ height: 400,
+ showRowNumber: false,
+ pages: true,
+ numRows: 9,
+ backgroundColor: "black"
+ };
+
+ // ask django for a data source URL to use for the graphs
+
+ function updateDataSourceUrl() {
+ var sliceName = $("#historical_slicename :selected").text();
+ var queryString = "/analytics/bigquery/?timeBucket=600&maxAge=86400&sum=@bytes_sent&avg=@cpu&groupBy=Time,city,@hostname,@site&slice=" + sliceName;
+
+ $( "#control1").html("");
+ $( "#control2").html("");
+ $( "#chart-site-agg" ).html("<div class='loading'>Loading ...</div>");
+ $( "#chart-site-time" ).html("");
+ $( "#chart-geo" ).html("");
+
+ $.ajax({
+ url: queryString,
+ dataType: 'json',
+ type: 'GET',
+ success: function (newData) {
+ sendAndDraw(newData["dataSourceUrl"])
+ }
+ });
+ }
+
+ TIME_COL = 0;
+ BANDWIDTH_COL = 2;
+ CPU_COL = 1;
+ CITY_COL = 3;
+ NODE_COL = 4;
+ SITE_COL = 5;
+
+ google.setOnLoadCallback(function () {
+ $('#historical_slicename').change(function()
+ {
+ updateDataSourceUrl();
+ });
+
+ updateDataSourceUrl();
+ });
+
+ function showSiteTimeAgg(dt) {
+ var lineChart = new google.visualization.ChartWrapper({
+ 'chartType': 'LineChart',
+ 'containerId': 'chart-site-time',
+ 'options': {
+ 'width': 320,
+ 'height': 300,
+ 'title': 'Network-wide usage',
+ 'pages': true,
+ 'numRows': 9
+ },
+ 'view': {
+ 'columns': [0, 1, 2]
+ }
+ });
+ lineChart.setDataTable(dt);
+ lineChart.draw();
+ }
+
+ function showSiteAgg(dt) {
+ var barChart = new google.visualization.ChartWrapper({
+ 'chartType': 'ColumnChart',
+ 'containerId': 'chart-site-agg',
+ 'options': {
+ 'width': 670,
+ 'height': 300,
+ 'title': 'Site-wise usage',
+ 'pages': true,
+ 'numRows': 9
+ },
+ 'view': {
+ 'columns': [1, 2, 3]
+ }
+ });
+ barChart.setDataTable(dt);
+ barChart.draw();
+ var geoChart = new google.visualization.ChartWrapper({
+ 'chartType': 'GeoChart',
+ 'containerId': 'chart-geo',
+ 'options': {
+ 'width': 320,
+ 'height': 300,
+ 'displayMode': 'markers',
+ 'region': '021',
+ 'title': 'Usage map',
+ colorAxis: {
+ colors: ['green', 'purple', 'red']
+ }
+ },
+ 'view': {
+ 'columns': [0, 2, 3]
+ }
+ });
+ geoChart.setDataTable(dt);
+ geoChart.draw();
+ }
+
+ function handleResponse(response) {
+ var timeSlider = new google.visualization.ControlWrapper({
+ 'controlType': 'DateRangeFilter',
+ 'containerId': 'control1',
+ 'options': {
+ 'filterColumnLabel': 'Time',
+ ui: {
+ ticks: 10,
+ step: "minute"
+ }
+ }
+ });
+
+ var categoryPicker = new google.visualization.ControlWrapper({
+ 'controlType': 'CategoryFilter',
+ 'allowMultiple': true,
+ 'containerId': 'control2',
+ 'options': {
+ 'filterColumnLabel': 'site',
+ 'ui': {
+ 'labelStacking': 'vertical',
+ 'allowTyping': false
+ }
+ }
+ });
+
+ var proxy = new google.visualization.ChartWrapper({
+ 'chartType': 'Table',
+ 'containerId': 'chart7',
+ 'options': {
+ 'width': 800,
+ 'height': 300,
+ pageSize: 5,
+ page: 'enable',
+ 'legend': 'none',
+ 'title': 'Nodes'
+ },
+ 'view': {
+ 'columns': [0, 1, 2, 3, 4, 5]
+ }
+ });
+
+ function avg_bandwidth(arr) {
+ var ret = 0;
+ for (var i = 0; i < arr.length; i++) {
+ ret+=arr[i]*8.0/1024.0/1024.0/1024.0;
+ }
+ if (arr.length==0) {
+ return 0;
+ }
+ return ret/arr.length;
+ }
+
+ function sum_bytes_sent_as_bw(arr) {
+ var ret = 0;
+ for (var i = 0; i < arr.length; i++) {
+ ret+=arr[i]*8.0/1024.0/1024.0/1024.0;
+ }
+ return ret/60.0;
+ }
+
+ function sum_bytes_sent_as_GB(arr) {
+ var ret = 0;
+ for (var i = 0; i < arr.length; i++) {
+ ret+=arr[i]/1024.0/1024.0/1024.0;
+ }
+ return ret;
+ }
+
+ function fixDate2(unixDate) {
+ // not completely sure why we have to do this, as the data was in
+ // javascript Date() objects to start with. If we don't do it,
+ // then the horizontal axis will be blank.
+ return new Date(unixDate);
+ }
+
+ var format0dp = new google.visualization.NumberFormat({fractionDigits:0});
+ var format2dp = new google.visualization.NumberFormat({fractionDigits:2});
+
+ if (response.isError()) {
+ $( "#chart-site-agg" ).html("<div class='loading'>Error while fetching data.</div>");
+ return;
+ }
+
+ if (response.getDataTable().getNumberOfRows() == 0) {
+ $( "#chart-site-agg" ).html("<div class='loading'>No data for this slice.</div>");
+ return;
+ }
+
+ // Create a group for charts that will have a horizontal axis that is
+ // time.
+
+ google.visualization.events.addListener(proxy, 'ready', function () {
+ var dt = proxy.getDataTable();
+ var groupedData1 = google.visualization.data.group(dt, [{
+ column: TIME_COL,
+ type: 'datetime',
+ modifier: fixDate2,
+ }], [{
+ column: CPU_COL,
+ type: 'number',
+ label: "avg cpu",
+ aggregation: google.visualization.data.avg
+ }, {
+ column: BANDWIDTH_COL,
+ type: 'number',
+ label: "Gbps",
+ aggregation: sum_bytes_sent_as_bw
+ }]);
+
+ format0dp.format(groupedData1,1);
+ format2dp.format(groupedData1,2);
+
+ showSiteTimeAgg(groupedData1);
+ });
+
+ // Create a group for charts that will have a horizontal axis that is
+ // city or site.
+
+ google.visualization.events.addListener(proxy, 'ready', function () {
+ var dt = proxy.getDataTable();
+ var groupedData0 = google.visualization.data.group(dt, [CITY_COL, SITE_COL], [{
+ column: CPU_COL,
+ type: 'number',
+ label: 'avg cpu',
+ aggregation: google.visualization.data.avg
+ }, {
+ column: BANDWIDTH_COL,
+ type: 'number',
+ label: "GB sent",
+ aggregation: sum_bytes_sent_as_GB
+ }]);
+
+ format0dp.format(groupedData0,2);
+ format2dp.format(groupedData0,3);
+
+ showSiteAgg(groupedData0);
+ });
+
+ data = response.getDataTable();
+ new google.visualization.Dashboard(document.getElementById('dashboard')).
+ // Establish bindings, declaring the both the slider and the category
+ // picker will drive both charts.
+ bind([categoryPicker, timeSlider], [proxy]).
+ // Draw the entire dashboard.
+ draw(data);
+
+ }
+
+ function sendAndDraw(queryString) {
+ query = new google.visualization.Query(queryString)
+ query && query.abort();
+ query.send(function (response) {
+ handleResponse(response);
+ });
+ }
+
+ </script>
+ <div id="dashboard" class="graph_container">
+ <div class="row">
+ <span><b>Slice Name:</b></span>
+ <span><select id="historical_slicename">
+ {% for slice in userSliceInfo %}
+ <option value="{{ slice.slicename }}">{{ slice.slicename }}</option>
+ {% endfor %}
+ </select></span>
+ </div>
+ <div class="row" dstyle="background-color:red">
+ <div class="col-md-12">
+ <div class="col-md-4" id="control2"></div>
+ <div class="col-md-4" id="control1"></div>
+ <!--<div class="col-md-4" id="control3"></div>-->
+ </div>
+ </div>
+ <div class="row" dstyle="background-color:green">
+ <div class="col-md-12">
+ <div class="col-md-fullgraph" id="chart-site-agg" dstyle="background-color:pink">
+ </div>
+ </div>
+ </div>
+ <div class="row" dstyle="background-color:blue">
+ <div class="col-md-12">
+ <div class="col-md-halfgraph" id="chart-site-time" dstyle="background-color:orange">
+ </div>
+ <div class="col-md-halfgraph" id="chart-geo" dstyle="background-color:yellow">
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="chart7" style="display:none"></div>
diff --git a/planetstack/templates/admin/dashboard/slice_interactions.html b/planetstack/templates/admin/dashboard/slice_interactions.html
new file mode 100644
index 0000000..3ddaa1f
--- /dev/null
+++ b/planetstack/templates/admin/dashboard/slice_interactions.html
@@ -0,0 +1,503 @@
+<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
+<style>
+#slice_interaction_chart_placeholder {
+ text-align: center;
+ color:#fff;
+ position: relative;
+ height: 100%;
+ width: 100%;
+}
+.dependencyWheel {
+ font: 10px sans-serif;
+}
+form .btn-primary {
+ margin-top: 25px;
+}
+.labeltext {
+ color: #fff;
+}
+#circle circle {
+ fill: none;
+ pointer-events: all;
+}
+path.chord {
+ stroke: #000;
+ stroke-width: .10px;
+ transition: opacity 0.3s;
+}
+#circle:hover path.fade {
+ opacity: 0;
+}
+a {
+ text-decoration: none;
+ border-bottom: 1px dotted #666;
+ color: #999;
+}
+.more a {
+ color: #666;
+}
+.by a {
+ color: #fff;
+}
+a:hover {
+ color: #45b8e2;
+}
+a:not(:hover) {
+ text-decoration: none;
+}
+text {
+ fill: black;
+}
+svg {
+ font-size: 12px;
+ font-weight: bold;
+ color: #999;
+ font-family:'Arial', sans-serif;
+ min-height: 100%;
+ min-width: 100%;
+}
+button:disabled {
+ color:red;
+ background-color: lightyellow;
+}
+.sliceinteractions_column {
+ display: table-cell;
+ padding: 10px;
+}
+#interactions_function {
+ width: 125px;
+}
+
+</style>
+
+<div class="row">
+ <div class="sliceinteractions_column">
+ <select id="interactions_function">
+ <option value="networks">networks</option>
+ <option value="users">users</option>
+ <option value="owner sites">sites</option>
+ <option value="sliver_sites">sliver_sites</option>
+ <option value="sliver_nodes">sliver_nodes</option>
+ </select>
+ </div>
+ <div class="sliceinteractions_column">
+ <h3 id="sliceEngagementTitle">Slice Interactions</h3>
+ </div>
+</div>
+
+<div id="slice_interaction_chart_placeholder"></div>
+
+<script>
+
+// Chord Diagram for showing Collaboration between users found in an anchor query
+// Collaboration View
+//
+
+var width = 600,
+ height = 600,
+ outerRadius = Math.min(width, height) / 2 - 100,
+ innerRadius = outerRadius - 18;
+
+//create number formatting functions
+var formatPercent = d3.format("%");
+var numberWithCommas = d3.format("0,f");
+
+//define the default chord layout parameters
+//within a function that returns a new layout object;
+//that way, you can create multiple chord layouts
+//that are the same except for the data.
+function getDefaultLayout() {
+ return d3.layout.chord()
+ .sortSubgroups(d3.descending)
+ .sortChords(d3.ascending);
+}
+var last_layout; //store layout between updates
+var g;
+var arc;
+var path;
+
+function init_visualization() {
+ arc = d3.svg.arc()
+ .innerRadius(innerRadius)
+ .outerRadius(outerRadius);
+
+ path = d3.svg.chord()
+ .radius(innerRadius);
+
+
+ /*** Initialize the visualization ***/
+ g = d3.select("#slice_interaction_chart_placeholder").append("svg")
+ .attr("width", width)
+ .attr("height", height)
+ .append("g")
+ .attr("id", "circle")
+ .attr("transform",
+ "translate(" + width / 2 + "," + height / 2 + ")");
+ //the entire graphic will be drawn within this <g> element,
+ //so all coordinates will be relative to the center of the circle
+
+ g.append("circle")
+ .attr("r", outerRadius);
+}
+
+$( document ).ready(function() {
+ init_visualization();
+ $('#interactions_function').change(function() {
+ updateInteractions();
+ });
+ updateInteractions();
+});
+
+function updateInteractions() {
+ $( "#sliceEngagementTitle" ).html("<h3>Loading...</h3>");
+ $.ajax({
+ url : "/admin/sliceinteractions/" + $("#interactions_function :selected").text() + "/",
+ dataType : 'json',
+ type : 'GET',
+ success: function(newData)
+ {
+ $( "#sliceEngagementTitle" ).html("<h3>" + newData["title"] + "</h3>");
+ updateChords(newData["groups"], newData["matrix"], newData["objectName"])
+ }
+ });
+}
+
+
+/* Create OR update a chord layout from a data matrix */
+function updateChords( users, matrix, objectName ) {
+
+ /* Compute chord layout. */
+ layout = getDefaultLayout(); //create a new layout object
+ layout.matrix(matrix);
+
+ /* Create/update "group" elements */
+ var groupG = g.selectAll("g.group")
+ .data(layout.groups(), function (d) {
+ return d.index;
+ //use a key function in case the
+ //groups are sorted differently between updates
+ });
+
+ groupG.exit()
+ .transition()
+ .duration(1500)
+ .attr("opacity", 0)
+ .remove(); //remove after transitions are complete
+
+ var newGroups = groupG.enter().append("g")
+ .attr("class", "group");
+ //the enter selection is stored in a variable so we can
+ //enter the <path>, <text>, and <title> elements as well
+
+
+ //Create the title tooltip for the new groups
+ newGroups.append("title");
+
+ //Update the (tooltip) title text based on the data
+ groupG.select("title")
+ .text(function(d, i) {
+ return "Slice (" + users[i].name +
+ ") "
+ ;
+ });
+
+ //create the arc paths and set the constant attributes
+ //(those based on the group index, not on the value)
+ newGroups.append("path")
+ .attr("id", function (d) {
+ return "group" + d.index;
+ //using d.index and not i to maintain consistency
+ //even if groups are sorted
+ })
+ .style("fill", function (d) {
+ return users[d.index].color;
+ });
+
+ //update the paths to match the layout
+ groupG.select("path")
+ .transition()
+ .duration(1500)
+ .attr("opacity", 0.5) //optional, just to observe the transition
+ .attrTween("d", arcTween( last_layout ))
+ // .transition().duration(100).attr("opacity", 1) //reset opacity
+ ;
+
+ //create the group labels
+ newGroups.append("svg:text")
+ .attr("xlink:href", function (d) {
+ return "#group" + d.index;
+ })
+ .attr("dy", ".35em")
+ .attr("color", "#fff")
+ .text(function (d) {
+ return users[d.index].name;
+ });
+
+ //position group labels to match layout
+ groupG.select("text")
+ .transition()
+ .duration(1500)
+ .attr("transform", function(d) {
+ d.angle = (d.startAngle + d.endAngle) / 2;
+ //store the midpoint angle in the data object
+
+ return "rotate(" + (d.angle * 180 / Math.PI - 90) + ")" +
+ " translate(" + (innerRadius + 26) + ")" +
+ (d.angle > Math.PI ? " rotate(180)" : " rotate(0)");
+ //include the rotate zero so that transforms can be interpolated
+ })
+ .attr("text-anchor", function (d) {
+ return d.angle > Math.PI ? "end" : "begin";
+ });
+
+
+ /* Create/update the chord paths */
+ var chordPaths = g.selectAll("path.chord")
+ .data(layout.chords(), chordKey );
+ //specify a key function to match chords
+ //between updates
+
+
+ //create the new chord paths
+ var newChords = chordPaths.enter()
+ .append("path")
+ .attr("class", "chord");
+
+ // Add title tooltip for each new chord.
+ newChords.append("title");
+
+ // Update all chord title texts
+ chordPaths.select("title")
+ .text(function(d) {
+ if (users[d.target.index].name !== users[d.source.index].name) {
+ return [numberWithCommas(d.source.value),
+ " " + objectName + " in common between \n",
+ users[d.source.index].name,
+ " and ",
+ users[d.target.index].name,
+ "\n"
+ ].join("");
+ //joining an array of many strings is faster than
+ //repeated calls to the '+' operator,
+ //and makes for neater code!
+ }
+ else { //source and target are the same
+ return numberWithCommas(d.source.value)
+ + " " + objectName + " are only in Slice ("
+ + users[d.source.index].name + ")";
+ }
+ });
+
+ //handle exiting paths:
+ chordPaths.exit().transition()
+ .duration(1500)
+ .attr("opacity", 0)
+ .remove();
+
+ //update the path shape
+ chordPaths.transition()
+ .duration(1500)
+ //.attr("opacity", 0.5) //optional, just to observe the transition
+ .style("fill", function (d) {
+ return users[d.source.index].color;
+ })
+ .attrTween("d", chordTween(last_layout))
+ //.transition().duration(100).attr("opacity", 1) //reset opacity
+ ;
+
+ // XXX SMBAKER: The way the text was added with newGroups, it's only
+ // computed when a node is created. This is a problem if we redraw the
+ // graph with a different set of nodes, because the old labels will
+ // stick. So, I added this, which *seems* to cause the labels to be
+ // recomputed.
+ groupG.selectAll("text")
+ .text(function (d) {
+ return users[d.index].name;
+ });
+
+ //add the mouseover/fade out behaviour to the groups
+ //this is reset on every update, so it will use the latest
+ //chordPaths selection
+ groupG.on("mouseover", function(d) {
+ chordPaths.classed("fade", function (p) {
+ //returns true if *neither* the source or target of the chord
+ //matches the group that has been moused-over
+ return ((p.source.index != d.index) && (p.target.index != d.index));
+ });
+ });
+ //the "unfade" is handled with CSS :hover class on g#circle
+ //you could also do it using a mouseout event:
+ /*
+ g.on("mouseout", function() {
+ if (this == g.node() )
+ //only respond to mouseout of the entire circle
+ //not mouseout events for sub-components
+ chordPaths.classed("fade", false);
+ });
+ */
+
+ // XXX smbaker: there's a bug where if you hilight a slice of the chord
+ // graph, and then update the data, the freshly drawn graph is missing
+ // some of the chords. Flipping the fade bit seems to fix that.
+ chordPaths.classed("fade", true);
+ chordPaths.classed("fade", false);
+
+ last_layout = layout; //save for next update
+
+// }); //end of d3.json
+}
+
+function arcTween(oldLayout) {
+ //this function will be called once per update cycle
+
+ //Create a key:value version of the old layout's groups array
+ //so we can easily find the matching group
+ //even if the group index values don't match the array index
+ //(because of sorting)
+ var oldGroups = {};
+ if (oldLayout) {
+ oldLayout.groups().forEach( function(groupData) {
+ oldGroups[ groupData.index ] = groupData;
+ });
+ }
+
+ return function (d, i) {
+ var tween;
+ var old = oldGroups[d.index];
+ if (old) { //there's a matching old group
+ tween = d3.interpolate(old, d);
+ }
+ else {
+ //create a zero-width arc object
+ var emptyArc = {startAngle:d.startAngle,
+ endAngle:d.startAngle};
+ tween = d3.interpolate(emptyArc, d);
+ }
+
+ return function (t) {
+ return arc( tween(t) );
+ };
+ };
+}
+
+function chordKey(data) {
+ return (data.source.index < data.target.index) ?
+ data.source.index + "-" + data.target.index:
+ data.target.index + "-" + data.source.index;
+
+ //create a key that will represent the relationship
+ //between these two groups *regardless*
+ //of which group is called 'source' and which 'target'
+}
+function chordTween(oldLayout) {
+ //this function will be called once per update cycle
+
+ //Create a key:value version of the old layout's chords array
+ //so we can easily find the matching chord
+ //(which may not have a matching index)
+
+ var oldChords = {};
+
+ if (oldLayout) {
+ oldLayout.chords().forEach( function(chordData) {
+ oldChords[ chordKey(chordData) ] = chordData;
+ });
+ }
+
+ return function (d, i) {
+ //this function will be called for each active chord
+
+ var tween;
+ var old = oldChords[ chordKey(d) ];
+ if (old) {
+ //old is not undefined, i.e.
+ //there is a matching old chord value
+
+ //check whether source and target have been switched:
+ if (d.source.index != old.source.index ){
+ //swap source and target to match the new data
+ old = {
+ source: old.target,
+ target: old.source
+ };
+ }
+
+ tween = d3.interpolate(old, d);
+ }
+ else {
+ //create a zero-width chord object
+/* XXX SMBAKER: the code commented out below was causing an error,
+ so I replaced it with the following code from stacktrace
+ if (oldLayout) {
+ var oldGroups = oldLayout.groups().filter(function(group) {
+ return ( (group.index == d.source.index) ||
+ (group.index == d.target.index) )
+ });
+ old = {source:oldGroups[0],
+ target:oldGroups[1] || oldGroups[0] };
+ //the OR in target is in case source and target are equal
+ //in the data, in which case only one group will pass the
+ //filter function
+
+ if (d.source.index != old.source.index ){
+ //swap source and target to match the new data
+ old = {
+ source: old.target,
+ target: old.source
+ };
+ }
+ }
+ else old = d;
+
+ var emptyChord = {
+ source: { startAngle: old.source.startAngle,
+ endAngle: old.source.startAngle},
+ target: { startAngle: old.target.startAngle,
+ endAngle: old.target.startAngle}
+ };
+ tween = d3.interpolate( emptyChord, d );*/
+
+ //create a zero-width chord object
+ var emptyChord = {
+ source: { startAngle: d.source.startAngle,
+ endAngle: d.source.startAngle},
+ target: { startAngle: d.target.startAngle,
+ endAngle: d.target.startAngle}
+ };
+ tween = d3.interpolate( emptyChord, d );
+ }
+
+ return function (t) {
+ //this function calculates the intermediary shapes
+ return path(tween(t));
+ };
+ };
+}
+
+
+/* Activate the buttons and link to data sets */
+d3.select("#ReadersButton").on("click", function () {
+ updateChords( "#readinfo" );
+ //replace this with a file url as appropriate
+
+ //enable other buttons, disable this one
+ disableButton(this);
+});
+
+d3.select("#ContributorsButton").on("click", function() {
+ updateChords( "#contributorinfo" );
+ disableButton(this);
+});
+
+d3.select("#AllUsersButton").on("click", function() {
+ updateChords( "#allinfo" );
+ disableButton(this);
+});
+function disableButton(buttonNode) {
+ d3.selectAll("button")
+ .attr("disabled", function(d) {
+ return this === buttonNode? "true": null;
+ });
+}
+
+</script>
diff --git a/planetstack/templates/admin/dashboard/tenant.html b/planetstack/templates/admin/dashboard/tenant.html
new file mode 100644
index 0000000..bf49471
--- /dev/null
+++ b/planetstack/templates/admin/dashboard/tenant.html
@@ -0,0 +1,586 @@
+<!doctype html>
+<script type="text/javascript" src="http://www.google.com/jsapi"></script>
+<div id="dialog-form" title="Add/Remove Slivers" style="display: none;">
+ <form>
+ <fieldset>
+ <label for="numberOfSlivers">Number of Slivers</label>
+ <input type="text" name="numberOfSlivers" id="numOfSlivers" class="text ui-widget-content ui-corner-all">
+ <div id=basic-tooltip>Please enter number of slivers</div>
+ </fieldset>
+ </form>
+</div>
+<div id="adv-dialog-form" title="Add/Remove Slivers" style="display: none;">
+ <form>
+ <fieldset>
+ <label for="numberOfSlivers">Number of Slivers</label>
+ <input type="text" name="numberOfSlivers" id="advNumOfSlivers" class="text ui-widget-content ui-corner-all">
+ <div id=adv-tooltip>Please enter number of slivers</div>
+ </fieldset>
+ </form>
+</div>
+<div id="create-slice-form" title="Create New Slice" style="display: none;">
+ <form>
+ <fieldset>
+ <div class="create-slice-row">
+ <label for="new-slice-name">Name</label>
+ <input type="text" name="new-slice-name" id="new-slice-name">
+ </div>
+ <div class="create-slice-row">
+ <label for="new-service-class">Service Class</label>
+ <select id="new-service-class" class="tenant-create-slice"></select>
+ </div>
+ <div class="create-slice-row">
+ <label for="new-image">Image</label>
+ <select id="new-image" class="tenant-create-slice"></select>
+ </div>
+ <div class="create-slice-row">
+ <label for="new-network">Network Ports</label>
+ <input type="text" name="new-network" id="new-network">
+ </div>
+ <div class="create-slice-row">
+ <label for="private-vol">Include Private Vol</label>
+ <input type="checkbox" name="checkbox" id="private-vol" value="value">
+ </div>
+ <div class="create-slice-row">
+ <label for="mount-data-sets">Data Sets</label>
+ <select id="mount-data-sets" class="tenant-create-slice"></select>
+ </div>
+ <div class="create-slice-row">
+ <label for="number-of-slivers">Number Of Slivers</label>
+ <input type="text" name="number-of-slivers" id="number-of-slivers">
+ </div>
+ <div id=tooltip>Slice Name cannot be empty</div>
+ </fieldset>
+ </form>
+</div>
+<div id="delete-slice-form" title="Delete a Slice" style="display: none;">
+ <form>
+ <fieldset>
+ <div class="create-slice-row">
+ <label for="delete-slice">Choose a Slice</label>
+ <select id="delete-slice"></select>
+ </div>
+ </fieldset>
+ </form>
+</div>
+<script type="text/javascript">
+ google.load('visualization', '1', {
+ 'packages': ['controls', 'table', 'corechart', 'geochart']
+ });
+ </script>
+ <script>
+ $(document).ready(function () {
+ function showSliceData(rows,imageData,serviceLevelData,siteRows,dataSet,value) {
+ $("#service-level-value").empty();
+ $("#slice-image-value").empty();
+ $("#tenantSiteTable").empty();
+ $('#tenantSiteTable').html('<table cellpadding="0" cellspacing="0" border="0" class="display" id="tenantSiteTableData"></table>');
+ $("#tenantSliceDropDown").val(value);
+ var siteNames = [];
+ var sliverCount;
+ for (row in rows) {
+ if (rows[row]['sliceName'] == value) {
+ sliceImageData = rows[row]['preferredImage'];
+ $("#slice-image-value").html(sliceImageData);
+ serviceLevelDataBasic = rows[row]['sliceServiceClass'];
+ $("#service-level-value").html(serviceLevelDataBasic);
+ var innerRows = rows[row]['sliceSite'];
+ for (innerRow in innerRows) {
+ sliverCount = innerRows[innerRow];
+ siteNames.push([innerRow, sliverCount]);
+ }
+ }
+ }
+ oTable = $('#tenantSiteTableData').dataTable({
+ "bJQueryUI": true,
+ "bFilter": false,
+ "bInfo": false,
+ "bLengthChange": false,
+ "aaData": siteNames,
+ "bStateSave": true,
+ "aoColumns": [{
+ "sTitle": "Site Name"
+ }, {
+ "sTitle": "Allocated",
+ sClass: "alignCenter"
+ }
+ ]
+ });
+ $('#tenantSliceDropDown').on('change', function () {
+ var value = $("#tenantSliceDropDown").val();
+ //alert(value);
+ checkForBasicAdvView(value,rows,imageData,serviceLevelData,siteRows,dataSet);
+ });
+ }
+
+ function downloadSliceInfo(rows,imageData,serviceLevelData,siteRows,dataSet,value){
+ $("#download-details").unbind().click(function(){
+ function download(filename, text) {
+ var sliceDetails = document.createElement('a');
+ sliceDetails.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
+ sliceDetails.setAttribute('download', filename);
+ sliceDetails.click();
+ }
+ var sliceInfo;
+ for (row in rows){
+ if(rows[row]['sliceName']==value){
+ sliceInfo = "Slice Name: "+rows[row]['sliceName']+"\nNumber of Slivers: "+rows[row]['numOfSlivers']+"\nService Level: "+rows[row]['sliceServiceClass']+"\nImage: "+rows[row]['preferredImage']+"\n";
+ for (instanceNodePairs in rows[row]['instanceNodePair']){
+ sliceInfo += instanceNodePairs+"@"+rows[row]['instanceNodePair'][instanceNodePairs]+"\n";
+ }
+ }
+ }
+ download('slice.txt', sliceInfo);
+ });
+ }
+ function editSliverAdv() {
+ $(".edit-view").click(function () {
+ var allocatedSlivers = parseInt($(this).parent().siblings(".allocated").html());
+ var td = $(this).parent().siblings(".allocated");
+ var pos = oTable.fnGetPosition(td[0]);
+ $("#numOfSlivers").val("");;
+ $("#advNumOfSlivers").val("");;
+ $("#adv-tooltip").css("display", "none");
+ $("#adv-dialog-form").dialog({
+ autoOpen: false,
+ height: 200,
+ width: 350,
+ modal: true,
+ dialogClass: "tenantDialog",
+ buttons: {
+ "Add": function () {
+ allocatedSlivers += parseInt($("#advNumOfSlivers").val());
+ $("#adv-tooltip").css("display", "block");
+ $(this).dialog("close");
+ td.html(allocatedSlivers);
+ },
+ "Remove": function () {
+ allocatedSlivers -= parseInt($("#advNumOfSlivers").val());
+ $("#adv-tooltip").css("display", "block");
+ $(this).dialog("close");
+ td.html(allocatedSlivers);
+ }
+ }
+ });
+ $("#adv-dialog-form").dialog("open");
+ });
+ }
+
+ function advShowSliceData(rows,imageData,serviceLevelData,siteRows,dataSet,value) {
+ $("#adv-service-level-value").empty();
+ $("#adv-slice-image-value").empty();
+ $("#adv-slice-data-set-value").empty();
+ $("#advTenantSliceDropDown").val(value);
+ $("<select></select>").attr('id', 'adv-service-level-dropdown').appendTo('#adv-service-level-value');
+ $("<select></select>").attr('id', 'adv-image-dropdown').appendTo('#adv-slice-image-value');
+ $("<select></select>").attr('id', 'adv-dataset-dropdown').appendTo('#adv-slice-data-set-value');
+ $('#advTenantSiteTable').html('<table cellpadding="0" cellspacing="0" border="0" class="display" id="advTenantSiteTableData"></table>');
+ var siteNames = [];
+ var sliverCount;
+ var tableData = {};
+ for (row in serviceLevelData) {
+ $("#adv-service-level-dropdown").append("<option>" + serviceLevelData[row]['serviceClass'] + "</option>");
+ }
+ for (row in imageData) {
+ $("#adv-image-dropdown").append("<option>" + imageData[row]['Image'] + "</option>");
+ }
+ for (row in dataSet) {
+ $("#adv-dataset-dropdown").append("<option>" + dataSet[row]['DataSet'] + "</option>");
+ }
+
+ for (row in rows) {
+ if (rows[row]['sliceName'] == value) {
+ var innerRows = rows[row]['sliceSite'];
+ $("#adv-service-level-dropdown").val(rows[row]['sliceServiceClass']);
+ $("#adv-image-dropdown").val(rows[row]['preferredImage']);
+ $("#adv-dataset-dropdown").val(rows[row]['sliceDataSet']);
+ for (innerRow in innerRows) {
+ tableData[innerRow] = innerRows[innerRow];
+ }
+ }
+ }
+ for (row in siteRows) {
+ var entry = siteRows[row]['siteName'];
+ if (!(entry in tableData)) {
+ tableData[siteRows[row]['siteName']] = 0;
+ }
+ }
+ for (row in tableData) {
+ siteNames.push([row, tableData[row], '<a href="#" class="edit-view">Edit</a>']);
+ }
+ $("#save-btn").unbind().click(function () {
+ var newTableData = {};
+ var newSite = $(".siteName");
+ var newAllocated = $(".allocated");
+ for (i = 1; i < newSite.length; i++) {
+ newTableData[$($(".siteName")[i]).text()] = parseInt($($(".allocated")[i]).text());
+ }
+ for (newRow in newTableData) {
+ if (newTableData[newRow] > tableData[newRow]) {
+ $.ajax({
+ url: '/tenantaddorremsliver/',
+ dataType: 'json',
+ data: {
+ siteName: newRow,
+ count: newTableData[newRow] - tableData[newRow],
+ slice: $("#advTenantSliceDropDown").val(),
+ actionToDo: "add",
+ csrfmiddlewaretoken: "{{ csrf_token }}", // < here
+ state: "inactive"
+ },
+ type: 'POST',
+ complete: function () {
+ //location.reload();
+
+ }
+ });
+ } else if (newTableData[newRow] < tableData[newRow]) {
+ $.ajax({
+ url: '/tenantaddorremsliver/',
+ dataType: 'json',
+ data: {
+ siteName: newRow,
+ count: tableData[newRow] - newTableData[newRow],
+ slice: $("#advTenantSliceDropDown").val(),
+ actionToDo: "rem",
+ csrfmiddlewaretoken: "{{ csrf_token }}", // < here
+ state: "inactive"
+ },
+ type: 'POST',
+ complete: function () {
+ //location.reload();
+ }
+ });
+ }
+ }
+ $.ajax({
+ url: '/updateslice/',
+ dataType: 'json',
+ data: {
+ sliceName: $("#advTenantSliceDropDown").val(),
+ serviceClass: $("#adv-service-level-dropdown").val(),
+ imageName: $("#adv-image-dropdown").val(),
+ dataSet: $("#adv-dataset-dropdown").val(),
+ networkPorts: $("#adv-network-value").val(),
+ privateVolume: $("#private-vol-checkbox").is(":checked"),
+ actionToDo: "update",
+ csrfmiddlewaretoken: "{{ csrf_token }}", // < here
+ state: "inactive"
+ },
+ type: 'POST',
+ success: function () {
+ $("#tabs-5").empty();
+ initTenant(); //location.reload();
+ },
+ error:function (xhr, textStatus, thrownError){
+ errorDialog("Error:", textStatus + " " + xhr.responseText);
+ }
+
+ });
+
+ });
+ oTable = $('#advTenantSiteTableData').dataTable({
+ "bJQueryUI": true,
+ "bFilter": false,
+ "bInfo": false,
+ "bLengthChange": false,
+ "bPaginate": false,
+ "aaData": siteNames,
+ "bStateSave": true,
+ "aoColumns": [{
+ "sTitle": "Site Name",
+ sClass: "siteName"
+ }, {
+ "sTitle": "Allocated",
+ sClass: "alignCenter allocated"
+ }, {
+ "sTitle": "Edit",
+ sClass: "alignCenter"
+ }]
+ });
+ editSliverAdv();
+ $('#advTenantSliceDropDown').on('change', function () {
+ var selectedValue = $("#advTenantSliceDropDown").val();
+ checkForBasicAdvView(selectedValue, rows,imageData,serviceLevelData,siteRows,dataSet);
+ });
+ }
+
+ function checkForBasicAdvView(value, rows,imageData,serviceLevelData,siteRows,dataSet) {
+ for (row in rows) {
+ if (rows[row]['sliceName'] == value) {
+ if (rows[row]['numOfSites'] > 1) {
+ advShowSliceData(rows,imageData,serviceLevelData,siteRows,dataSet,value);
+ downloadSliceInfo(rows,imageData,serviceLevelData,siteRows,dataSet,value);
+ $("#tenantSliceDataWrapper").css("display","none");
+ $("#advancedTenantSliceDataWrapper").css("display","block");
+ $("#advTenantSiteTable").css("display","block");
+ $("#tenantSiteTable").css("display","none");
+ $("#sliver-btn").css("display","none");
+ $("#save-btn").css("display","block");
+ break;
+ } else if(rows[row]['numOfSites'] <= 1){
+ showSliceData(rows,imageData,serviceLevelData,siteRows,dataSet,value);
+ downloadSliceInfo(rows,imageData,serviceLevelData,siteRows,dataSet,value);
+ $("#tenantSliceDataWrapper").css("display","block");
+ $("#advancedTenantSliceDataWrapper").css("display","none");
+ $("#advTenantSiteTable").css("display","none");
+ $("#tenantSiteTable").css("display","block");
+ $("#sliver-btn").css("display","block");
+ $("#save-btn").css("display","none");
+ break;
+ }break;
+ }
+ }
+ }
+
+ function UserSliceTable(rows,imageData,serviceLevelData,siteRows,dataSet) {
+ //Add check for #dynamicusersliceinfo_filter label-> input having focus here
+ $("<div></div>").attr('id', 'tenantSliceDataWrapper').appendTo('#tabs-5');
+ $("<div></div>").attr('id', 'advancedTenantSliceDataWrapper').appendTo('#tabs-5');
+ var sliceData = '';
+ sliceData += '<div class="tenant-row public-key-warning"><span class="summary-attr">You have not uploaded your Public Key. <a href="http://{{ request.get_host}}/admin/core/user/{{user.id}}">Click here</a> to upload it now.</span></div><div class="tenant-row"><span class="summary-attr"><b>Slice Name:</b> <span id="slice-name-value"> </span> </span><br></div><div class="tenant-row"><span class="summary-attr"><b>Service Level:</b> <span id="service-level-value"> </span> </span><br></div><div class="tenant-row"><span class="summary-attr"><b>Image:</b> <span id="slice-image-value"> </span> </span><br></div><div class="btn btn-high btn-info" id="advanced-tenant">Go to Advanced View</div>';
+ var advSliceData = '';
+ advSliceData += '<div class="tenant-row public-key-warning"><span class="summary-attr">You have not uploaded your Public Key. <a href="http://{{ request.get_host}}/admin/core/user/{{user.id}}">Click here</a> to upload it now.</span></div><div class="adv-tenant-row"><span class="summary-attr"><b>Slice Name:</b> <span id="adv-slice-name-value"> </span> </span><br><br></div><div class="tenant-row"><span class="summary-attr"><b>Service Level:</b> <span id="adv-service-level-value"> </span> <span class="help-inline">Changes are potentially disruptive to existing slivers</span> </span><br></div><div class="tenant-row"><span class="summary-attr"><b>Image:</b> <span id="adv-slice-image-value"> </span><span class="help-inline">Changes are potentially disruptive to existing slivers</span> </span><br></div><div class="tenant-row"><span class="summary-attr"><b>Network:</b> <input type="text" name="adv-network-value" id="adv-network-value"> <span class="help-inline">List of port ranges(if any) e.g. 1021-1026,1029</span><br></div><div class="tenant-row"><span class="summary-attr"><b>Data Sets:</b> <span id="adv-slice-data-set-value"> </span> <input type="checkbox" name="checkbox" id="private-vol-checkbox" value="value"><span class="help-inline">Include Private Volume</span></span></div>';
+ $('#tenantSliceDataWrapper').append(sliceData).css("display", "none");
+ $('#advancedTenantSliceDataWrapper').append(advSliceData);
+ $("#advancedTenantSliceDataWrapper").css("display", "none");
+ $("<select></select>").attr('id', 'tenantSliceDropDown').appendTo('#slice-name-value');
+ for (row in rows) {
+ $("#tenantSliceDropDown").append("<option>" + rows[row]['sliceName'] + "</option>");
+ }
+ $("<select></select>").attr('id', 'advTenantSliceDropDown').appendTo('#adv-slice-name-value');
+ for (row in rows) {
+ $("#advTenantSliceDropDown").append("<option>" + rows[row]['sliceName'] + "</option>");
+ }
+ $("<div></div>").attr('id', 'tenantSiteTable').appendTo('#tabs-5').css("display","none");
+ $("<div></div>").attr('id', 'advTenantSiteTable').appendTo('#tabs-5').css("display", "none");
+ $('<div class="btn btn-success" id="create-slice-btn"><i class="icon-plus-sign icon-white"></i> Create New Slice</div>').appendTo("#tabs-5");
+ $('<div class="btn btn-success" id="delete-slice-btn"><i class="icon-plus-sign icon-white"></i> Delete a Slice</div>').appendTo("#tabs-5");
+ $('<div class="btn btn-high btn-info" id="download-details">Download Slice Details</div>').appendTo("#tabs-5");
+ $('<div class="btn btn-success" id="sliver-btn"><i class="icon-plus-sign icon-white"></i> Add/Remove Slivers</div>').appendTo("#tabs-5");
+ $('<div class="btn btn-high btn-info" id="save-btn">Save</div>').appendTo("#tabs-5").css("display", "none");
+ $("#advanced-tenant").unbind().click(function () {
+ var value = $("#tenantSliceDropDown").val();
+ advShowSliceData(rows,imageData,serviceLevelData,siteRows,dataSet,value);
+ $("#tenantSliceDataWrapper").css("display","none");
+ $("#advancedTenantSliceDataWrapper").css("display","block");
+ $("#advTenantSiteTable").css("display","block");
+ $("#tenantSiteTable").css("display","none");
+ $("#sliver-btn").toggle();
+ $("#save-btn").toggle();
+
+ });
+ $("#sliver-btn").click(function () {
+ $("#basic-tooltip").css("display", "none");
+ $("#dialog-form").dialog({
+ autoOpen: false,
+ height: 200,
+ width: 400,
+ modal: true,
+ dialogClass: "tenantDialog",
+ buttons: {
+ "Add": function () {
+ $.ajax({
+ url: '/tenantaddorremsliver/',
+ dataType: 'json',
+ data: {
+ count: parseInt($("#numOfSlivers").val()),
+ slice: $("#tenantSliceDropDown").val(),
+ actionToDo: "add",
+ csrfmiddlewaretoken: "{{ csrf_token }}", // < here
+ state: "inactive"
+ },
+ type: 'POST',
+ beforeSend: function () {
+ if (!$("#numOfSlivers").val()) {
+ $("#basic-tooltip").css("display", "block");
+ return false;
+ } else {
+ return true;
+ }
+ },
+ success: function () {
+ location.reload();
+$("#dialog-form").dialog("close");
+ }
+ });
+ },
+ Remove: function () {
+ $.ajax({
+ url: '/tenantaddorremsliver/',
+ dataType: 'json',
+ data: {
+ count: parseInt($("#numOfSlivers").val()),
+ slice: $("#tenantSliceDropDown").val(),
+ actionToDo: "rem",
+ csrfmiddlewaretoken: "{{ csrf_token }}", // < here
+ state: "inactive"
+ },
+ type: 'POST',
+ beforeSend: function () {
+ if (!$("#numOfSlivers").val()) {
+ $("#basic-tooltip").css("display", "block");
+ return false;
+ } else {
+ return true;
+ }
+ },
+ success: function () {
+$("#dialog-form").dialog("close");
+location.reload();
+
+ }
+ });
+ }
+ }
+ });
+ $("#dialog-form").dialog("open");
+ });
+ $("#create-slice-btn").unbind().click(function () {
+ $("#new-service-class").empty();
+ $("#new-image").empty();
+ $("#mount-data-sets").empty();
+ $("#new-network").empty();
+ for (row in serviceLevelData) {
+ $("#new-service-class").append("<option>" + serviceLevelData[row]['serviceClass'] + "</option>");
+ }
+ for (row in imageData) {
+ $("#new-image").append("<option>" + imageData[row]['Image'] + "</option>");
+ }
+ for (row in dataSet) {
+ $("#mount-data-sets").append("<option>" + dataSet[row]['DataSet'] + "</option>");
+ }
+ var nameOfSlice = $("#new-slice-name").val();
+ var nameOfServiceClass = $("#new-service-class").val();
+ var nameOfImage = $("#new-image").val();
+ $("#create-slice-form").dialog({
+ autoOpen: false,
+ height: 400,
+ width: 400,
+ modal: true,
+ dialogClass: "tenantDialog",
+ buttons: {
+ "Submit": function () {
+ $.ajax({
+ url: '/createnewslice/',
+ dataType: 'json',
+ data: {
+ sliceName: $("#new-slice-name").val(),
+ serviceClass: nameOfServiceClass,
+ imageName: $("#new-image").val(),
+ network: $("#new-network").val(),
+ privateVolume: $("#private-vol").is(":checked"),
+ mountDataSets: $("#mount-data-sets").val(),
+ actionToDo: "add",
+ csrfmiddlewaretoken: "{{ csrf_token }}", // < here
+ state: "inactive"
+ },
+ async: false,
+ type: 'POST',
+ beforeSend: function () {
+ if (!$("#new-slice-name").val()) {
+ $("#tooltip").css("display", "block");
+ return false;
+ } else {
+ return true;
+ }
+ },
+ success: function () {
+ location.reload();
+ }
+ });
+ $.ajax({
+ url: '/tenantaddorremsliver/',
+ dataType: 'json',
+ data: {
+ count: parseInt($("#number-of-slivers").val()),
+ slice: $("#new-slice-name").val(),
+ actionToDo: "add",
+ csrfmiddlewaretoken: "{{ csrf_token }}", // < here
+ state: "inactive"
+ },
+ async: false,
+ type: 'POST',
+ success: function () {
+ location.reload();
+ }
+ });
+
+ },
+ Cancel: function () {
+ $(this).dialog("close");
+ }
+ }
+ });
+ $("#create-slice-form").dialog("open");
+ });
+ $("#delete-slice-btn").unbind().click(function () {
+ $("#delete-slice").empty();
+ for (row in rows) {
+ $("#delete-slice").append("<option>" + rows[row]['sliceName'] + "</option>");
+ }
+ $("#delete-slice-form").dialog({
+ autoOpen: false,
+ height: 200,
+ width: 350,
+ modal: true,
+ dialogClass: "tenantDialog",
+ buttons: {
+ "Delete": function () {
+ $.ajax({
+ url: '/tenantdeleteslice/',
+ dataType: 'json',
+ data: {
+ sliceName: $("#delete-slice").val(),
+ csrfmiddlewaretoken: "{{ csrf_token }}", // < here
+ state: "inactive"
+ },
+ type: 'POST',
+ success: function () {
+ location.reload();
+ },
+ error:function (xhr, textStatus, thrownError){
+ errorDialog("Error:", textStatus + " " + xhr.responseText);
+ }
+ });
+ },
+ Cancel: function () {
+ $(this).dialog("close");
+ }
+ }
+ });
+ $("#delete-slice-form").dialog("open");
+ });
+ }
+
+
+ function initTenant() {
+ jQuery.ajax({
+ url: '/tenantview',
+ dataType: 'json',
+ success: function (data) {
+ var rows = data['userSliceInfo']['rows'];
+ var imageData = data['image']['rows'];
+ //var networkData = data['network']['rows'];
+ var serviceLevelData = data['sliceServiceClass']['rows'];
+ var siteRows = data['sites']['rows'];
+ var dataSet = data['mountDataSets']['rows'];
+ UserSliceTable(rows,imageData,serviceLevelData,siteRows,dataSet);
+ if(!(data['publicKey'])){
+ $(".public-key-warning").css("display","block");
+ }
+ var value = $("#tenantSliceDropDown").val();
+ checkForBasicAdvView(value,rows,imageData,serviceLevelData,siteRows,dataSet);
+ $("#tooltip").css("display", "none");
+ $("#basic-tooltip").css("display", "none");
+ $("#adv-tooltip").css("display", "none");
+ },
+ complete: function () {}
+ });
+ }
+
+ initTenant();
+});
+</script>
+
+</html>
diff --git a/planetstack/templates/admin/dashboard/welcome.html b/planetstack/templates/admin/dashboard/welcome.html
index 707ee96..0f616e5 100644
--- a/planetstack/templates/admin/dashboard/welcome.html
+++ b/planetstack/templates/admin/dashboard/welcome.html
@@ -1,25 +1,31 @@
-{% extends "admin/base.html" %}
+{% extends "admin/dashboard/dashboard_base.html" %}
{% load admin_static %}
{% block content %}
-<h1>Welcome <a href="core/user/{{user.id}}">{{user.email}}</a> from Site: <a href="core/site/{{site.id}}">{{site}}</a></h1>
-<table class="table table-striped table-bordered table-hover table-condensed">
-<thead><tr>
-<th class="sortable">Slices</th><th class="sortable">Privilege</th>
-<th class="sortable">Reservations</th>
-</tr></thead>
-{% for entry in userSliceInfo %}
-<tr><td> <a href="core/slice/{{entry.slice.id}}">{{entry.slice.name}}</a><br>
-</td><td>{{entry.role}}</td>
-{% if entry.reservations %}
-<td><a href="core/slice/{{entry.slice.id}}/#reservations">
-{% for resSlot in entry.reservations.1 %}
-{{resSlot}} <br>
-{% endfor %}
-</a></td></tr>
-{% else %}
-<td></td></tr>
-{% endif %}
-{% endfor %}
-</table>
+<!-- <div id="hometabs" class="inner-center-column ui-tabs ui-widget ui-widget-content ui-corner-all"> -->
+<div id="hometabs" >
+ <ul id="suit_form_tabs" class="nav nav-tabs nav-tabs-suit" data-tab-prefix="suit-tab">
+ <li><a href="#tabs-1">Developer View</a></li>
+ <li><a href="#tabs-2">CDN Operations </a></li>
+ <li><a href="#tabs-3">Historical</a></li>
+ <li><a href="#tabs-4">Slice Interactions</a></li>
+ <li><a href="#tabs-5">Tenant</a></li>
+ </ul>
+<div id="tabs-1">
+{% include "/opt/planetstack/templates/admin/dashboard/developer.html" %}
+</div>
+<div id="tabs-2">
+{% include "/opt/planetstack/templates/admin/dashboard/cdnoperations.html" %}
+</div>
+<div id="tabs-3">
+{% include "/opt/planetstack/templates/admin/dashboard/hpc_historical.html" %}
+</div>
+<div id="tabs-4">
+{% include "/opt/planetstack/templates/admin/dashboard/slice_interactions.html" %}
+</div>
+<div id="tabs-5">
+{% include "/opt/planetstack/templates/admin/dashboard/tenant.html" %}
+</div>
+</div>
+
{% endblock %}
diff --git a/planetstack/templates/admin/login.html b/planetstack/templates/admin/login.html
index 072f73b..b04f842 100644
--- a/planetstack/templates/admin/login.html
+++ b/planetstack/templates/admin/login.html
@@ -51,10 +51,12 @@
<div class="submit-row">
<input type="submit" class="btn btn-info" value="{% trans 'SIGN IN' %}" />
</div>
+{% url 'django-admindocs-docroot' as docsroot %}
+ {% if docsroot %}
+<div class="createAccountLink"><a href="{{ docsroot }}">{% trans 'Request a new Account' %}</a></div>
-<div class="forgotLink"><a href="{{ password_reset_url }}">{% trans 'Forgot password?' %}</a></div><div class="createAccountLink"><a href="#">{% trans 'Create an Account' %}</a></div>
+ {% endif %}
</form>
-
<script type="text/javascript">
document.getElementById('id_username').focus()
</script>
diff --git a/planetstack/templates/admin/newminidashboard.html b/planetstack/templates/admin/newminidashboard.html
new file mode 100644
index 0000000..f1180ab
--- /dev/null
+++ b/planetstack/templates/admin/newminidashboard.html
@@ -0,0 +1,71 @@
+{% if not DISABLE_MINIDASHBOARD %}
+
+<div id="newMiniDashboard">
+ <div class="hide" id="selectedMainNav">{{ opts.verbose_name_plural|capfirst }}</div>
+ <div class="hide" id="currentOriginalNode">{{ original|truncatewords:"18" }}</div>
+ <div class="hide" id="minidashStatus"></div>
+ <div class="miniDashPair">
+ <button type="button" name="nodeCount" id="miniDashNodeCount" class="minidashbutton">--</button>
+ <label for="nodeCount" id="miniDashNodeCountLabel">Active Nodes</label>
+ </div>
+ <div class="miniDashPair">
+ <button type="button" name="avgLoad" id="miniDashAvgLoad" class="minidashbutton">--</button>
+ <label for="avgLoad" id="miniDashAvgLoadLabel">Average Load</label>
+ </div>
+ <div class="miniDashPair">
+ <button type="button" name="bandwidth" id="miniDashBandwidth" class="minidashbutton">--</button>
+ <label for="bandwidth" id="miniDashBandwidthLabel">Bandwidth</label>
+ </div>
+ <div class="endDashPair">
+ </div>
+</div>
+
+<div id="nodeCountDialog" class="miniDashModal" >
+<div id="nodeCountGraph" ></div>
+</div>
+
+<div id="bandwidthDialog" class="miniDashModal" >
+<div id="bandwidthGraph" ></div>
+</div>
+
+<div id="avgLoadDialog" class="miniDashModal" >
+<div id="avgLoadGraph" ></div>
+</div>
+
+<script>
+/** If the analytics have already been set -- read them in on page load **/
+if (typeof window != "undefined") {
+ if (typeof window.pageAnalyticsData != "undefined") {
+ updatePageAnalyticsData(window.pageAnalyticsData);
+ }
+}
+
+var loadingDiv = '<div class="loading">Loading ...</div>';
+
+$( "#nodeCountDialog" ).dialog({ title: "OpenCloud Node Count", modal: true, position: ['middle', 40], resizable: true, autoOpen: false, width: 527, height: 400});
+$( "#miniDashNodeCount" ).click(function() {
+ $( "#nodeCountGraph" ).html(loadingDiv);
+ $( "#nodeCountDialog" ).dialog("open");
+ var options = {"title": "Node Count", "vAxis": {"title": "Number of Nodes", "minValue": 0, "maxValue": 250}};
+ renderChart(true,"#nodeCountDialog", "#nodeCountGraph", window.pageAnalyticsUrl, 0, 2, google.visualization.data.sum, options);
+ });
+
+$( "#bandwidthDialog" ).dialog({ title: "OpenCloud Bandwidth", modal: true, position: ['middle', 40], resizable: true, autoOpen: false, width: 527, height: 400});
+$( "#miniDashBandwidth" ).click(function() {
+ $("#bandwidthGraph").html(loadingDiv);
+ $( "#bandwidthDialog" ).dialog("open");
+ var options = {"title": "Total Bandwidth", "vAxis": {"title": "Total Bandwidth (Gbps)"}};
+ renderChart(true,"#bandwidthDialog", "#bandwidthGraph", window.pageBandwidthUrl, 0, 1, agg_bandwidth, options);
+ });
+
+$( "#avgLoadDialog" ).dialog({ title: "OpenCloud Average Load", modal: true, position: ['middle', 40], resizable: true, autoOpen: false, width: 527, height: 400});
+$( "#miniDashAvgLoad" ).click(function() {
+ $("#avgLoadGraph").html(loadingDiv);
+ $( "#avgLoadDialog" ).dialog("open");
+ var options = {"title": "Average CPU Utilization", "vAxis": {"title": "CPU Utilization (%)"}};
+ renderChart(true,"#avgLoadDialog", "#avgLoadGraph", window.pageAnalyticsUrl, 0, 1, google.visualization.data.sum, options);
+ });
+
+</script>
+
+{% endif %}
diff --git a/planetstack/templates/admin/request_account.html b/planetstack/templates/admin/request_account.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/planetstack/templates/admin/request_account.html
diff --git a/planetstack/tests/GetConfiguration.py b/planetstack/tests/GetConfiguration.py
index b3193f4..55d2467 100644
--- a/planetstack/tests/GetConfiguration.py
+++ b/planetstack/tests/GetConfiguration.py
@@ -10,6 +10,8 @@
from openstack.manager import OpenStackManager
from core.models import Slice, Sliver, ServiceClass, Reservation, Tag, Network, User, Node, Image, Deployment, Site, NetworkTemplate, NetworkSlice
+slice_name_map = {}
+
def ps_id_to_pl_id(x):
# Since we don't want the PlanetStack object IDs to conflict with existing
# PlanetLab object IDs in the CMI, just add 100000 to the PlanetStack object
@@ -20,12 +22,15 @@
return x - 100000
def pl_slice_id(slice):
- if slice.name == "princeton_vcoblitz":
+ if slice.name.startswith("princeton_vcoblitz"):
# 70 is the slice id of princeton_vcoblitz on vicci
return 70
else:
return ps_id_to_pl_id(slice.id)
+def ps_slicename_to_pl_slicename(x):
+ return slice_name_map.get(x,x)
+
def filter_fields(src, fields):
dest = {}
for (key,value) in src.items():
@@ -51,7 +56,7 @@
"slice_tag_ids": [],
"peer_id": None,
"site_id": ps_id_to_pl_id(ps_slice.site_id),
- "name": ps_slice.name}
+ "name": ps_slicename_to_pl_slicename(ps_slice.name)}
# creator_person_id, person_ids, expires, created
@@ -159,6 +164,22 @@
interfaces.append(interface)
return interfaces
+def find_multi_slicename(orig_slicename):
+ """
+ Because we sometimes have issues deleting a slice in planetstack and
+ creating a new one, allow us to use a prefix match, that way someone
+ can put a version number of the end of the slicename
+ """
+ global slice_name_map
+ slices = Slice.objects.filter()
+ for slice in slices:
+ if slice.name.startswith(orig_slicename):
+ slice_name_map[slice.name] = orig_slicename
+ return slice.name
+
+ return orig_slicename
+
+
def GetConfiguration(name):
slicename = name["name"]
if "node_id" in name:
@@ -166,6 +187,8 @@
else:
node_id = 0
+ slicename = find_multi_slicename(slicename)
+
node_sliver_tags = GetTags(slicename, node_id)
slices = GetSlices({"name": slicename})
@@ -215,11 +238,13 @@
'nodes': nodes}
if __name__ == '__main__':
+ find_multi_slicename("princeton_vcoblitz") # set up the mapping for princeton_vcoblitz2 -> princeton_vcoblitz
+
slices = GetSlices()
nodes = GetNodes()
if ("-d" in sys.argv):
- config = GetConfiguration({"name": "princeton_coblitz"})
+ config = GetConfiguration({"name": "princeton_vcoblitz"})
print config
print slices
print nodes
diff --git a/planetstack/tests/generate_billing_sample.py b/planetstack/tests/generate_billing_sample.py
index 4fc1374..7fdfbdd 100644
--- a/planetstack/tests/generate_billing_sample.py
+++ b/planetstack/tests/generate_billing_sample.py
@@ -1,8 +1,5 @@
"""
- Basic Sliver Test
-
- 1) Create a slice1
- 2) Create sliver1 on slice1
+ Generates billing sample data
"""
import datetime
@@ -14,6 +11,10 @@
import sys
import time
+# The granularity at which the charge collection system collects charges. Once
+# per hour makes for a very slow UI, so I upped it to once per 8 hours.
+CHARGE_HOURS = 8
+
MINUTE_SECONDS = 60
HOUR_SECONDS = MINUTE_SECONDS * 60
DAY_SECONDS = HOUR_SECONDS * 24
@@ -86,34 +87,42 @@
payment = Payment(account=account, amount=invoice.amount, date=payment_time)
payment.save()
+print "deleting old stuff"
+
delete_all(Invoice)
delete_all(Charge)
delete_all(Payment)
delete_all(Account)
delete_all(UsableObject)
+print "creating accounts"
+
for site in Site.objects.all():
# only create accounts for sites where some slices exist
if len(site.slices.all()) > 0:
account = Account(site=site)
account.save()
+print "generating charges"
+
for slice in Slice.objects.all():
site = slice.site
account = site.accounts.all()[0]
serviceClass =slice.serviceClass
- if not (slice.name in ["DnsRedir", "DnsDemux", "HyperCache"]):
+ if not (slice.name in ["DnsRedir", "DnsDemux", "HyperCache", "Hadoop", "Owl", "Stork", "Syndicate", "test-slice-1", "test-slice-2", "test", "test2"]):
continue
+ print " generating charges for", slice.name
+
now = int(time.time())/HOUR_SECONDS*HOUR_SECONDS
charge_kind=None
for resource in slice.serviceClass.resources.all():
- if resource.name == "cpu.cores":
+ if resource.name == "numberCores":
charge_kind = "reservation"
cost = resource.cost
- elif (resource.name == "cycles") or (resource.name == "Cycles"):
+ elif (charge_kind==None) and (resource.name == "cycles") or (resource.name == "Cycles"):
charge_kind = "besteffort"
cost = resource.cost
@@ -121,15 +130,17 @@
print "failed to find resource for", slice.serviceClass
continue
- for sliver in slice.slivers.all():
+ for sliver in slice.slivers.all()[:4]: # only do up to 4 slivers; it's way too much data otherwise
hostname = sliver.node.name
- for i in range(now-MONTH_SECONDS, now, HOUR_SECONDS):
+ for i in range(now-MONTH_SECONDS, now, CHARGE_HOURS*HOUR_SECONDS):
if charge_kind == "besteffort":
- core_hours = random.randint(1,60)/100.0
+ core_hours = random.randint(20,60)/100.0
else:
core_hours = 1
- amount = core_hours * cost
+ core_hours = core_hours * CHARGE_HOURS
+
+ amount = float(core_hours * cost) / 100.0
object = get_usable_object(hostname)
@@ -138,6 +149,8 @@
charge = Charge(account=account, slice=slice, kind=charge_kind, state="pending", date=date, object=object, coreHours=core_hours, amount=amount)
charge.save()
+print "doing invoices and payments"
+
for account in Account.objects.all():
generate_invoices(account)
generate_payments(account)
diff --git a/planetstack/uwsgi/planetstack.ini b/planetstack/uwsgi/planetstack.ini
new file mode 100644
index 0000000..c712568
--- /dev/null
+++ b/planetstack/uwsgi/planetstack.ini
@@ -0,0 +1,14 @@
+[uwsgi]
+chdir = /opt/planetstack
+module = planetstack.wsgi:application
+env = DJANGO_SETTINGS_MODULE=planetstack.settings
+socket = /var/run/planestack.uwsgi.sock
+socket = 127.0.0.1:9001
+http = 128.112.139.48:9002
+stats = 127.0.0.1:9003
+workers = 3
+master = true
+processes = 8
+#--uid=1000 --gid=2000
+harakiri = 20
+daemonize=/var/log/uwsgi/planetstack.log