From: Sapan Bhatia Date: Wed, 11 Jun 2014 17:27:49 +0000 (-0400) Subject: Merge branch 'master' of ssh://git.planet-lab.org/git/plstackapi X-Git-Url: http://git.onelab.eu/?p=plstackapi.git;a=commitdiff_plain;h=e3bbcf622e692f93fcc62ff7be7f49a206249b6c;hp=eb62ad61ef3ca0b8dd5e641ac8e841eb0f17e8ae Merge branch 'master' of ssh://git.planet-lab.org/git/plstackapi Conflicts: planetstack/apigen/api.template.py --- 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= 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= 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 690bb13..de05fe6 100644 --- a/planetstack/apigen/api.template.py +++ b/planetstack/apigen/api.template.py @@ -59,9 +59,39 @@ serializerLookUp = { 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 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] + + "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 @@ class ReadOnlyAwareAdmin(admin.ModelAdmin): 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 @@ class ReadOnlyAwareAdmin(admin.ModelAdmin): 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 @@ class ReservationInline(PlStackTabularInline): 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 @@ class TagInline(generic.GenericTabularInline): 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 NetworkLookerUpper: 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 @@ class SiteInline(PlStackTabularInline): 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 @@ class UserInline(PlStackTabularInline): 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 @@ class SliceInline(PlStackTabularInline): 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 @@ class SitePrivilegeInline(PlStackTabularInline): 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 + suit_classes = 'suit-tab suit-tab-deployments' + fields = ['deployment','site'] + +class SiteDeploymentInline(PlStackTabularInline): + model = SiteDeployments + #model = Site.deployments.through extra = 0 - fields = ('user', 'site','role') + 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 @@ class SlicePrivilegeInline(PlStackTabularInline): 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 @@ class SliceNetworkInline(PlStackTabularInline): 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 PlainTextWidget(forms.HiddenInput): 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 @@ class DeploymentAdminForm(forms.ModelForm): 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 @@ class DeploymentAdminForm(forms.ModelForm): 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 @@ class DeploymentAdminForm(forms.ModelForm): 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 @@ class DeploymentAdmin(PlanetStackBaseAdmin): 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 @@ class SiteAdmin(PlanetStackBaseAdmin): 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 @@ class SiteAdmin(PlanetStackBaseAdmin): 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 @@ class SiteAdmin(PlanetStackBaseAdmin): 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 @@ class SitePrivilegeAdmin(PlanetStackBaseAdmin): # 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 SliceForm(forms.ModelForm): 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 @@ class SliceAdmin(PlanetStackBaseAdmin): 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 @@ class SliceAdmin(PlanetStackBaseAdmin): 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 @@ class SlicePrivilegeAdmin(PlanetStackBaseAdmin): 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 SlicePrivilegeAdmin(PlanetStackBaseAdmin): 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 @@ class SliverAdmin(PlanetStackBaseAdmin): 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 @@ class SliverAdmin(PlanetStackBaseAdmin): # 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 @@ class UserChangeForm(forms.ModelForm): # 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 @@ class UserAdmin(UserAdmin): 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 @@ class UserAdmin(UserAdmin): 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 @@ class UserAdmin(UserAdmin): 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 @@ class UserAdmin(UserAdmin): 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 @@ class UserAdmin(UserAdmin): #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 @@ class ReservedResourceInline(PlStackTabularInline): 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 @@ class ReservationAdmin(PlanetStackBaseAdmin): 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 @@ if True: #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\w+)/$', self.admin_view(DashboardSliceInteractions.as_view()), + name="interactions"), + url(r'^dashboard/(?P\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\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 = '
' + 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 = """ +
+ \n" + + for i,view in enumerate(dashboards): + url = view.url + body = body + '
\n' % i + if url.startswith("template:"): + fn = url[9:] + body = body + self.readDashboard(fn) + body = body + '
\n' + + body=body+"
\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 = "" + text += "Iteration: %d
" % sim["iteration"] + text += "Elapsed since report %d

" % sim["elapsed_since_report"] + text += "" + text += "" + for site in sim["site_load"].values(): + text += "" + text += "" % \ + (site["name"], site["trend"], site["weight"], site["bytes_sent"], site["load_frac"]) + text += "" + text += "
sitetrendweightbytes_senthot
%s%0.2f%0.2f%d%0.2f
" + text += "" + 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,391 +498,801 @@ "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.user", + "model": "core.sitedeployments", "fields": { - "username": "padmin@vicci.org", - "public_key": null, - "updated": "2013-11-26T12:36:49.829Z", - "is_readonly": false, - "firstname": "OpenCloud", - "user_url": null, - "lastname": "Admin", - "created": "2013-11-26T12:36:49.816Z", - "is_active": true, - "site": null, - "phone": null, - "kuser_id": null, - "is_staff": true, - "last_login": "2013-12-13T05:21:52.645Z", - "timezone": "America/New_York", - "is_admin": true, - "password": "pbkdf2_sha256$10000$v5qKhIyhSQ2N$V8vh2mkqYdjQib6d2jBkpwV57eMBfhd/9eiXqaDLUWg=", - "email": "padmin@vicci.org", + "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.user", + "model": "core.sitedeployments", "fields": { - "username": "tony@onlab.us", - "public_key": null, - "updated": "2013-09-22T21:47:30.993Z", - "is_readonly": false, - "firstname": "Tony", - "user_url": null, - "lastname": "Mack", - "created": "2013-09-22T21:47:30.959Z", - "is_active": true, + "updated": "2014-05-07T23:52:01.455Z", + "created": "2014-05-07T23:52:01.455Z", + "tenant_id": null, "site": 22, - "phone": null, - "kuser_id": null, - "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", + "deployment": 6, "enacted": null } }, { "pk": 3, - "model": "core.user", + "model": "core.sitedeployments", "fields": { - "username": "mike@onlab.us", - "public_key": null, - "updated": "2013-09-22T21:47:30.993Z", - "is_readonly": false, - "firstname": "Mike", - "user_url": null, - "lastname": "Wawrzoniak", - "created": "2013-09-22T21:47:30.959Z", - "is_active": true, + "updated": "2014-05-07T23:52:01.456Z", + "created": "2014-05-07T23:52:01.456Z", + "tenant_id": null, "site": 22, - "phone": null, - "kuser_id": null, - "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", + "deployment": 7, "enacted": null } }, { "pk": 4, - "model": "core.user", + "model": "core.sitedeployments", "fields": { - "username": "andy@onlab.us", - "public_key": null, - "updated": "2013-09-22T21:47:30.993Z", - "is_readonly": false, - "firstname": "Andy", - "user_url": null, - "lastname": "Bavier", - "created": "2013-09-22T21:47:30.959Z", - "is_active": true, + "updated": "2014-05-07T23:52:01.457Z", + "created": "2014-05-07T23:52:01.456Z", + "tenant_id": null, "site": 22, - "phone": null, - "kuser_id": null, - "is_staff": true, - "last_login": "2013-12-17T18:22:01.970Z", - "timezone": "America/New_York", - "is_admin": true, - "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", - "email": "andy@onlab.us", + "deployment": 8, "enacted": null } }, { "pk": 5, - "model": "core.user", + "model": "core.sitedeployments", "fields": { - "username": "sapan@onlab.us", - "public_key": null, - "updated": "2013-09-22T21:47:30.993Z", - "is_readonly": false, - "firstname": "Sapan", - "user_url": null, - "lastname": "Bhatia", - "created": "2013-09-22T21:47:30.959Z", - "is_active": true, + "updated": "2014-05-07T23:52:01.457Z", + "created": "2014-05-07T23:52:01.457Z", + "tenant_id": null, "site": 22, - "phone": null, - "kuser_id": null, - "is_staff": true, - "last_login": "2013-12-17T16:21:46.493Z", - "timezone": "America/New_York", - "is_admin": true, - "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", - "email": "sapan@onlab.us", + "deployment": 9, "enacted": null } }, { "pk": 6, - "model": "core.user", + "model": "core.sitedeployments", "fields": { - "username": "jcnelson@cs.princeton.edu", - "public_key": "", - "updated": "2013-12-16T15:44:27.429Z", - "is_readonly": false, - "firstname": "Jude", - "user_url": null, - "lastname": "Nelson", - "created": "2013-09-22T21:47:30.959Z", - "is_active": true, - "site": 10, - "phone": "", - "kuser_id": null, - "is_staff": true, - "last_login": "2013-09-22T21:48:01.047Z", - "timezone": "America/New_York", - "is_admin": true, - "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", - "email": "jcnelson@cs.princeton.edu", + "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.user", + "model": "core.sitedeployments", "fields": { - "username": "llp@onlab.us", - "public_key": "", - "updated": "2013-12-04T20:47:03.679Z", - "is_readonly": false, - "firstname": "Larry", - "user_url": null, - "lastname": "Peterson", - "created": "2013-09-22T21:47:30.959Z", - "is_active": true, - "site": 22, - "phone": "", - "kuser_id": null, - "is_staff": true, - "last_login": "2013-12-17T17:29:10.464Z", - "timezone": "America/New_York", - "is_admin": true, - "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", - "email": "llp@onlab.us", + "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.user", + "model": "core.sitedeployments", "fields": { - "username": "scott@onlab.us", - "public_key": null, - "updated": "2013-09-22T21:47:30.993Z", - "is_readonly": false, - "firstname": "Scott", - "user_url": null, - "lastname": "Baker", - "created": "2013-09-22T21:47:30.959Z", - "is_active": true, - "site": 22, - "phone": null, - "kuser_id": null, - "is_staff": true, - "last_login": "2013-12-12T17:31:25.520Z", - "timezone": "America/New_York", - "is_admin": true, - "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", - "email": "scott@onlab.us", + "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.user", + "model": "core.sitedeployments", "fields": { - "username": "ali@onlab.us", - "public_key": null, - "updated": "2013-09-22T21:47:30.993Z", - "is_readonly": false, - "firstname": "Ali", - "user_url": null, - "lastname": "Al-Shabibi", - "created": "2013-09-22T21:47:30.959Z", - "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", - "is_admin": true, - "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", - "email": "ali@onlab.us", + "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": { - "username": "bill@onlab.us", + "username": "padmin@vicci.org", "public_key": null, - "updated": "2013-09-22T21:47:30.993Z", + "updated": "2013-11-26T12:36:49.829Z", "is_readonly": false, - "firstname": "Bill", + "firstname": "OpenCloud", "user_url": null, - "lastname": "Snow", - "created": "2013-09-22T21:47:30.959Z", + "lastname": "Admin", + "created": "2013-11-26T12:36:49.816Z", "is_active": true, - "site": 22, + "site": null, "phone": null, - "kuser_id": null, "is_staff": true, - "last_login": "2013-09-22T21:48:01.047Z", + "last_login": "2014-03-23T13:57:56.529Z", "timezone": "America/New_York", "is_admin": true, - "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", - "email": "bill@onlab.us", + "password": "pbkdf2_sha256$10000$v5qKhIyhSQ2N$V8vh2mkqYdjQib6d2jBkpwV57eMBfhd/9eiXqaDLUWg=", + "email": "padmin@vicci.org", "enacted": null } }, { - "pk": 11, + "pk": 2, "model": "core.user", "fields": { - "username": "guru@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": "Guru", + "firstname": "Tony", "user_url": null, - "lastname": "Parulkar", + "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-09-22T21:48:01.047Z", + "last_login": "2013-12-14T03:21:24.872Z", "timezone": "America/New_York", "is_admin": true, "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", - "email": "guru@onlab.us", + "email": "tmack@cs.princeton.edu", "enacted": null } }, { - "pk": 12, + "pk": 3, "model": "core.user", "fields": { - "username": "marc@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": "Marc", + "firstname": "Mike", "user_url": null, - "lastname": "Fiuczynski", + "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-09-22T21:48:01.047Z", + "last_login": "2013-12-04T20:46:15.904Z", "timezone": "America/New_York", "is_admin": true, "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", - "email": "marc@onlab.us", + "email": "mhw@cs.princeton.edu", "enacted": null } }, { - "pk": 13, + "pk": 4, "model": "core.user", "fields": { - "username": "siobhan@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": "Siobhan", + "firstname": "Andy", "user_url": null, - "lastname": "Tully", + "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-09-22T21:48:01.047Z", + "last_login": "2014-05-12T19:20:28.533Z", "timezone": "America/New_York", "is_admin": true, "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", - "email": "siobhan@onlab.us", + "email": "acb@cs.princeton.edu", "enacted": null } }, { - "pk": 14, + "pk": 5, "model": "core.user", "fields": { - "username": "demo@onlab.us", + "username": "sapanb@cs.princeton.edu", "public_key": "", - "updated": "2013-12-06T11:25:52.457Z", - "is_readonly": true, - "firstname": "Demo", + "updated": "2014-03-23T23:10:35.450Z", + "is_readonly": false, + "firstname": "Sapan", "user_url": null, - "lastname": "OpenCloud", - "created": "2013-12-06T11:25:41.211Z", + "lastname": "Bhatia", + "created": "2013-09-22T21:47:30.959Z", "is_active": true, - "site": 22, + "site": 10, "phone": "", - "kuser_id": null, "is_staff": true, - "last_login": "2013-12-17T18:54:01.976Z", + "last_login": "2014-05-09T18:41:01.026Z", "timezone": "America/New_York", "is_admin": true, - "password": "pbkdf2_sha256$10000$jaLSTW2ksHEN$HDpjDKieFDjMvtV5wbF/ow3zfq8EqcFtNXLfuo+150s=", - "email": "demo@onlab.us", + "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", + "email": "sapanb@cs.princeton.edu", "enacted": null } }, { - "pk": 15, + "pk": 6, "model": "core.user", "fields": { - "username": "jhh@cs.arizona.edu", + "username": "jcnelson@cs.princeton.edu", "public_key": "", - "updated": "2013-12-17T18:08:58.288Z", + "updated": "2013-12-16T15:44:27.429Z", "is_readonly": false, - "firstname": "John", + "firstname": "Jude", "user_url": null, - "lastname": "Hartman", - "created": "2013-12-17T18:08:01.381Z", + "lastname": "Nelson", + "created": "2013-09-22T21:47:30.959Z", "is_active": true, - "site": 24, + "site": 10, "phone": "", - "kuser_id": null, "is_staff": true, - "last_login": "2013-12-17T18:08:01.356Z", + "last_login": "2014-05-09T02:08:32.840Z", "timezone": "America/New_York", "is_admin": true, - "password": "!", - "email": "jhh@cs.arizona.edu", + "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", + "email": "jcnelson@cs.princeton.edu", "enacted": null } }, { - "pk": 1, - "model": "core.serviceclass", - "fields": { + "pk": 7, + "model": "core.user", + "fields": { + "username": "llp@onlab.us", + "public_key": "", + "updated": "2014-03-23T23:11:22.436Z", + "is_readonly": false, + "firstname": "Larry", + "user_url": null, + "lastname": "Peterson", + "created": "2013-09-22T21:47:30.959Z", + "is_active": true, + "site": 22, + "phone": "", + "is_staff": true, + "last_login": "2014-05-10T15:19:58.401Z", + "timezone": "America/New_York", + "is_admin": true, + "password": "pbkdf2_sha256$10000$EOrqG6KzVO8z$4jSJMN/35PKPmJkDEHjAY1c/mDpBfoW1U8XAfk1eDLk=", + "email": "llp@onlab.us", + "enacted": null + } +}, +{ + "pk": 8, + "model": "core.user", + "fields": { + "username": "scott@onlab.us", + "public_key": null, + "updated": "2013-09-22T21:47:30.993Z", + "is_readonly": false, + "firstname": "Scott", + "user_url": null, + "lastname": "Baker", + "created": "2013-09-22T21:47:30.959Z", + "is_active": true, + "site": 22, + "phone": null, + "is_staff": true, + "last_login": "2014-05-26T23:11:54.353Z", + "timezone": "America/New_York", + "is_admin": true, + "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", + "email": "scott@onlab.us", + "enacted": null + } +}, +{ + "pk": 9, + "model": "core.user", + "fields": { + "username": "ali@onlab.us", + "public_key": null, + "updated": "2013-09-22T21:47:30.993Z", + "is_readonly": false, + "firstname": "Ali", + "user_url": null, + "lastname": "Al-Shabibi", + "created": "2013-09-22T21:47:30.959Z", + "is_active": true, + "site": 22, + "phone": null, + "is_staff": true, + "last_login": "2013-09-22T21:48:01.047Z", + "timezone": "America/New_York", + "is_admin": true, + "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", + "email": "ali@onlab.us", + "enacted": null + } +}, +{ + "pk": 10, + "model": "core.user", + "fields": { + "username": "bill@onlab.us", + "public_key": null, + "updated": "2013-09-22T21:47:30.993Z", + "is_readonly": false, + "firstname": "Bill", + "user_url": null, + "lastname": "Snow", + "created": "2013-09-22T21:47:30.959Z", + "is_active": true, + "site": 22, + "phone": null, + "is_staff": true, + "last_login": "2013-09-22T21:48:01.047Z", + "timezone": "America/New_York", + "is_admin": true, + "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", + "email": "bill@onlab.us", + "enacted": null + } +}, +{ + "pk": 11, + "model": "core.user", + "fields": { + "username": "guru@onlab.us", + "public_key": null, + "updated": "2013-09-22T21:47:30.993Z", + "is_readonly": false, + "firstname": "Guru", + "user_url": null, + "lastname": "Parulkar", + "created": "2013-09-22T21:47:30.959Z", + "is_active": true, + "site": 22, + "phone": null, + "is_staff": true, + "last_login": "2013-09-22T21:48:01.047Z", + "timezone": "America/New_York", + "is_admin": true, + "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", + "email": "guru@onlab.us", + "enacted": null + } +}, +{ + "pk": 12, + "model": "core.user", + "fields": { + "username": "marc@onlab.us", + "public_key": null, + "updated": "2013-09-22T21:47:30.993Z", + "is_readonly": false, + "firstname": "Marc", + "user_url": null, + "lastname": "Fiuczynski", + "created": "2013-09-22T21:47:30.959Z", + "is_active": true, + "site": 22, + "phone": null, + "is_staff": true, + "last_login": "2013-09-22T21:48:01.047Z", + "timezone": "America/New_York", + "is_admin": true, + "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", + "email": "marc@onlab.us", + "enacted": null + } +}, +{ + "pk": 13, + "model": "core.user", + "fields": { + "username": "siobhan@onlab.us", + "public_key": null, + "updated": "2013-09-22T21:47:30.993Z", + "is_readonly": false, + "firstname": "Siobhan", + "user_url": null, + "lastname": "Tully", + "created": "2013-09-22T21:47:30.959Z", + "is_active": true, + "site": 22, + "phone": null, + "is_staff": true, + "last_login": "2013-09-22T21:48:01.047Z", + "timezone": "America/New_York", + "is_admin": true, + "password": "pbkdf2_sha256$10000$dLKRXWJlkuvm$Ycamy79oT1lN0Q5R3B3nvlr70n2X50mL86yraDwzuWk=", + "email": "siobhan@onlab.us", + "enacted": null + } +}, +{ + "pk": 14, + "model": "core.user", + "fields": { + "username": "demo@onlab.us", + "public_key": "", + "updated": "2014-05-23T22:03:14.065Z", + "is_readonly": true, + "firstname": "Demo", + "user_url": null, + "lastname": "OpenCloud", + "created": "2013-12-06T11:25:41.211Z", + "is_active": true, + "site": 22, + "phone": "", + "is_staff": true, + "last_login": "2014-05-23T22:03:56.256Z", + "timezone": "America/New_York", + "is_admin": true, + "password": "pbkdf2_sha256$10000$jaLSTW2ksHEN$HDpjDKieFDjMvtV5wbF/ow3zfq8EqcFtNXLfuo+150s=", + "email": "demo@onlab.us", + "enacted": null + } +}, +{ + "pk": 15, + "model": "core.user", + "fields": { + "username": "jhh@cs.arizona.edu", + "public_key": "", + "updated": "2013-12-17T18:08:58.288Z", + "is_readonly": false, + "firstname": "John", + "user_url": null, + "lastname": "Hartman", + "created": "2013-12-17T18:08:01.381Z", + "is_active": true, + "site": 24, + "phone": "", + "is_staff": true, + "last_login": "2013-12-17T18:08:01.356Z", + "timezone": "America/New_York", + "is_admin": true, + "password": "!", + "email": "jhh@cs.arizona.edu", + "enacted": null + } +}, +{ + "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,30567 +1340,42949 @@ "commitment": 365, "name": "Gold", "upgradeRequiresApproval": false, - "description": "Gold" + "enacted": null + } +}, +{ + "pk": 4, + "model": "core.slice", + "fields": { + "updated": "2014-03-23T23:13:28.743Z", + "imagePreference": "Ubuntu 12.04 LTS", + "name": "HyperCache", + "service": 3, + "created": "2013-04-03T23:14:11.072Z", + "slice_url": "", + "description": "HyperCache slice for HyperCache service.", + "serviceClass": 1, + "enabled": true, + "site": 22, + "omf_friendly": false, + "network": "Private Only", + "max_slivers": 10, + "mountDataSets": "GenBank", + "creator": 1, + "enacted": null + } +}, +{ + "pk": 6, + "model": "core.slice", + "fields": { + "updated": "2014-03-23T23:12:27.541Z", + "imagePreference": "Ubuntu 12.04 LTS", + "name": "Syndicate", + "service": 5, + "created": "2013-04-03T23:14:11.072Z", + "slice_url": "", + "description": "", + "serviceClass": 1, + "enabled": true, + "site": 10, + "omf_friendly": false, + "network": "Private Only", + "max_slivers": 10, + "mountDataSets": "GenBank", + "creator": 1, + "enacted": null + } +}, +{ + "pk": 8, + "model": "core.slice", + "fields": { + "updated": "2014-03-23T23:17:33.686Z", + "imagePreference": "Ubuntu 12.04 LTS", + "name": "DnsRedir", + "service": 4, + "created": "2013-12-04T22:48:35.584Z", + "slice_url": "", + "description": "DNS Redirection slice for RequestRouter service.", + "serviceClass": 2, + "enabled": true, + "site": 22, + "omf_friendly": false, + "network": "Private Only", + "max_slivers": 10, + "mountDataSets": "GenBank", + "creator": 8, + "enacted": null + } +}, +{ + "pk": 9, + "model": "core.slice", + "fields": { + "updated": "2014-03-23T23:18:00.528Z", + "imagePreference": "Ubuntu 12.04 LTS", + "name": "DnsDemux", + "service": 4, + "created": "2013-12-04T22:49:23.051Z", + "slice_url": "", + "description": "DNS Demultiplexing slice for RequestRouter service. ", + "serviceClass": 2, + "enabled": true, + "site": 22, + "omf_friendly": false, + "network": "Private Only", + "max_slivers": 10, + "mountDataSets": "GenBank", + "creator": 8, + "enacted": null + } +}, +{ + "pk": 10, + "model": "core.slice", + "fields": { + "updated": "2014-03-23T23:19:56.253Z", + "imagePreference": "Ubuntu 12.04 LTS", + "name": "Infrastructure", + "service": null, + "created": "2013-12-09T14:13:15.392Z", + "slice_url": "", + "description": "", + "serviceClass": 1, + "enabled": true, + "site": 22, + "omf_friendly": false, + "network": "Private Only", + "max_slivers": 10, + "mountDataSets": "GenBank", + "creator": 1, + "enacted": null + } +}, +{ + "pk": 11, + "model": "core.slice", + "fields": { + "updated": "2014-03-23T23:15:29.953Z", + "imagePreference": "Ubuntu 12.04 LTS", + "name": "Stork", + "service": 8, + "created": "2013-12-13T21:49:59.476Z", + "slice_url": "", + "description": "The Stork Package Management Service", + "serviceClass": 1, + "enabled": true, + "site": 24, + "omf_friendly": false, + "network": "Private Only", + "max_slivers": 10, + "mountDataSets": "GenBank", + "creator": 1, + "enacted": null + } +}, +{ + "pk": 12, + "model": "core.slice", + "fields": { + "updated": "2014-03-23T23:16:01.742Z", + "imagePreference": "Ubuntu 12.04 LTS", + "name": "Owl", + "service": 8, + "created": "2013-12-13T21:52:15.590Z", + "slice_url": "", + "description": "The Owl Data Collection service", + "serviceClass": 1, + "enabled": true, + "site": 24, + "omf_friendly": false, + "network": "Private Only", + "max_slivers": 10, + "mountDataSets": "GenBank", + "creator": 1, + "enacted": null + } +}, +{ + "pk": 13, + "model": "core.slice", + "fields": { + "updated": "2014-03-23T23:15:02.712Z", + "imagePreference": "Ubuntu 12.04 LTS", + "name": "Hadoop", + "service": null, + "created": "2013-12-13T21:54:20.895Z", + "slice_url": "", + "description": "Hadoop map-reduce service", + "serviceClass": 2, + "enabled": true, + "site": 22, + "omf_friendly": false, + "network": "Private Only", + "max_slivers": 10, + "mountDataSets": "GenBank", + "creator": 1, + "enacted": null + } +}, +{ + "pk": 14, + "model": "core.slice", + "fields": { + "updated": "2014-03-23T23:14:27.648Z", + "imagePreference": "Ubuntu 12.04 LTS", + "name": "test", + "service": null, + "created": "2013-12-13T21:56:57.299Z", + "slice_url": "", + "description": "Test slice number one.", + "serviceClass": 1, + "enabled": true, + "site": 10, + "omf_friendly": false, + "network": "Private Only", + "max_slivers": 10, + "mountDataSets": "GenBank", + "creator": 1, + "enacted": null + } +}, +{ + "pk": 15, + "model": "core.slice", + "fields": { + "updated": "2014-03-23T23:14:00.911Z", + "imagePreference": "Ubuntu 12.04 LTS", + "name": "test2", + "service": null, + "created": "2013-12-13T22:00:03.049Z", + "slice_url": "", + "description": "test slice number two.", + "serviceClass": 1, + "enabled": true, + "site": 10, + "omf_friendly": false, + "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": "", + "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 + } +}, +{ + "pk": 1, + "model": "core.image", + "fields": { + "updated": "2013-12-09T14:26:56.787Z", + "name": "Fedora 16 LXC rev 1.3", + "created": "2013-12-09T14:26:56.787Z", + "container_format": "bare", + "disk_format": "raw", + "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": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 385, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 386, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node3.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 387, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node4.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 388, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node5.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 389, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node6.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 390, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node7.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 391, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node8.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 392, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node9.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 393, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node10.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 394, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node11.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 395, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node12.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 396, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node13.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 397, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node14.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 398, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node15.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 399, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node16.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 400, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node17.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 401, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node18.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 402, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node19.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 403, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node20.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 404, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node21.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 405, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node22.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 406, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node23.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 407, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node24.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 408, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node25.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 409, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node26.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 410, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node27.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 411, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node28.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 412, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node29.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 413, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node30.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 414, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node31.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 415, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node32.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 416, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node33.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 417, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node34.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 418, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node35.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 419, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node36.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 420, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node37.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 421, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node38.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 422, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node39.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 423, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node40.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 424, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node41.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 425, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node42.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 426, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node43.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 427, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node44.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 428, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node45.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 429, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node46.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 430, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node47.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 431, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node48.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 432, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node49.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 433, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node50.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 434, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node51.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 435, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node52.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 436, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node53.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 437, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node54.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 438, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node55.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 439, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node56.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 440, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node57.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 441, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node58.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 442, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node59.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 443, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node60.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 444, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node61.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 445, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node62.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 446, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node63.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 447, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node64.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 448, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node65.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 449, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node66.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 450, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node67.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 451, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node68.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 452, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node69.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 453, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node70.stanford.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 8, + "deployment": 5, + "enacted": null + } +}, +{ + "pk": 454, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 455, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 456, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node3.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 457, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node4.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 458, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node5.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 459, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node6.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 460, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node7.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 461, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node8.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 462, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node9.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 463, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node10.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 464, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node11.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 465, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node12.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 466, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node13.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 467, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node14.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 468, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node15.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 469, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node16.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 470, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node17.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 471, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node18.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 472, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node19.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 473, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node20.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 474, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node21.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 475, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node22.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 476, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node23.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 477, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node24.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 478, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node25.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 479, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node26.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 480, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node27.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 481, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node28.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 482, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node29.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 483, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node30.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 484, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node31.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 485, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node32.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 486, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node33.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 487, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node34.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 488, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node35.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 489, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node36.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 490, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node37.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 491, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node38.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 492, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node39.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 493, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node40.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 494, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node41.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 495, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node42.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 496, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node43.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 497, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node44.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 498, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node45.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 499, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node46.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 500, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node47.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 501, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node48.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 502, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node49.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 503, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node50.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 504, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node51.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 505, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node52.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 506, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node53.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 507, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node54.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 508, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node55.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 509, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node56.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 510, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node57.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 511, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node58.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 512, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node59.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 513, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node60.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 514, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node61.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 515, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node62.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 516, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node63.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 517, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node64.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 518, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node65.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 519, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node66.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 520, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node67.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 521, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node68.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 522, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node69.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 523, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node70.washington.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 9, + "deployment": 6, + "enacted": null + } +}, +{ + "pk": 524, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 525, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 526, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node3.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 527, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node4.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 528, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node5.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 529, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node6.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 530, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node7.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 531, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node8.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 532, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node9.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 533, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node10.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 534, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node11.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 535, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node12.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 536, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node13.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 537, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node14.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 538, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node15.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 539, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node16.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 540, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node17.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 541, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node18.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 542, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node19.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 543, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node20.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 544, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node21.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 545, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node22.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 546, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node23.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 547, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node24.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 548, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node25.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 549, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node26.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 550, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node27.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 551, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node28.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 552, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node29.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 553, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node30.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 554, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node31.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 555, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node32.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 556, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node33.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 557, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node34.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 558, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node35.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 559, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node36.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 560, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node37.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 561, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node38.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 562, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node39.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 563, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node40.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 564, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node41.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 565, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node42.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 566, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node43.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 567, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node44.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 568, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node45.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 569, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node46.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 570, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node47.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 571, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node48.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 572, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node49.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 573, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node50.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 574, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node51.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 575, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node52.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 576, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node53.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 577, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node54.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 578, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node55.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 579, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node56.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 580, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node57.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 581, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node58.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 582, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node59.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 583, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node60.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 584, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node61.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 585, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node62.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 586, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node63.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 587, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node64.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 588, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node65.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 589, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node66.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 590, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node67.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 591, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node68.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 592, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node69.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 593, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node70.princeton.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 10, + "deployment": 7, + "enacted": null + } +}, +{ + "pk": 594, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 595, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 596, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node3.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 597, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node4.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 598, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node5.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 599, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node6.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 600, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node7.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 601, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node8.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 602, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node9.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 603, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node10.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 604, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node11.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 605, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node12.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 606, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node13.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 607, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node14.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 608, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node15.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 609, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node16.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 610, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node17.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 611, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node18.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 612, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node19.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 613, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node20.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 614, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node21.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 615, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node22.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 616, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node23.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 617, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node24.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 618, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node25.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 619, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node26.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 620, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node27.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 621, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node28.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 622, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node29.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 623, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node30.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 624, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node31.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 625, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node32.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 626, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node33.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 627, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node34.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 628, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node35.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 629, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node36.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 630, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node37.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 631, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node38.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 632, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node39.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 633, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node40.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 634, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node41.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 635, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node42.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 636, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node43.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 637, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node44.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 638, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node45.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 639, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node46.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 640, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node47.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 641, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node48.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 642, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node49.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 643, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node50.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 644, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node51.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 645, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node52.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 646, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node53.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 647, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node54.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 648, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node55.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 649, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node56.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 650, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node57.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 651, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node58.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 652, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node59.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 653, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node60.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 654, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node61.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 655, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node62.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 656, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node63.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 657, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node64.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 658, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node65.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 659, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node66.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 660, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node67.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 661, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node68.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 662, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node69.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 663, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node70.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 11, + "deployment": 8, + "enacted": null + } +}, +{ + "pk": 664, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 665, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 666, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node3.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 667, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node4.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 668, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node5.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 669, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node6.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 670, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node7.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 671, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node8.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 672, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node9.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 673, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node10.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 674, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node11.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 675, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node12.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 676, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node13.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 677, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node14.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 678, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node15.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 679, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node16.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 680, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node17.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 681, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node18.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 682, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node19.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 683, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node20.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 684, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node21.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 685, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node22.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 686, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node23.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 687, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node24.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 688, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node25.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 689, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node26.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 690, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node27.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 691, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node28.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 692, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node29.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 693, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node30.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 694, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node31.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 695, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node32.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 696, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node33.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 697, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node34.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 698, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node35.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 699, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node36.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 700, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node37.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 701, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node38.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 702, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node39.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 703, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node40.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 704, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node41.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 705, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node42.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 706, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node43.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 707, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node44.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 708, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node45.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 709, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node46.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 710, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node47.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 711, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node48.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 712, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node49.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 713, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node50.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 714, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node51.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 715, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node52.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 716, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node53.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 717, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node54.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 718, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node55.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 719, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node56.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 720, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node57.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 721, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node58.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 722, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node59.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 723, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node60.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 724, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node61.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 725, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node62.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 726, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node63.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 727, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node64.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 728, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node65.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 729, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node66.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 730, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node67.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 731, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node68.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 732, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node69.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 733, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node70.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, + "deployment": 9, + "enacted": null + } +}, +{ + "pk": 734, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.atla.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 13, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 735, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.atla.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 13, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 736, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.chic.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 14, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 737, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.chic.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 14, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 738, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.hous.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 15, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 739, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.hous.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 15, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 740, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.kans.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 16, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 741, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.kans.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 16, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 742, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.losa.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 17, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 743, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.losa.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 17, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 744, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.newy.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 18, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 745, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.newy.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 18, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 746, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.salt.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 19, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 747, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.salt.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 19, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 748, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.seat.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 20, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 749, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.seat.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 20, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 750, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node1.wash.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 21, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 751, + "model": "core.node", + "fields": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node2.wash.internet2.vini-veritas.net", + "created": "2013-04-03T23:14:11.072Z", + "site": 21, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 752, + "model": "core.node", + "fields": { + "updated": "2013-12-17T17:10:48.740Z", + "name": "opencloud0.sing.internet2.edu", + "created": "2013-12-17T17:10:48.740Z", + "site": 23, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 753, + "model": "core.node", + "fields": { + "updated": "2013-12-17T17:10:48.742Z", + "name": "opencloud1.sing.internet2.edu", + "created": "2013-12-17T17:10:48.741Z", + "site": 23, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 754, + "model": "core.node", + "fields": { + "updated": "2013-12-17T17:10:48.742Z", + "name": "opencloud2.sing.internet2.edu", + "created": "2013-12-17T17:10:48.742Z", + "site": 23, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 755, + "model": "core.node", + "fields": { + "updated": "2013-12-17T17:10:48.743Z", + "name": "opencloud3.sing.internet2.edu", + "created": "2013-12-17T17:10:48.743Z", + "site": 23, + "deployment": 10, + "enacted": null + } +}, +{ + "pk": 4, + "model": "core.serviceresource", + "fields": { + "updated": "2013-12-11T22:18:00.040Z", + "name": "Cycles", + "bucketMaxSize": 0, + "created": "2013-12-11T22:18:00.040Z", + "serviceClass": 1, + "maxUnitsDeployment": 0, + "calendarReservable": false, + "bucketInRate": 0, + "cost": 7, + "maxUnitsNode": 0, + "maxDuration": 0, + "enacted": null + } +}, +{ + "pk": 5, + "model": "core.serviceresource", + "fields": { + "updated": "2013-12-11T22:18:00.045Z", + "name": "Cycles", + "bucketMaxSize": 0, + "created": "2013-12-11T22:18:00.045Z", + "serviceClass": 2, + "maxUnitsDeployment": 0, + "calendarReservable": false, + "bucketInRate": 0, + "cost": 7, + "maxUnitsNode": 0, + "maxDuration": 0, + "enacted": null + } +}, +{ + "pk": 6, + "model": "core.serviceresource", + "fields": { + "updated": "2013-12-11T22:18:00.053Z", + "name": "Cycles", + "bucketMaxSize": 0, + "created": "2013-12-11T22:18:00.053Z", + "serviceClass": 3, + "maxUnitsDeployment": 0, + "calendarReservable": false, + "bucketInRate": 0, + "cost": 7, + "maxUnitsNode": 0, + "maxDuration": 0, + "enacted": null + } +}, +{ + "pk": 7, + "model": "core.serviceresource", + "fields": { + "updated": "2013-12-11T22:18:00.064Z", + "name": "numberCores", + "bucketMaxSize": 0, + "created": "2013-12-11T22:18:00.064Z", + "serviceClass": 3, + "maxUnitsDeployment": 210, + "calendarReservable": true, + "bucketInRate": 0, + "cost": 0, + "maxUnitsNode": 6, + "maxDuration": 8760, + "enacted": null + } +}, +{ + "pk": 8, + "model": "core.serviceresource", + "fields": { + "updated": "2013-12-11T22:18:00.072Z", + "name": "numberCores", + "bucketMaxSize": 210, + "created": "2013-12-11T22:18:00.072Z", + "serviceClass": 2, + "maxUnitsDeployment": 210, + "calendarReservable": true, + "bucketInRate": 10, + "cost": 7, + "maxUnitsNode": 6, + "maxDuration": 168, + "enacted": null + } +}, +{ + "pk": 40, + "model": "core.sliver", + "fields": { + "node": 613, + "instance_name": "instance-000003e8", + "updated": "2013-12-12T17:55:32.455Z", + "slice": 4, + "deploymentNetwork": 8, + "name": "node20.gt.vicci.org", + "created": "2013-12-12T17:55:32.455Z", + "ip": "130.207.98.29", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 41, + "model": "core.sliver", + "fields": { + "node": 615, + "instance_name": "instance-000003e9", + "updated": "2013-12-12T17:55:32.478Z", + "slice": 4, + "deploymentNetwork": 8, + "name": "node22.gt.vicci.org", + "created": "2013-12-12T17:55:32.478Z", + "ip": "130.207.98.31", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 42, + "model": "core.sliver", + "fields": { + "node": 617, + "instance_name": "instance-000003ea", + "updated": "2013-12-12T17:55:32.495Z", + "slice": 4, + "deploymentNetwork": 8, + "name": "node24.gt.vicci.org", + "created": "2013-12-12T17:55:32.495Z", + "ip": "130.207.98.33", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 43, + "model": "core.sliver", + "fields": { + "node": 622, + "instance_name": "instance-000003eb", + "updated": "2013-12-12T17:55:32.512Z", + "slice": 4, + "deploymentNetwork": 8, + "name": "node29.gt.vicci.org", + "created": "2013-12-12T17:55:32.511Z", + "ip": "130.207.98.38", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 44, + "model": "core.sliver", + "fields": { + "node": 623, + "instance_name": "instance-000003ec", + "updated": "2013-12-12T17:55:32.528Z", + "slice": 4, + "deploymentNetwork": 8, + "name": "node30.gt.vicci.org", + "created": "2013-12-12T17:55:32.528Z", + "ip": "130.207.98.39", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 45, + "model": "core.sliver", + "fields": { + "node": 624, + "instance_name": "instance-000003ed", + "updated": "2013-12-12T17:55:32.544Z", + "slice": 4, + "deploymentNetwork": 8, + "name": "node31.gt.vicci.org", + "created": "2013-12-12T17:55:32.544Z", + "ip": "130.207.98.40", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 46, + "model": "core.sliver", + "fields": { + "node": 625, + "instance_name": "instance-000003ee", + "updated": "2013-12-12T17:55:32.561Z", + "slice": 4, + "deploymentNetwork": 8, + "name": "node32.gt.vicci.org", + "created": "2013-12-12T17:55:32.561Z", + "ip": "130.207.98.41", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 47, + "model": "core.sliver", + "fields": { + "node": 630, + "instance_name": "instance-000003ef", + "updated": "2013-12-12T17:55:32.577Z", + "slice": 4, + "deploymentNetwork": 8, + "name": "node37.gt.vicci.org", + "created": "2013-12-12T17:55:32.577Z", + "ip": "130.207.98.46", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 48, + "model": "core.sliver", + "fields": { + "node": 666, + "instance_name": "instance-000003f0", + "updated": "2013-12-12T17:55:32.594Z", + "slice": 4, + "deploymentNetwork": 9, + "name": "node3.mpisws.vicci.org", + "created": "2013-12-12T17:55:32.594Z", + "ip": "141.39.220.13", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 49, + "model": "core.sliver", + "fields": { + "node": 683, + "instance_name": "instance-000003f1", + "updated": "2013-12-12T17:55:32.611Z", + "slice": 4, + "deploymentNetwork": 9, + "name": "node20.mpisws.vicci.org", + "created": "2013-12-12T17:55:32.610Z", + "ip": "141.39.220.30", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 50, + "model": "core.sliver", + "fields": { + "node": 684, + "instance_name": "instance-000003f2", + "updated": "2013-12-12T17:55:32.627Z", + "slice": 4, + "deploymentNetwork": 9, + "name": "node21.mpisws.vicci.org", + "created": "2013-12-12T17:55:32.627Z", + "ip": "141.39.220.31", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 51, + "model": "core.sliver", + "fields": { + "node": 686, + "instance_name": "instance-000003f3", + "updated": "2013-12-12T17:55:32.644Z", + "slice": 4, + "deploymentNetwork": 9, + "name": "node23.mpisws.vicci.org", + "created": "2013-12-12T17:55:32.644Z", + "ip": "141.39.220.33", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 52, + "model": "core.sliver", + "fields": { + "node": 687, + "instance_name": "instance-000003f4", + "updated": "2013-12-12T17:55:32.660Z", + "slice": 4, + "deploymentNetwork": 9, + "name": "node24.mpisws.vicci.org", + "created": "2013-12-12T17:55:32.660Z", + "ip": "141.39.220.34", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 53, + "model": "core.sliver", + "fields": { + "node": 691, + "instance_name": "instance-000003f5", + "updated": "2013-12-12T17:55:32.677Z", + "slice": 4, + "deploymentNetwork": 9, + "name": "node28.mpisws.vicci.org", + "created": "2013-12-12T17:55:32.677Z", + "ip": "141.39.220.38", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 54, + "model": "core.sliver", + "fields": { + "node": 693, + "instance_name": "instance-000003f6", + "updated": "2013-12-12T17:55:32.693Z", + "slice": 4, + "deploymentNetwork": 9, + "name": "node30.mpisws.vicci.org", + "created": "2013-12-12T17:55:32.693Z", + "ip": "141.39.220.40", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 55, + "model": "core.sliver", + "fields": { + "node": 694, + "instance_name": "instance-000003f7", + "updated": "2013-12-12T17:55:32.710Z", + "slice": 4, + "deploymentNetwork": 9, + "name": "node31.mpisws.vicci.org", + "created": "2013-12-12T17:55:32.710Z", + "ip": "141.39.220.41", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 56, + "model": "core.sliver", + "fields": { + "node": 559, + "instance_name": "instance-000003f8", + "updated": "2013-12-12T17:55:32.726Z", + "slice": 4, + "deploymentNetwork": 7, + "name": "node36.princeton.vicci.org", + "created": "2013-12-12T17:55:32.726Z", + "ip": "128.112.171.90", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 57, + "model": "core.sliver", + "fields": { + "node": 560, + "instance_name": "instance-000003f9", + "updated": "2013-12-12T17:55:32.743Z", + "slice": 4, + "deploymentNetwork": 7, + "name": "node37.princeton.vicci.org", + "created": "2013-12-12T17:55:32.743Z", + "ip": "128.112.171.92", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 58, + "model": "core.sliver", + "fields": { + "node": 561, + "instance_name": "instance-000003fa", + "updated": "2013-12-12T17:55:32.760Z", + "slice": 4, + "deploymentNetwork": 7, + "name": "node38.princeton.vicci.org", + "created": "2013-12-12T17:55:32.759Z", + "ip": "128.112.171.94", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 59, + "model": "core.sliver", + "fields": { + "node": 562, + "instance_name": "instance-000003fb", + "updated": "2013-12-12T17:55:32.776Z", + "slice": 4, + "deploymentNetwork": 7, + "name": "node39.princeton.vicci.org", + "created": "2013-12-12T17:55:32.776Z", + "ip": "128.112.171.96", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 60, + "model": "core.sliver", + "fields": { + "node": 563, + "instance_name": "instance-000003fc", + "updated": "2013-12-12T17:55:32.792Z", + "slice": 4, + "deploymentNetwork": 7, + "name": "node40.princeton.vicci.org", + "created": "2013-12-12T17:55:32.792Z", + "ip": "128.112.171.98", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 61, + "model": "core.sliver", + "fields": { + "node": 565, + "instance_name": "instance-000003fd", + "updated": "2013-12-12T17:55:32.809Z", + "slice": 4, + "deploymentNetwork": 7, + "name": "node42.princeton.vicci.org", + "created": "2013-12-12T17:55:32.809Z", + "ip": "128.112.171.102", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 62, + "model": "core.sliver", + "fields": { + "node": 566, + "instance_name": "instance-000003fe", + "updated": "2013-12-12T17:55:32.826Z", + "slice": 4, + "deploymentNetwork": 7, + "name": "node43.princeton.vicci.org", + "created": "2013-12-12T17:55:32.826Z", + "ip": "128.112.171.104", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 63, + "model": "core.sliver", + "fields": { + "node": 568, + "instance_name": "instance-000003ff", + "updated": "2013-12-12T17:55:32.842Z", + "slice": 4, + "deploymentNetwork": 7, + "name": "node45.princeton.vicci.org", + "created": "2013-12-12T17:55:32.842Z", + "ip": "128.112.171.108", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 64, + "model": "core.sliver", + "fields": { + "node": 404, + "instance_name": "instance-00000400", + "updated": "2013-12-12T17:55:32.859Z", + "slice": 4, + "deploymentNetwork": 5, + "name": "node21.stanford.vicci.org", + "created": "2013-12-12T17:55:32.859Z", + "ip": "171.67.92.159", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 65, + "model": "core.sliver", + "fields": { + "node": 405, + "instance_name": "instance-00000401", + "updated": "2013-12-12T17:55:32.875Z", + "slice": 4, + "deploymentNetwork": 5, + "name": "node22.stanford.vicci.org", + "created": "2013-12-12T17:55:32.875Z", + "ip": "171.67.92.160", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 66, + "model": "core.sliver", + "fields": { + "node": 406, + "instance_name": "instance-00000402", + "updated": "2013-12-12T17:55:32.892Z", + "slice": 4, + "deploymentNetwork": 5, + "name": "node23.stanford.vicci.org", + "created": "2013-12-12T17:55:32.892Z", + "ip": "171.67.92.161", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 67, + "model": "core.sliver", + "fields": { + "node": 407, + "instance_name": "instance-00000403", + "updated": "2013-12-12T17:55:32.909Z", + "slice": 4, + "deploymentNetwork": 5, + "name": "node24.stanford.vicci.org", + "created": "2013-12-12T17:55:32.909Z", + "ip": "171.67.92.162", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 68, + "model": "core.sliver", + "fields": { + "node": 408, + "instance_name": "instance-00000404", + "updated": "2013-12-12T17:55:32.925Z", + "slice": 4, + "deploymentNetwork": 5, + "name": "node25.stanford.vicci.org", + "created": "2013-12-12T17:55:32.925Z", + "ip": "171.67.92.163", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 69, + "model": "core.sliver", + "fields": { + "node": 409, + "instance_name": "instance-00000405", + "updated": "2013-12-12T17:55:32.942Z", + "slice": 4, + "deploymentNetwork": 5, + "name": "node26.stanford.vicci.org", + "created": "2013-12-12T17:55:32.942Z", + "ip": "171.67.92.164", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 70, + "model": "core.sliver", + "fields": { + "node": 412, + "instance_name": "instance-00000406", + "updated": "2013-12-12T17:55:32.958Z", + "slice": 4, + "deploymentNetwork": 5, + "name": "node29.stanford.vicci.org", + "created": "2013-12-12T17:55:32.958Z", + "ip": "171.67.92.167", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 71, + "model": "core.sliver", + "fields": { + "node": 413, + "instance_name": "instance-00000407", + "updated": "2013-12-12T17:55:32.975Z", + "slice": 4, + "deploymentNetwork": 5, + "name": "node30.stanford.vicci.org", + "created": "2013-12-12T17:55:32.975Z", + "ip": "171.67.92.168", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 72, + "model": "core.sliver", + "fields": { + "node": 460, + "instance_name": "instance-00000408", + "updated": "2013-12-12T17:55:32.992Z", + "slice": 4, + "deploymentNetwork": 6, + "name": "node7.washington.vicci.org", + "created": "2013-12-12T17:55:32.992Z", + "ip": "128.95.1.112", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 73, + "model": "core.sliver", + "fields": { + "node": 467, + "instance_name": "instance-00000409", + "updated": "2013-12-12T17:55:33.008Z", + "slice": 4, + "deploymentNetwork": 6, + "name": "node14.washington.vicci.org", + "created": "2013-12-12T17:55:33.008Z", + "ip": "128.95.1.119", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 74, + "model": "core.sliver", + "fields": { + "node": 468, + "instance_name": "instance-0000040a", + "updated": "2013-12-12T17:55:33.025Z", + "slice": 4, + "deploymentNetwork": 6, + "name": "node15.washington.vicci.org", + "created": "2013-12-12T17:55:33.025Z", + "ip": "128.95.1.120", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 75, + "model": "core.sliver", + "fields": { + "node": 469, + "instance_name": "instance-0000040b", + "updated": "2013-12-12T17:55:33.041Z", + "slice": 4, + "deploymentNetwork": 6, + "name": "node16.washington.vicci.org", + "created": "2013-12-12T17:55:33.041Z", + "ip": "128.95.1.121", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 76, + "model": "core.sliver", + "fields": { + "node": 470, + "instance_name": "instance-0000040c", + "updated": "2013-12-12T17:55:33.058Z", + "slice": 4, + "deploymentNetwork": 6, + "name": "node17.washington.vicci.org", + "created": "2013-12-12T17:55:33.058Z", + "ip": "128.95.1.122", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 77, + "model": "core.sliver", + "fields": { + "node": 553, + "instance_name": "instance-0000040d", + "updated": "2013-12-12T17:55:33.110Z", + "slice": 8, + "deploymentNetwork": 7, + "name": "node30.princeton.vicci.org", + "created": "2013-12-12T17:55:33.110Z", + "ip": "128.112.171.78", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 78, + "model": "core.sliver", + "fields": { + "node": 553, + "instance_name": "instance-0000040e", + "updated": "2013-12-12T17:55:33.142Z", + "slice": 9, + "deploymentNetwork": 7, + "name": "node30.princeton.vicci.org", + "created": "2013-12-12T17:55:33.142Z", + "ip": "128.112.171.78", + "image": 1, + "creator": 8, + "numberCores": 1, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 79, + "model": "core.sliver", + "fields": { + "node": 469, + "instance_name": null, + "updated": "2013-12-13T21:51:36.927Z", + "slice": 11, + "deploymentNetwork": 6, + "name": "Stork", + "created": "2013-12-13T21:51:36.927Z", + "ip": null, + "image": 1, + "creator": 8, + "numberCores": 0, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 80, + "model": "core.sliver", + "fields": { + "node": 438, + "instance_name": null, + "updated": "2013-12-13T21:53:35.001Z", + "slice": 12, + "deploymentNetwork": 5, + "name": "Owl", + "created": "2013-12-13T21:53:35.001Z", + "ip": null, + "image": 1, + "creator": 8, + "numberCores": 0, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 81, + "model": "core.sliver", + "fields": { + "node": 588, + "instance_name": null, + "updated": "2013-12-18T22:21:36.513Z", + "slice": 14, + "deploymentNetwork": 7, + "name": "test-slice-1", + "created": "2013-12-13T21:58:13.897Z", + "ip": null, + "image": 1, + "creator": 8, + "numberCores": 0, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 82, + "model": "core.sliver", + "fields": { + "node": 589, + "instance_name": null, + "updated": "2013-12-18T22:21:36.522Z", + "slice": 14, + "deploymentNetwork": 7, + "name": "test-slice-1", + "created": "2013-12-13T21:58:44.349Z", + "ip": null, + "image": 1, + "creator": 8, + "numberCores": 0, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 83, + "model": "core.sliver", + "fields": { + "node": 590, + "instance_name": null, + "updated": "2013-12-18T22:21:36.530Z", + "slice": 14, + "deploymentNetwork": 7, + "name": "test-slice-1", + "created": "2013-12-13T21:58:44.350Z", + "ip": null, + "image": 1, + "creator": 8, + "numberCores": 0, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 84, + "model": "core.sliver", + "fields": { + "node": 384, + "instance_name": null, + "updated": "2013-12-13T21:59:36.723Z", + "slice": 13, + "deploymentNetwork": 5, + "name": "Hadoop", + "created": "2013-12-13T21:59:36.723Z", + "ip": null, + "image": 1, + "creator": 8, + "numberCores": 0, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 85, + "model": "core.sliver", + "fields": { + "node": 473, + "instance_name": null, + "updated": "2013-12-13T21:59:36.725Z", + "slice": 13, + "deploymentNetwork": 6, + "name": "Hadoop", + "created": "2013-12-13T21:59:36.725Z", + "ip": null, + "image": 1, + "creator": 8, + "numberCores": 0, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 86, + "model": "core.sliver", + "fields": { + "node": 535, + "instance_name": null, + "updated": "2013-12-13T21:59:36.726Z", + "slice": 13, + "deploymentNetwork": 7, + "name": "Hadoop", + "created": "2013-12-13T21:59:36.726Z", + "ip": null, + "image": 1, + "creator": 8, + "numberCores": 0, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 87, + "model": "core.sliver", + "fields": { + "node": 592, + "instance_name": null, + "updated": "2013-12-18T22:22:04.726Z", + "slice": 15, + "deploymentNetwork": 7, + "name": "test-slice-2", + "created": "2013-12-13T22:01:30.192Z", + "ip": null, + "image": 1, + "creator": 8, + "numberCores": 0, + "instance_id": null, + "enacted": null + } +}, +{ + "pk": 88, + "model": "core.sliver", + "fields": { + "node": 593, + "instance_name": null, + "updated": "2013-12-18T22:22:04.734Z", + "slice": 15, + "deploymentNetwork": 7, + "name": "test-slice-2", + "created": "2013-12-13T22:01:49.742Z", + "ip": null, + "image": 1, + "creator": 8, + "numberCores": 0, + "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": 4, - "model": "core.slice", + "pk": 326, + "model": "core.sliver", "fields": { - "router_id": null, - "updated": "2013-12-05T01:41:11.410Z", - "name": "HyperCache", - "service": 3, - "created": "2013-04-03T23:14:11.072Z", - "network_id": null, - "tenant_id": "", - "serviceClass": 1, - "enabled": true, - "site": 22, - "omf_friendly": false, - "subnet_id": null, - "slice_url": "", - "creator": 1, - "description": "HyperCache slice for HyperCache service." + "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": 6, - "model": "core.slice", + "pk": 327, + "model": "core.sliver", "fields": { - "router_id": null, - "updated": "2013-12-05T01:41:23.032Z", - "name": "Syndicate", - "service": 5, - "created": "2013-04-03T23:14:11.072Z", - "network_id": null, - "tenant_id": "", - "serviceClass": 1, - "enabled": true, - "site": 22, - "omf_friendly": false, - "subnet_id": null, - "slice_url": "", - "creator": 1, - "description": "" + "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": 8, - "model": "core.slice", + "pk": 328, + "model": "core.sliver", "fields": { - "router_id": null, - "updated": "2013-12-12T18:11:27.780Z", - "name": "DnsRedir", - "service": 4, - "created": "2013-12-04T22:48:35.584Z", - "network_id": null, - "tenant_id": "", - "serviceClass": 2, - "enabled": true, - "site": 22, - "omf_friendly": false, - "subnet_id": null, - "slice_url": "", + "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, - "description": "DNS Redirection slice for RequestRouter service." + "numberCores": 1, + "instance_id": null, + "enacted": null } }, { - "pk": 9, - "model": "core.slice", + "pk": 329, + "model": "core.sliver", "fields": { - "router_id": null, - "updated": "2013-12-12T18:12:41.375Z", - "name": "DnsDemux", - "service": 4, - "created": "2013-12-04T22:49:23.051Z", - "network_id": null, - "tenant_id": "", - "serviceClass": 2, - "enabled": true, - "site": 22, - "omf_friendly": false, - "subnet_id": null, - "slice_url": "", + "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, - "description": "DNS Demultiplexing slice for RequestRouter service. " + "numberCores": 1, + "instance_id": null, + "enacted": null } }, { - "pk": 10, - "model": "core.slice", + "pk": 330, + "model": "core.sliver", "fields": { - "router_id": null, - "updated": "2013-12-09T14:19:28.458Z", - "name": "Infrastructure", - "service": null, - "created": "2013-12-09T14:13:15.392Z", - "network_id": null, - "tenant_id": "", - "serviceClass": 1, - "enabled": true, - "site": 22, - "omf_friendly": false, - "subnet_id": null, - "slice_url": "", - "creator": null, - "description": "" + "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": 11, - "model": "core.slice", + "pk": 331, + "model": "core.sliver", "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": "", - "serviceClass": 1, - "enabled": true, - "site": 24, - "omf_friendly": false, - "subnet_id": null, - "slice_url": "", - "creator": null, - "description": "The Stork Package Management Service" + "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": 12, - "model": "core.slice", + "pk": 332, + "model": "core.sliver", "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": "", - "serviceClass": 1, - "enabled": true, - "site": 24, - "omf_friendly": false, - "subnet_id": null, - "slice_url": "", - "creator": null, - "description": "The Owl Data Collection service" + "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": 13, - "model": "core.slice", + "pk": 333, + "model": "core.sliver", "fields": { - "router_id": null, - "updated": "2013-12-13T21:59:36.718Z", - "name": "Hadoop", - "service": null, - "created": "2013-12-13T21:54:20.895Z", - "network_id": null, - "tenant_id": "", - "serviceClass": 2, - "enabled": true, - "site": 22, - "omf_friendly": false, - "subnet_id": null, - "slice_url": "", - "creator": null, - "description": "Hadoop map-reduce service" + "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": 14, - "model": "core.slice", + "pk": 334, + "model": "core.sliver", "fields": { - "router_id": null, - "updated": "2013-12-13T21:58:44.338Z", - "name": "test-slice-1", - "service": null, - "created": "2013-12-13T21:56:57.299Z", - "network_id": null, - "tenant_id": "", - "serviceClass": 1, - "enabled": true, - "site": 10, - "omf_friendly": false, - "subnet_id": null, - "slice_url": "", - "creator": null, - "description": "Test slice number one." + "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": 15, - "model": "core.slice", + "pk": 335, + "model": "core.sliver", "fields": { - "router_id": null, - "updated": "2013-12-13T22:01:49.732Z", - "name": "test-slice-2", - "service": null, - "created": "2013-12-13T22:00:03.049Z", - "network_id": null, - "tenant_id": "", - "serviceClass": 1, - "enabled": true, - "site": 10, - "omf_friendly": false, - "subnet_id": null, - "slice_url": "", - "creator": null, - "description": "test slice number two." + "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": 1, - "model": "core.image", + "pk": 336, + "model": "core.sliver", "fields": { - "updated": "2013-12-09T14:26:56.787Z", - "name": "Fedora 16 LXC rev 1.3", - "created": "2013-12-09T14:26:56.787Z", - "container_format": "bare", - "disk_format": "raw", - "image_id": "d4bdbba2-6883-4232-863a-202fd4c56c21" + "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": 384, - "model": "core.node", + "pk": 337, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node1.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 385, - "model": "core.node", + "pk": 338, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node2.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 386, - "model": "core.node", + "pk": 339, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node3.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 387, - "model": "core.node", + "pk": 340, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node4.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 388, - "model": "core.node", + "pk": 341, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node5.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 389, - "model": "core.node", + "pk": 342, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node6.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 390, - "model": "core.node", + "pk": 343, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node7.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 391, - "model": "core.node", + "pk": 344, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node8.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 392, - "model": "core.node", + "pk": 345, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node9.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 393, - "model": "core.node", + "pk": 346, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node10.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 394, - "model": "core.node", + "pk": 347, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node11.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 395, - "model": "core.node", + "pk": 348, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node12.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 396, - "model": "core.node", + "pk": 349, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node13.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 397, - "model": "core.node", + "pk": 350, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node14.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 398, - "model": "core.node", + "pk": 351, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node15.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 399, - "model": "core.node", + "pk": 352, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node16.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 400, - "model": "core.node", + "pk": 353, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node17.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 401, - "model": "core.node", + "pk": 354, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node18.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 402, - "model": "core.node", + "pk": 355, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node19.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 403, - "model": "core.node", + "pk": 356, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node20.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 404, - "model": "core.node", + "pk": 357, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node21.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 405, - "model": "core.node", + "pk": 358, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node22.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 406, - "model": "core.node", + "pk": 359, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node23.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 407, - "model": "core.node", + "pk": 360, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node24.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 408, - "model": "core.node", + "pk": 361, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node25.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 409, - "model": "core.node", + "pk": 362, + "model": "core.sliver", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node26.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 410, - "model": "core.node", + "pk": 1, + "model": "core.reservation", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node27.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 411, - "model": "core.node", + "pk": 2, + "model": "core.reservation", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node28.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 412, - "model": "core.node", + "pk": 3, + "model": "core.reservation", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node29.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 413, - "model": "core.node", + "pk": 4, + "model": "core.reservation", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node30.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 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" + "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": 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" + "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": 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" + "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": 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" + "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": 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" + "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": 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" + "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": 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" + "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": 421, - "model": "core.node", + "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 + } +}, +{ + "pk": 1, + "model": "core.networktemplate", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node38.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "guaranteedBandwidth": 0, + "description": "Connect a sliver to the public network using dedicated public IPv4 address", + "created": "2013-12-09T14:15:16.899Z", + "sharedNetworkName": "ext-net", + "updated": "2014-05-12T19:23:35.239Z", + "visibility": "public", + "name": "Public dedicated IPv4", + "translation": "none", + "sharedNetworkId": "", + "enacted": "2014-05-12T19:24:09Z" } }, { - "pk": 422, - "model": "core.node", + "pk": 3, + "model": "core.networktemplate", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node39.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "guaranteedBandwidth": 0, + "description": "Connect a sliver to the public network via NAT, with port forwarding", + "created": "2013-12-09T14:17:29.551Z", + "sharedNetworkName": "nat-net", + "updated": "2014-05-12T19:22:45.473Z", + "visibility": "private", + "name": "Public shared IPv4", + "translation": "NAT", + "sharedNetworkId": "51d641ba-9e1e-46f5-8069-bf4a929f851f", + "enacted": "2014-05-12T19:23:54Z" } }, { - "pk": 423, - "model": "core.node", + "pk": 4, + "model": "core.networktemplate", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node40.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "guaranteedBandwidth": 0, + "description": "A private virtual network", + "created": "2013-12-09T14:18:02.336Z", + "sharedNetworkName": "", + "updated": "2014-05-12T19:22:24.929Z", + "visibility": "private", + "name": "Private", + "translation": "none", + "sharedNetworkId": "", + "enacted": "2014-05-12T19:23:30Z" } }, { - "pk": 424, - "model": "core.node", + "pk": 1, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node41.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "64.57.18.128/28", + "updated": "2013-12-09T14:24:19.970Z", + "subnet_id": "e1796711-5584-4bc1-b09b-45dff8f59f32", + "name": "VINI-I2WashDC-public", + "created": "2013-12-09T14:24:19.970Z", + "permitAllSlices": false, + "permittedSlices": [], + "labels": "public-net", + "guaranteedBandwidth": 0, + "network_id": "7cb4291d-f8d3-4797-83b0-8deefd85bdf5", + "template": 1, + "owner": 10, + "ports": "", + "enacted": null } }, { - "pk": 425, - "model": "core.node", + "pk": 2, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node42.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "64.57.18.112/28", + "updated": "2013-12-09T14:31:41.605Z", + "subnet_id": "1afdc262-767b-4736-9403-584265293a81", + "name": "VINI-I2Seattle-public", + "created": "2013-12-09T14:31:41.605Z", + "permitAllSlices": false, + "permittedSlices": [], + "labels": "public-net", + "guaranteedBandwidth": 0, + "network_id": "810b4cb8-9d8e-4eee-becc-676785a07725", + "template": 1, + "owner": 10, + "ports": "", + "enacted": null } }, { - "pk": 426, - "model": "core.node", + "pk": 3, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node43.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "64.57.18.96/28", + "updated": "2013-12-09T14:33:10.312Z", + "subnet_id": "c3582780-76f1-4979-97b0-e27f39f18daa", + "name": "VINI-I2SaltLakeCity-public", + "created": "2013-12-09T14:33:10.312Z", + "permitAllSlices": false, + "permittedSlices": [], + "labels": "public-net", + "guaranteedBandwidth": 0, + "network_id": "4b37f048-11de-4ddd-acaf-2fc5e8716f0e", + "template": 1, + "owner": 10, + "ports": "", + "enacted": null } }, { - "pk": 427, - "model": "core.node", + "pk": 4, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node44.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "64.57.18.80/28", + "updated": "2013-12-09T14:34:55.754Z", + "subnet_id": "c0d989f2-f42f-4b3e-a23f-a0063ac4f010", + "name": "VINI-I2NewYork-public", + "created": "2013-12-09T14:34:55.754Z", + "permitAllSlices": false, + "permittedSlices": [], + "labels": "public-net", + "guaranteedBandwidth": 0, + "network_id": "684386d7-1286-4e58-acda-8ff45deac99e", + "template": 1, + "owner": 10, + "ports": "", + "enacted": null } }, { - "pk": 428, - "model": "core.node", + "pk": 5, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node45.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "64.57.18.64/28", + "updated": "2013-12-09T14:36:09.261Z", + "subnet_id": "d37bab1f-7e01-417c-86c4-ea0d69e2f25d", + "name": "VINI-I2LosAngeles-public", + "created": "2013-12-09T14:36:09.261Z", + "permitAllSlices": false, + "permittedSlices": [], + "labels": "public-net", + "guaranteedBandwidth": 0, + "network_id": "fa090174-ec59-4b7a-812b-9206d911fb61", + "template": 1, + "owner": 10, + "ports": "", + "enacted": null } }, { - "pk": 429, - "model": "core.node", + "pk": 6, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node46.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "64.57.18.48/28", + "updated": "2013-12-09T14:37:02.420Z", + "subnet_id": "7caa4cfb-846a-4e4c-9984-8ead4091f816", + "name": "VINI-I2KansasCity-public", + "created": "2013-12-09T14:37:02.420Z", + "permitAllSlices": false, + "permittedSlices": [], + "labels": "public-net", + "guaranteedBandwidth": 0, + "network_id": "017a3914-5eaf-4bcb-8609-6d17ebcdf075", + "template": 1, + "owner": 10, + "ports": "", + "enacted": null } }, { - "pk": 430, - "model": "core.node", + "pk": 7, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node47.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 431, - "model": "core.node", + "pk": 8, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node48.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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 } }, { - "pk": 432, - "model": "core.node", + "pk": 9, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node49.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "64.57.18.32/28", + "updated": "2013-12-09T14:41:00.237Z", + "subnet_id": "4438dfbd-099a-4229-bd86-cf29478a009b", + "name": "VINI-I2Houston-public", + "created": "2013-12-09T14:41:00.237Z", + "permitAllSlices": false, + "permittedSlices": [], + "labels": "public-net", + "guaranteedBandwidth": 0, + "network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7", + "template": 1, + "owner": 10, + "ports": "", + "enacted": null } }, { - "pk": 433, - "model": "core.node", + "pk": 10, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node50.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "64.57.18.16/28", + "updated": "2013-12-09T14:42:03.158Z", + "subnet_id": "332113b1-e6f4-492e-ad93-ce21512d3459", + "name": "VINI-I2Chicago-public", + "created": "2013-12-09T14:42:03.158Z", + "permitAllSlices": false, + "permittedSlices": [], + "labels": "public-net", + "guaranteedBandwidth": 0, + "network_id": "ecdbaf66-b659-4d59-b0b7-1bf6d232ccba", + "template": 1, + "owner": 10, + "ports": "", + "enacted": null } }, { - "pk": 434, - "model": "core.node", + "pk": 11, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node51.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "64.57.18.0/28", + "updated": "2013-12-09T14:42:49.781Z", + "subnet_id": "dafefd4f-2622-4987-9f30-94e9a977cfc3", + "name": "VINI-I2Atlanta-public", + "created": "2013-12-09T14:42:49.781Z", + "permitAllSlices": false, + "permittedSlices": [], + "labels": "public-net", + "guaranteedBandwidth": 0, + "network_id": "ae4d42e8-a97c-440d-9533-4bcbd62dfb00", + "template": 1, + "owner": 10, + "ports": "", + "enacted": null } }, { - "pk": 435, - "model": "core.node", + "pk": 12, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node52.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "", + "updated": "2013-12-13T21:51:04.425Z", + "subnet_id": "", + "name": "Stork package distribution", + "created": "2013-12-13T21:51:04.425Z", + "permitAllSlices": true, + "permittedSlices": [], + "labels": "", + "guaranteedBandwidth": 0, + "network_id": "", + "template": 4, + "owner": 11, + "ports": "", + "enacted": null } }, { - "pk": 436, - "model": "core.node", + "pk": 13, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node53.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "", + "updated": "2013-12-13T21:53:07.783Z", + "subnet_id": "", + "name": "Owl Data Collection", + "created": "2013-12-13T21:53:07.783Z", + "permitAllSlices": true, + "permittedSlices": [], + "labels": "", + "guaranteedBandwidth": 0, + "network_id": "", + "template": 4, + "owner": 12, + "ports": "", + "enacted": null } }, { - "pk": 437, - "model": "core.node", + "pk": 14, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node54.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "", + "updated": "2013-12-13T21:55:51.703Z", + "subnet_id": "", + "name": "Hadoop Shared Filesystem Access", + "created": "2013-12-13T21:55:51.703Z", + "permitAllSlices": true, + "permittedSlices": [], + "labels": "", + "guaranteedBandwidth": 0, + "network_id": "", + "template": 4, + "owner": 13, + "ports": "", + "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" + "pk": 15, + "model": "core.network", + "fields": { + "router_id": "", + "subnet": "", + "updated": "2013-12-13T21:57:38.995Z", + "subnet_id": "", + "name": "test-1-public", + "created": "2013-12-13T21:57:38.995Z", + "permitAllSlices": false, + "permittedSlices": [], + "labels": "", + "guaranteedBandwidth": 0, + "network_id": "", + "template": 1, + "owner": 14, + "ports": "", + "enacted": null } }, { - "pk": 439, - "model": "core.node", + "pk": 16, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node56.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "router_id": "", + "subnet": "", + "updated": "2013-12-13T22:00:40.549Z", + "subnet_id": "", + "name": "test-slice-2-nat", + "created": "2013-12-13T22:00:40.549Z", + "permitAllSlices": false, + "permittedSlices": [], + "labels": "", + "guaranteedBandwidth": 0, + "network_id": "", + "template": 3, + "owner": 15, + "ports": "", + "enacted": null } }, { - "pk": 440, - "model": "core.node", + "pk": 17, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node57.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 441, - "model": "core.node", + "pk": 18, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node58.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 442, - "model": "core.node", + "pk": 19, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node59.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 443, - "model": "core.node", + "pk": 20, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node60.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 444, - "model": "core.node", + "pk": 21, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node61.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 445, - "model": "core.node", + "pk": 22, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node62.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 446, - "model": "core.node", + "pk": 23, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node63.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 447, - "model": "core.node", + "pk": 24, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node64.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 448, - "model": "core.node", + "pk": 25, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node65.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 449, - "model": "core.node", + "pk": 26, + "model": "core.network", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node66.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 450, - "model": "core.node", + "pk": 1, + "model": "core.networkslice", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node67.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 11, + "updated": "2013-12-13T21:51:09.711Z", + "enacted": null, + "network": 12, + "created": "2013-12-13T21:51:09.711Z" } }, { - "pk": 451, - "model": "core.node", + "pk": 2, + "model": "core.networkslice", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node68.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 12, + "updated": "2013-12-13T21:53:15.909Z", + "enacted": null, + "network": 13, + "created": "2013-12-13T21:53:15.909Z" } }, { - "pk": 452, - "model": "core.node", + "pk": 3, + "model": "core.networkslice", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node69.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 12, + "updated": "2013-12-13T21:53:15.914Z", + "enacted": null, + "network": 12, + "created": "2013-12-13T21:53:15.914Z" } }, { - "pk": 453, - "model": "core.node", + "pk": 4, + "model": "core.networkslice", "fields": { - "site": 8, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 5, - "name": "node70.stanford.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 13, + "updated": "2013-12-13T21:56:04.235Z", + "enacted": null, + "network": 14, + "created": "2013-12-13T21:56:04.235Z" } }, { - "pk": 454, - "model": "core.node", + "pk": 5, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node1.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 13, + "updated": "2013-12-13T21:56:04.241Z", + "enacted": null, + "network": 12, + "created": "2013-12-13T21:56:04.241Z" } }, { - "pk": 455, - "model": "core.node", + "pk": 6, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node2.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 13, + "updated": "2013-12-13T21:56:04.246Z", + "enacted": null, + "network": 13, + "created": "2013-12-13T21:56:04.246Z" } }, { - "pk": 456, - "model": "core.node", + "pk": 7, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node3.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 14, + "updated": "2013-12-13T21:57:56.826Z", + "enacted": null, + "network": 15, + "created": "2013-12-13T21:57:56.826Z" } }, { - "pk": 457, - "model": "core.node", + "pk": 8, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node4.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 14, + "updated": "2013-12-13T21:57:56.831Z", + "enacted": null, + "network": 13, + "created": "2013-12-13T21:57:56.831Z" } }, { - "pk": 458, - "model": "core.node", + "pk": 9, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node5.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 14, + "updated": "2013-12-13T21:57:56.836Z", + "enacted": null, + "network": 12, + "created": "2013-12-13T21:57:56.836Z" } }, { - "pk": 459, - "model": "core.node", + "pk": 10, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node6.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 15, + "updated": "2013-12-13T22:01:14.038Z", + "enacted": null, + "network": 16, + "created": "2013-12-13T22:01:14.038Z" } }, { - "pk": 460, - "model": "core.node", + "pk": 11, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node7.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 15, + "updated": "2013-12-13T22:01:14.043Z", + "enacted": null, + "network": 14, + "created": "2013-12-13T22:01:14.043Z" } }, { - "pk": 461, - "model": "core.node", + "pk": 12, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node8.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 10, + "updated": "2013-12-18T22:06:00.381Z", + "enacted": null, + "network": 17, + "created": "2013-12-18T22:06:00.381Z" } }, { - "pk": 462, - "model": "core.node", + "pk": 13, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node9.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 10, + "updated": "2013-12-18T22:06:00.386Z", + "enacted": null, + "network": 18, + "created": "2013-12-18T22:06:00.386Z" } }, { - "pk": 463, - "model": "core.node", + "pk": 14, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node10.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 9, + "updated": "2013-12-18T22:13:42.177Z", + "enacted": null, + "network": 19, + "created": "2013-12-18T22:13:42.177Z" } }, { - "pk": 464, - "model": "core.node", + "pk": 15, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node11.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 9, + "updated": "2013-12-18T22:13:42.183Z", + "enacted": null, + "network": 20, + "created": "2013-12-18T22:13:42.183Z" } }, { - "pk": 465, - "model": "core.node", + "pk": 16, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node12.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 8, + "updated": "2013-12-18T22:16:41.007Z", + "enacted": null, + "network": 21, + "created": "2013-12-18T22:16:41.007Z" } }, { - "pk": 466, - "model": "core.node", + "pk": 17, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node13.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 8, + "updated": "2013-12-18T22:16:41.013Z", + "enacted": null, + "network": 22, + "created": "2013-12-18T22:16:41.013Z" } }, { - "pk": 467, - "model": "core.node", + "pk": 18, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node14.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 4, + "updated": "2013-12-18T22:24:44.997Z", + "enacted": null, + "network": 23, + "created": "2013-12-18T22:24:44.997Z" } }, { - "pk": 468, - "model": "core.node", + "pk": 19, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node15.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 4, + "updated": "2013-12-18T22:24:45.003Z", + "enacted": null, + "network": 24, + "created": "2013-12-18T22:24:45.003Z" } }, { - "pk": 469, - "model": "core.node", + "pk": 20, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node16.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 6, + "updated": "2013-12-18T22:27:16.953Z", + "enacted": null, + "network": 25, + "created": "2013-12-18T22:27:16.953Z" } }, { - "pk": 470, - "model": "core.node", + "pk": 21, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node17.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 6, + "updated": "2013-12-18T22:27:16.959Z", + "enacted": null, + "network": 26, + "created": "2013-12-18T22:27:16.959Z" } }, { - "pk": 471, - "model": "core.node", + "pk": 22, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node18.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 6, + "updated": "2013-12-19T00:14:36.949Z", + "enacted": null, + "network": 23, + "created": "2013-12-19T00:14:36.949Z" } }, { - "pk": 472, - "model": "core.node", + "pk": 23, + "model": "core.networkslice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node19.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "slice": 8, + "updated": "2013-12-19T00:15:11.362Z", + "enacted": null, + "network": 23, + "created": "2013-12-19T00:15:11.362Z" } }, { - "pk": 473, - "model": "core.node", + "pk": 1, + "model": "core.networkparametertype", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node20.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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" } }, { - "pk": 474, - "model": "core.node", + "pk": 2, + "model": "core.networkparametertype", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node21.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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" } }, { - "pk": 475, - "model": "core.node", + "pk": 3, + "model": "core.networkparametertype", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node22.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "description": "CIDR block for network", + "updated": "2013-12-09T14:44:05.513Z", + "enacted": null, + "name": "cidr", + "created": "2013-12-09T14:44:05.513Z" } }, { - "pk": 476, - "model": "core.node", + "pk": 14, + "model": "core.account", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node23.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:00.470Z", + "enacted": null, + "site": 10, + "created": "2013-12-18T21:29:00.470Z" } }, { - "pk": 477, - "model": "core.node", + "pk": 15, + "model": "core.account", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node24.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:00.495Z", + "enacted": null, + "site": 22, + "created": "2013-12-18T21:29:00.495Z" } }, -{ - "pk": 478, - "model": "core.node", +{ + "pk": 16, + "model": "core.account", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node25.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:00.502Z", + "enacted": null, + "site": 24, + "created": "2013-12-18T21:29:00.502Z" } }, { - "pk": 479, - "model": "core.node", + "pk": 63, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node26.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 480, - "model": "core.node", + "pk": 64, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node27.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 481, - "model": "core.node", + "pk": 65, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node28.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 482, - "model": "core.node", + "pk": 66, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node29.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 483, - "model": "core.node", + "pk": 67, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node30.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 484, - "model": "core.node", + "pk": 68, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node31.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 485, - "model": "core.node", + "pk": 69, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node32.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 486, - "model": "core.node", + "pk": 70, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node33.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 487, - "model": "core.node", + "pk": 71, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node34.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 488, - "model": "core.node", + "pk": 72, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node35.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 489, - "model": "core.node", + "pk": 73, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node36.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 490, - "model": "core.node", + "pk": 74, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node37.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 491, - "model": "core.node", + "pk": 75, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node38.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 492, - "model": "core.node", + "pk": 76, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node39.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 493, - "model": "core.node", + "pk": 77, + "model": "core.invoice", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node40.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 494, - "model": "core.node", + "pk": 104, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node41.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:00.529Z", + "enacted": null, + "name": "node17.washington.vicci.org", + "created": "2013-12-18T21:29:00.529Z" } }, { - "pk": 495, - "model": "core.node", + "pk": 105, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node42.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:01.289Z", + "enacted": null, + "name": "node16.washington.vicci.org", + "created": "2013-12-18T21:29:01.289Z" } }, { - "pk": 496, - "model": "core.node", + "pk": 106, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node43.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:02.189Z", + "enacted": null, + "name": "node15.washington.vicci.org", + "created": "2013-12-18T21:29:02.189Z" } }, { - "pk": 497, - "model": "core.node", + "pk": 107, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node44.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:03.178Z", + "enacted": null, + "name": "node14.washington.vicci.org", + "created": "2013-12-18T21:29:03.178Z" } }, { - "pk": 498, - "model": "core.node", + "pk": 108, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node45.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:03.942Z", + "enacted": null, + "name": "node70.princeton.vicci.org", + "created": "2013-12-18T21:29:03.942Z" } }, { - "pk": 499, - "model": "core.node", + "pk": 109, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node46.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:04.702Z", + "enacted": null, + "name": "node69.princeton.vicci.org", + "created": "2013-12-18T21:29:04.702Z" } }, { - "pk": 500, - "model": "core.node", + "pk": 110, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node47.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:05.547Z", + "enacted": null, + "name": "node68.princeton.vicci.org", + "created": "2013-12-18T21:29:05.547Z" } }, { - "pk": 501, - "model": "core.node", + "pk": 111, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node48.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:06.336Z", + "enacted": null, + "name": "node67.princeton.vicci.org", + "created": "2013-12-18T21:29:06.336Z" } }, { - "pk": 502, - "model": "core.node", + "pk": 112, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node49.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:07.101Z", + "enacted": null, + "name": "node30.princeton.vicci.org", + "created": "2013-12-18T21:29:07.101Z" } }, { - "pk": 503, - "model": "core.node", + "pk": 113, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node50.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:09.453Z", + "enacted": null, + "name": "node55.stanford.vicci.org", + "created": "2013-12-18T21:29:09.453Z" } }, { - "pk": 504, - "model": "core.node", + "pk": 114, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node51.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:10.216Z", + "enacted": null, + "name": "node12.princeton.vicci.org", + "created": "2013-12-18T21:29:10.216Z" } }, { - "pk": 505, - "model": "core.node", + "pk": 115, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node52.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:10.975Z", + "enacted": null, + "name": "node20.washington.vicci.org", + "created": "2013-12-18T21:29:10.975Z" } }, { - "pk": 506, - "model": "core.node", + "pk": 116, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node53.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:11.729Z", + "enacted": null, + "name": "node1.stanford.vicci.org", + "created": "2013-12-18T21:29:11.729Z" } }, { - "pk": 507, - "model": "core.node", + "pk": 117, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node54.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:12.494Z", + "enacted": null, + "name": "node33.princeton.vicci.org", + "created": "2013-12-18T21:29:12.494Z" } }, { - "pk": 508, - "model": "core.node", + "pk": 118, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node55.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:13.329Z", + "enacted": null, + "name": "node15.princeton.vicci.org", + "created": "2013-12-18T21:29:13.329Z" } }, { - "pk": 509, - "model": "core.node", + "pk": 119, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node56.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:14.083Z", + "enacted": null, + "name": "node23.princeton.vicci.org", + "created": "2013-12-18T21:29:14.083Z" } }, { - "pk": 510, - "model": "core.node", + "pk": 120, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node57.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:14.847Z", + "enacted": null, + "name": "node10.princeton.vicci.org", + "created": "2013-12-18T21:29:14.847Z" } }, { - "pk": 511, - "model": "core.node", + "pk": 121, + "model": "core.usableobject", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node58.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:15.609Z", + "enacted": null, + "name": "node13.princeton.vicci.org", + "created": "2013-12-18T21:29:15.609Z" } }, { - "pk": 512, - "model": "core.node", + "pk": 37, + "model": "core.payment", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node59.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 513, - "model": "core.node", + "pk": 38, + "model": "core.payment", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node60.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 514, - "model": "core.node", + "pk": 39, + "model": "core.payment", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node61.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 515, - "model": "core.node", + "pk": 40, + "model": "core.payment", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node62.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 516, - "model": "core.node", + "pk": 41, + "model": "core.payment", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node63.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 517, - "model": "core.node", + "pk": 42, + "model": "core.payment", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node64.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 518, - "model": "core.node", + "pk": 43, + "model": "core.payment", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node65.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 519, - "model": "core.node", + "pk": 44, + "model": "core.payment", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node66.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 520, - "model": "core.node", + "pk": 45, + "model": "core.payment", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node67.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 521, - "model": "core.node", + "pk": 59761, + "model": "core.charge", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node68.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.186Z", + "slice": 4, + "created": "2013-12-18T21:29:00.540Z", + "amount": 0.3024, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 4.32, + "invoice": 68, + "date": "2013-11-18T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 522, - "model": "core.node", + "pk": 59762, + "model": "core.charge", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node69.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.302Z", + "slice": 4, + "created": "2013-12-18T21:29:00.550Z", + "amount": 0.1176, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 1.68, + "invoice": 69, + "date": "2013-11-19T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 523, - "model": "core.node", + "pk": 59763, + "model": "core.charge", "fields": { - "site": 9, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 6, - "name": "node70.washington.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.409Z", + "slice": 4, + "created": "2013-12-18T21:29:00.558Z", + "amount": 0.2016, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 2.88, + "invoice": 69, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 524, - "model": "core.node", + "pk": 59764, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node1.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.517Z", + "slice": 4, + "created": "2013-12-18T21:29:00.567Z", + "amount": 0.3024, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 4.32, + "invoice": 69, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 525, - "model": "core.node", + "pk": 59765, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node2.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.625Z", + "slice": 4, + "created": "2013-12-18T21:29:00.575Z", + "amount": 0.1848, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 2.64, + "invoice": 69, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 526, - "model": "core.node", + "pk": 59766, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node3.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.732Z", + "slice": 4, + "created": "2013-12-18T21:29:00.583Z", + "amount": 0.3192, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 4.56, + "invoice": 69, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 527, - "model": "core.node", + "pk": 59767, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node4.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.840Z", + "slice": 4, + "created": "2013-12-18T21:29:00.591Z", + "amount": 0.1512, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 2.16, + "invoice": 69, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 528, - "model": "core.node", + "pk": 59768, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node5.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.948Z", + "slice": 4, + "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": 529, - "model": "core.node", + "pk": 59769, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node6.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.055Z", + "slice": 4, + "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": 530, - "model": "core.node", + "pk": 59770, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node7.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.163Z", + "slice": 4, + "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": 531, - "model": "core.node", + "pk": 59771, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node8.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.271Z", + "slice": 4, + "created": "2013-12-18T21:29:00.625Z", + "amount": 0.1288, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 1.84, + "invoice": 69, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 532, - "model": "core.node", + "pk": 59772, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node9.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.378Z", + "slice": 4, + "created": "2013-12-18T21:29:00.633Z", + "amount": 0.336, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 4.8, + "invoice": 69, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 533, - "model": "core.node", + "pk": 59773, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node10.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.486Z", + "slice": 4, + "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": 534, - "model": "core.node", + "pk": 59774, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node11.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 535, - "model": "core.node", + "pk": 59775, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node12.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 536, - "model": "core.node", + "pk": 59776, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node13.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 537, - "model": "core.node", + "pk": 59777, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node14.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.917Z", + "slice": 4, + "created": "2013-12-18T21:29:00.674Z", + "amount": 0.1624, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 2.32, + "invoice": 69, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 538, - "model": "core.node", + "pk": 59778, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node15.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:22.025Z", + "slice": 4, + "created": "2013-12-18T21:29:00.683Z", + "amount": 0.1904, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 2.72, + "invoice": 69, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 539, - "model": "core.node", + "pk": 59779, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node16.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:22.132Z", + "slice": 4, + "created": "2013-12-18T21:29:00.691Z", + "amount": 0.1624, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 2.32, + "invoice": 69, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 540, - "model": "core.node", + "pk": 59780, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node17.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:22.248Z", + "slice": 4, + "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": 541, - "model": "core.node", + "pk": 59781, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node18.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 542, - "model": "core.node", + "pk": 59782, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node19.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 543, - "model": "core.node", + "pk": 59783, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node20.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 544, - "model": "core.node", + "pk": 59784, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node21.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 545, - "model": "core.node", + "pk": 59785, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node22.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:22.828Z", + "slice": 4, + "created": "2013-12-18T21:29:00.741Z", + "amount": 0.1792, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 2.56, + "invoice": 70, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 546, - "model": "core.node", + "pk": 59786, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node23.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:22.936Z", + "slice": 4, + "created": "2013-12-18T21:29:00.749Z", + "amount": 0.1736, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 2.48, + "invoice": 70, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 547, - "model": "core.node", + "pk": 59787, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node24.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:23.043Z", + "slice": 4, + "created": "2013-12-18T21:29:00.757Z", + "amount": 0.1512, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 2.16, + "invoice": 70, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 548, - "model": "core.node", + "pk": 59788, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node25.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:23.151Z", + "slice": 4, + "created": "2013-12-18T21:29:00.766Z", + "amount": 0.1288, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 1.84, + "invoice": 70, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 549, - "model": "core.node", + "pk": 59789, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node26.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:23.259Z", + "slice": 4, + "created": "2013-12-18T21:29:00.774Z", + "amount": 0.2408, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 3.44, + "invoice": 70, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 550, - "model": "core.node", + "pk": 59790, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node27.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:23.367Z", + "slice": 4, + "created": "2013-12-18T21:29:00.782Z", + "amount": 0.1344, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 1.92, + "invoice": 70, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 551, - "model": "core.node", + "pk": 59791, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node28.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:23.474Z", + "slice": 4, + "created": "2013-12-18T21:29:00.790Z", + "amount": 0.2184, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 3.12, + "invoice": 70, + "date": "2013-11-28T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 552, - "model": "core.node", + "pk": 59792, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node29.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:23.582Z", + "slice": 4, + "created": "2013-12-18T21:29:00.799Z", + "amount": 0.308, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 4.4, + "invoice": 70, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 553, - "model": "core.node", + "pk": 59793, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node30.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:23.690Z", + "slice": 4, + "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": 554, - "model": "core.node", + "pk": 59794, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node31.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 555, - "model": "core.node", + "pk": 59796, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node32.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 556, - "model": "core.node", + "pk": 59797, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node33.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 557, - "model": "core.node", + "pk": 59798, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node34.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 558, - "model": "core.node", + "pk": 59799, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node35.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 559, - "model": "core.node", + "pk": 59800, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node36.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 560, - "model": "core.node", + "pk": 59801, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node37.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 561, - "model": "core.node", + "pk": 59802, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node38.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 562, - "model": "core.node", + "pk": 59803, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node39.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 563, - "model": "core.node", + "pk": 59804, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node40.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 564, - "model": "core.node", + "pk": 59805, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node41.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 565, - "model": "core.node", + "pk": 59806, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node42.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 566, - "model": "core.node", + "pk": 59807, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node43.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 567, - "model": "core.node", + "pk": 59808, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node44.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 568, - "model": "core.node", + "pk": 59809, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node45.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 569, - "model": "core.node", + "pk": 59810, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node46.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 570, - "model": "core.node", + "pk": 59811, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node47.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 571, - "model": "core.node", + "pk": 59812, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node48.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:25.744Z", + "slice": 4, + "created": "2013-12-18T21:29:00.964Z", + "amount": 0.2128, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 3.04, + "invoice": 71, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 572, - "model": "core.node", + "pk": 59813, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node49.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:25.852Z", + "slice": 4, + "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": 573, - "model": "core.node", + "pk": 59814, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node50.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:25.959Z", + "slice": 4, + "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": 574, - "model": "core.node", + "pk": 59815, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node51.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 575, - "model": "core.node", + "pk": 59816, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node52.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 576, - "model": "core.node", + "pk": 59817, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node53.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 577, - "model": "core.node", + "pk": 59818, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node54.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 578, - "model": "core.node", + "pk": 59819, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node55.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 579, - "model": "core.node", + "pk": 59820, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node56.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 580, - "model": "core.node", + "pk": 59821, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node57.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 581, - "model": "core.node", + "pk": 59822, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node58.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 582, - "model": "core.node", + "pk": 59823, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node59.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 583, - "model": "core.node", + "pk": 59824, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node60.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 584, - "model": "core.node", + "pk": 59825, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node61.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:27.152Z", + "slice": 4, + "created": "2013-12-18T21:29:01.072Z", + "amount": 0.2632, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 3.76, + "invoice": 72, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 585, - "model": "core.node", + "pk": 59826, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node62.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:27.260Z", + "slice": 4, + "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": 586, - "model": "core.node", + "pk": 59827, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node63.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:27.368Z", + "slice": 4, + "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": 587, - "model": "core.node", + "pk": 59828, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node64.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:27.475Z", + "slice": 4, + "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": 588, - "model": "core.node", + "pk": 59829, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node65.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:27.641Z", + "slice": 4, + "created": "2013-12-18T21:29:01.105Z", + "amount": 0.1456, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 2.08, + "invoice": 72, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 589, - "model": "core.node", + "pk": 59830, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node66.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:27.749Z", + "slice": 4, + "created": "2013-12-18T21:29:01.113Z", + "amount": 0.2296, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 3.28, + "invoice": 72, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 590, - "model": "core.node", + "pk": 59831, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node67.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:27.856Z", + "slice": 4, + "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": 591, - "model": "core.node", + "pk": 59832, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node68.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:27.964Z", + "slice": 4, + "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": 592, - "model": "core.node", + "pk": 59833, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node69.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 593, - "model": "core.node", + "pk": 59834, + "model": "core.charge", "fields": { - "site": 10, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 7, - "name": "node70.princeton.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 594, - "model": "core.node", + "pk": 59835, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node1.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 595, - "model": "core.node", + "pk": 59836, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node2.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:28.395Z", + "slice": 4, + "created": "2013-12-18T21:29:01.163Z", + "amount": 0.2688, + "object": 104, + "account": 15, + "state": "invoiced", + "coreHours": 3.84, + "invoice": 72, + "date": "2013-12-13T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 596, - "model": "core.node", + "pk": 59837, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node3.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:28.503Z", + "slice": 4, + "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": 597, - "model": "core.node", + "pk": 59839, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node4.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 598, - "model": "core.node", + "pk": 59840, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node5.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 599, - "model": "core.node", + "pk": 59841, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node6.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 600, - "model": "core.node", + "pk": 59842, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node7.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 601, - "model": "core.node", + "pk": 59843, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node8.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 2.8, + "invoice": null, + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 602, - "model": "core.node", + "pk": 59844, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node9.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:01.230Z", + "slice": 4, + "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": 603, - "model": "core.node", + "pk": 59845, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node10.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 604, - "model": "core.node", + "pk": 59846, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node11.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 605, - "model": "core.node", + "pk": 59847, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node12.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:01.254Z", + "slice": 4, + "created": "2013-12-18T21:29:01.254Z", + "amount": 0.3248, + "object": 104, + "account": 15, + "state": "pending", + "coreHours": 4.64, + "invoice": null, + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 606, - "model": "core.node", + "pk": 59848, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node13.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:01.263Z", + "slice": 4, + "created": "2013-12-18T21:29:01.263Z", + "amount": 0.28, + "object": 104, + "account": 15, + "state": "pending", + "coreHours": 4.0, + "invoice": null, + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 607, - "model": "core.node", + "pk": 59849, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node14.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:01.271Z", + "slice": 4, + "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": 608, - "model": "core.node", + "pk": 59850, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node15.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 609, - "model": "core.node", + "pk": 59851, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node16.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 2.08, + "invoice": 69, + "date": "2013-11-18T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 610, - "model": "core.node", + "pk": 59852, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node17.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.310Z", + "slice": 4, + "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": 611, - "model": "core.node", + "pk": 59853, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node18.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 612, - "model": "core.node", + "pk": 59854, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node19.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 613, - "model": "core.node", + "pk": 59855, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node20.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 614, - "model": "core.node", + "pk": 59856, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node21.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.741Z", + "slice": 4, + "created": "2013-12-18T21:29:01.337Z", + "amount": 0.168, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 2.4, + "invoice": 69, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 615, - "model": "core.node", + "pk": 59857, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node22.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.848Z", + "slice": 4, + "created": "2013-12-18T21:29:01.345Z", + "amount": 0.1792, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 2.56, + "invoice": 69, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 616, - "model": "core.node", + "pk": 59858, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node23.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:20.956Z", + "slice": 4, + "created": "2013-12-18T21:29:01.353Z", + "amount": 0.2912, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 4.16, + "invoice": 69, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 617, - "model": "core.node", + "pk": 59859, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node24.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.064Z", + "slice": 4, + "created": "2013-12-18T21:29:01.362Z", + "amount": 0.2184, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 3.12, + "invoice": 69, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 618, - "model": "core.node", + "pk": 59860, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node25.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.171Z", + "slice": 4, + "created": "2013-12-18T21:29:01.370Z", + "amount": 0.14, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 2.0, + "invoice": 69, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 619, - "model": "core.node", + "pk": 59861, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node26.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.279Z", + "slice": 4, + "created": "2013-12-18T21:29:01.378Z", + "amount": 0.3248, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 4.64, + "invoice": 69, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 620, - "model": "core.node", + "pk": 59862, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node27.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.387Z", + "slice": 4, + "created": "2013-12-18T21:29:01.387Z", + "amount": 0.1904, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 2.72, + "invoice": 69, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 621, - "model": "core.node", + "pk": 59863, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node28.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.494Z", + "slice": 4, + "created": "2013-12-18T21:29:01.395Z", + "amount": 0.2632, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 3.76, + "invoice": 69, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 622, - "model": "core.node", + "pk": 59864, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node29.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.602Z", + "slice": 4, + "created": "2013-12-18T21:29:01.403Z", + "amount": 0.336, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 4.8, + "invoice": 69, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 623, - "model": "core.node", + "pk": 59865, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node30.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.710Z", + "slice": 4, + "created": "2013-12-18T21:29:01.412Z", + "amount": 0.2688, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 3.84, + "invoice": 69, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 624, - "model": "core.node", + "pk": 59866, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node31.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.818Z", + "slice": 4, + "created": "2013-12-18T21:29:01.420Z", + "amount": 0.2352, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 3.36, + "invoice": 69, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 625, - "model": "core.node", + "pk": 59867, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node32.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:21.925Z", + "slice": 4, + "created": "2013-12-18T21:29:01.428Z", + "amount": 0.2128, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 3.04, + "invoice": 69, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 626, - "model": "core.node", + "pk": 59868, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node33.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:22.033Z", + "slice": 4, + "created": "2013-12-18T21:29:01.436Z", + "amount": 0.196, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 2.8, + "invoice": 69, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 627, - "model": "core.node", + "pk": 59869, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node34.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:22.141Z", + "slice": 4, + "created": "2013-12-18T21:29:01.445Z", + "amount": 0.1792, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 2.56, + "invoice": 69, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 628, - "model": "core.node", + "pk": 59870, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node35.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:22.257Z", + "slice": 4, + "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": 629, - "model": "core.node", + "pk": 59871, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node36.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 630, - "model": "core.node", + "pk": 59872, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node37.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:22.472Z", + "slice": 4, + "created": "2013-12-18T21:29:01.470Z", + "amount": 0.112, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 1.6, + "invoice": 70, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 631, - "model": "core.node", + "pk": 59873, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node38.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:22.621Z", + "slice": 4, + "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": 632, - "model": "core.node", + "pk": 59874, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node39.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 633, - "model": "core.node", + "pk": 59875, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node40.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 634, - "model": "core.node", + "pk": 59876, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node41.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 635, - "model": "core.node", + "pk": 59877, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node42.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 636, - "model": "core.node", + "pk": 59878, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node43.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:23.160Z", + "slice": 4, + "created": "2013-12-18T21:29:01.519Z", + "amount": 0.2072, + "object": 105, + "account": 15, + "state": "invoiced", + "coreHours": 2.96, + "invoice": 70, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 637, - "model": "core.node", + "pk": 59879, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node44.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 638, - "model": "core.node", + "pk": 59881, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node45.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 639, - "model": "core.node", + "pk": 59882, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node46.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 640, - "model": "core.node", + "pk": 59883, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node47.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 641, - "model": "core.node", + "pk": 59884, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node48.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 642, - "model": "core.node", + "pk": 59885, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node49.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 643, - "model": "core.node", + "pk": 59886, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node50.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 644, - "model": "core.node", + "pk": 59887, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node51.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 645, - "model": "core.node", + "pk": 59888, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node52.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 646, - "model": "core.node", + "pk": 59889, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node53.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 647, - "model": "core.node", + "pk": 59890, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node54.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 648, - "model": "core.node", + "pk": 59891, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node55.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 649, - "model": "core.node", + "pk": 59892, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node56.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 650, - "model": "core.node", + "pk": 59893, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node57.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 651, - "model": "core.node", + "pk": 59894, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node58.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 652, - "model": "core.node", + "pk": 59895, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node59.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 653, - "model": "core.node", + "pk": 59896, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node60.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 654, - "model": "core.node", + "pk": 59897, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node61.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 655, - "model": "core.node", + "pk": 59898, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node62.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 656, - "model": "core.node", + "pk": 59899, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node63.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 657, - "model": "core.node", + "pk": 59900, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node64.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 658, - "model": "core.node", + "pk": 59901, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node65.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 659, - "model": "core.node", + "pk": 59902, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node66.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 660, - "model": "core.node", + "pk": 59903, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node67.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 661, - "model": "core.node", + "pk": 59904, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node68.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 662, - "model": "core.node", + "pk": 59905, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node69.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 663, - "model": "core.node", + "pk": 59906, + "model": "core.charge", "fields": { - "site": 11, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 8, - "name": "node70.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 664, - "model": "core.node", + "pk": 59907, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node1.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 665, - "model": "core.node", + "pk": 59908, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node2.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 666, - "model": "core.node", + "pk": 59909, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node3.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 667, - "model": "core.node", + "pk": 59910, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node4.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 668, - "model": "core.node", + "pk": 59911, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node5.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 669, - "model": "core.node", + "pk": 59912, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node6.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 670, - "model": "core.node", + "pk": 59913, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node7.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 671, - "model": "core.node", + "pk": 59914, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node8.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 672, - "model": "core.node", + "pk": 59915, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node9.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 673, - "model": "core.node", + "pk": 59916, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node10.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 674, - "model": "core.node", + "pk": 59917, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node11.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 675, - "model": "core.node", + "pk": 59918, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node12.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 676, - "model": "core.node", + "pk": 59919, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node13.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 677, - "model": "core.node", + "pk": 59920, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node14.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 678, - "model": "core.node", + "pk": 59921, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node15.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 679, - "model": "core.node", + "pk": 59922, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node16.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 680, - "model": "core.node", + "pk": 59924, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node17.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 681, - "model": "core.node", + "pk": 59925, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node18.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 682, - "model": "core.node", + "pk": 59926, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node19.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 683, - "model": "core.node", + "pk": 59927, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node20.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 684, - "model": "core.node", + "pk": 59928, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node21.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 685, - "model": "core.node", + "pk": 59929, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node22.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 686, - "model": "core.node", + "pk": 59930, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node23.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 687, - "model": "core.node", + "pk": 59931, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node24.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 688, - "model": "core.node", + "pk": 59932, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node25.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 689, - "model": "core.node", + "pk": 59933, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node26.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 690, - "model": "core.node", + "pk": 59934, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node27.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:02.116Z", + "slice": 4, + "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": 691, - "model": "core.node", + "pk": 59935, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node28.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 692, - "model": "core.node", + "pk": 59936, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node29.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 693, - "model": "core.node", + "pk": 59937, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node30.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 694, - "model": "core.node", + "pk": 59938, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node31.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 695, - "model": "core.node", + "pk": 59939, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node32.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 696, - "model": "core.node", + "pk": 59940, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node33.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 697, - "model": "core.node", + "pk": 59941, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node34.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 698, - "model": "core.node", + "pk": 59942, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node35.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 699, - "model": "core.node", + "pk": 59943, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node36.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 700, - "model": "core.node", + "pk": 59944, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node37.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 701, - "model": "core.node", + "pk": 59945, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node38.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 702, - "model": "core.node", + "pk": 59946, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node39.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 703, - "model": "core.node", + "pk": 59947, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node40.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 704, - "model": "core.node", + "pk": 59948, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node41.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 705, - "model": "core.node", + "pk": 59949, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node42.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 706, - "model": "core.node", + "pk": 59950, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node43.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 707, - "model": "core.node", + "pk": 59951, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node44.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 708, - "model": "core.node", + "pk": 59952, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node45.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 709, - "model": "core.node", + "pk": 59953, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node46.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 710, - "model": "core.node", + "pk": 59954, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node47.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 711, - "model": "core.node", + "pk": 59955, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node48.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 712, - "model": "core.node", + "pk": 59956, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node49.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 713, - "model": "core.node", + "pk": 59957, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node50.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 714, - "model": "core.node", + "pk": 59958, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node51.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 715, - "model": "core.node", + "pk": 59959, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node52.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 716, - "model": "core.node", + "pk": 59960, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node53.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 717, - "model": "core.node", + "pk": 59961, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node54.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "updated": "2013-12-18T21:29:22.372Z", + "slice": 4, + "created": "2013-12-18T21:29:02.596Z", + "amount": 0.2464, + "object": 106, + "account": 15, + "state": "invoiced", + "coreHours": 3.52, + "invoice": 70, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 718, - "model": "core.node", + "pk": 59962, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node55.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 719, - "model": "core.node", + "pk": 59963, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node56.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 720, - "model": "core.node", + "pk": 59964, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node57.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 721, - "model": "core.node", + "pk": 59966, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node58.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 722, - "model": "core.node", + "pk": 59967, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node59.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 723, - "model": "core.node", + "pk": 59968, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node60.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 724, - "model": "core.node", + "pk": 59969, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node61.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 725, - "model": "core.node", + "pk": 59970, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node62.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 726, - "model": "core.node", + "pk": 59971, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node63.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 727, - "model": "core.node", + "pk": 59972, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node64.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 728, - "model": "core.node", + "pk": 59973, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node65.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 729, - "model": "core.node", + "pk": 59974, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node66.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 730, - "model": "core.node", + "pk": 59975, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node67.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 731, - "model": "core.node", + "pk": 59976, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node68.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 732, - "model": "core.node", + "pk": 59977, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node69.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 733, - "model": "core.node", + "pk": 59978, + "model": "core.charge", "fields": { - "site": 12, - "updated": "2013-06-21T21:17:13.982Z", - "deployment": 9, - "name": "node70.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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": 734, - "model": "core.node", + "pk": 59979, + "model": "core.charge", "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" + "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": 735, - "model": "core.node", + "pk": 59980, + "model": "core.charge", "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" + "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": 736, - "model": "core.node", + "pk": 59981, + "model": "core.charge", "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" + "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": 737, - "model": "core.node", + "pk": 59982, + "model": "core.charge", "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" + "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": 738, - "model": "core.node", + "pk": 59983, + "model": "core.charge", "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" + "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": 739, - "model": "core.node", + "pk": 59984, + "model": "core.charge", "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" + "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": 740, - "model": "core.node", + "pk": 59985, + "model": "core.charge", "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" + "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": 741, - "model": "core.node", + "pk": 59986, + "model": "core.charge", "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" + "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": 742, - "model": "core.node", + "pk": 59987, + "model": "core.charge", "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" + "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": 743, - "model": "core.node", + "pk": 59988, + "model": "core.charge", "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" + "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": 744, - "model": "core.node", + "pk": 59989, + "model": "core.charge", "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" + "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": 745, - "model": "core.node", + "pk": 59990, + "model": "core.charge", "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" + "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": 746, - "model": "core.node", + "pk": 59991, + "model": "core.charge", "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" + "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": 747, - "model": "core.node", + "pk": 59992, + "model": "core.charge", "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" + "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": 748, - "model": "core.node", + "pk": 59993, + "model": "core.charge", "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" + "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": 749, - "model": "core.node", + "pk": 59994, + "model": "core.charge", "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" + "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": 750, - "model": "core.node", + "pk": 59995, + "model": "core.charge", "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" + "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": 751, - "model": "core.node", + "pk": 59996, + "model": "core.charge", "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" + "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": 752, - "model": "core.node", + "pk": 59997, + "model": "core.charge", "fields": { - "site": 23, - "updated": "2013-12-17T17:10:48.740Z", - "deployment": 10, - "name": "opencloud0.sing.internet2.edu", - "created": "2013-12-17T17:10:48.740Z" + "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": 753, - "model": "core.node", + "pk": 59998, + "model": "core.charge", "fields": { - "site": 23, - "updated": "2013-12-17T17:10:48.742Z", - "deployment": 10, - "name": "opencloud1.sing.internet2.edu", - "created": "2013-12-17T17:10:48.741Z" + "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": 754, - "model": "core.node", + "pk": 59999, + "model": "core.charge", "fields": { - "site": 23, - "updated": "2013-12-17T17:10:48.742Z", - "deployment": 10, - "name": "opencloud2.sing.internet2.edu", - "created": "2013-12-17T17:10:48.742Z" + "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": 755, - "model": "core.node", + "pk": 60000, + "model": "core.charge", "fields": { - "site": 23, - "updated": "2013-12-17T17:10:48.743Z", - "deployment": 10, - "name": "opencloud3.sing.internet2.edu", - "created": "2013-12-17T17:10:48.743Z" + "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": 4, - "model": "core.serviceresource", + "pk": 60001, + "model": "core.charge", "fields": { - "updated": "2013-12-11T22:18:00.040Z", - "name": "Cycles", - "bucketMaxSize": 0, - "created": "2013-12-11T22:18:00.040Z", - "serviceClass": 1, - "maxUnitsDeployment": 0, - "bucketInRate": 0, - "cost": 7, - "calendarReservable": false, - "maxDuration": 0, - "maxUnitsNode": 0 + "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": 5, - "model": "core.serviceresource", + "pk": 60002, + "model": "core.charge", "fields": { - "updated": "2013-12-11T22:18:00.045Z", - "name": "Cycles", - "bucketMaxSize": 0, - "created": "2013-12-11T22:18:00.045Z", - "serviceClass": 2, - "maxUnitsDeployment": 0, - "bucketInRate": 0, - "cost": 7, - "calendarReservable": false, - "maxDuration": 0, - "maxUnitsNode": 0 + "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": 6, - "model": "core.serviceresource", + "pk": 60003, + "model": "core.charge", "fields": { - "updated": "2013-12-11T22:18:00.053Z", - "name": "Cycles", - "bucketMaxSize": 0, - "created": "2013-12-11T22:18:00.053Z", - "serviceClass": 3, - "maxUnitsDeployment": 0, - "bucketInRate": 0, - "cost": 7, - "calendarReservable": false, - "maxDuration": 0, - "maxUnitsNode": 0 + "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": 7, - "model": "core.serviceresource", + "pk": 60004, + "model": "core.charge", "fields": { - "updated": "2013-12-11T22:18:00.064Z", - "name": "numberCores", - "bucketMaxSize": 0, - "created": "2013-12-11T22:18:00.064Z", - "serviceClass": 3, - "maxUnitsDeployment": 210, - "bucketInRate": 0, - "cost": 0, - "calendarReservable": true, - "maxDuration": 8760, - "maxUnitsNode": 6 + "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": 8, - "model": "core.serviceresource", + "pk": 60005, + "model": "core.charge", "fields": { - "updated": "2013-12-11T22:18:00.072Z", - "name": "numberCores", - "bucketMaxSize": 210, - "created": "2013-12-11T22:18:00.072Z", - "serviceClass": 2, - "maxUnitsDeployment": 210, - "bucketInRate": 10, - "cost": 7, - "calendarReservable": true, - "maxDuration": 168, - "maxUnitsNode": 6 + "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": 40, - "model": "core.sliver", + "pk": 60006, + "model": "core.charge", "fields": { - "node": 613, - "instance_name": "instance-000003e8", - "updated": "2013-12-12T17:55:32.455Z", + "updated": "2013-12-18T21:29:27.277Z", "slice": 4, - "deploymentNetwork": 8, - "name": "node20.gt.vicci.org", - "created": "2013-12-12T17:55:32.455Z", - "ip": "130.207.98.29", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 41, - "model": "core.sliver", + "pk": 60007, + "model": "core.charge", "fields": { - "node": 615, - "instance_name": "instance-000003e9", - "updated": "2013-12-12T17:55:32.478Z", + "updated": "2013-12-18T21:29:27.384Z", "slice": 4, - "deploymentNetwork": 8, - "name": "node22.gt.vicci.org", - "created": "2013-12-12T17:55:32.478Z", - "ip": "130.207.98.31", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 42, - "model": "core.sliver", + "pk": 60008, + "model": "core.charge", "fields": { - "node": 617, - "instance_name": "instance-000003ea", - "updated": "2013-12-12T17:55:32.495Z", + "updated": "2013-12-18T21:29:27.492Z", "slice": 4, - "deploymentNetwork": 8, - "name": "node24.gt.vicci.org", - "created": "2013-12-12T17:55:32.495Z", - "ip": "130.207.98.33", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 43, - "model": "core.sliver", + "pk": 60009, + "model": "core.charge", "fields": { - "node": 622, - "instance_name": "instance-000003eb", - "updated": "2013-12-12T17:55:32.512Z", + "updated": "2013-12-18T21:29:27.658Z", "slice": 4, - "deploymentNetwork": 8, - "name": "node29.gt.vicci.org", - "created": "2013-12-12T17:55:32.511Z", - "ip": "130.207.98.38", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 44, - "model": "core.sliver", + "pk": 60010, + "model": "core.charge", "fields": { - "node": 623, - "instance_name": "instance-000003ec", - "updated": "2013-12-12T17:55:32.528Z", + "updated": "2013-12-18T21:29:27.765Z", "slice": 4, - "deploymentNetwork": 8, - "name": "node30.gt.vicci.org", - "created": "2013-12-12T17:55:32.528Z", - "ip": "130.207.98.39", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 45, - "model": "core.sliver", + "pk": 60011, + "model": "core.charge", "fields": { - "node": 624, - "instance_name": "instance-000003ed", - "updated": "2013-12-12T17:55:32.544Z", + "updated": "2013-12-18T21:29:27.873Z", "slice": 4, - "deploymentNetwork": 8, - "name": "node31.gt.vicci.org", - "created": "2013-12-12T17:55:32.544Z", - "ip": "130.207.98.40", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 46, - "model": "core.sliver", + "pk": 60012, + "model": "core.charge", "fields": { - "node": 625, - "instance_name": "instance-000003ee", - "updated": "2013-12-12T17:55:32.561Z", + "updated": "2013-12-18T21:29:27.981Z", "slice": 4, - "deploymentNetwork": 8, - "name": "node32.gt.vicci.org", - "created": "2013-12-12T17:55:32.561Z", - "ip": "130.207.98.41", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 47, - "model": "core.sliver", + "pk": 60013, + "model": "core.charge", "fields": { - "node": 630, - "instance_name": "instance-000003ef", - "updated": "2013-12-12T17:55:32.577Z", + "updated": "2013-12-18T21:29:28.088Z", "slice": 4, - "deploymentNetwork": 8, - "name": "node37.gt.vicci.org", - "created": "2013-12-12T17:55:32.577Z", - "ip": "130.207.98.46", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 48, - "model": "core.sliver", + "pk": 60014, + "model": "core.charge", "fields": { - "node": 666, - "instance_name": "instance-000003f0", - "updated": "2013-12-12T17:55:32.594Z", + "updated": "2013-12-18T21:29:28.196Z", "slice": 4, - "deploymentNetwork": 9, - "name": "node3.mpisws.vicci.org", - "created": "2013-12-12T17:55:32.594Z", - "ip": "141.39.220.13", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 49, - "model": "core.sliver", + "pk": 60015, + "model": "core.charge", "fields": { - "node": 683, - "instance_name": "instance-000003f1", - "updated": "2013-12-12T17:55:32.611Z", + "updated": "2013-12-18T21:29:28.304Z", "slice": 4, - "deploymentNetwork": 9, - "name": "node20.mpisws.vicci.org", - "created": "2013-12-12T17:55:32.610Z", - "ip": "141.39.220.30", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 50, - "model": "core.sliver", + "pk": 60016, + "model": "core.charge", "fields": { - "node": 684, - "instance_name": "instance-000003f2", - "updated": "2013-12-12T17:55:32.627Z", + "updated": "2013-12-18T21:29:28.411Z", "slice": 4, - "deploymentNetwork": 9, - "name": "node21.mpisws.vicci.org", - "created": "2013-12-12T17:55:32.627Z", - "ip": "141.39.220.31", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 51, - "model": "core.sliver", + "pk": 60017, + "model": "core.charge", "fields": { - "node": 686, - "instance_name": "instance-000003f3", - "updated": "2013-12-12T17:55:32.644Z", + "updated": "2013-12-18T21:29:28.519Z", "slice": 4, - "deploymentNetwork": 9, - "name": "node23.mpisws.vicci.org", - "created": "2013-12-12T17:55:32.644Z", - "ip": "141.39.220.33", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 52, - "model": "core.sliver", + "pk": 60018, + "model": "core.charge", "fields": { - "node": 687, - "instance_name": "instance-000003f4", - "updated": "2013-12-12T17:55:32.660Z", + "updated": "2013-12-18T21:29:28.627Z", "slice": 4, - "deploymentNetwork": 9, - "name": "node24.mpisws.vicci.org", - "created": "2013-12-12T17:55:32.660Z", - "ip": "141.39.220.34", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 53, - "model": "core.sliver", + "pk": 60019, + "model": "core.charge", "fields": { - "node": 691, - "instance_name": "instance-000003f5", - "updated": "2013-12-12T17:55:32.677Z", + "updated": "2013-12-18T21:29:28.735Z", "slice": 4, - "deploymentNetwork": 9, - "name": "node28.mpisws.vicci.org", - "created": "2013-12-12T17:55:32.677Z", - "ip": "141.39.220.38", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 54, - "model": "core.sliver", - "fields": { - "node": 693, - "instance_name": "instance-000003f6", - "updated": "2013-12-12T17:55:32.693Z", - "slice": 4, - "deploymentNetwork": 9, - "name": "node30.mpisws.vicci.org", - "created": "2013-12-12T17:55:32.693Z", - "ip": "141.39.220.40", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": 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": 55, - "model": "core.sliver", + "pk": 60021, + "model": "core.charge", "fields": { - "node": 694, - "instance_name": "instance-000003f7", - "updated": "2013-12-12T17:55:32.710Z", + "updated": "2013-12-18T21:29:28.950Z", "slice": 4, - "deploymentNetwork": 9, - "name": "node31.mpisws.vicci.org", - "created": "2013-12-12T17:55:32.710Z", - "ip": "141.39.220.41", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 56, - "model": "core.sliver", + "pk": 60022, + "model": "core.charge", "fields": { - "node": 559, - "instance_name": "instance-000003f8", - "updated": "2013-12-12T17:55:32.726Z", + "updated": "2013-12-18T21:29:29.058Z", "slice": 4, - "deploymentNetwork": 7, - "name": "node36.princeton.vicci.org", - "created": "2013-12-12T17:55:32.726Z", - "ip": "128.112.171.90", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 57, - "model": "core.sliver", + "pk": 60023, + "model": "core.charge", "fields": { - "node": 560, - "instance_name": "instance-000003f9", - "updated": "2013-12-12T17:55:32.743Z", + "updated": "2013-12-18T21:29:03.110Z", "slice": 4, - "deploymentNetwork": 7, - "name": "node37.princeton.vicci.org", - "created": "2013-12-12T17:55:32.743Z", - "ip": "128.112.171.92", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 58, - "model": "core.sliver", + "pk": 60024, + "model": "core.charge", "fields": { - "node": 561, - "instance_name": "instance-000003fa", - "updated": "2013-12-12T17:55:32.760Z", + "updated": "2013-12-18T21:29:03.118Z", "slice": 4, - "deploymentNetwork": 7, - "name": "node38.princeton.vicci.org", - "created": "2013-12-12T17:55:32.759Z", - "ip": "128.112.171.94", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 59, - "model": "core.sliver", + "pk": 60025, + "model": "core.charge", "fields": { - "node": 562, - "instance_name": "instance-000003fb", - "updated": "2013-12-12T17:55:32.776Z", + "updated": "2013-12-18T21:29:03.126Z", "slice": 4, - "deploymentNetwork": 7, - "name": "node39.princeton.vicci.org", - "created": "2013-12-12T17:55:32.776Z", - "ip": "128.112.171.96", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 60, - "model": "core.sliver", + "pk": 60026, + "model": "core.charge", "fields": { - "node": 563, - "instance_name": "instance-000003fc", - "updated": "2013-12-12T17:55:32.792Z", + "updated": "2013-12-18T21:29:03.134Z", "slice": 4, - "deploymentNetwork": 7, - "name": "node40.princeton.vicci.org", - "created": "2013-12-12T17:55:32.792Z", - "ip": "128.112.171.98", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "created": "2013-12-18T21:29:03.134Z", + "amount": 0.2464, + "object": 106, + "account": 15, + "state": "pending", + "coreHours": 3.52, + "invoice": null, + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 61, - "model": "core.sliver", + "pk": 60027, + "model": "core.charge", "fields": { - "node": 565, - "instance_name": "instance-000003fd", - "updated": "2013-12-12T17:55:32.809Z", + "updated": "2013-12-18T21:29:03.143Z", "slice": 4, - "deploymentNetwork": 7, - "name": "node42.princeton.vicci.org", - "created": "2013-12-12T17:55:32.809Z", - "ip": "128.112.171.102", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "created": "2013-12-18T21:29:03.143Z", + "amount": 0.2408, + "object": 106, + "account": 15, + "state": "pending", + "coreHours": 3.44, + "invoice": null, + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 62, - "model": "core.sliver", + "pk": 60028, + "model": "core.charge", "fields": { - "node": 566, - "instance_name": "instance-000003fe", - "updated": "2013-12-12T17:55:32.826Z", + "updated": "2013-12-18T21:29:03.151Z", "slice": 4, - "deploymentNetwork": 7, - "name": "node43.princeton.vicci.org", - "created": "2013-12-12T17:55:32.826Z", - "ip": "128.112.171.104", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 63, - "model": "core.sliver", + "pk": 60029, + "model": "core.charge", "fields": { - "node": 568, - "instance_name": "instance-000003ff", - "updated": "2013-12-12T17:55:32.842Z", + "updated": "2013-12-18T21:29:03.160Z", "slice": 4, - "deploymentNetwork": 7, - "name": "node45.princeton.vicci.org", - "created": "2013-12-12T17:55:32.842Z", - "ip": "128.112.171.108", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 64, - "model": "core.sliver", + "pk": 60030, + "model": "core.charge", "fields": { - "node": 404, - "instance_name": "instance-00000400", - "updated": "2013-12-12T17:55:32.859Z", + "updated": "2013-12-18T21:29:03.168Z", "slice": 4, - "deploymentNetwork": 5, - "name": "node21.stanford.vicci.org", - "created": "2013-12-12T17:55:32.859Z", - "ip": "171.67.92.159", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 65, - "model": "core.sliver", + "pk": 60031, + "model": "core.charge", "fields": { - "node": 405, - "instance_name": "instance-00000401", - "updated": "2013-12-12T17:55:32.875Z", + "updated": "2013-12-18T21:29:20.219Z", "slice": 4, - "deploymentNetwork": 5, - "name": "node22.stanford.vicci.org", - "created": "2013-12-12T17:55:32.875Z", - "ip": "171.67.92.160", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 66, - "model": "core.sliver", + "pk": 60032, + "model": "core.charge", "fields": { - "node": 406, - "instance_name": "instance-00000402", - "updated": "2013-12-12T17:55:32.892Z", + "updated": "2013-12-18T21:29:20.326Z", "slice": 4, - "deploymentNetwork": 5, - "name": "node23.stanford.vicci.org", - "created": "2013-12-12T17:55:32.892Z", - "ip": "171.67.92.161", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 67, - "model": "core.sliver", + "pk": 60033, + "model": "core.charge", "fields": { - "node": 407, - "instance_name": "instance-00000403", - "updated": "2013-12-12T17:55:32.909Z", + "updated": "2013-12-18T21:29:20.434Z", "slice": 4, - "deploymentNetwork": 5, - "name": "node24.stanford.vicci.org", - "created": "2013-12-12T17:55:32.909Z", - "ip": "171.67.92.162", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 68, - "model": "core.sliver", + "pk": 60034, + "model": "core.charge", "fields": { - "node": 408, - "instance_name": "instance-00000404", - "updated": "2013-12-12T17:55:32.925Z", + "updated": "2013-12-18T21:29:20.542Z", "slice": 4, - "deploymentNetwork": 5, - "name": "node25.stanford.vicci.org", - "created": "2013-12-12T17:55:32.925Z", - "ip": "171.67.92.163", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 69, - "model": "core.sliver", + "pk": 60035, + "model": "core.charge", "fields": { - "node": 409, - "instance_name": "instance-00000405", - "updated": "2013-12-12T17:55:32.942Z", + "updated": "2013-12-18T21:29:20.650Z", "slice": 4, - "deploymentNetwork": 5, - "name": "node26.stanford.vicci.org", - "created": "2013-12-12T17:55:32.942Z", - "ip": "171.67.92.164", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 70, - "model": "core.sliver", + "pk": 60036, + "model": "core.charge", "fields": { - "node": 412, - "instance_name": "instance-00000406", - "updated": "2013-12-12T17:55:32.958Z", + "updated": "2013-12-18T21:29:20.757Z", "slice": 4, - "deploymentNetwork": 5, - "name": "node29.stanford.vicci.org", - "created": "2013-12-12T17:55:32.958Z", - "ip": "171.67.92.167", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 71, - "model": "core.sliver", + "pk": 60037, + "model": "core.charge", "fields": { - "node": 413, - "instance_name": "instance-00000407", - "updated": "2013-12-12T17:55:32.975Z", + "updated": "2013-12-18T21:29:20.865Z", "slice": 4, - "deploymentNetwork": 5, - "name": "node30.stanford.vicci.org", - "created": "2013-12-12T17:55:32.975Z", - "ip": "171.67.92.168", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 72, - "model": "core.sliver", + "pk": 60038, + "model": "core.charge", "fields": { - "node": 460, - "instance_name": "instance-00000408", - "updated": "2013-12-12T17:55:32.992Z", + "updated": "2013-12-18T21:29:20.973Z", "slice": 4, - "deploymentNetwork": 6, - "name": "node7.washington.vicci.org", - "created": "2013-12-12T17:55:32.992Z", - "ip": "128.95.1.112", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 73, - "model": "core.sliver", + "pk": 60039, + "model": "core.charge", "fields": { - "node": 467, - "instance_name": "instance-00000409", - "updated": "2013-12-12T17:55:33.008Z", + "updated": "2013-12-18T21:29:21.080Z", "slice": 4, - "deploymentNetwork": 6, - "name": "node14.washington.vicci.org", - "created": "2013-12-12T17:55:33.008Z", - "ip": "128.95.1.119", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 74, - "model": "core.sliver", + "pk": 60040, + "model": "core.charge", "fields": { - "node": 468, - "instance_name": "instance-0000040a", - "updated": "2013-12-12T17:55:33.025Z", + "updated": "2013-12-18T21:29:21.188Z", "slice": 4, - "deploymentNetwork": 6, - "name": "node15.washington.vicci.org", - "created": "2013-12-12T17:55:33.025Z", - "ip": "128.95.1.120", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 75, - "model": "core.sliver", + "pk": 60041, + "model": "core.charge", "fields": { - "node": 469, - "instance_name": "instance-0000040b", - "updated": "2013-12-12T17:55:33.041Z", + "updated": "2013-12-18T21:29:21.296Z", "slice": 4, - "deploymentNetwork": 6, - "name": "node16.washington.vicci.org", - "created": "2013-12-12T17:55:33.041Z", - "ip": "128.95.1.121", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 76, - "model": "core.sliver", + "pk": 60042, + "model": "core.charge", "fields": { - "node": 470, - "instance_name": "instance-0000040c", - "updated": "2013-12-12T17:55:33.058Z", + "updated": "2013-12-18T21:29:21.403Z", "slice": 4, - "deploymentNetwork": 6, - "name": "node17.washington.vicci.org", - "created": "2013-12-12T17:55:33.058Z", - "ip": "128.95.1.122", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 77, - "model": "core.sliver", + "pk": 60043, + "model": "core.charge", "fields": { - "node": 553, - "instance_name": "instance-0000040d", - "updated": "2013-12-12T17:55:33.110Z", - "slice": 8, - "deploymentNetwork": 7, - "name": "node30.princeton.vicci.org", - "created": "2013-12-12T17:55:33.110Z", - "ip": "128.112.171.78", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 78, - "model": "core.sliver", + "pk": 60044, + "model": "core.charge", "fields": { - "node": 553, - "instance_name": "instance-0000040e", - "updated": "2013-12-12T17:55:33.142Z", - "slice": 9, - "deploymentNetwork": 7, - "name": "node30.princeton.vicci.org", - "created": "2013-12-12T17:55:33.142Z", - "ip": "128.112.171.78", - "image": 1, - "creator": 8, - "numberCores": 1, - "instance_id": null + "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": 79, - "model": "core.sliver", + "pk": 60045, + "model": "core.charge", "fields": { - "node": 469, - "instance_name": null, - "updated": "2013-12-13T21:51:36.927Z", - "slice": 11, - "deploymentNetwork": 6, - "name": "Stork", - "created": "2013-12-13T21:51:36.927Z", - "ip": null, - "image": 1, - "creator": 8, - "numberCores": 0, - "instance_id": null + "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": 80, - "model": "core.sliver", + "pk": 60046, + "model": "core.charge", "fields": { - "node": 438, - "instance_name": null, - "updated": "2013-12-13T21:53:35.001Z", - "slice": 12, - "deploymentNetwork": 5, - "name": "Owl", - "created": "2013-12-13T21:53:35.001Z", - "ip": null, - "image": 1, - "creator": 8, - "numberCores": 0, - "instance_id": null + "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": 81, - "model": "core.sliver", + "pk": 60047, + "model": "core.charge", "fields": { - "node": 546, - "instance_name": null, - "updated": "2013-12-13T21:58:13.897Z", - "slice": 14, - "deploymentNetwork": 7, - "name": "test-slice-1", - "created": "2013-12-13T21:58:13.897Z", - "ip": null, - "image": 1, - "creator": 8, - "numberCores": 0, - "instance_id": null + "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": 82, - "model": "core.sliver", + "pk": 60048, + "model": "core.charge", "fields": { - "node": 538, - "instance_name": null, - "updated": "2013-12-13T21:58:44.349Z", - "slice": 14, - "deploymentNetwork": 7, - "name": "test-slice-1", - "created": "2013-12-13T21:58:44.349Z", - "ip": null, - "image": 1, - "creator": 8, - "numberCores": 0, - "instance_id": null + "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": 83, - "model": "core.sliver", - "fields": { - "node": 556, - "instance_name": null, - "updated": "2013-12-13T21:58:44.350Z", - "slice": 14, - "deploymentNetwork": 7, - "name": "test-slice-1", - "created": "2013-12-13T21:58:44.350Z", - "ip": null, - "image": 1, - "creator": 8, - "numberCores": 0, - "instance_id": 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": 84, - "model": "core.sliver", + "pk": 60050, + "model": "core.charge", "fields": { - "node": 384, - "instance_name": null, - "updated": "2013-12-13T21:59:36.723Z", - "slice": 13, - "deploymentNetwork": 5, - "name": "Hadoop", - "created": "2013-12-13T21:59:36.723Z", - "ip": null, - "image": 1, - "creator": 8, - "numberCores": 0, - "instance_id": null + "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": 85, - "model": "core.sliver", + "pk": 60051, + "model": "core.charge", "fields": { - "node": 473, - "instance_name": null, - "updated": "2013-12-13T21:59:36.725Z", - "slice": 13, - "deploymentNetwork": 6, - "name": "Hadoop", - "created": "2013-12-13T21:59:36.725Z", - "ip": null, - "image": 1, - "creator": 8, - "numberCores": 0, - "instance_id": null + "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": 86, - "model": "core.sliver", + "pk": 60052, + "model": "core.charge", "fields": { - "node": 535, - "instance_name": null, - "updated": "2013-12-13T21:59:36.726Z", - "slice": 13, - "deploymentNetwork": 7, - "name": "Hadoop", - "created": "2013-12-13T21:59:36.726Z", - "ip": null, - "image": 1, - "creator": 8, - "numberCores": 0, - "instance_id": null + "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": 87, - "model": "core.sliver", + "pk": 60053, + "model": "core.charge", "fields": { - "node": 533, - "instance_name": null, - "updated": "2013-12-13T22:01:30.192Z", - "slice": 15, - "deploymentNetwork": 7, - "name": "test-slice-2", - "created": "2013-12-13T22:01:30.192Z", - "ip": null, - "image": 1, - "creator": 8, - "numberCores": 0, - "instance_id": null + "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": 88, - "model": "core.sliver", + "pk": 60054, + "model": "core.charge", "fields": { - "node": 536, - "instance_name": null, - "updated": "2013-12-13T22:01:49.742Z", - "slice": 15, - "deploymentNetwork": 7, - "name": "test-slice-2", - "created": "2013-12-13T22:01:49.742Z", - "ip": null, - "image": 1, - "creator": 8, - "numberCores": 0, - "instance_id": null + "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": 1, - "model": "core.networktemplate", + "pk": 60055, + "model": "core.charge", "fields": { - "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" + "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": 2, - "model": "core.networktemplate", + "pk": 60056, + "model": "core.charge", "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" + "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": 3, - "model": "core.networktemplate", + "pk": 60057, + "model": "core.charge", "fields": { - "guaranteedBandwidth": 0, - "description": "Connect a sliver to the public network via NAT", - "created": "2013-12-09T14:17:29.551Z", - "sharedNetworkName": "nat-net", - "updated": "2013-12-09T14:17:29.551Z", - "visibility": "private", - "translation": "NAT", - "sharedNetworkId": "51d641ba-9e1e-46f5-8069-bf4a929f851f", - "name": "private-IPv4-plus-NAT" + "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": 4, - "model": "core.networktemplate", + "pk": 60058, + "model": "core.charge", "fields": { - "guaranteedBandwidth": 0, - "description": "A private virtual network", - "created": "2013-12-09T14:18:02.336Z", - "sharedNetworkName": "", - "updated": "2013-12-09T14:18:02.336Z", - "visibility": "private", - "translation": "none", - "sharedNetworkId": "", - "name": "private-virtual" + "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": 1, - "model": "core.network", + "pk": 60059, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "64.57.18.128/28", - "updated": "2013-12-09T14:24:19.970Z", - "subnet_id": "e1796711-5584-4bc1-b09b-45dff8f59f32", - "name": "VINI-I2WashDC-public", - "created": "2013-12-09T14:24:19.970Z", - "permitAllSlices": false, - "permittedSlices": [], - "labels": "public-net", - "guaranteedBandwidth": 0, - "network_id": "7cb4291d-f8d3-4797-83b0-8deefd85bdf5", - "template": 1, - "owner": 10, - "ports": "" + "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": 2, - "model": "core.network", + "pk": 60060, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "64.57.18.112/28", - "updated": "2013-12-09T14:31:41.605Z", - "subnet_id": "1afdc262-767b-4736-9403-584265293a81", - "name": "VINI-I2Seattle-public", - "created": "2013-12-09T14:31:41.605Z", - "permitAllSlices": false, - "permittedSlices": [], - "labels": "public-net", - "guaranteedBandwidth": 0, - "network_id": "810b4cb8-9d8e-4eee-becc-676785a07725", - "template": 1, - "owner": 10, - "ports": "" + "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": 3, - "model": "core.network", + "pk": 60061, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "64.57.18.96/28", - "updated": "2013-12-09T14:33:10.312Z", - "subnet_id": "c3582780-76f1-4979-97b0-e27f39f18daa", - "name": "VINI-I2SaltLakeCity-public", - "created": "2013-12-09T14:33:10.312Z", - "permitAllSlices": false, - "permittedSlices": [], - "labels": "public-net", - "guaranteedBandwidth": 0, - "network_id": "4b37f048-11de-4ddd-acaf-2fc5e8716f0e", - "template": 1, - "owner": 10, - "ports": "" + "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": 4, - "model": "core.network", + "pk": 60062, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "64.57.18.80/28", - "updated": "2013-12-09T14:34:55.754Z", - "subnet_id": "c0d989f2-f42f-4b3e-a23f-a0063ac4f010", - "name": "VINI-I2NewYork-public", - "created": "2013-12-09T14:34:55.754Z", - "permitAllSlices": false, - "permittedSlices": [], - "labels": "public-net", - "guaranteedBandwidth": 0, - "network_id": "684386d7-1286-4e58-acda-8ff45deac99e", - "template": 1, - "owner": 10, - "ports": "" + "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": 5, - "model": "core.network", + "pk": 60063, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "64.57.18.64/28", - "updated": "2013-12-09T14:36:09.261Z", - "subnet_id": "d37bab1f-7e01-417c-86c4-ea0d69e2f25d", - "name": "VINI-I2LosAngeles-public", - "created": "2013-12-09T14:36:09.261Z", - "permitAllSlices": false, - "permittedSlices": [], - "labels": "public-net", - "guaranteedBandwidth": 0, - "network_id": "fa090174-ec59-4b7a-812b-9206d911fb61", - "template": 1, - "owner": 10, - "ports": "" + "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": 6, - "model": "core.network", + "pk": 60064, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "64.57.18.48/28", - "updated": "2013-12-09T14:37:02.420Z", - "subnet_id": "7caa4cfb-846a-4e4c-9984-8ead4091f816", - "name": "VINI-I2KansasCity-public", - "created": "2013-12-09T14:37:02.420Z", - "permitAllSlices": false, - "permittedSlices": [], - "labels": "public-net", - "guaranteedBandwidth": 0, - "network_id": "017a3914-5eaf-4bcb-8609-6d17ebcdf075", - "template": 1, - "owner": 10, - "ports": "" + "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": 9, - "model": "core.network", + "pk": 60065, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "64.57.18.32/28", - "updated": "2013-12-09T14:41:00.237Z", - "subnet_id": "4438dfbd-099a-4229-bd86-cf29478a009b", - "name": "VINI-I2Houston-public", - "created": "2013-12-09T14:41:00.237Z", - "permitAllSlices": false, - "permittedSlices": [], - "labels": "public-net", - "guaranteedBandwidth": 0, - "network_id": "fdf0e3b1-439b-4673-b56e-d9dfe52b2bb7", - "template": 1, - "owner": 10, - "ports": "" + "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": 10, - "model": "core.network", + "pk": 60066, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "64.57.18.16/28", - "updated": "2013-12-09T14:42:03.158Z", - "subnet_id": "332113b1-e6f4-492e-ad93-ce21512d3459", - "name": "VINI-I2Chicago-public", - "created": "2013-12-09T14:42:03.158Z", - "permitAllSlices": false, - "permittedSlices": [], - "labels": "public-net", - "guaranteedBandwidth": 0, - "network_id": "ecdbaf66-b659-4d59-b0b7-1bf6d232ccba", - "template": 1, - "owner": 10, - "ports": "" + "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": 11, - "model": "core.network", + "pk": 60067, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "64.57.18.0/28", - "updated": "2013-12-09T14:42:49.781Z", - "subnet_id": "dafefd4f-2622-4987-9f30-94e9a977cfc3", - "name": "VINI-I2Atlanta-public", - "created": "2013-12-09T14:42:49.781Z", - "permitAllSlices": false, - "permittedSlices": [], - "labels": "public-net", - "guaranteedBandwidth": 0, - "network_id": "ae4d42e8-a97c-440d-9533-4bcbd62dfb00", - "template": 1, - "owner": 10, - "ports": "" + "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": 12, - "model": "core.network", + "pk": 60068, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "", - "updated": "2013-12-13T21:51:04.425Z", - "subnet_id": "", - "name": "Stork package distribution", - "created": "2013-12-13T21:51:04.425Z", - "permitAllSlices": true, - "permittedSlices": [], - "labels": "", - "guaranteedBandwidth": 0, - "network_id": "", - "template": 4, - "owner": 11, - "ports": "" + "updated": "2013-12-18T21:29:24.253Z", + "slice": 4, + "created": "2013-12-18T21:29:03.491Z", + "amount": 0.1624, + "object": 107, + "account": 15, + "state": "invoiced", + "coreHours": 2.32, + "invoice": 70, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 13, - "model": "core.network", + "pk": 60069, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "", - "updated": "2013-12-13T21:53:07.783Z", - "subnet_id": "", - "name": "Owl Data Collection", - "created": "2013-12-13T21:53:07.783Z", - "permitAllSlices": true, - "permittedSlices": [], - "labels": "", - "guaranteedBandwidth": 0, - "network_id": "", - "template": 4, - "owner": 12, - "ports": "" + "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": 14, - "model": "core.network", + "pk": 60070, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "", - "updated": "2013-12-13T21:55:51.703Z", - "subnet_id": "", - "name": "Hadoop Shared Filesystem Access", - "created": "2013-12-13T21:55:51.703Z", - "permitAllSlices": true, - "permittedSlices": [], - "labels": "", - "guaranteedBandwidth": 0, - "network_id": "", - "template": 4, - "owner": 13, - "ports": "" + "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": 15, - "model": "core.network", + "pk": 60071, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "", - "updated": "2013-12-13T21:57:38.995Z", - "subnet_id": "", - "name": "test-1-public", - "created": "2013-12-13T21:57:38.995Z", - "permitAllSlices": false, - "permittedSlices": [], - "labels": "", - "guaranteedBandwidth": 0, - "network_id": "", - "template": 1, - "owner": 14, - "ports": "" + "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": 16, - "model": "core.network", + "pk": 60072, + "model": "core.charge", "fields": { - "router_id": "", - "subnet": "", - "updated": "2013-12-13T22:00:40.549Z", - "subnet_id": "", - "name": "test-slice-2-nat", - "created": "2013-12-13T22:00:40.549Z", - "permitAllSlices": false, - "permittedSlices": [], - "labels": "", - "guaranteedBandwidth": 0, - "network_id": "", - "template": 3, - "owner": 15, - "ports": "" + "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": 1, - "model": "core.networkslice", + "pk": 60073, + "model": "core.charge", "fields": { - "updated": "2013-12-13T21:51:09.711Z", - "slice": 11, - "network": 12, - "created": "2013-12-13T21:51:09.711Z" + "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": 2, - "model": "core.networkslice", + "pk": 60074, + "model": "core.charge", "fields": { - "updated": "2013-12-13T21:53:15.909Z", - "slice": 12, - "network": 13, - "created": "2013-12-13T21:53:15.909Z" + "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": 3, - "model": "core.networkslice", + "pk": 60075, + "model": "core.charge", "fields": { - "updated": "2013-12-13T21:53:15.914Z", - "slice": 12, - "network": 12, - "created": "2013-12-13T21:53:15.914Z" + "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": 4, - "model": "core.networkslice", + "pk": 60076, + "model": "core.charge", "fields": { - "updated": "2013-12-13T21:56:04.235Z", - "slice": 13, - "network": 14, - "created": "2013-12-13T21:56:04.235Z" + "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": 5, - "model": "core.networkslice", + "pk": 60077, + "model": "core.charge", "fields": { - "updated": "2013-12-13T21:56:04.241Z", - "slice": 13, - "network": 12, - "created": "2013-12-13T21:56:04.241Z" + "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": 6, - "model": "core.networkslice", + "pk": 60079, + "model": "core.charge", "fields": { - "updated": "2013-12-13T21:56:04.246Z", - "slice": 13, - "network": 13, - "created": "2013-12-13T21:56:04.246Z" + "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": 7, - "model": "core.networkslice", + "pk": 60080, + "model": "core.charge", "fields": { - "updated": "2013-12-13T21:57:56.826Z", - "slice": 14, - "network": 15, - "created": "2013-12-13T21:57:56.826Z" + "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": 8, - "model": "core.networkslice", + "pk": 60081, + "model": "core.charge", "fields": { - "updated": "2013-12-13T21:57:56.831Z", - "slice": 14, - "network": 13, - "created": "2013-12-13T21:57:56.831Z" + "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": 9, - "model": "core.networkslice", + "pk": 60082, + "model": "core.charge", "fields": { - "updated": "2013-12-13T21:57:56.836Z", - "slice": 14, - "network": 12, - "created": "2013-12-13T21:57:56.836Z" + "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": 10, - "model": "core.networkslice", + "pk": 60083, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:01:14.038Z", - "slice": 15, - "network": 16, - "created": "2013-12-13T22:01:14.038Z" + "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": 11, - "model": "core.networkslice", + "pk": 60084, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:01:14.043Z", - "slice": 15, - "network": 14, - "created": "2013-12-13T22:01:14.043Z" + "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": 1, - "model": "core.networkparametertype", + "pk": 60085, + "model": "core.charge", "fields": { - "updated": "2013-12-09T14:43:25.664Z", - "description": "End of IPv4 address allocation pool", - "name": "allocation-pool-end", - "created": "2013-12-09T14:43:25.664Z" + "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": 2, - "model": "core.networkparametertype", + "pk": 60086, + "model": "core.charge", "fields": { - "updated": "2013-12-09T14:43:45.564Z", - "description": "Start of IPv4 address allocation pool", - "name": "allocation-pool-start", - "created": "2013-12-09T14:43:45.564Z" + "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": 3, - "model": "core.networkparametertype", + "pk": 60087, + "model": "core.charge", "fields": { - "updated": "2013-12-09T14:44:05.513Z", - "description": "CIDR block for network", - "name": "cidr", - "created": "2013-12-09T14:44:05.513Z" + "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": 12, - "model": "core.account", + "pk": 60088, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:42.679Z", - "site": 10, - "created": "2013-12-13T22:19:42.679Z" + "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": 13, - "model": "core.account", + "pk": 60089, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:42.705Z", - "site": 22, - "created": "2013-12-13T22:19:42.705Z" + "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": 53, - "model": "core.invoice", + "pk": 60090, + "model": "core.charge", "fields": { - "date": "2013-11-13T22:00:00Z", - "updated": "2013-12-13T22:19:55.029Z", - "account": 12, - "created": "2013-12-13T22:19:55.029Z" + "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": 54, - "model": "core.invoice", + "pk": 60091, + "model": "core.charge", "fields": { - "date": "2013-11-17T22:00:00Z", - "updated": "2013-12-13T22:19:55.041Z", - "account": 12, - "created": "2013-12-13T22:19:55.041Z" + "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": 55, - "model": "core.invoice", + "pk": 60092, + "model": "core.charge", "fields": { - "date": "2013-11-24T22:00:00Z", - "updated": "2013-12-13T22:19:55.604Z", - "account": 12, - "created": "2013-12-13T22:19:55.604Z" + "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": 56, - "model": "core.invoice", + "pk": 60093, + "model": "core.charge", "fields": { - "date": "2013-12-01T22:00:00Z", - "updated": "2013-12-13T22:19:56.482Z", - "account": 12, - "created": "2013-12-13T22:19:56.482Z" + "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": 57, - "model": "core.invoice", + "pk": 60094, + "model": "core.charge", "fields": { - "date": "2013-12-08T22:00:00Z", - "updated": "2013-12-13T22:19:57.362Z", - "account": 12, - "created": "2013-12-13T22:19:57.362Z" + "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": 58, - "model": "core.invoice", + "pk": 60095, + "model": "core.charge", "fields": { - "date": "2013-11-13T22:00:00Z", - "updated": "2013-12-13T22:19:58.399Z", - "account": 13, - "created": "2013-12-13T22:19:58.399Z" + "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": 59, - "model": "core.invoice", + "pk": 60096, + "model": "core.charge", "fields": { - "date": "2013-11-17T22:00:00Z", - "updated": "2013-12-13T22:19:58.414Z", - "account": 13, - "created": "2013-12-13T22:19:58.414Z" + "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": 60, - "model": "core.invoice", + "pk": 60097, + "model": "core.charge", "fields": { - "date": "2013-11-24T22:00:00Z", - "updated": "2013-12-13T22:19:59.616Z", - "account": 13, - "created": "2013-12-13T22:19:59.616Z" + "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": 61, - "model": "core.invoice", + "pk": 60098, + "model": "core.charge", "fields": { - "date": "2013-12-01T22:00:00Z", - "updated": "2013-12-13T22:20:01.950Z", - "account": 13, - "created": "2013-12-13T22:20:01.950Z" + "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": 62, - "model": "core.invoice", + "pk": 60099, + "model": "core.charge", "fields": { - "date": "2013-12-08T22:00:00Z", - "updated": "2013-12-13T22:20:03.878Z", - "account": 13, - "created": "2013-12-13T22:20:03.878Z" + "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": 89, - "model": "core.usableobject", + "pk": 60100, + "model": "core.charge", "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: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": 90, - "model": "core.usableobject", + "pk": 60101, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:43.483Z", - "name": "node22.gt.vicci.org", - "created": "2013-12-13T22:19:43.483Z" + "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": 91, - "model": "core.usableobject", + "pk": 60102, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.237Z", - "name": "node24.gt.vicci.org", - "created": "2013-12-13T22:19:44.237Z" + "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": 92, - "model": "core.usableobject", + "pk": 60103, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.992Z", - "name": "node29.gt.vicci.org", - "created": "2013-12-13T22:19:44.992Z" + "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": 93, - "model": "core.usableobject", + "pk": 60104, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:45.806Z", - "name": "node30.princeton.vicci.org", - "created": "2013-12-13T22:19:45.806Z" + "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": 94, - "model": "core.usableobject", + "pk": 60105, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.339Z", - "name": "node16.washington.vicci.org", - "created": "2013-12-13T22:19:47.339Z" + "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": 95, - "model": "core.usableobject", + "pk": 60106, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.112Z", - "name": "node55.stanford.vicci.org", - "created": "2013-12-13T22:19:48.112Z" + "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": 96, - "model": "core.usableobject", + "pk": 60107, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.875Z", - "name": "node23.princeton.vicci.org", - "created": "2013-12-13T22:19:48.875Z" + "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": 97, - "model": "core.usableobject", + "pk": 60108, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:49.635Z", - "name": "node15.princeton.vicci.org", - "created": "2013-12-13T22:19:49.634Z" + "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": 98, - "model": "core.usableobject", + "pk": 60109, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:50.389Z", - "name": "node33.princeton.vicci.org", - "created": "2013-12-13T22:19:50.389Z" + "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": 99, - "model": "core.usableobject", + "pk": 60110, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:51.178Z", - "name": "node1.stanford.vicci.org", - "created": "2013-12-13T22:19:51.178Z" + "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": 100, - "model": "core.usableobject", + "pk": 60111, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:51.938Z", - "name": "node20.washington.vicci.org", - "created": "2013-12-13T22:19:51.938Z" + "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": 101, - "model": "core.usableobject", + "pk": 60112, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:52.691Z", - "name": "node12.princeton.vicci.org", - "created": "2013-12-13T22:19:52.691Z" + "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": 102, - "model": "core.usableobject", + "pk": 60113, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:53.456Z", - "name": "node10.princeton.vicci.org", - "created": "2013-12-13T22:19:53.456Z" + "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": 103, - "model": "core.usableobject", + "pk": 60114, + "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.216Z", - "name": "node13.princeton.vicci.org", - "created": "2013-12-13T22:19:54.216Z" + "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": 31, - "model": "core.payment", + "pk": 60115, + "model": "core.charge", "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: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": 32, - "model": "core.payment", + "pk": 60116, + "model": "core.charge", "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: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-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 33, - "model": "core.payment", + "pk": 60117, + "model": "core.charge", "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:03.897Z", + "slice": 4, + "created": "2013-12-18T21:29:03.897Z", + "amount": 0.2744, + "object": 107, + "account": 15, + "state": "pending", + "coreHours": 3.92, + "invoice": null, + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 34, - "model": "core.payment", + "pk": 60118, + "model": "core.charge", "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:03.905Z", + "slice": 4, + "created": "2013-12-18T21:29:03.905Z", + "amount": 0.28, + "object": 107, + "account": 15, + "state": "pending", + "coreHours": 4.0, + "invoice": null, + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 35, - "model": "core.payment", + "pk": 60119, + "model": "core.charge", "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:03.913Z", + "slice": 4, + "created": "2013-12-18T21:29:03.913Z", + "amount": 0.2408, + "object": 107, + "account": 15, + "state": "pending", + "coreHours": 3.44, + "invoice": null, + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 36, - "model": "core.payment", + "pk": 60120, + "model": "core.charge", "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:03.921Z", + "slice": 4, + "created": "2013-12-18T21:29:03.921Z", + "amount": 0.308, + "object": 107, + "account": 15, + "state": "pending", + "coreHours": 4.4, + "invoice": null, + "date": "2013-12-18T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58321, + "pk": 60121, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.498Z", - "slice": 4, - "created": "2013-12-13T22:19:42.734Z", - "amount": 0.3248, - "object": 89, - "account": 13, + "updated": "2013-12-18T21:29:20.227Z", + "slice": 6, + "created": "2013-12-18T21:29:03.953Z", + "amount": 0.2968, + "object": 108, + "account": 15, "state": "invoiced", - "coreHours": 4.64, - "invoice": 59, - "date": "2013-11-13T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 69, + "date": "2013-11-18T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58322, + "pk": 60122, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.590Z", - "slice": 4, - "created": "2013-12-13T22:19:42.744Z", - "amount": 0.2464, - "object": 89, - "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": 3.52, - "invoice": 59, - "date": "2013-11-14T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 69, + "date": "2013-11-19T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58323, + "pk": 60123, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.681Z", - "slice": 4, - "created": "2013-12-13T22:19:42.752Z", - "amount": 0.3136, - "object": 89, - "account": 13, + "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": 4.48, - "invoice": 59, - "date": "2013-11-14T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 69, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58324, + "pk": 60124, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.772Z", - "slice": 4, - "created": "2013-12-13T22:19:42.760Z", - "amount": 0.2576, - "object": 89, - "account": 13, + "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": 3.68, - "invoice": 59, - "date": "2013-11-14T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 69, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58325, + "pk": 60125, "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, + "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": 4.16, - "invoice": 59, - "date": "2013-11-15T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 69, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58326, + "pk": 60126, "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, + "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": 4.48, - "invoice": 59, - "date": "2013-11-15T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 69, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58327, + "pk": 60127, "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, + "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": 2.0, - "invoice": 59, - "date": "2013-11-15T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 69, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58328, + "pk": 60128, "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, + "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": 3.2, - "invoice": 59, - "date": "2013-11-16T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 69, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58329, + "pk": 60129, "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, + "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": 3.2, - "invoice": 59, - "date": "2013-11-16T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 69, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58330, + "pk": 60130, "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, + "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": 4.16, - "invoice": 59, - "date": "2013-11-16T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 69, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58331, + "pk": 60131, "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, + "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": 1.84, - "invoice": 59, - "date": "2013-11-17T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 69, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58332, + "pk": 60132, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.518Z", - "slice": 4, - "created": "2013-12-13T22:19:42.827Z", - "amount": 0.3024, - "object": 89, - "account": 13, + "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": 4.32, - "invoice": 59, - "date": "2013-11-17T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 69, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58333, + "pk": 60133, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.609Z", - "slice": 4, - "created": "2013-12-13T22:19:42.835Z", - "amount": 0.1456, - "object": 89, - "account": 13, + "updated": "2013-12-18T21:29:21.519Z", + "slice": 6, + "created": "2013-12-18T21:29:04.054Z", + "amount": 0.1288, + "object": 108, + "account": 15, "state": "invoiced", - "coreHours": 2.08, - "invoice": 59, - "date": "2013-11-17T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 69, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58334, + "pk": 60134, "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, + "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.56, - "invoice": 60, - "date": "2013-11-18T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 69, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58335, + "pk": 60135, "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, + "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": 2.16, - "invoice": 60, - "date": "2013-11-18T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 69, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58336, + "pk": 60136, "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, + "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": 2.4, - "invoice": 60, - "date": "2013-11-18T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 69, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58337, + "pk": 60137, "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, + "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": 2.48, - "invoice": 60, - "date": "2013-11-19T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 69, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58338, + "pk": 60138, "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, + "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.12, - "invoice": 60, - "date": "2013-11-19T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 69, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58339, + "pk": 60139, "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, + "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.56, - "invoice": 60, - "date": "2013-11-19T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 69, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58340, + "pk": 60140, "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, + "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": 1.84, - "invoice": 60, - "date": "2013-11-20T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 70, + "date": "2013-11-25T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58341, + "pk": 60141, "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, + "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.2, - "invoice": 60, - "date": "2013-11-20T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 70, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58342, + "pk": 60142, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.452Z", - "slice": 4, - "created": "2013-12-13T22:19:42.910Z", + "updated": "2013-12-18T21:29:22.497Z", + "slice": 6, + "created": "2013-12-18T21:29:04.129Z", "amount": 0.1736, - "object": 89, - "account": 13, + "object": 108, + "account": 15, "state": "invoiced", "coreHours": 2.48, - "invoice": 60, - "date": "2013-11-20T22:00:00Z", - "kind": "besteffort" + "invoice": 70, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58343, + "pk": 60143, "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, + "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": 3.2, - "invoice": 60, - "date": "2013-11-21T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 70, + "date": "2013-11-26T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58344, + "pk": 60144, "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, + "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": 1.92, - "invoice": 60, - "date": "2013-11-21T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 70, + "date": "2013-11-26T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58345, + "pk": 60145, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.742Z", - "slice": 4, - "created": "2013-12-13T22:19:42.934Z", + "updated": "2013-12-18T21:29:22.861Z", + "slice": 6, + "created": "2013-12-18T21:29:04.154Z", "amount": 0.1736, - "object": 89, - "account": 13, + "object": 108, + "account": 15, "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" + "invoice": 70, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58347, + "pk": 60146, "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, + "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": 4.64, - "invoice": 60, - "date": "2013-11-22T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 70, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58348, + "pk": 60147, "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, + "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": 4.64, - "invoice": 60, - "date": "2013-11-22T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.88, + "invoice": 70, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58349, + "pk": 60148, "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, + "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.48, - "invoice": 60, - "date": "2013-11-23T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 70, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58350, + "pk": 60149, "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, + "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": 2.88, - "invoice": 60, - "date": "2013-11-23T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 70, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58351, + "pk": 60150, "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, + "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": 4.64, - "invoice": 60, - "date": "2013-11-23T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 70, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58352, + "pk": 60151, "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, + "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": 3.28, - "invoice": 60, - "date": "2013-11-24T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 70, + "date": "2013-11-28T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58353, + "pk": 60152, "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, + "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": 3.6, - "invoice": 60, - "date": "2013-11-24T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 70, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58354, + "pk": 60153, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.943Z", - "slice": 4, - "created": "2013-12-13T22:19:43.009Z", + "updated": "2013-12-18T21:29:23.723Z", + "slice": 6, + "created": "2013-12-18T21:29:04.220Z", "amount": 0.2016, - "object": 89, - "account": 13, + "object": 108, + "account": 15, "state": "invoiced", "coreHours": 2.88, - "invoice": 60, - "date": "2013-11-24T22:00:00Z", - "kind": "besteffort" + "invoice": 70, + "date": "2013-11-29T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58355, + "pk": 60154, "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, + "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": 3.92, - "invoice": 61, - "date": "2013-11-25T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 70, + "date": "2013-11-29T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58356, + "pk": 60155, "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, + "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": 2.96, - "invoice": 61, - "date": "2013-11-25T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 70, + "date": "2013-11-30T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58357, + "pk": 60156, "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, + "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.84, - "invoice": 61, - "date": "2013-11-25T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 70, + "date": "2013-11-30T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58358, + "pk": 60157, "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, + "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": 1.84, - "invoice": 61, - "date": "2013-11-26T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 70, + "date": "2013-11-30T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58359, + "pk": 60158, "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, + "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": 2.08, - "invoice": 61, - "date": "2013-11-26T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 70, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58360, + "pk": 60159, "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, + "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": 4.8, - "invoice": 61, - "date": "2013-11-26T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 70, + "date": "2013-12-01T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58361, + "pk": 60160, "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, + "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": 2.96, - "invoice": 61, - "date": "2013-11-27T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 70, + "date": "2013-12-01T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58362, + "pk": 60161, "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, + "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.48, - "invoice": 61, - "date": "2013-11-27T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 71, + "date": "2013-12-02T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58363, + "pk": 60162, "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, + "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": 3.68, - "invoice": 61, - "date": "2013-11-27T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 71, + "date": "2013-12-02T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58364, + "pk": 60163, "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, + "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.36, - "invoice": 61, - "date": "2013-11-28T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 71, + "date": "2013-12-02T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58365, + "pk": 60164, "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, + "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": 4.16, - "invoice": 61, - "date": "2013-11-28T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 71, + "date": "2013-12-03T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58366, + "pk": 60165, "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, + "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": 4.8, - "invoice": 61, - "date": "2013-11-28T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 71, + "date": "2013-12-03T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58367, + "pk": 60166, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.140Z", - "slice": 4, - "created": "2013-12-13T22:19:43.117Z", - "amount": 0.1176, - "object": 89, - "account": 13, + "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": 1.68, - "invoice": 61, - "date": "2013-11-29T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 71, + "date": "2013-12-03T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58368, + "pk": 60167, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.232Z", - "slice": 4, - "created": "2013-12-13T22:19:43.125Z", - "amount": 0.1456, - "object": 89, - "account": 13, + "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": 2.08, - "invoice": 61, - "date": "2013-11-29T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 71, + "date": "2013-12-04T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58369, + "pk": 60168, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.323Z", - "slice": 4, - "created": "2013-12-13T22:19:43.133Z", - "amount": 0.1736, - "object": 89, - "account": 13, + "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.48, - "invoice": 61, - "date": "2013-11-29T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.4, + "invoice": 71, + "date": "2013-12-04T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58370, + "pk": 60169, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.416Z", - "slice": 4, - "created": "2013-12-13T22:19:43.141Z", - "amount": 0.1344, - "object": 89, - "account": 13, + "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": 1.92, - "invoice": 61, - "date": "2013-11-30T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 71, + "date": "2013-12-04T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58371, + "pk": 60170, "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, + "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": 1.76, - "invoice": 61, - "date": "2013-11-30T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 71, + "date": "2013-12-05T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58372, + "pk": 60171, "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, + "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": 3.76, - "invoice": 61, - "date": "2013-11-30T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.72, + "invoice": 71, + "date": "2013-12-05T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58373, + "pk": 60172, "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, + "updated": "2013-12-18T21:29:25.777Z", + "slice": 6, + "created": "2013-12-18T21:29:04.377Z", + "amount": 0.1624, + "object": 108, + "account": 15, "state": "invoiced", - "coreHours": 3.12, - "invoice": 61, - "date": "2013-12-01T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.32, + "invoice": 71, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58374, + "pk": 60173, "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, + "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": 3.2, - "invoice": 61, - "date": "2013-12-01T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 71, + "date": "2013-12-06T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58375, + "pk": 60174, "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, + "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": 3.76, - "invoice": 61, - "date": "2013-12-01T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 71, + "date": "2013-12-06T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58376, + "pk": 60175, "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, + "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": 4.72, - "invoice": 62, - "date": "2013-12-02T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 71, + "date": "2013-12-06T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58377, + "pk": 60176, "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, + "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": 2.08, - "invoice": 62, - "date": "2013-12-02T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 71, + "date": "2013-12-07T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58378, + "pk": 60177, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.153Z", - "slice": 4, - "created": "2013-12-13T22:19:43.208Z", - "amount": 0.1848, - "object": 89, - "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": 2.64, - "invoice": 62, - "date": "2013-12-02T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.76, + "invoice": 71, + "date": "2013-12-07T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58379, + "pk": 60178, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.244Z", - "slice": 4, - "created": "2013-12-13T22:19:43.216Z", - "amount": 0.308, - "object": 89, - "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": 4.4, - "invoice": 62, - "date": "2013-12-03T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 71, + "date": "2013-12-07T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58380, + "pk": 60179, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.335Z", - "slice": 4, - "created": "2013-12-13T22:19:43.224Z", - "amount": 0.3304, - "object": 89, - "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.72, - "invoice": 62, - "date": "2013-12-03T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 71, + "date": "2013-12-08T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58381, + "pk": 60180, "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, + "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": 3.2, - "invoice": 62, - "date": "2013-12-03T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 71, + "date": "2013-12-08T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58382, + "pk": 60181, "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, + "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": 3.52, - "invoice": 62, - "date": "2013-12-04T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 71, + "date": "2013-12-08T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58383, + "pk": 60182, "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, + "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": 3.28, - "invoice": 62, - "date": "2013-12-04T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 72, + "date": "2013-12-09T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58384, + "pk": 60183, "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, + "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": 2.72, - "invoice": 62, - "date": "2013-12-04T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 72, + "date": "2013-12-09T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58385, + "pk": 60184, "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, + "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": 62, - "date": "2013-12-05T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 72, + "date": "2013-12-09T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58386, + "pk": 60185, "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, + "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": 2.08, - "invoice": 62, - "date": "2013-12-05T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 72, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58387, + "pk": 60186, "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, + "updated": "2013-12-18T21:29:27.293Z", + "slice": 6, + "created": "2013-12-18T21:29:04.493Z", + "amount": 0.3304, + "object": 108, + "account": 15, "state": "invoiced", - "coreHours": 3.68, - "invoice": 62, - "date": "2013-12-05T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 72, + "date": "2013-12-10T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58388, + "pk": 60187, "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, + "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.48, - "invoice": 62, - "date": "2013-12-06T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 72, + "date": "2013-12-10T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58389, + "pk": 60188, "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, + "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": 3.44, - "invoice": 62, - "date": "2013-12-06T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.4, + "invoice": 72, + "date": "2013-12-11T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58390, + "pk": 60189, "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, + "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": 3.12, - "invoice": 62, - "date": "2013-12-06T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 72, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58391, + "pk": 60190, "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, + "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": 3.76, - "invoice": 62, - "date": "2013-12-07T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 72, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58392, + "pk": 60191, "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, + "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": 4.24, - "invoice": 62, - "date": "2013-12-07T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 72, + "date": "2013-12-12T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58393, + "pk": 60192, "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, + "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": 1.6, - "invoice": 62, - "date": "2013-12-07T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 72, + "date": "2013-12-12T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58394, + "pk": 60193, "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, + "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": 3.04, - "invoice": 62, - "date": "2013-12-08T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 72, + "date": "2013-12-12T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58395, + "pk": 60194, "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, + "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.8, - "invoice": 62, - "date": "2013-12-08T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 72, + "date": "2013-12-13T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58396, + "pk": 60195, "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, + "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.76, - "invoice": 62, - "date": "2013-12-08T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.92, + "invoice": 72, + "date": "2013-12-13T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58397, + "pk": 60196, "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" + "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": 58398, + "pk": 60197, "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" + "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": 58399, + "pk": 60198, "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" + "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": 58400, + "pk": 60199, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:43.390Z", - "slice": 4, - "created": "2013-12-13T22:19:43.390Z", - "amount": 0.1512, - "object": 89, - "account": 13, - "state": "pending", - "coreHours": 2.16, - "invoice": null, - "date": "2013-12-10T06:00:00Z", - "kind": "besteffort" + "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": 58401, + "pk": 60200, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:43.398Z", - "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" + "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": 58402, + "pk": 60201, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:43.407Z", - "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" + "updated": "2013-12-18T21:29:28.967Z", + "slice": 6, + "created": "2013-12-18T21:29:04.617Z", + "amount": 0.1568, + "object": 108, + "account": 15, + "state": "invoiced", + "coreHours": 2.24, + "invoice": 72, + "date": "2013-12-15T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58403, + "pk": 60202, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:43.415Z", - "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" + "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": 58404, + "pk": 60203, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:43.423Z", - "slice": 4, - "created": "2013-12-13T22:19:43.423Z", - "amount": 0.1288, - "object": 89, - "account": 13, + "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": 1.84, + "coreHours": 3.84, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58405, + "pk": 60204, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:43.431Z", - "slice": 4, - "created": "2013-12-13T22:19:43.431Z", + "updated": "2013-12-18T21:29:04.642Z", + "slice": 6, + "created": "2013-12-18T21:29:04.642Z", "amount": 0.14, - "object": 89, - "account": 13, + "object": 108, + "account": 15, "state": "pending", "coreHours": 2.0, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58406, + "pk": 60205, "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, + "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": 2.8, + "coreHours": 4.0, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58407, + "pk": 60206, "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, + "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": 1.6, + "coreHours": 3.36, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58408, + "pk": 60207, "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, + "updated": "2013-12-18T21:29:04.667Z", + "slice": 6, + "created": "2013-12-18T21:29:04.667Z", + "amount": 0.1848, + "object": 108, + "account": 15, "state": "pending", - "coreHours": 4.72, + "coreHours": 2.64, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58409, + "pk": 60208, "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, + "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": 4.56, + "coreHours": 3.84, "invoice": null, - "date": "2013-12-13T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58410, + "pk": 60209, "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, + "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": 4.08, + "coreHours": 3.12, "invoice": null, - "date": "2013-12-13T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58411, + "pk": 60210, "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" + "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": 58412, + "pk": 60211, "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, + "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": 2.0, - "invoice": 59, - "date": "2013-11-14T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 69, + "date": "2013-11-18T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58413, + "pk": 60212, "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, + "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.24, - "invoice": 59, - "date": "2013-11-14T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 69, + "date": "2013-11-19T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58414, + "pk": 60213, "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, + "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": 3.12, - "invoice": 59, - "date": "2013-11-14T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 69, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58415, + "pk": 60214, "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, + "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": 2.72, - "invoice": 59, - "date": "2013-11-15T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 69, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58416, + "pk": 60215, "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, + "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": 4.24, - "invoice": 59, - "date": "2013-11-15T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 69, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58417, + "pk": 60216, "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, + "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.24, - "invoice": 59, - "date": "2013-11-15T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 69, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58418, + "pk": 60217, "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, + "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.44, - "invoice": 59, - "date": "2013-11-16T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 69, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58419, + "pk": 60218, "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, + "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.16, - "invoice": 59, - "date": "2013-11-16T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 69, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58420, + "pk": 60219, "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, + "updated": "2013-12-18T21:29:21.097Z", + "slice": 6, + "created": "2013-12-18T21:29:04.775Z", + "amount": 0.336, + "object": 109, + "account": 15, "state": "invoiced", - "coreHours": 3.92, - "invoice": 59, - "date": "2013-11-16T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.8, + "invoice": 69, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58421, + "pk": 60220, "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, + "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": 4.64, - "invoice": 59, - "date": "2013-11-17T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 69, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58422, + "pk": 60221, "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, + "updated": "2013-12-18T21:29:21.312Z", + "slice": 6, + "created": "2013-12-18T21:29:04.791Z", + "amount": 0.2184, + "object": 109, + "account": 15, "state": "invoiced", - "coreHours": 3.04, - "invoice": 59, - "date": "2013-11-17T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 69, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58423, + "pk": 60222, "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, + "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": 59, - "date": "2013-11-17T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 69, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58424, + "pk": 60223, "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, + "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": 1.68, - "invoice": 60, - "date": "2013-11-18T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 69, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58425, + "pk": 60224, "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, + "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": 4.16, - "invoice": 60, - "date": "2013-11-18T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 69, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58426, + "pk": 60225, "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, + "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": 1.76, - "invoice": 60, - "date": "2013-11-18T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 69, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58427, + "pk": 60226, "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, + "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.08, - "invoice": 60, - "date": "2013-11-19T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.88, + "invoice": 69, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58428, + "pk": 60227, "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, + "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": 4.08, - "invoice": 60, - "date": "2013-11-19T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.36, + "invoice": 69, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58429, + "pk": 60228, "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, + "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.96, - "invoice": 60, - "date": "2013-11-19T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 69, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58430, + "pk": 60229, "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, + "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": 2.08, - "invoice": 60, - "date": "2013-11-20T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 69, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58431, + "pk": 60230, "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, + "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.84, - "invoice": 60, - "date": "2013-11-20T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 70, + "date": "2013-11-25T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58432, + "pk": 60231, "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, + "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.08, - "invoice": 60, - "date": "2013-11-20T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 70, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58433, + "pk": 60232, "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, + "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": 4.56, - "invoice": 60, - "date": "2013-11-21T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 70, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58434, + "pk": 60233, "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, + "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": 4.08, - "invoice": 60, - "date": "2013-11-21T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 70, + "date": "2013-11-26T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58435, + "pk": 60234, "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, + "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": 2.24, - "invoice": 60, - "date": "2013-11-21T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 70, + "date": "2013-11-26T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58436, + "pk": 60235, "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, + "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": 3.2, - "invoice": 60, - "date": "2013-11-22T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 70, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58437, + "pk": 60236, "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, + "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.64, - "invoice": 60, - "date": "2013-11-22T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 70, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58438, + "pk": 60237, "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, + "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.68, - "invoice": 60, - "date": "2013-11-22T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 70, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58439, + "pk": 60238, "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, + "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": 4.48, - "invoice": 60, - "date": "2013-11-23T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.88, + "invoice": 70, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58440, + "pk": 60239, "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, + "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": 4.4, - "invoice": 60, - "date": "2013-11-23T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 70, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58441, + "pk": 60240, "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, + "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": 3.36, - "invoice": 60, - "date": "2013-11-23T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 70, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58442, + "pk": 60241, "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, + "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": 3.6, - "invoice": 60, - "date": "2013-11-24T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 70, + "date": "2013-11-28T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58443, + "pk": 60242, "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, + "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": 3.12, - "invoice": 60, - "date": "2013-11-24T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 70, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58444, + "pk": 60243, "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, + "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": 2.0, - "invoice": 60, - "date": "2013-11-24T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 70, + "date": "2013-11-29T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58445, + "pk": 60244, "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, + "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": 2.16, - "invoice": 61, - "date": "2013-11-25T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.84, + "invoice": 70, + "date": "2013-11-29T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58446, + "pk": 60245, "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, + "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.0, - "invoice": 61, - "date": "2013-11-25T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 70, + "date": "2013-11-30T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58447, + "pk": 60246, "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, + "updated": "2013-12-18T21:29:24.054Z", + "slice": 6, + "created": "2013-12-18T21:29:04.998Z", + "amount": 0.1624, + "object": 109, + "account": 15, "state": "invoiced", - "coreHours": 3.84, - "invoice": 61, - "date": "2013-11-25T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.32, + "invoice": 70, + "date": "2013-11-30T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58448, + "pk": 60247, "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, + "updated": "2013-12-18T21:29:24.162Z", + "slice": 6, + "created": "2013-12-18T21:29:05.007Z", + "amount": 0.1624, + "object": 109, + "account": 15, "state": "invoiced", - "coreHours": 3.68, - "invoice": 61, - "date": "2013-11-26T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.32, + "invoice": 70, + "date": "2013-11-30T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58449, + "pk": 60248, "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, + "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": 3.44, - "invoice": 61, - "date": "2013-11-26T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 70, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58450, + "pk": 60249, "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, + "updated": "2013-12-18T21:29:24.377Z", + "slice": 6, + "created": "2013-12-18T21:29:05.023Z", + "amount": 0.1176, + "object": 109, + "account": 15, "state": "invoiced", - "coreHours": 3.04, - "invoice": 61, - "date": "2013-11-26T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 70, + "date": "2013-12-01T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58451, + "pk": 60250, "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, + "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": 61, - "date": "2013-11-27T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.76, + "invoice": 70, + "date": "2013-12-01T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58452, + "pk": 60251, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.676Z", - "slice": 4, - "created": "2013-12-13T22:19:43.829Z", + "updated": "2013-12-18T21:29:24.601Z", + "slice": 6, + "created": "2013-12-18T21:29:05.040Z", "amount": 0.1904, - "object": 90, - "account": 13, + "object": 109, + "account": 15, "state": "invoiced", "coreHours": 2.72, - "invoice": 61, - "date": "2013-11-27T14:00:00Z", - "kind": "besteffort" + "invoice": 71, + "date": "2013-12-02T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58453, + "pk": 60252, "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, + "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": 4.24, - "invoice": 61, - "date": "2013-11-27T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 71, + "date": "2013-12-02T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58454, + "pk": 60253, "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, + "updated": "2013-12-18T21:29:24.816Z", + "slice": 6, + "created": "2013-12-18T21:29:05.056Z", + "amount": 0.2856, + "object": 109, + "account": 15, "state": "invoiced", - "coreHours": 4.24, - "invoice": 61, - "date": "2013-11-28T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 71, + "date": "2013-12-02T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58455, + "pk": 60254, "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, + "updated": "2013-12-18T21:29:24.924Z", + "slice": 6, + "created": "2013-12-18T21:29:05.065Z", + "amount": 0.3304, + "object": 109, + "account": 15, "state": "invoiced", - "coreHours": 4.0, - "invoice": 61, - "date": "2013-11-28T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 71, + "date": "2013-12-03T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58456, + "pk": 60255, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.041Z", - "slice": 4, - "created": "2013-12-13T22:19:43.862Z", + "updated": "2013-12-18T21:29:25.032Z", + "slice": 6, + "created": "2013-12-18T21:29:05.073Z", "amount": 0.3248, - "object": 90, - "account": 13, + "object": 109, + "account": 15, "state": "invoiced", "coreHours": 4.64, - "invoice": 61, - "date": "2013-11-28T22:00:00Z", - "kind": "besteffort" + "invoice": 71, + "date": "2013-12-03T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58457, + "pk": 60256, "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, + "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": 3.52, - "invoice": 61, - "date": "2013-11-29T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 71, + "date": "2013-12-03T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58458, + "pk": 60257, "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, + "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": 2.32, - "invoice": 61, - "date": "2013-11-29T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 71, + "date": "2013-12-04T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58459, + "pk": 60258, "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, + "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": 1.68, - "invoice": 61, - "date": "2013-11-29T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 71, + "date": "2013-12-04T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58460, + "pk": 60259, "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, + "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": 4.24, - "invoice": 61, - "date": "2013-11-30T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 71, + "date": "2013-12-04T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58461, + "pk": 60260, "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, + "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.84, - "invoice": 61, - "date": "2013-11-30T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 71, + "date": "2013-12-05T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58462, + "pk": 60261, "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, + "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": 2.72, - "invoice": 61, - "date": "2013-11-30T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.76, + "invoice": 71, + "date": "2013-12-05T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58463, + "pk": 60262, "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, + "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": 4.0, - "invoice": 61, - "date": "2013-12-01T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.88, + "invoice": 71, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58464, + "pk": 60263, "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, + "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": 2.24, - "invoice": 61, - "date": "2013-12-01T14:00:00Z", - "kind": "besteffort" + "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": 58465, + "pk": 60265, "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, + "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": 4.4, - "invoice": 61, - "date": "2013-12-01T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 71, + "date": "2013-12-06T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58466, + "pk": 60266, "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, + "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": 3.04, - "invoice": 62, - "date": "2013-12-02T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 71, + "date": "2013-12-07T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58467, + "pk": 60267, "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, + "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": 3.28, - "invoice": 62, - "date": "2013-12-02T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.88, + "invoice": 71, + "date": "2013-12-07T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58468, + "pk": 60268, "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, + "updated": "2013-12-18T21:29:26.432Z", + "slice": 6, + "created": "2013-12-18T21:29:05.181Z", + "amount": 0.224, + "object": 109, + "account": 15, "state": "invoiced", - "coreHours": 4.16, - "invoice": 62, - "date": "2013-12-02T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.2, + "invoice": 71, + "date": "2013-12-07T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58469, + "pk": 60269, "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, + "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": 4.72, - "invoice": 62, - "date": "2013-12-03T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.4, + "invoice": 71, + "date": "2013-12-08T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58470, + "pk": 60270, "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, + "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.68, - "invoice": 62, - "date": "2013-12-03T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 71, + "date": "2013-12-08T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58471, + "pk": 60271, "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, + "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": 1.68, - "invoice": 62, - "date": "2013-12-03T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 71, + "date": "2013-12-08T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58472, + "pk": 60272, "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, + "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": 2.48, - "invoice": 62, - "date": "2013-12-04T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 72, + "date": "2013-12-09T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58473, + "pk": 60273, "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, + "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": 2.24, - "invoice": 62, - "date": "2013-12-04T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 72, + "date": "2013-12-09T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58474, + "pk": 60274, "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, + "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.8, - "invoice": 62, - "date": "2013-12-04T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.16, + "invoice": 72, + "date": "2013-12-09T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58475, + "pk": 60275, "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, + "updated": "2013-12-18T21:29:27.194Z", + "slice": 6, + "created": "2013-12-18T21:29:05.253Z", + "amount": 0.1288, + "object": 109, + "account": 15, "state": "invoiced", - "coreHours": 1.68, - "invoice": 62, - "date": "2013-12-05T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 72, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58476, + "pk": 60276, "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, + "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": 2.48, - "invoice": 62, - "date": "2013-12-05T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 72, + "date": "2013-12-10T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58477, + "pk": 60277, "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, + "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": 1.92, - "invoice": 62, - "date": "2013-12-05T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 72, + "date": "2013-12-10T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58478, + "pk": 60278, "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, + "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": 3.28, - "invoice": 62, - "date": "2013-12-06T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.72, + "invoice": 72, + "date": "2013-12-11T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58479, + "pk": 60279, "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, + "updated": "2013-12-18T21:29:27.683Z", + "slice": 6, + "created": "2013-12-18T21:29:05.363Z", + "amount": 0.2408, + "object": 109, + "account": 15, "state": "invoiced", - "coreHours": 3.28, - "invoice": 62, - "date": "2013-12-06T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 72, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58480, + "pk": 60280, "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, + "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.16, - "invoice": 62, - "date": "2013-12-06T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 72, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58481, + "pk": 60281, "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, + "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": 1.6, - "invoice": 62, - "date": "2013-12-07T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 72, + "date": "2013-12-12T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58482, + "pk": 60282, "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, + "updated": "2013-12-18T21:29:28.006Z", + "slice": 6, + "created": "2013-12-18T21:29:05.388Z", + "amount": 0.1512, + "object": 109, + "account": 15, "state": "invoiced", - "coreHours": 1.92, - "invoice": 62, - "date": "2013-12-07T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.16, + "invoice": 72, + "date": "2013-12-12T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58483, + "pk": 60283, "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, + "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": 3.84, - "invoice": 62, - "date": "2013-12-07T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 72, + "date": "2013-12-12T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58484, + "pk": 60284, "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, + "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.64, - "invoice": 62, - "date": "2013-12-08T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 72, + "date": "2013-12-13T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58485, + "pk": 60285, "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, + "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": 4.56, - "invoice": 62, - "date": "2013-12-08T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 72, + "date": "2013-12-13T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58486, + "pk": 60286, "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, + "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": 3.28, - "invoice": 62, - "date": "2013-12-08T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 72, + "date": "2013-12-13T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58487, + "pk": 60287, "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" + "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": 58488, + "pk": 60288, "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" + "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": 58489, + "pk": 60289, "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" + "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": 58490, + "pk": 60290, "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" + "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": 58491, + "pk": 60291, "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" + "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": 58492, + "pk": 60292, "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" + "updated": "2013-12-18T21:29:29.083Z", + "slice": 6, + "created": "2013-12-18T21:29:05.471Z", + "amount": 0.3304, + "object": 109, + "account": 15, + "state": "invoiced", + "coreHours": 4.72, + "invoice": 72, + "date": "2013-12-15T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58493, + "pk": 60293, "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, + "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": 4.4, + "coreHours": 3.76, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58494, + "pk": 60294, "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, + "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": 3.92, + "coreHours": 2.48, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58495, + "pk": 60295, "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, + "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-11T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58496, + "pk": 60296, "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, + "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": 2.64, + "coreHours": 1.92, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58497, + "pk": 60297, "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, + "updated": "2013-12-18T21:29:05.512Z", + "slice": 6, + "created": "2013-12-18T21:29:05.512Z", + "amount": 0.1624, + "object": 109, + "account": 15, "state": "pending", - "coreHours": 4.0, + "coreHours": 2.32, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58498, + "pk": 60298, "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, + "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.72, + "coreHours": 4.24, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58499, + "pk": 60299, "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, + "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": 2.56, + "coreHours": 1.76, "invoice": null, - "date": "2013-12-13T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58500, + "pk": 60300, "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, + "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": 2.72, + "coreHours": 3.28, "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" + "date": "2013-12-18T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58502, + "pk": 60301, "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, + "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": 4.0, - "invoice": 59, - "date": "2013-11-14T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 69, + "date": "2013-11-18T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58503, + "pk": 60302, "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, + "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": 3.76, - "invoice": 59, - "date": "2013-11-14T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.16, + "invoice": 69, + "date": "2013-11-19T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58504, + "pk": 60303, "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, + "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": 2.4, - "invoice": 59, - "date": "2013-11-14T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 69, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58505, + "pk": 60304, "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, + "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": 3.92, - "invoice": 59, - "date": "2013-11-15T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 69, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58506, + "pk": 60305, "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, + "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": 2.48, - "invoice": 59, - "date": "2013-11-15T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 69, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58507, + "pk": 60306, "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, + "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": 1.92, - "invoice": 59, - "date": "2013-11-15T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 69, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58508, + "pk": 60307, "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, + "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": 1.84, - "invoice": 59, - "date": "2013-11-16T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 69, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58509, + "pk": 60308, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.220Z", - "slice": 4, - "created": "2013-12-13T22:19:44.310Z", - "amount": 0.2744, - "object": 91, - "account": 13, + "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.92, - "invoice": 59, - "date": "2013-11-16T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 69, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58510, + "pk": 60309, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.311Z", - "slice": 4, - "created": "2013-12-13T22:19:44.318Z", - "amount": 0.336, - "object": 91, - "account": 13, + "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.8, - "invoice": 59, - "date": "2013-11-16T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 69, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58511, + "pk": 60310, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.402Z", - "slice": 4, - "created": "2013-12-13T22:19:44.326Z", - "amount": 0.1624, - "object": 91, - "account": 13, + "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": 2.32, - "invoice": 59, - "date": "2013-11-17T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 69, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58512, + "pk": 60311, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.493Z", - "slice": 4, - "created": "2013-12-13T22:19:44.334Z", - "amount": 0.1848, - "object": 91, - "account": 13, + "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": 2.64, - "invoice": 59, - "date": "2013-11-17T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.64, + "invoice": 69, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58513, + "pk": 60312, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.584Z", - "slice": 4, - "created": "2013-12-13T22:19:44.343Z", - "amount": 0.1904, - "object": 91, - "account": 13, + "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.72, - "invoice": 59, - "date": "2013-11-17T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 69, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58514, + "pk": 60313, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.696Z", - "slice": 4, - "created": "2013-12-13T22:19:44.351Z", - "amount": 0.14, - "object": 91, - "account": 13, + "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": 2.0, - "invoice": 60, - "date": "2013-11-18T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 69, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58515, + "pk": 60314, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.787Z", - "slice": 4, - "created": "2013-12-13T22:19:44.359Z", - "amount": 0.1792, - "object": 91, - "account": 13, + "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": 2.56, - "invoice": 60, - "date": "2013-11-18T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 69, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58516, + "pk": 60315, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.878Z", - "slice": 4, - "created": "2013-12-13T22:19:44.368Z", + "updated": "2013-12-18T21:29:21.751Z", + "slice": 6, + "created": "2013-12-18T21:29:05.694Z", "amount": 0.224, - "object": 91, - "account": 13, + "object": 110, + "account": 15, "state": "invoiced", "coreHours": 3.2, - "invoice": 60, - "date": "2013-11-18T22:00:00Z", - "kind": "besteffort" + "invoice": 69, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58517, + "pk": 60316, "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, + "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": 3.84, - "invoice": 60, - "date": "2013-11-19T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.32, + "invoice": 69, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58518, + "pk": 60317, "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, + "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": 1.68, - "invoice": 60, - "date": "2013-11-19T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 69, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58519, + "pk": 60318, "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, + "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": 2.88, - "invoice": 60, - "date": "2013-11-19T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 69, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58520, + "pk": 60319, "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, + "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": 2.96, - "invoice": 60, - "date": "2013-11-20T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 69, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58521, + "pk": 60320, "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, + "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": 4.64, - "invoice": 60, - "date": "2013-11-20T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 70, + "date": "2013-11-25T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58522, + "pk": 60321, "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, + "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": 1.76, - "invoice": 60, - "date": "2013-11-20T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 70, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58523, + "pk": 60322, "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, + "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": 4.8, - "invoice": 60, - "date": "2013-11-21T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 70, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58524, + "pk": 60323, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.634Z", - "slice": 4, - "created": "2013-12-13T22:19:44.434Z", - "amount": 0.1736, - "object": 91, - "account": 13, + "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.48, - "invoice": 60, - "date": "2013-11-21T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 70, + "date": "2013-11-26T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58525, + "pk": 60324, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.725Z", - "slice": 4, - "created": "2013-12-13T22:19:44.442Z", - "amount": 0.168, - "object": 91, - "account": 13, + "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.4, - "invoice": 60, - "date": "2013-11-21T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 70, + "date": "2013-11-26T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58526, + "pk": 60325, "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, + "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.24, - "invoice": 60, - "date": "2013-11-22T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 70, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58527, + "pk": 60326, "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, + "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": 1.84, - "invoice": 60, - "date": "2013-11-22T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.36, + "invoice": 70, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58528, + "pk": 60327, "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, + "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": 2.48, - "invoice": 60, - "date": "2013-11-22T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 70, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58529, + "pk": 60328, "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, + "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": 2.08, - "invoice": 60, - "date": "2013-11-23T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 70, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58530, + "pk": 60329, "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, + "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": 4.0, - "invoice": 60, - "date": "2013-11-23T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 70, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58531, + "pk": 60330, "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, + "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.76, - "invoice": 60, - "date": "2013-11-23T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 70, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58532, + "pk": 60331, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.744Z", - "slice": 4, - "created": "2013-12-13T22:19:44.500Z", + "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": 91, - "account": 13, + "object": 110, + "account": 15, "state": "invoiced", "coreHours": 4.72, - "invoice": 60, - "date": "2013-11-24T06:00:00Z", - "kind": "besteffort" + "invoice": 70, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58533, + "pk": 60333, "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, + "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.6, - "invoice": 60, - "date": "2013-11-24T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 70, + "date": "2013-11-29T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58534, + "pk": 60334, "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, + "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": 1.6, - "invoice": 60, - "date": "2013-11-24T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 70, + "date": "2013-11-29T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58535, + "pk": 60335, "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, + "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.84, - "invoice": 61, - "date": "2013-11-25T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.76, + "invoice": 70, + "date": "2013-11-30T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58536, + "pk": 60336, "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, + "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": 4.32, - "invoice": 61, - "date": "2013-11-25T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 70, + "date": "2013-11-30T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58537, + "pk": 60337, "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, + "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.68, - "invoice": 61, - "date": "2013-11-25T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.76, + "invoice": 70, + "date": "2013-11-30T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58538, + "pk": 60338, "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, + "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": 3.6, - "invoice": 61, - "date": "2013-11-26T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 70, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58539, + "pk": 60339, "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, + "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": 2.72, - "invoice": 61, - "date": "2013-11-26T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 70, + "date": "2013-12-01T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58540, + "pk": 60340, "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, + "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.16, - "invoice": 61, - "date": "2013-11-26T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 70, + "date": "2013-12-01T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58541, + "pk": 60341, "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, + "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.56, - "invoice": 61, - "date": "2013-11-27T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.4, + "invoice": 71, + "date": "2013-12-02T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58542, + "pk": 60342, "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, + "updated": "2013-12-18T21:29:24.717Z", + "slice": 6, + "created": "2013-12-18T21:29:05.929Z", + "amount": 0.14, + "object": 110, + "account": 15, "state": "invoiced", - "coreHours": 4.08, - "invoice": 61, - "date": "2013-11-27T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 71, + "date": "2013-12-02T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58543, + "pk": 60343, "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, + "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": 3.12, - "invoice": 61, - "date": "2013-11-27T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 71, + "date": "2013-12-02T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58544, + "pk": 60344, "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, + "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": 1.68, - "invoice": 61, - "date": "2013-11-28T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.76, + "invoice": 71, + "date": "2013-12-03T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58545, + "pk": 60345, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.942Z", - "slice": 4, - "created": "2013-12-13T22:19:44.608Z", + "updated": "2013-12-18T21:29:25.040Z", + "slice": 6, + "created": "2013-12-18T21:29:05.954Z", "amount": 0.2912, - "object": 91, - "account": 13, + "object": 110, + "account": 15, "state": "invoiced", "coreHours": 4.16, - "invoice": 61, - "date": "2013-11-28T14:00:00Z", - "kind": "besteffort" + "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": 58546, + "pk": 60347, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.033Z", - "slice": 4, - "created": "2013-12-13T22:19:44.616Z", - "amount": 0.1512, - "object": 91, - "account": 13, + "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": 2.16, - "invoice": 61, - "date": "2013-11-28T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.84, + "invoice": 71, + "date": "2013-12-04T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58547, + "pk": 60348, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.124Z", - "slice": 4, - "created": "2013-12-13T22:19:44.624Z", - "amount": 0.1232, - "object": 91, - "account": 13, + "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": 1.76, - "invoice": 61, - "date": "2013-11-29T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 71, + "date": "2013-12-04T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58548, + "pk": 60349, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.215Z", - "slice": 4, - "created": "2013-12-13T22:19:44.633Z", - "amount": 0.14, - "object": 91, - "account": 13, + "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": 2.0, - "invoice": 61, - "date": "2013-11-29T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 71, + "date": "2013-12-04T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58549, + "pk": 60350, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.306Z", - "slice": 4, - "created": "2013-12-13T22:19:44.641Z", - "amount": 0.1176, - "object": 91, - "account": 13, + "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": 1.68, - "invoice": 61, - "date": "2013-11-29T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.64, + "invoice": 71, + "date": "2013-12-05T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58550, + "pk": 60351, "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, + "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": 1.68, - "invoice": 61, - "date": "2013-11-30T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 71, + "date": "2013-12-05T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58551, + "pk": 60352, "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, + "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": 2.88, - "invoice": 61, - "date": "2013-11-30T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 71, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58552, + "pk": 60353, "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, + "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": 2.32, - "invoice": 61, - "date": "2013-11-30T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.2, + "invoice": 71, + "date": "2013-12-06T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58553, + "pk": 60354, "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, + "updated": "2013-12-18T21:29:26.009Z", + "slice": 6, + "created": "2013-12-18T21:29:06.028Z", + "amount": 0.1848, + "object": 110, + "account": 15, "state": "invoiced", - "coreHours": 3.28, - "invoice": 61, - "date": "2013-12-01T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 71, + "date": "2013-12-06T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58554, + "pk": 60355, "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, + "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": 1.68, - "invoice": 61, - "date": "2013-12-01T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 71, + "date": "2013-12-06T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58555, + "pk": 60356, "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, + "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": 2.88, - "invoice": 61, - "date": "2013-12-01T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 71, + "date": "2013-12-07T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58556, + "pk": 60357, "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, + "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": 3.28, - "invoice": 62, - "date": "2013-12-02T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.4, + "invoice": 71, + "date": "2013-12-07T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58557, + "pk": 60358, "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, + "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": 4.08, - "invoice": 62, - "date": "2013-12-02T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 71, + "date": "2013-12-07T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58558, + "pk": 60359, "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, + "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.92, - "invoice": 62, - "date": "2013-12-02T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 71, + "date": "2013-12-08T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58559, + "pk": 60360, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.227Z", - "slice": 4, - "created": "2013-12-13T22:19:44.724Z", - "amount": 0.1344, - "object": 91, - "account": 13, + "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": 1.92, - "invoice": 62, - "date": "2013-12-03T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 71, + "date": "2013-12-08T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58560, + "pk": 60361, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.319Z", - "slice": 4, - "created": "2013-12-13T22:19:44.732Z", - "amount": 0.28, - "object": 91, - "account": 13, + "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": 4.0, - "invoice": 62, - "date": "2013-12-03T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 71, + "date": "2013-12-08T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58561, + "pk": 60362, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.410Z", - "slice": 4, - "created": "2013-12-13T22:19:44.740Z", - "amount": 0.3136, - "object": 91, - "account": 13, + "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": 4.48, - "invoice": 62, - "date": "2013-12-03T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 72, + "date": "2013-12-09T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58562, + "pk": 60363, "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, + "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": 2.08, - "invoice": 62, - "date": "2013-12-04T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 72, + "date": "2013-12-09T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58563, + "pk": 60364, "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, + "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": 3.92, - "invoice": 62, - "date": "2013-12-04T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 72, + "date": "2013-12-09T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58564, + "pk": 60365, "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, + "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": 4.32, - "invoice": 62, - "date": "2013-12-04T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.92, + "invoice": 72, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58565, + "pk": 60366, "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, + "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": 3.68, - "invoice": 62, - "date": "2013-12-05T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 72, + "date": "2013-12-10T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58566, + "pk": 60367, "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, + "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.96, - "invoice": 62, - "date": "2013-12-05T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 72, + "date": "2013-12-10T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58567, + "pk": 60368, "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, + "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": 2.72, - "invoice": 62, - "date": "2013-12-05T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 72, + "date": "2013-12-11T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58568, + "pk": 60369, "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, + "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": 2.16, - "invoice": 62, - "date": "2013-12-06T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 72, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58569, + "pk": 60370, "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, + "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.28, - "invoice": 62, - "date": "2013-12-06T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 72, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58570, + "pk": 60371, "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, + "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": 3.04, - "invoice": 62, - "date": "2013-12-06T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 72, + "date": "2013-12-12T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58571, + "pk": 60372, "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, + "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": 2.24, - "invoice": 62, - "date": "2013-12-07T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 72, + "date": "2013-12-12T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58572, + "pk": 60373, "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, + "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": 3.28, - "invoice": 62, - "date": "2013-12-07T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 72, + "date": "2013-12-12T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58573, + "pk": 60374, "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, + "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": 3.2, - "invoice": 62, - "date": "2013-12-07T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 72, + "date": "2013-12-13T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58574, + "pk": 60375, "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, + "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": 2.8, - "invoice": 62, - "date": "2013-12-08T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 72, + "date": "2013-12-13T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58575, + "pk": 60376, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.692Z", - "slice": 4, - "created": "2013-12-13T22:19:44.856Z", - "amount": 0.308, - "object": 91, - "account": 13, + "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": 4.4, - "invoice": 62, - "date": "2013-12-08T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.76, + "invoice": 72, + "date": "2013-12-13T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58576, + "pk": 60377, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.783Z", - "slice": 4, - "created": "2013-12-13T22:19:44.865Z", - "amount": 0.2128, - "object": 91, - "account": 13, + "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": 3.04, - "invoice": 62, - "date": "2013-12-08T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 72, + "date": "2013-12-14T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58577, + "pk": 60378, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.873Z", - "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" + "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": 58578, + "pk": 60379, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.881Z", - "slice": 4, - "created": "2013-12-13T22:19:44.881Z", - "amount": 0.2632, - "object": 91, - "account": 13, - "state": "pending", - "coreHours": 3.76, - "invoice": null, - "date": "2013-12-09T14:00:00Z", - "kind": "besteffort" + "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": 58579, + "pk": 60380, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.890Z", - "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" + "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": 58580, + "pk": 60381, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.898Z", - "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" + "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": 58581, + "pk": 60382, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.906Z", - "slice": 4, - "created": "2013-12-13T22:19:44.906Z", - "amount": 0.1456, - "object": 91, - "account": 13, - "state": "pending", - "coreHours": 2.08, - "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "besteffort" + "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": 58582, + "pk": 60383, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.914Z", - "slice": 4, - "created": "2013-12-13T22:19:44.914Z", - "amount": 0.3136, - "object": 91, - "account": 13, + "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.48, + "coreHours": 4.72, "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58583, + "pk": 60384, "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, + "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.48, + "coreHours": 2.64, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58584, + "pk": 60385, "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, + "updated": "2013-12-18T21:29:06.285Z", + "slice": 6, + "created": "2013-12-18T21:29:06.285Z", + "amount": 0.28, + "object": 110, + "account": 15, "state": "pending", - "coreHours": 3.36, + "coreHours": 4.0, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58585, + "pk": 60386, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.939Z", - "slice": 4, - "created": "2013-12-13T22:19:44.939Z", - "amount": 0.2296, - "object": 91, - "account": 13, + "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": 3.28, + "coreHours": 1.68, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58586, + "pk": 60387, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.947Z", - "slice": 4, - "created": "2013-12-13T22:19:44.947Z", - "amount": 0.1456, - "object": 91, - "account": 13, + "updated": "2013-12-18T21:29:06.302Z", + "slice": 6, + "created": "2013-12-18T21:29:06.302Z", + "amount": 0.2016, + "object": 110, + "account": 15, "state": "pending", - "coreHours": 2.08, + "coreHours": 2.88, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58587, + "pk": 60388, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.957Z", - "slice": 4, - "created": "2013-12-13T22:19:44.957Z", - "amount": 0.2688, - "object": 91, - "account": 13, + "updated": "2013-12-18T21:29:06.310Z", + "slice": 6, + "created": "2013-12-18T21:29:06.310Z", + "amount": 0.2576, + "object": 110, + "account": 15, "state": "pending", - "coreHours": 3.84, + "coreHours": 3.68, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58588, + "pk": 60389, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.966Z", - "slice": 4, - "created": "2013-12-13T22:19:44.966Z", - "amount": 0.224, - "object": 91, - "account": 13, + "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": 3.2, + "coreHours": 4.8, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58589, + "pk": 60390, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.974Z", - "slice": 4, - "created": "2013-12-13T22:19:44.974Z", + "updated": "2013-12-18T21:29:06.326Z", + "slice": 6, + "created": "2013-12-18T21:29:06.326Z", "amount": 0.3248, - "object": 91, - "account": 13, + "object": 110, + "account": 15, "state": "pending", "coreHours": 4.64, "invoice": null, - "date": "2013-12-13T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58590, + "pk": 60391, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:44.982Z", - "slice": 4, - "created": "2013-12-13T22:19:44.982Z", - "amount": 0.2352, - "object": 91, - "account": 13, - "state": "pending", - "coreHours": 3.36, - "invoice": null, - "date": "2013-12-13T14:00:00Z", - "kind": "besteffort" + "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": 58591, + "pk": 60392, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.465Z", - "slice": 4, - "created": "2013-12-13T22:19:44.997Z", - "amount": 0.308, - "object": 92, - "account": 13, + "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.4, - "invoice": 59, - "date": "2013-11-13T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.64, + "invoice": 69, + "date": "2013-11-19T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58592, + "pk": 60393, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.556Z", - "slice": 4, - "created": "2013-12-13T22:19:45.007Z", - "amount": 0.168, - "object": 92, - "account": 13, + "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": 2.4, - "invoice": 59, - "date": "2013-11-14T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 69, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58593, + "pk": 60394, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.648Z", - "slice": 4, - "created": "2013-12-13T22:19:45.015Z", - "amount": 0.252, - "object": 92, - "account": 13, + "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": 3.6, - "invoice": 59, - "date": "2013-11-14T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 69, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58594, + "pk": 60395, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.739Z", - "slice": 4, - "created": "2013-12-13T22:19:45.024Z", - "amount": 0.28, - "object": 92, - "account": 13, + "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": 4.0, - "invoice": 59, - "date": "2013-11-14T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 69, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58595, + "pk": 60396, "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, + "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": 3.68, - "invoice": 59, - "date": "2013-11-15T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 69, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58596, + "pk": 60397, "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, + "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": 2.48, - "invoice": 59, - "date": "2013-11-15T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.92, + "invoice": 69, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58597, + "pk": 60398, "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, + "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": 2.16, - "invoice": 59, - "date": "2013-11-15T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 69, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58598, + "pk": 60399, "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, + "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.6, - "invoice": 59, - "date": "2013-11-16T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 69, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58599, + "pk": 60400, "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, + "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": 3.52, - "invoice": 59, - "date": "2013-11-16T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 69, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58600, + "pk": 60401, "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, + "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": 3.04, - "invoice": 59, - "date": "2013-11-16T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 69, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58601, + "pk": 60402, "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, + "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": 4.32, - "invoice": 59, - "date": "2013-11-17T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 69, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58602, + "pk": 60403, "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, + "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": 4.4, - "invoice": 59, - "date": "2013-11-17T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.32, + "invoice": 69, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58603, + "pk": 60404, "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, + "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": 4.72, - "invoice": 59, - "date": "2013-11-17T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.76, + "invoice": 69, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58604, + "pk": 60405, "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, + "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": 3.84, - "invoice": 60, - "date": "2013-11-18T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 69, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58605, + "pk": 60406, "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, + "updated": "2013-12-18T21:29:21.867Z", + "slice": 6, + "created": "2013-12-18T21:29:06.467Z", + "amount": 0.2184, + "object": 111, + "account": 15, "state": "invoiced", - "coreHours": 4.56, - "invoice": 60, - "date": "2013-11-18T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 69, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58606, + "pk": 60407, "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, + "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.36, - "invoice": 60, - "date": "2013-11-18T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 69, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58607, + "pk": 60408, "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, + "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": 4.08, - "invoice": 60, - "date": "2013-11-19T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 69, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58608, + "pk": 60409, "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, + "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": 3.44, - "invoice": 60, - "date": "2013-11-19T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 69, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58609, + "pk": 60410, "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, + "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.04, - "invoice": 60, - "date": "2013-11-19T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.84, + "invoice": 70, + "date": "2013-11-25T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58610, + "pk": 60411, "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, + "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": 3.52, - "invoice": 60, - "date": "2013-11-20T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 70, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58611, + "pk": 60412, "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, + "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": 2.0, - "invoice": 60, - "date": "2013-11-20T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 70, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58612, + "pk": 60413, "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, + "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.24, - "invoice": 60, - "date": "2013-11-20T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 70, + "date": "2013-11-26T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58613, + "pk": 60414, "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, + "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": 3.28, - "invoice": 60, - "date": "2013-11-21T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 70, + "date": "2013-11-26T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58614, + "pk": 60415, "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, + "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": 1.76, - "invoice": 60, - "date": "2013-11-21T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 70, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58615, + "pk": 60416, "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, + "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": 3.2, - "invoice": 60, - "date": "2013-11-21T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 70, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58616, + "pk": 60417, "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, + "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.08, - "invoice": 60, - "date": "2013-11-22T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.64, + "invoice": 70, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58617, + "pk": 60418, "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, + "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": 4.8, - "invoice": 60, - "date": "2013-11-22T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 70, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58618, + "pk": 60419, "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, + "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": 4.56, - "invoice": 60, - "date": "2013-11-22T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.36, + "invoice": 70, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58619, + "pk": 60420, "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, + "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": 3.6, - "invoice": 60, - "date": "2013-11-23T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 70, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58620, + "pk": 60421, "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, + "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": 2.16, - "invoice": 60, - "date": "2013-11-23T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 70, + "date": "2013-11-28T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58621, + "pk": 60422, "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, + "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": 2.0, - "invoice": 60, - "date": "2013-11-23T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 70, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58622, + "pk": 60423, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.736Z", - "slice": 4, - "created": "2013-12-13T22:19:45.256Z", + "updated": "2013-12-18T21:29:23.748Z", + "slice": 6, + "created": "2013-12-18T21:29:06.608Z", "amount": 0.14, - "object": 92, - "account": 13, + "object": 111, + "account": 15, "state": "invoiced", "coreHours": 2.0, - "invoice": 60, - "date": "2013-11-24T06:00:00Z", - "kind": "besteffort" + "invoice": 70, + "date": "2013-11-29T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58623, + "pk": 60424, "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, + "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": 1.84, - "invoice": 60, - "date": "2013-11-24T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 70, + "date": "2013-11-29T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58624, + "pk": 60425, "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, + "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": 1.84, - "invoice": 60, - "date": "2013-11-24T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 70, + "date": "2013-11-30T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58625, + "pk": 60426, "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, + "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": 3.28, - "invoice": 61, - "date": "2013-11-25T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 70, + "date": "2013-11-30T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58626, + "pk": 60427, "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, + "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": 2.0, - "invoice": 61, - "date": "2013-11-25T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 70, + "date": "2013-11-30T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58627, + "pk": 60428, "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, + "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": 3.52, - "invoice": 61, - "date": "2013-11-25T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.4, + "invoice": 70, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58628, + "pk": 60429, "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, + "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": 2.72, - "invoice": 61, - "date": "2013-11-26T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 70, + "date": "2013-12-01T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58629, + "pk": 60430, "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, + "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": 3.44, - "invoice": 61, - "date": "2013-11-26T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 70, + "date": "2013-12-01T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58630, + "pk": 60431, "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, + "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": 2.48, - "invoice": 61, - "date": "2013-11-26T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 71, + "date": "2013-12-02T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58631, + "pk": 60432, "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, + "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": 2.16, - "invoice": 61, - "date": "2013-11-27T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 71, + "date": "2013-12-02T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58632, + "pk": 60433, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.660Z", - "slice": 4, - "created": "2013-12-13T22:19:45.339Z", - "amount": 0.2912, - "object": 92, - "account": 13, + "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": 4.16, - "invoice": 61, - "date": "2013-11-27T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 71, + "date": "2013-12-02T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58633, + "pk": 60434, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.751Z", - "slice": 4, - "created": "2013-12-13T22:19:45.347Z", - "amount": 0.1512, - "object": 92, - "account": 13, + "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": 2.16, - "invoice": 61, - "date": "2013-11-27T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 71, + "date": "2013-12-03T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58634, + "pk": 60435, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.842Z", - "slice": 4, - "created": "2013-12-13T22:19:45.355Z", + "updated": "2013-12-18T21:29:25.048Z", + "slice": 6, + "created": "2013-12-18T21:29:06.708Z", "amount": 0.2632, - "object": 92, - "account": 13, + "object": 111, + "account": 15, "state": "invoiced", "coreHours": 3.76, - "invoice": 61, - "date": "2013-11-28T06:00:00Z", - "kind": "besteffort" + "invoice": 71, + "date": "2013-12-03T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58635, + "pk": 60436, "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, + "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": 4.24, - "invoice": 61, - "date": "2013-11-28T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 71, + "date": "2013-12-03T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58636, + "pk": 60437, "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, + "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": 3.36, - "invoice": 61, - "date": "2013-11-28T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 71, + "date": "2013-12-04T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58637, + "pk": 60438, "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, + "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": 3.6, - "invoice": 61, - "date": "2013-11-29T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 71, + "date": "2013-12-04T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58638, + "pk": 60439, "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, + "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.96, - "invoice": 61, - "date": "2013-11-29T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 71, + "date": "2013-12-04T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58639, + "pk": 60440, "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, + "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": 3.2, - "invoice": 61, - "date": "2013-11-29T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 71, + "date": "2013-12-05T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58640, + "pk": 60441, "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, + "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.44, - "invoice": 61, - "date": "2013-11-30T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 71, + "date": "2013-12-05T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58641, + "pk": 60442, "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, + "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.16, - "invoice": 61, - "date": "2013-11-30T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 71, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58642, + "pk": 60443, "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, + "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": 2.48, - "invoice": 61, - "date": "2013-11-30T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 71, + "date": "2013-12-06T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58643, + "pk": 60444, "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, + "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": 4.48, - "invoice": 61, - "date": "2013-12-01T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 71, + "date": "2013-12-06T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58644, + "pk": 60445, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.755Z", - "slice": 4, - "created": "2013-12-13T22:19:45.438Z", - "amount": 0.2184, - "object": 92, - "account": 13, + "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": 3.12, - "invoice": 61, - "date": "2013-12-01T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 71, + "date": "2013-12-06T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58645, + "pk": 60446, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.838Z", - "slice": 4, - "created": "2013-12-13T22:19:45.446Z", - "amount": 0.336, - "object": 92, - "account": 13, + "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": 4.8, - "invoice": 61, - "date": "2013-12-01T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 71, + "date": "2013-12-07T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58646, + "pk": 60447, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.937Z", - "slice": 4, - "created": "2013-12-13T22:19:45.454Z", - "amount": 0.14, - "object": 92, - "account": 13, + "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.0, - "invoice": 62, - "date": "2013-12-02T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 71, + "date": "2013-12-07T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58647, + "pk": 60448, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.028Z", - "slice": 4, - "created": "2013-12-13T22:19:45.463Z", - "amount": 0.1288, - "object": 92, - "account": 13, + "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": 1.84, - "invoice": 62, - "date": "2013-12-02T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 71, + "date": "2013-12-07T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58648, + "pk": 60449, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.120Z", - "slice": 4, - "created": "2013-12-13T22:19:45.471Z", - "amount": 0.1624, - "object": 92, - "account": 13, + "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": 2.32, - "invoice": 62, - "date": "2013-12-02T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 71, + "date": "2013-12-08T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58649, + "pk": 60450, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.211Z", - "slice": 4, - "created": "2013-12-13T22:19:45.479Z", - "amount": 0.196, - "object": 92, - "account": 13, + "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": 2.8, - "invoice": 62, - "date": "2013-12-03T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 71, + "date": "2013-12-08T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58650, + "pk": 60451, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.302Z", - "slice": 4, - "created": "2013-12-13T22:19:45.487Z", - "amount": 0.2576, - "object": 92, - "account": 13, + "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": 3.68, - "invoice": 62, - "date": "2013-12-03T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.88, + "invoice": 71, + "date": "2013-12-08T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58651, + "pk": 60452, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.393Z", - "slice": 4, - "created": "2013-12-13T22:19:45.496Z", - "amount": 0.308, - "object": 92, - "account": 13, + "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": 4.4, - "invoice": 62, - "date": "2013-12-03T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 72, + "date": "2013-12-09T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58652, + "pk": 60453, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.484Z", - "slice": 4, - "created": "2013-12-13T22:19:45.504Z", - "amount": 0.28, - "object": 92, - "account": 13, + "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.0, - "invoice": 62, - "date": "2013-12-04T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 72, + "date": "2013-12-09T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58653, + "pk": 60454, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.575Z", - "slice": 4, - "created": "2013-12-13T22:19:45.534Z", - "amount": 0.2464, - "object": 92, - "account": 13, + "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": 3.52, - "invoice": 62, - "date": "2013-12-04T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 72, + "date": "2013-12-09T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58654, + "pk": 60455, "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, + "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.52, - "invoice": 62, - "date": "2013-12-04T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 72, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58655, + "pk": 60456, "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, + "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": 3.52, - "invoice": 62, - "date": "2013-12-05T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 72, + "date": "2013-12-10T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58656, + "pk": 60457, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.849Z", - "slice": 4, - "created": "2013-12-13T22:19:45.570Z", + "updated": "2013-12-18T21:29:27.426Z", + "slice": 6, + "created": "2013-12-18T21:29:06.890Z", "amount": 0.2184, - "object": 92, - "account": 13, + "object": 111, + "account": 15, "state": "invoiced", "coreHours": 3.12, - "invoice": 62, - "date": "2013-12-05T14:00:00Z", - "kind": "besteffort" + "invoice": 72, + "date": "2013-12-10T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58657, + "pk": 60458, "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, + "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": 2.8, - "invoice": 62, - "date": "2013-12-05T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.92, + "invoice": 72, + "date": "2013-12-11T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58658, + "pk": 60459, "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, + "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.32, - "invoice": 62, - "date": "2013-12-06T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 72, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58659, + "pk": 60460, "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, + "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": 4.56, - "invoice": 62, - "date": "2013-12-06T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 72, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58660, + "pk": 60461, "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, + "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": 2.8, - "invoice": 62, - "date": "2013-12-06T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 72, + "date": "2013-12-12T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58661, + "pk": 60462, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.319Z", - "slice": 4, - "created": "2013-12-13T22:19:45.612Z", + "updated": "2013-12-18T21:29:28.022Z", + "slice": 6, + "created": "2013-12-18T21:29:06.931Z", "amount": 0.1624, - "object": 92, - "account": 13, + "object": 111, + "account": 15, "state": "invoiced", "coreHours": 2.32, - "invoice": 62, - "date": "2013-12-07T06:00:00Z", - "kind": "besteffort" + "invoice": 72, + "date": "2013-12-12T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58662, + "pk": 60463, "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, + "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.96, - "invoice": 62, - "date": "2013-12-07T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 72, + "date": "2013-12-12T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58663, + "pk": 60464, "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, + "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": 4.72, - "invoice": 62, - "date": "2013-12-07T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 72, + "date": "2013-12-13T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58664, + "pk": 60465, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.593Z", - "slice": 4, - "created": "2013-12-13T22:19:45.637Z", - "amount": 0.2128, - "object": 92, - "account": 13, + "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.04, - "invoice": 62, - "date": "2013-12-08T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.2, + "invoice": 72, + "date": "2013-12-13T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58665, + "pk": 60466, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.684Z", - "slice": 4, - "created": "2013-12-13T22:19:45.645Z", - "amount": 0.252, - "object": 92, - "account": 13, + "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.6, - "invoice": 62, - "date": "2013-12-08T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.84, + "invoice": 72, + "date": "2013-12-13T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58666, + "pk": 60467, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.775Z", - "slice": 4, - "created": "2013-12-13T22:19:45.653Z", - "amount": 0.3192, - "object": 92, - "account": 13, + "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": 4.56, - "invoice": 62, - "date": "2013-12-08T22:00:00Z", - "kind": "besteffort" - } -}, -{ - "pk": 58667, - "model": "core.charge", - "fields": { - "updated": "2013-12-13T22:19:45.662Z", - "slice": 4, - "created": "2013-12-13T22:19:45.661Z", - "amount": 0.112, - "object": 92, - "account": 13, - "state": "pending", - "coreHours": 1.6, - "invoice": null, - "date": "2013-12-09T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.2, + "invoice": 72, + "date": "2013-12-14T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58668, + "pk": 60468, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:45.670Z", - "slice": 4, - "created": "2013-12-13T22:19:45.670Z", - "amount": 0.2072, - "object": 92, - "account": 13, - "state": "pending", - "coreHours": 2.96, - "invoice": null, - "date": "2013-12-09T14:00:00Z", - "kind": "besteffort" + "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": 58669, + "pk": 60469, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:45.678Z", - "slice": 4, - "created": "2013-12-13T22:19:45.678Z", - "amount": 0.2464, - "object": 92, - "account": 13, - "state": "pending", - "coreHours": 3.52, - "invoice": null, - "date": "2013-12-09T22:00:00Z", - "kind": "besteffort" + "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": 58670, + "pk": 60470, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:45.686Z", - "slice": 4, - "created": "2013-12-13T22:19:45.686Z", - "amount": 0.1232, - "object": 92, - "account": 13, - "state": "pending", - "coreHours": 1.76, - "invoice": null, - "date": "2013-12-10T06:00:00Z", - "kind": "besteffort" + "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": 58671, + "pk": 60471, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:45.695Z", - "slice": 4, - "created": "2013-12-13T22:19:45.695Z", - "amount": 0.1624, - "object": 92, - "account": 13, - "state": "pending", - "coreHours": 2.32, - "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "besteffort" + "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": 58672, + "pk": 60472, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:45.703Z", - "slice": 4, - "created": "2013-12-13T22:19:45.703Z", - "amount": 0.14, - "object": 92, - "account": 13, - "state": "pending", - "coreHours": 2.0, - "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "besteffort" + "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": 58673, + "pk": 60473, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:45.711Z", - "slice": 4, - "created": "2013-12-13T22:19:45.711Z", - "amount": 0.3304, - "object": 92, - "account": 13, + "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.72, + "coreHours": 4.4, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58674, + "pk": 60474, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:45.719Z", - "slice": 4, - "created": "2013-12-13T22:19:45.719Z", - "amount": 0.196, - "object": 92, - "account": 13, + "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.8, + "coreHours": 2.0, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58675, + "pk": 60475, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:45.728Z", - "slice": 4, - "created": "2013-12-13T22:19:45.728Z", - "amount": 0.2912, - "object": 92, - "account": 13, + "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": 4.16, + "coreHours": 1.92, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58676, + "pk": 60476, "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, + "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.72, + "coreHours": 2.8, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58677, + "pk": 60477, "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, + "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.48, + "coreHours": 4.8, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58678, + "pk": 60478, "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, + "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.72, + "coreHours": 4.64, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58679, + "pk": 60479, "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, + "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": 2.56, + "coreHours": 4.16, "invoice": null, - "date": "2013-12-13T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58680, + "pk": 60480, "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, + "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": 1.92, + "coreHours": 4.0, "invoice": null, - "date": "2013-12-13T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58681, + "pk": 60481, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.457Z", + "updated": "2013-12-18T21:29:20.260Z", "slice": 8, - "created": "2013-12-13T22:19:45.817Z", + "created": "2013-12-18T21:29:07.112Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-13T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-18T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58682, + "pk": 60482, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.548Z", + "updated": "2013-12-18T21:29:20.368Z", "slice": 8, - "created": "2013-12-13T22:19:45.827Z", + "created": "2013-12-18T21:29:07.122Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-14T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-19T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58683, + "pk": 60483, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.639Z", + "updated": "2013-12-18T21:29:20.476Z", "slice": 8, - "created": "2013-12-13T22:19:45.836Z", + "created": "2013-12-18T21:29:07.130Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-14T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-19T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58684, + "pk": 60484, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.730Z", + "updated": "2013-12-18T21:29:20.583Z", "slice": 8, - "created": "2013-12-13T22:19:45.844Z", + "created": "2013-12-18T21:29:07.138Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-14T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-19T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58685, + "pk": 60485, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.822Z", + "updated": "2013-12-18T21:29:20.691Z", "slice": 8, - "created": "2013-12-13T22:19:45.852Z", + "created": "2013-12-18T21:29:07.147Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-15T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-20T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58686, + "pk": 60486, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.913Z", + "updated": "2013-12-18T21:29:20.799Z", "slice": 8, - "created": "2013-12-13T22:19:45.860Z", + "created": "2013-12-18T21:29:07.155Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-15T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-20T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58687, + "pk": 60487, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.021Z", + "updated": "2013-12-18T21:29:20.906Z", "slice": 8, - "created": "2013-12-13T22:19:45.869Z", + "created": "2013-12-18T21:29:07.163Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-15T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-20T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58688, + "pk": 60488, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.112Z", + "updated": "2013-12-18T21:29:21.014Z", "slice": 8, - "created": "2013-12-13T22:19:45.877Z", + "created": "2013-12-18T21:29:07.171Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-16T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-21T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58689, + "pk": 60489, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.203Z", + "updated": "2013-12-18T21:29:21.122Z", "slice": 8, - "created": "2013-12-13T22:19:45.885Z", + "created": "2013-12-18T21:29:07.180Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-16T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-21T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58690, + "pk": 60490, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.294Z", + "updated": "2013-12-18T21:29:21.229Z", "slice": 8, - "created": "2013-12-13T22:19:45.893Z", + "created": "2013-12-18T21:29:07.188Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-16T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-21T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58691, + "pk": 60491, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.386Z", + "updated": "2013-12-18T21:29:21.337Z", "slice": 8, - "created": "2013-12-13T22:19:45.902Z", + "created": "2013-12-18T21:29:07.196Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-17T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-22T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58692, + "pk": 60492, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.477Z", + "updated": "2013-12-18T21:29:21.445Z", "slice": 8, - "created": "2013-12-13T22:19:45.910Z", + "created": "2013-12-18T21:29:07.205Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-17T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-22T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58693, + "pk": 60493, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.568Z", + "updated": "2013-12-18T21:29:21.552Z", "slice": 8, - "created": "2013-12-13T22:19:45.918Z", + "created": "2013-12-18T21:29:07.213Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-17T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-22T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58694, + "pk": 60494, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.667Z", + "updated": "2013-12-18T21:29:21.660Z", "slice": 8, - "created": "2013-12-13T22:19:45.927Z", + "created": "2013-12-18T21:29:07.221Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-18T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-23T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58695, + "pk": 60495, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.770Z", + "updated": "2013-12-18T21:29:21.768Z", "slice": 8, - "created": "2013-12-13T22:19:45.935Z", + "created": "2013-12-18T21:29:07.230Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-18T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-23T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58696, + "pk": 60496, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.861Z", + "updated": "2013-12-18T21:29:21.876Z", "slice": 8, - "created": "2013-12-13T22:19:45.943Z", + "created": "2013-12-18T21:29:07.238Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-18T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-23T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58697, + "pk": 60497, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.952Z", + "updated": "2013-12-18T21:29:21.983Z", "slice": 8, - "created": "2013-12-13T22:19:45.951Z", + "created": "2013-12-18T21:29:07.246Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-19T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-24T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58698, + "pk": 60498, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.043Z", + "updated": "2013-12-18T21:29:22.091Z", "slice": 8, - "created": "2013-12-13T22:19:45.960Z", + "created": "2013-12-18T21:29:07.254Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-19T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-24T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58699, + "pk": 60499, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.143Z", + "updated": "2013-12-18T21:29:22.199Z", "slice": 8, - "created": "2013-12-13T22:19:45.968Z", + "created": "2013-12-18T21:29:07.262Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-19T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-24T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58700, + "pk": 60500, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.234Z", + "updated": "2013-12-18T21:29:22.315Z", "slice": 8, - "created": "2013-12-13T22:19:45.976Z", + "created": "2013-12-18T21:29:07.271Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-20T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-25T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58701, + "pk": 60501, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.325Z", + "updated": "2013-12-18T21:29:22.422Z", "slice": 8, - "created": "2013-12-13T22:19:45.985Z", + "created": "2013-12-18T21:29:07.279Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-20T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-25T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58702, + "pk": 60502, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.419Z", + "updated": "2013-12-18T21:29:22.530Z", "slice": 8, - "created": "2013-12-13T22:19:45.993Z", + "created": "2013-12-18T21:29:07.287Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-20T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-25T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58703, + "pk": 60503, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.510Z", + "updated": "2013-12-18T21:29:22.679Z", "slice": 8, - "created": "2013-12-13T22:19:46.001Z", + "created": "2013-12-18T21:29:07.296Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-21T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-26T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58704, + "pk": 60504, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.617Z", + "updated": "2013-12-18T21:29:22.787Z", "slice": 8, - "created": "2013-12-13T22:19:46.009Z", + "created": "2013-12-18T21:29:07.304Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-21T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-26T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58705, + "pk": 60505, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.709Z", + "updated": "2013-12-18T21:29:22.894Z", "slice": 8, - "created": "2013-12-13T22:19:46.018Z", + "created": "2013-12-18T21:29:07.312Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-21T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-26T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58706, + "pk": 60506, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.800Z", + "updated": "2013-12-18T21:29:23.002Z", "slice": 8, - "created": "2013-12-13T22:19:46.026Z", + "created": "2013-12-18T21:29:07.321Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-22T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-27T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58707, + "pk": 60507, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.918Z", + "updated": "2013-12-18T21:29:23.110Z", "slice": 8, - "created": "2013-12-13T22:19:46.034Z", + "created": "2013-12-18T21:29:07.329Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-22T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-27T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58708, + "pk": 60508, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.007Z", + "updated": "2013-12-18T21:29:23.218Z", "slice": 8, - "created": "2013-12-13T22:19:46.043Z", + "created": "2013-12-18T21:29:07.337Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-22T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-27T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58709, + "pk": 60509, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.098Z", + "updated": "2013-12-18T21:29:23.325Z", "slice": 8, - "created": "2013-12-13T22:19:46.051Z", + "created": "2013-12-18T21:29:07.345Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-23T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-28T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58710, + "pk": 60510, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.189Z", + "updated": "2013-12-18T21:29:23.433Z", "slice": 8, - "created": "2013-12-13T22:19:46.059Z", + "created": "2013-12-18T21:29:07.354Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-23T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-28T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58711, + "pk": 60511, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.355Z", + "updated": "2013-12-18T21:29:23.541Z", "slice": 8, - "created": "2013-12-13T22:19:46.067Z", + "created": "2013-12-18T21:29:07.362Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-23T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-28T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58712, + "pk": 60512, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.727Z", + "updated": "2013-12-18T21:29:23.648Z", "slice": 8, - "created": "2013-12-13T22:19:46.076Z", + "created": "2013-12-18T21:29:07.370Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-24T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-29T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58713, + "pk": 60513, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.818Z", + "updated": "2013-12-18T21:29:23.756Z", "slice": 8, - "created": "2013-12-13T22:19:46.084Z", + "created": "2013-12-18T21:29:07.378Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-24T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-29T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58714, + "pk": 60514, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.910Z", + "updated": "2013-12-18T21:29:23.864Z", "slice": 8, - "created": "2013-12-13T22:19:46.092Z", + "created": "2013-12-18T21:29:07.387Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-24T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-29T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58715, + "pk": 60515, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.009Z", + "updated": "2013-12-18T21:29:23.971Z", "slice": 8, - "created": "2013-12-13T22:19:46.101Z", + "created": "2013-12-18T21:29:07.395Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-25T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-30T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58716, + "pk": 60516, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.100Z", + "updated": "2013-12-18T21:29:24.079Z", "slice": 8, - "created": "2013-12-13T22:19:46.109Z", + "created": "2013-12-18T21:29:07.403Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-25T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-30T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58717, + "pk": 60517, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.191Z", + "updated": "2013-12-18T21:29:24.187Z", "slice": 8, - "created": "2013-12-13T22:19:46.117Z", + "created": "2013-12-18T21:29:07.412Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-25T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-30T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58718, + "pk": 60518, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.287Z", + "updated": "2013-12-18T21:29:24.294Z", "slice": 8, - "created": "2013-12-13T22:19:46.125Z", + "created": "2013-12-18T21:29:07.420Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-26T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-12-01T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58719, + "pk": 60519, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.378Z", + "updated": "2013-12-18T21:29:24.402Z", "slice": 8, - "created": "2013-12-13T22:19:46.134Z", + "created": "2013-12-18T21:29:07.428Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-26T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-12-01T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58720, + "pk": 60520, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.469Z", + "updated": "2013-12-18T21:29:24.510Z", "slice": 8, - "created": "2013-12-13T22:19:46.142Z", + "created": "2013-12-18T21:29:07.436Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-26T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-12-01T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58721, + "pk": 60521, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.561Z", + "updated": "2013-12-18T21:29:24.626Z", "slice": 8, - "created": "2013-12-13T22:19:46.150Z", + "created": "2013-12-18T21:29:07.445Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-27T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-02T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58722, + "pk": 60522, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.652Z", + "updated": "2013-12-18T21:29:24.734Z", "slice": 8, - "created": "2013-12-13T22:19:46.158Z", + "created": "2013-12-18T21:29:07.453Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-27T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-02T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58723, + "pk": 60523, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.743Z", + "updated": "2013-12-18T21:29:24.841Z", "slice": 8, - "created": "2013-12-13T22:19:46.167Z", + "created": "2013-12-18T21:29:07.461Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-27T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-02T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58724, + "pk": 60524, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.834Z", + "updated": "2013-12-18T21:29:24.949Z", "slice": 8, - "created": "2013-12-13T22:19:46.175Z", + "created": "2013-12-18T21:29:07.470Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-28T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-03T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58725, + "pk": 60525, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.925Z", + "updated": "2013-12-18T21:29:25.057Z", "slice": 8, - "created": "2013-12-13T22:19:46.183Z", + "created": "2013-12-18T21:29:07.478Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-28T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-03T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58726, + "pk": 60526, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.016Z", + "updated": "2013-12-18T21:29:25.164Z", "slice": 8, - "created": "2013-12-13T22:19:46.192Z", + "created": "2013-12-18T21:29:07.497Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-28T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-03T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58727, + "pk": 60527, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.107Z", + "updated": "2013-12-18T21:29:25.272Z", "slice": 8, - "created": "2013-12-13T22:19:46.200Z", + "created": "2013-12-18T21:29:07.547Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-29T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-04T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58728, + "pk": 60528, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.198Z", + "updated": "2013-12-18T21:29:25.380Z", "slice": 8, - "created": "2013-12-13T22:19:46.208Z", + "created": "2013-12-18T21:29:07.561Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-29T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-04T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58729, + "pk": 60529, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.290Z", + "updated": "2013-12-18T21:29:25.487Z", "slice": 8, - "created": "2013-12-13T22:19:46.216Z", + "created": "2013-12-18T21:29:07.569Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-29T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-04T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58730, + "pk": 60530, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.381Z", + "updated": "2013-12-18T21:29:25.595Z", "slice": 8, - "created": "2013-12-13T22:19:46.225Z", + "created": "2013-12-18T21:29:07.577Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-30T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-05T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58731, + "pk": 60531, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.473Z", + "updated": "2013-12-18T21:29:25.703Z", "slice": 8, - "created": "2013-12-13T22:19:46.233Z", + "created": "2013-12-18T21:29:07.586Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-30T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-05T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58732, + "pk": 60532, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.565Z", + "updated": "2013-12-18T21:29:25.810Z", "slice": 8, - "created": "2013-12-13T22:19:46.241Z", + "created": "2013-12-18T21:29:07.594Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-30T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-05T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58733, + "pk": 60533, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.656Z", + "updated": "2013-12-18T21:29:25.918Z", "slice": 8, - "created": "2013-12-13T22:19:46.250Z", + "created": "2013-12-18T21:29:07.602Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-12-01T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-06T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58734, + "pk": 60534, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.747Z", + "updated": "2013-12-18T21:29:26.026Z", "slice": 8, - "created": "2013-12-13T22:19:46.258Z", + "created": "2013-12-18T21:29:07.610Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-12-01T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-06T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58735, + "pk": 60535, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.830Z", + "updated": "2013-12-18T21:29:26.133Z", "slice": 8, - "created": "2013-12-13T22:19:46.266Z", + "created": "2013-12-18T21:29:07.619Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-12-01T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-06T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58736, + "pk": 60536, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.929Z", + "updated": "2013-12-18T21:29:26.241Z", "slice": 8, - "created": "2013-12-13T22:19:46.274Z", + "created": "2013-12-18T21:29:07.627Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-02T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-07T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58737, + "pk": 60537, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.020Z", + "updated": "2013-12-18T21:29:26.349Z", "slice": 8, - "created": "2013-12-13T22:19:46.283Z", + "created": "2013-12-18T21:29:07.635Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-02T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-07T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58738, + "pk": 60538, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.111Z", + "updated": "2013-12-18T21:29:26.456Z", "slice": 8, - "created": "2013-12-13T22:19:46.291Z", + "created": "2013-12-18T21:29:07.644Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-02T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-07T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58739, + "pk": 60539, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.203Z", + "updated": "2013-12-18T21:29:26.564Z", "slice": 8, - "created": "2013-12-13T22:19:46.299Z", + "created": "2013-12-18T21:29:07.652Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-03T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-08T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58740, + "pk": 60540, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.294Z", + "updated": "2013-12-18T21:29:26.672Z", "slice": 8, - "created": "2013-12-13T22:19:46.308Z", + "created": "2013-12-18T21:29:07.660Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-03T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-08T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58741, + "pk": 60541, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.385Z", + "updated": "2013-12-18T21:29:26.780Z", "slice": 8, - "created": "2013-12-13T22:19:46.316Z", + "created": "2013-12-18T21:29:07.669Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-03T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-08T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58742, + "pk": 60542, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.476Z", + "updated": "2013-12-18T21:29:26.896Z", "slice": 8, - "created": "2013-12-13T22:19:46.324Z", + "created": "2013-12-18T21:29:07.677Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-04T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-09T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58743, + "pk": 60543, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.567Z", + "updated": "2013-12-18T21:29:27.003Z", "slice": 8, - "created": "2013-12-13T22:19:46.333Z", + "created": "2013-12-18T21:29:07.685Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-04T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-09T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58744, + "pk": 60544, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.658Z", + "updated": "2013-12-18T21:29:27.111Z", "slice": 8, - "created": "2013-12-13T22:19:46.341Z", + "created": "2013-12-18T21:29:07.693Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-04T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-09T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58745, + "pk": 60545, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.749Z", + "updated": "2013-12-18T21:29:27.219Z", "slice": 8, - "created": "2013-12-13T22:19:46.349Z", + "created": "2013-12-18T21:29:07.702Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-05T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-10T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58746, + "pk": 60546, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.840Z", + "updated": "2013-12-18T21:29:27.326Z", "slice": 8, - "created": "2013-12-13T22:19:46.357Z", + "created": "2013-12-18T21:29:07.710Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-05T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-10T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58747, + "pk": 60547, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.932Z", + "updated": "2013-12-18T21:29:27.434Z", "slice": 8, - "created": "2013-12-13T22:19:46.366Z", + "created": "2013-12-18T21:29:07.718Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-05T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-10T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58748, + "pk": 60548, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.031Z", + "updated": "2013-12-18T21:29:27.542Z", "slice": 8, - "created": "2013-12-13T22:19:46.374Z", + "created": "2013-12-18T21:29:07.726Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-06T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-11T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58749, + "pk": 60549, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.129Z", + "updated": "2013-12-18T21:29:27.708Z", "slice": 8, - "created": "2013-12-13T22:19:46.382Z", + "created": "2013-12-18T21:29:07.735Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-06T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-11T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58750, + "pk": 60550, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.220Z", + "updated": "2013-12-18T21:29:27.815Z", "slice": 8, - "created": "2013-12-13T22:19:46.391Z", + "created": "2013-12-18T21:29:07.743Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-06T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-11T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58751, + "pk": 60551, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.311Z", + "updated": "2013-12-18T21:29:27.923Z", "slice": 8, - "created": "2013-12-13T22:19:46.399Z", + "created": "2013-12-18T21:29:07.751Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-07T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-12T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58752, + "pk": 60552, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.402Z", + "updated": "2013-12-18T21:29:28.030Z", "slice": 8, - "created": "2013-12-13T22:19:46.407Z", + "created": "2013-12-18T21:29:07.760Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-07T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-12T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58753, + "pk": 60553, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.493Z", + "updated": "2013-12-18T21:29:28.138Z", "slice": 8, - "created": "2013-12-13T22:19:46.415Z", + "created": "2013-12-18T21:29:07.768Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-07T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-12T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58754, + "pk": 60554, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.584Z", + "updated": "2013-12-18T21:29:28.246Z", "slice": 8, - "created": "2013-12-13T22:19:46.424Z", + "created": "2013-12-18T21:29:07.776Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-08T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-13T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58755, + "pk": 60555, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.675Z", + "updated": "2013-12-18T21:29:28.354Z", "slice": 8, - "created": "2013-12-13T22:19:46.432Z", + "created": "2013-12-18T21:29:07.784Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-08T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-13T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58756, + "pk": 60556, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.766Z", + "updated": "2013-12-18T21:29:28.461Z", "slice": 8, - "created": "2013-12-13T22:19:46.440Z", + "created": "2013-12-18T21:29:07.793Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-08T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-13T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58757, + "pk": 60557, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.448Z", + "updated": "2013-12-18T21:29:28.569Z", "slice": 8, - "created": "2013-12-13T22:19:46.448Z", + "created": "2013-12-18T21:29:07.801Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-09T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-14T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58758, + "pk": 60558, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.457Z", + "updated": "2013-12-18T21:29:28.677Z", "slice": 8, - "created": "2013-12-13T22:19:46.457Z", + "created": "2013-12-18T21:29:07.809Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-09T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-14T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58759, + "pk": 60559, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.465Z", + "updated": "2013-12-18T21:29:28.784Z", "slice": 8, - "created": "2013-12-13T22:19:46.465Z", + "created": "2013-12-18T21:29:07.817Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-09T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-14T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58760, + "pk": 60560, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.473Z", + "updated": "2013-12-18T21:29:28.892Z", "slice": 8, - "created": "2013-12-13T22:19:46.473Z", + "created": "2013-12-18T21:29:07.826Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-10T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-15T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58761, + "pk": 60561, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.482Z", + "updated": "2013-12-18T21:29:29Z", "slice": 8, - "created": "2013-12-13T22:19:46.482Z", + "created": "2013-12-18T21:29:07.834Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-15T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58762, + "pk": 60562, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.490Z", + "updated": "2013-12-18T21:29:29.107Z", "slice": 8, - "created": "2013-12-13T22:19:46.490Z", + "created": "2013-12-18T21:29:07.842Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-15T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58763, + "pk": 60563, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.498Z", + "updated": "2013-12-18T21:29:07.851Z", "slice": 8, - "created": "2013-12-13T22:19:46.498Z", + "created": "2013-12-18T21:29:07.851Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "reservation" + "date": "2013-12-16T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58764, + "pk": 60564, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.506Z", + "updated": "2013-12-18T21:29:07.859Z", "slice": 8, - "created": "2013-12-13T22:19:46.506Z", + "created": "2013-12-18T21:29:07.859Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "reservation" + "date": "2013-12-16T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58765, + "pk": 60565, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.515Z", + "updated": "2013-12-18T21:29:07.867Z", "slice": 8, - "created": "2013-12-13T22:19:46.515Z", + "created": "2013-12-18T21:29:07.867Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "reservation" + "date": "2013-12-16T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58766, + "pk": 60566, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.523Z", + "updated": "2013-12-18T21:29:07.875Z", "slice": 8, - "created": "2013-12-13T22:19:46.523Z", + "created": "2013-12-18T21:29:07.875Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "reservation" + "date": "2013-12-17T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58767, + "pk": 60567, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.531Z", + "updated": "2013-12-18T21:29:07.884Z", "slice": 8, - "created": "2013-12-13T22:19:46.531Z", + "created": "2013-12-18T21:29:07.884Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "reservation" + "date": "2013-12-17T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58768, + "pk": 60568, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.540Z", + "updated": "2013-12-18T21:29:07.892Z", "slice": 8, - "created": "2013-12-13T22:19:46.540Z", + "created": "2013-12-18T21:29:07.892Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "reservation" + "date": "2013-12-17T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58769, + "pk": 60569, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.548Z", + "updated": "2013-12-18T21:29:07.900Z", "slice": 8, - "created": "2013-12-13T22:19:46.548Z", + "created": "2013-12-18T21:29:07.900Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-13T06:00:00Z", - "kind": "reservation" + "date": "2013-12-18T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58770, + "pk": 60570, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:46.556Z", + "updated": "2013-12-18T21:29:07.909Z", "slice": 8, - "created": "2013-12-13T22:19:46.556Z", + "created": "2013-12-18T21:29:07.909Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-13T14:00:00Z", - "kind": "reservation" + "date": "2013-12-18T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58771, + "pk": 60571, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.490Z", + "updated": "2013-12-18T21:29:20.268Z", "slice": 9, - "created": "2013-12-13T22:19:46.577Z", + "created": "2013-12-18T21:29:07.929Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-13T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-18T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58772, + "pk": 60572, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.581Z", + "updated": "2013-12-18T21:29:20.376Z", "slice": 9, - "created": "2013-12-13T22:19:46.589Z", + "created": "2013-12-18T21:29:07.942Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-14T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-19T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58773, + "pk": 60573, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.672Z", + "updated": "2013-12-18T21:29:20.484Z", "slice": 9, - "created": "2013-12-13T22:19:46.597Z", + "created": "2013-12-18T21:29:07.950Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-14T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-19T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58774, + "pk": 60574, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.764Z", + "updated": "2013-12-18T21:29:20.591Z", "slice": 9, - "created": "2013-12-13T22:19:46.606Z", + "created": "2013-12-18T21:29:07.958Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-14T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-19T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58775, + "pk": 60575, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.855Z", + "updated": "2013-12-18T21:29:20.699Z", "slice": 9, - "created": "2013-12-13T22:19:46.614Z", + "created": "2013-12-18T21:29:07.967Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-15T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-20T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58776, + "pk": 60576, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.963Z", + "updated": "2013-12-18T21:29:20.807Z", "slice": 9, - "created": "2013-12-13T22:19:46.622Z", + "created": "2013-12-18T21:29:07.975Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-15T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-20T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58777, + "pk": 60577, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.054Z", + "updated": "2013-12-18T21:29:20.914Z", "slice": 9, - "created": "2013-12-13T22:19:46.631Z", + "created": "2013-12-18T21:29:07.983Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-15T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-20T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58778, + "pk": 60578, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.145Z", + "updated": "2013-12-18T21:29:21.022Z", "slice": 9, - "created": "2013-12-13T22:19:46.639Z", + "created": "2013-12-18T21:29:07.991Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-16T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-21T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58779, + "pk": 60579, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.236Z", + "updated": "2013-12-18T21:29:21.130Z", "slice": 9, - "created": "2013-12-13T22:19:46.647Z", + "created": "2013-12-18T21:29:08Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-16T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-21T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58780, + "pk": 60580, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.328Z", + "updated": "2013-12-18T21:29:21.238Z", "slice": 9, - "created": "2013-12-13T22:19:46.656Z", + "created": "2013-12-18T21:29:08.008Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-16T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-21T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58781, + "pk": 60581, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.419Z", + "updated": "2013-12-18T21:29:21.345Z", "slice": 9, - "created": "2013-12-13T22:19:46.664Z", + "created": "2013-12-18T21:29:08.016Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-17T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-22T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58782, + "pk": 60582, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.510Z", + "updated": "2013-12-18T21:29:21.453Z", "slice": 9, - "created": "2013-12-13T22:19:46.672Z", + "created": "2013-12-18T21:29:08.025Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-17T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-22T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58783, + "pk": 60583, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.601Z", + "updated": "2013-12-18T21:29:21.561Z", "slice": 9, - "created": "2013-12-13T22:19:46.680Z", + "created": "2013-12-18T21:29:08.033Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-17T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-22T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58784, + "pk": 60584, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.712Z", + "updated": "2013-12-18T21:29:21.668Z", "slice": 9, - "created": "2013-12-13T22:19:46.689Z", + "created": "2013-12-18T21:29:08.041Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-18T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-23T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58785, + "pk": 60585, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.803Z", + "updated": "2013-12-18T21:29:21.776Z", "slice": 9, - "created": "2013-12-13T22:19:46.697Z", + "created": "2013-12-18T21:29:08.049Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-18T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-23T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58786, + "pk": 60586, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.894Z", + "updated": "2013-12-18T21:29:21.884Z", "slice": 9, - "created": "2013-12-13T22:19:46.705Z", + "created": "2013-12-18T21:29:08.058Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-18T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-23T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58787, + "pk": 60587, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.985Z", + "updated": "2013-12-18T21:29:21.991Z", "slice": 9, - "created": "2013-12-13T22:19:46.713Z", + "created": "2013-12-18T21:29:08.066Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-19T06:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-24T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58788, + "pk": 60588, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.077Z", + "updated": "2013-12-18T21:29:22.099Z", "slice": 9, - "created": "2013-12-13T22:19:46.722Z", + "created": "2013-12-18T21:29:08.074Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-19T14:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-24T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58789, + "pk": 60589, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.135Z", + "updated": "2013-12-18T21:29:22.207Z", "slice": 9, - "created": "2013-12-13T22:19:46.730Z", + "created": "2013-12-18T21:29:08.082Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-19T22:00:00Z", - "kind": "reservation" + "invoice": 69, + "date": "2013-11-24T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58790, + "pk": 60590, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.226Z", + "updated": "2013-12-18T21:29:22.323Z", "slice": 9, - "created": "2013-12-13T22:19:46.738Z", + "created": "2013-12-18T21:29:08.091Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-20T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-25T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58791, + "pk": 60591, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.317Z", + "updated": "2013-12-18T21:29:22.431Z", "slice": 9, - "created": "2013-12-13T22:19:46.747Z", + "created": "2013-12-18T21:29:08.099Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-20T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-25T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58792, + "pk": 60592, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.410Z", + "updated": "2013-12-18T21:29:22.538Z", "slice": 9, - "created": "2013-12-13T22:19:46.755Z", + "created": "2013-12-18T21:29:08.107Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-20T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-25T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58793, + "pk": 60593, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.501Z", + "updated": "2013-12-18T21:29:22.687Z", "slice": 9, - "created": "2013-12-13T22:19:46.763Z", + "created": "2013-12-18T21:29:08.116Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-21T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-26T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58794, + "pk": 60594, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.602Z", + "updated": "2013-12-18T21:29:22.795Z", "slice": 9, - "created": "2013-12-13T22:19:46.771Z", + "created": "2013-12-18T21:29:08.124Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-21T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-26T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58795, + "pk": 60595, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.700Z", + "updated": "2013-12-18T21:29:22.903Z", "slice": 9, - "created": "2013-12-13T22:19:46.780Z", + "created": "2013-12-18T21:29:08.132Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-21T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-26T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58796, + "pk": 60596, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.792Z", + "updated": "2013-12-18T21:29:23.010Z", "slice": 9, - "created": "2013-12-13T22:19:46.788Z", + "created": "2013-12-18T21:29:08.141Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-22T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-27T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58797, + "pk": 60597, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.883Z", + "updated": "2013-12-18T21:29:23.118Z", "slice": 9, - "created": "2013-12-13T22:19:46.797Z", + "created": "2013-12-18T21:29:08.149Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-22T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-27T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58798, + "pk": 60598, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.999Z", + "updated": "2013-12-18T21:29:23.226Z", "slice": 9, - "created": "2013-12-13T22:19:46.805Z", + "created": "2013-12-18T21:29:08.157Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-22T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-27T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58799, + "pk": 60599, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.090Z", + "updated": "2013-12-18T21:29:23.333Z", "slice": 9, - "created": "2013-12-13T22:19:46.813Z", + "created": "2013-12-18T21:29:08.166Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-23T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-28T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58800, + "pk": 60600, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.181Z", + "updated": "2013-12-18T21:29:23.441Z", "slice": 9, - "created": "2013-12-13T22:19:46.821Z", + "created": "2013-12-18T21:29:08.174Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-23T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-28T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58801, + "pk": 60601, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.347Z", + "updated": "2013-12-18T21:29:23.549Z", "slice": 9, - "created": "2013-12-13T22:19:46.830Z", + "created": "2013-12-18T21:29:08.182Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-23T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-28T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58802, + "pk": 60602, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.719Z", + "updated": "2013-12-18T21:29:23.657Z", "slice": 9, - "created": "2013-12-13T22:19:46.838Z", + "created": "2013-12-18T21:29:08.190Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-24T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-29T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58803, + "pk": 60603, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.810Z", + "updated": "2013-12-18T21:29:23.764Z", "slice": 9, - "created": "2013-12-13T22:19:46.846Z", + "created": "2013-12-18T21:29:08.199Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-24T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-29T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58804, + "pk": 60604, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.901Z", + "updated": "2013-12-18T21:29:23.872Z", "slice": 9, - "created": "2013-12-13T22:19:46.854Z", + "created": "2013-12-18T21:29:08.207Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-24T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-29T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58805, + "pk": 60605, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.001Z", + "updated": "2013-12-18T21:29:23.980Z", "slice": 9, - "created": "2013-12-13T22:19:46.863Z", + "created": "2013-12-18T21:29:08.215Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-25T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-30T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58806, + "pk": 60606, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.092Z", + "updated": "2013-12-18T21:29:24.087Z", "slice": 9, - "created": "2013-12-13T22:19:46.871Z", + "created": "2013-12-18T21:29:08.224Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-25T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-30T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58807, + "pk": 60607, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.183Z", + "updated": "2013-12-18T21:29:24.195Z", "slice": 9, - "created": "2013-12-13T22:19:46.879Z", + "created": "2013-12-18T21:29:08.232Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-25T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-11-30T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58808, + "pk": 60608, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.279Z", + "updated": "2013-12-18T21:29:24.303Z", "slice": 9, - "created": "2013-12-13T22:19:46.888Z", + "created": "2013-12-18T21:29:08.240Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-26T06:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-12-01T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58809, + "pk": 60609, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.370Z", + "updated": "2013-12-18T21:29:24.410Z", "slice": 9, - "created": "2013-12-13T22:19:46.896Z", + "created": "2013-12-18T21:29:08.249Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-26T14:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-12-01T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58810, + "pk": 60610, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.461Z", + "updated": "2013-12-18T21:29:24.518Z", "slice": 9, - "created": "2013-12-13T22:19:46.904Z", + "created": "2013-12-18T21:29:08.257Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-26T22:00:00Z", - "kind": "reservation" + "invoice": 70, + "date": "2013-12-01T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58811, + "pk": 60611, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.552Z", + "updated": "2013-12-18T21:29:24.634Z", "slice": 9, - "created": "2013-12-13T22:19:46.912Z", + "created": "2013-12-18T21:29:08.265Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-27T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-02T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58812, + "pk": 60612, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.643Z", + "updated": "2013-12-18T21:29:24.742Z", "slice": 9, - "created": "2013-12-13T22:19:46.921Z", + "created": "2013-12-18T21:29:08.273Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-27T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-02T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58813, + "pk": 60613, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.735Z", + "updated": "2013-12-18T21:29:24.849Z", "slice": 9, - "created": "2013-12-13T22:19:46.929Z", + "created": "2013-12-18T21:29:08.282Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-27T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-02T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58814, + "pk": 60614, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.826Z", + "updated": "2013-12-18T21:29:24.957Z", "slice": 9, - "created": "2013-12-13T22:19:46.937Z", + "created": "2013-12-18T21:29:08.290Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-28T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-03T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58815, + "pk": 60615, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.917Z", + "updated": "2013-12-18T21:29:25.065Z", "slice": 9, - "created": "2013-12-13T22:19:46.945Z", + "created": "2013-12-18T21:29:08.298Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-28T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-03T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58816, + "pk": 60616, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.008Z", + "updated": "2013-12-18T21:29:25.173Z", "slice": 9, - "created": "2013-12-13T22:19:46.954Z", + "created": "2013-12-18T21:29:08.306Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-28T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-03T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58817, + "pk": 60617, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.091Z", + "updated": "2013-12-18T21:29:25.280Z", "slice": 9, - "created": "2013-12-13T22:19:46.962Z", + "created": "2013-12-18T21:29:08.315Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-29T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-04T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58818, + "pk": 60618, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.182Z", + "updated": "2013-12-18T21:29:25.388Z", "slice": 9, - "created": "2013-12-13T22:19:46.970Z", + "created": "2013-12-18T21:29:08.323Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-29T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-04T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58819, + "pk": 60619, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.273Z", + "updated": "2013-12-18T21:29:25.496Z", "slice": 9, - "created": "2013-12-13T22:19:46.979Z", + "created": "2013-12-18T21:29:08.331Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-29T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-04T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58820, + "pk": 60620, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.364Z", + "updated": "2013-12-18T21:29:25.603Z", "slice": 9, - "created": "2013-12-13T22:19:46.987Z", + "created": "2013-12-18T21:29:08.339Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-30T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-05T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58821, + "pk": 60621, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.457Z", + "updated": "2013-12-18T21:29:25.711Z", "slice": 9, - "created": "2013-12-13T22:19:46.995Z", + "created": "2013-12-18T21:29:08.348Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-30T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-05T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58822, + "pk": 60622, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.548Z", + "updated": "2013-12-18T21:29:25.819Z", "slice": 9, - "created": "2013-12-13T22:19:47.004Z", + "created": "2013-12-18T21:29:08.356Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-30T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-05T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58823, + "pk": 60623, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.639Z", + "updated": "2013-12-18T21:29:25.926Z", "slice": 9, - "created": "2013-12-13T22:19:47.012Z", + "created": "2013-12-18T21:29:08.364Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-12-01T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-06T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58824, + "pk": 60624, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.730Z", + "updated": "2013-12-18T21:29:26.034Z", "slice": 9, - "created": "2013-12-13T22:19:47.020Z", + "created": "2013-12-18T21:29:08.373Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-12-01T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-06T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58825, + "pk": 60625, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.813Z", + "updated": "2013-12-18T21:29:26.142Z", "slice": 9, - "created": "2013-12-13T22:19:47.028Z", + "created": "2013-12-18T21:29:08.381Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 61, - "date": "2013-12-01T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-06T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58826, + "pk": 60626, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.913Z", + "updated": "2013-12-18T21:29:26.249Z", "slice": 9, - "created": "2013-12-13T22:19:47.037Z", + "created": "2013-12-18T21:29:08.389Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-02T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-07T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58827, + "pk": 60627, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.004Z", + "updated": "2013-12-18T21:29:26.357Z", "slice": 9, - "created": "2013-12-13T22:19:47.045Z", + "created": "2013-12-18T21:29:08.397Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-02T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-07T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58828, + "pk": 60628, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.095Z", + "updated": "2013-12-18T21:29:26.465Z", "slice": 9, - "created": "2013-12-13T22:19:47.053Z", + "created": "2013-12-18T21:29:08.406Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-02T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-07T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58829, + "pk": 60629, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.186Z", + "updated": "2013-12-18T21:29:26.572Z", "slice": 9, - "created": "2013-12-13T22:19:47.061Z", + "created": "2013-12-18T21:29:08.414Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-03T06:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-08T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58830, + "pk": 60630, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.277Z", + "updated": "2013-12-18T21:29:26.680Z", "slice": 9, - "created": "2013-12-13T22:19:47.070Z", + "created": "2013-12-18T21:29:08.422Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-03T14:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-08T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58831, + "pk": 60631, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.368Z", + "updated": "2013-12-18T21:29:26.788Z", "slice": 9, - "created": "2013-12-13T22:19:47.078Z", + "created": "2013-12-18T21:29:08.431Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-03T22:00:00Z", - "kind": "reservation" + "invoice": 71, + "date": "2013-12-08T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58832, + "pk": 60632, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.459Z", + "updated": "2013-12-18T21:29:26.904Z", "slice": 9, - "created": "2013-12-13T22:19:47.086Z", + "created": "2013-12-18T21:29:08.439Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-04T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-09T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58833, + "pk": 60633, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.550Z", + "updated": "2013-12-18T21:29:27.011Z", "slice": 9, - "created": "2013-12-13T22:19:47.095Z", + "created": "2013-12-18T21:29:08.447Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-04T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-09T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58834, + "pk": 60634, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.642Z", + "updated": "2013-12-18T21:29:27.119Z", "slice": 9, - "created": "2013-12-13T22:19:47.103Z", + "created": "2013-12-18T21:29:08.455Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-04T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-09T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58835, + "pk": 60635, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.733Z", + "updated": "2013-12-18T21:29:27.227Z", "slice": 9, - "created": "2013-12-13T22:19:47.111Z", + "created": "2013-12-18T21:29:08.464Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-05T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-10T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58836, + "pk": 60636, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.824Z", + "updated": "2013-12-18T21:29:27.335Z", "slice": 9, - "created": "2013-12-13T22:19:47.119Z", + "created": "2013-12-18T21:29:08.472Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-05T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-10T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58837, + "pk": 60637, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.915Z", + "updated": "2013-12-18T21:29:27.442Z", "slice": 9, - "created": "2013-12-13T22:19:47.128Z", + "created": "2013-12-18T21:29:08.480Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-05T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-10T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58838, + "pk": 60638, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.014Z", + "updated": "2013-12-18T21:29:27.550Z", "slice": 9, - "created": "2013-12-13T22:19:47.136Z", + "created": "2013-12-18T21:29:08.489Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-06T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-11T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58839, + "pk": 60639, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.112Z", + "updated": "2013-12-18T21:29:27.716Z", "slice": 9, - "created": "2013-12-13T22:19:47.144Z", + "created": "2013-12-18T21:29:08.497Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-06T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-11T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58840, + "pk": 60640, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.203Z", + "updated": "2013-12-18T21:29:27.823Z", "slice": 9, - "created": "2013-12-13T22:19:47.153Z", + "created": "2013-12-18T21:29:08.505Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-06T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-11T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58841, + "pk": 60641, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.294Z", + "updated": "2013-12-18T21:29:27.931Z", "slice": 9, - "created": "2013-12-13T22:19:47.161Z", + "created": "2013-12-18T21:29:08.513Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-07T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-12T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58842, + "pk": 60642, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.385Z", + "updated": "2013-12-18T21:29:28.039Z", "slice": 9, - "created": "2013-12-13T22:19:47.169Z", + "created": "2013-12-18T21:29:08.522Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-07T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-12T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58843, + "pk": 60643, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.477Z", + "updated": "2013-12-18T21:29:28.147Z", "slice": 9, - "created": "2013-12-13T22:19:47.177Z", + "created": "2013-12-18T21:29:08.530Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-07T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-12T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58844, + "pk": 60644, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.568Z", + "updated": "2013-12-18T21:29:28.254Z", "slice": 9, - "created": "2013-12-13T22:19:47.186Z", + "created": "2013-12-18T21:29:08.538Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-08T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-13T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58845, + "pk": 60645, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.659Z", + "updated": "2013-12-18T21:29:28.362Z", "slice": 9, - "created": "2013-12-13T22:19:47.194Z", + "created": "2013-12-18T21:29:08.546Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-08T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-13T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58846, + "pk": 60646, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.750Z", + "updated": "2013-12-18T21:29:28.469Z", "slice": 9, - "created": "2013-12-13T22:19:47.202Z", + "created": "2013-12-18T21:29:08.555Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "invoiced", "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-08T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-13T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58847, + "pk": 60647, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.211Z", + "updated": "2013-12-18T21:29:28.577Z", "slice": 9, - "created": "2013-12-13T22:19:47.211Z", + "created": "2013-12-18T21:29:08.563Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-09T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-14T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58848, + "pk": 60648, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.219Z", + "updated": "2013-12-18T21:29:28.685Z", "slice": 9, - "created": "2013-12-13T22:19:47.219Z", + "created": "2013-12-18T21:29:08.571Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-09T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-14T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58849, + "pk": 60649, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.227Z", + "updated": "2013-12-18T21:29:28.793Z", "slice": 9, - "created": "2013-12-13T22:19:47.227Z", + "created": "2013-12-18T21:29:08.580Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-09T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-14T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58850, + "pk": 60650, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.236Z", + "updated": "2013-12-18T21:29:28.900Z", "slice": 9, - "created": "2013-12-13T22:19:47.236Z", + "created": "2013-12-18T21:29:08.588Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-10T06:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-15T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58851, + "pk": 60651, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.244Z", + "updated": "2013-12-18T21:29:29.008Z", "slice": 9, - "created": "2013-12-13T22:19:47.244Z", + "created": "2013-12-18T21:29:08.596Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-15T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58852, + "pk": 60652, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.252Z", + "updated": "2013-12-18T21:29:29.116Z", "slice": 9, - "created": "2013-12-13T22:19:47.252Z", + "created": "2013-12-18T21:29:08.605Z", "amount": 0.56, - "object": 93, - "account": 13, - "state": "pending", + "object": 112, + "account": 15, + "state": "invoiced", "coreHours": 8.0, - "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "reservation" + "invoice": 72, + "date": "2013-12-15T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58853, + "pk": 60653, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.260Z", + "updated": "2013-12-18T21:29:08.613Z", "slice": 9, - "created": "2013-12-13T22:19:47.260Z", + "created": "2013-12-18T21:29:08.613Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "reservation" + "date": "2013-12-16T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58854, + "pk": 60654, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.269Z", + "updated": "2013-12-18T21:29:08.621Z", "slice": 9, - "created": "2013-12-13T22:19:47.269Z", + "created": "2013-12-18T21:29:08.621Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "reservation" + "date": "2013-12-16T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58855, + "pk": 60655, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.277Z", + "updated": "2013-12-18T21:29:08.630Z", "slice": 9, - "created": "2013-12-13T22:19:47.277Z", + "created": "2013-12-18T21:29:08.629Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "reservation" + "date": "2013-12-16T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58856, + "pk": 60656, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.285Z", + "updated": "2013-12-18T21:29:08.638Z", "slice": 9, - "created": "2013-12-13T22:19:47.285Z", + "created": "2013-12-18T21:29:08.638Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "reservation" + "date": "2013-12-17T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58857, + "pk": 60657, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.294Z", + "updated": "2013-12-18T21:29:08.646Z", "slice": 9, - "created": "2013-12-13T22:19:47.294Z", + "created": "2013-12-18T21:29:08.646Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "reservation" + "date": "2013-12-17T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58858, + "pk": 60658, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.302Z", + "updated": "2013-12-18T21:29:08.654Z", "slice": 9, - "created": "2013-12-13T22:19:47.302Z", + "created": "2013-12-18T21:29:08.654Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "reservation" + "date": "2013-12-17T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58859, + "pk": 60659, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.310Z", + "updated": "2013-12-18T21:29:08.663Z", "slice": 9, - "created": "2013-12-13T22:19:47.310Z", + "created": "2013-12-18T21:29:08.663Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-13T06:00:00Z", - "kind": "reservation" + "date": "2013-12-18T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58860, + "pk": 60660, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.318Z", + "updated": "2013-12-18T21:29:08.671Z", "slice": 9, - "created": "2013-12-13T22:19:47.318Z", + "created": "2013-12-18T21:29:08.671Z", "amount": 0.56, - "object": 93, - "account": 13, + "object": 112, + "account": 15, "state": "pending", "coreHours": 8.0, "invoice": null, - "date": "2013-12-13T14:00:00Z", - "kind": "reservation" + "date": "2013-12-18T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 58861, + "pk": 60661, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.449Z", + "updated": "2013-12-18T21:29:29.215Z", "slice": 11, - "created": "2013-12-13T22:19:47.350Z", - "amount": 0.336, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.698Z", + "amount": 0.1848, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.8, - "invoice": 59, - "date": "2013-11-13T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 73, + "date": "2013-11-18T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58862, + "pk": 60662, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.540Z", + "updated": "2013-12-18T21:29:29.240Z", "slice": 11, - "created": "2013-12-13T22:19:47.360Z", - "amount": 0.3024, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.704Z", + "amount": 0.2072, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.32, - "invoice": 59, - "date": "2013-11-14T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 74, + "date": "2013-11-19T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58863, + "pk": 60663, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.631Z", + "updated": "2013-12-18T21:29:29.256Z", "slice": 11, - "created": "2013-12-13T22:19:47.368Z", - "amount": 0.2016, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.712Z", + "amount": 0.3248, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.88, - "invoice": 59, - "date": "2013-11-14T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.64, + "invoice": 74, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58864, + "pk": 60664, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.722Z", + "updated": "2013-12-18T21:29:29.273Z", "slice": 11, - "created": "2013-12-13T22:19:47.376Z", - "amount": 0.2912, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.721Z", + "amount": 0.2352, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.16, - "invoice": 59, - "date": "2013-11-14T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.36, + "invoice": 74, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58865, + "pk": 60665, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.813Z", + "updated": "2013-12-18T21:29:29.290Z", "slice": 11, - "created": "2013-12-13T22:19:47.385Z", - "amount": 0.2632, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.729Z", + "amount": 0.3304, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.76, - "invoice": 59, - "date": "2013-11-15T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 74, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58866, + "pk": 60666, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.904Z", + "updated": "2013-12-18T21:29:29.306Z", "slice": 11, - "created": "2013-12-13T22:19:47.393Z", - "amount": 0.2016, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.737Z", + "amount": 0.308, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.88, - "invoice": 59, - "date": "2013-11-15T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 74, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58867, + "pk": 60667, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.013Z", + "updated": "2013-12-18T21:29:29.323Z", "slice": 11, - "created": "2013-12-13T22:19:47.401Z", - "amount": 0.252, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.745Z", + "amount": 0.1232, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.6, - "invoice": 59, - "date": "2013-11-15T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 74, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58868, + "pk": 60668, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.104Z", + "updated": "2013-12-18T21:29:29.339Z", "slice": 11, - "created": "2013-12-13T22:19:47.410Z", - "amount": 0.1456, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.754Z", + "amount": 0.1568, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.08, - "invoice": 59, - "date": "2013-11-16T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 74, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58869, + "pk": 60669, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.195Z", + "updated": "2013-12-18T21:29:29.356Z", "slice": 11, - "created": "2013-12-13T22:19:47.418Z", - "amount": 0.1512, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.762Z", + "amount": 0.2744, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.16, - "invoice": 59, - "date": "2013-11-16T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 74, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58870, + "pk": 60670, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.286Z", + "updated": "2013-12-18T21:29:29.372Z", "slice": 11, - "created": "2013-12-13T22:19:47.426Z", - "amount": 0.2688, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.770Z", + "amount": 0.2184, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.84, - "invoice": 59, - "date": "2013-11-16T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 74, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58871, + "pk": 60671, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.369Z", + "updated": "2013-12-18T21:29:29.389Z", "slice": 11, - "created": "2013-12-13T22:19:47.434Z", - "amount": 0.168, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.779Z", + "amount": 0.2184, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.4, - "invoice": 59, - "date": "2013-11-17T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 74, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58872, + "pk": 60672, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.460Z", + "updated": "2013-12-18T21:29:29.406Z", "slice": 11, - "created": "2013-12-13T22:19:47.443Z", - "amount": 0.2856, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.787Z", + "amount": 0.14, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.08, - "invoice": 59, - "date": "2013-11-17T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 74, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58873, + "pk": 60673, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.551Z", + "updated": "2013-12-18T21:29:29.424Z", "slice": 11, - "created": "2013-12-13T22:19:47.451Z", - "amount": 0.3192, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.795Z", + "amount": 0.2352, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.56, - "invoice": 59, - "date": "2013-11-17T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.36, + "invoice": 74, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58874, + "pk": 60674, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.651Z", + "updated": "2013-12-18T21:29:29.440Z", "slice": 11, - "created": "2013-12-13T22:19:47.459Z", - "amount": 0.3192, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.803Z", + "amount": 0.1232, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.56, - "invoice": 60, - "date": "2013-11-18T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 74, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58875, + "pk": 60675, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.753Z", + "updated": "2013-12-18T21:29:29.457Z", "slice": 11, - "created": "2013-12-13T22:19:47.467Z", - "amount": 0.196, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.812Z", + "amount": 0.2016, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.8, - "invoice": 60, - "date": "2013-11-18T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.88, + "invoice": 74, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58876, + "pk": 60676, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.845Z", + "updated": "2013-12-18T21:29:29.473Z", "slice": 11, - "created": "2013-12-13T22:19:47.476Z", - "amount": 0.196, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.820Z", + "amount": 0.28, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.8, - "invoice": 60, - "date": "2013-11-18T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 74, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58877, + "pk": 60677, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.936Z", + "updated": "2013-12-18T21:29:29.490Z", "slice": 11, - "created": "2013-12-13T22:19:47.484Z", - "amount": 0.168, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.828Z", + "amount": 0.2408, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.4, - "invoice": 60, - "date": "2013-11-19T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 74, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58878, + "pk": 60678, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.027Z", + "updated": "2013-12-18T21:29:29.507Z", "slice": 11, - "created": "2013-12-13T22:19:47.492Z", + "created": "2013-12-18T21:29:08.837Z", "amount": 0.2072, - "object": 94, - "account": 13, + "object": 105, + "account": 16, "state": "invoiced", "coreHours": 2.96, - "invoice": 60, - "date": "2013-11-19T14:00:00Z", - "kind": "besteffort" + "invoice": 74, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58879, + "pk": 60679, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.118Z", + "updated": "2013-12-18T21:29:29.523Z", "slice": 11, - "created": "2013-12-13T22:19:47.501Z", - "amount": 0.1792, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.845Z", + "amount": 0.2296, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.56, - "invoice": 60, - "date": "2013-11-19T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 74, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58880, + "pk": 60680, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.209Z", + "updated": "2013-12-18T21:29:29.548Z", "slice": 11, - "created": "2013-12-13T22:19:47.509Z", - "amount": 0.2464, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.853Z", + "amount": 0.28, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.52, - "invoice": 60, - "date": "2013-11-20T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 75, + "date": "2013-11-25T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58881, + "pk": 60681, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.300Z", + "updated": "2013-12-18T21:29:29.565Z", "slice": 11, - "created": "2013-12-13T22:19:47.517Z", - "amount": 0.2296, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.861Z", + "amount": 0.3024, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.28, - "invoice": 60, - "date": "2013-11-20T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 75, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58882, + "pk": 60682, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.394Z", + "updated": "2013-12-18T21:29:29.581Z", "slice": 11, - "created": "2013-12-13T22:19:47.525Z", - "amount": 0.2576, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.870Z", + "amount": 0.1512, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.68, - "invoice": 60, - "date": "2013-11-20T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.16, + "invoice": 75, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58883, + "pk": 60683, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.485Z", + "updated": "2013-12-18T21:29:29.598Z", "slice": 11, - "created": "2013-12-13T22:19:47.534Z", - "amount": 0.2968, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.878Z", + "amount": 0.196, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.24, - "invoice": 60, - "date": "2013-11-21T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 75, + "date": "2013-11-26T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58884, + "pk": 60684, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.576Z", + "updated": "2013-12-18T21:29:29.614Z", "slice": 11, - "created": "2013-12-13T22:19:47.542Z", - "amount": 0.2072, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.886Z", + "amount": 0.112, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.96, - "invoice": 60, - "date": "2013-11-21T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 75, + "date": "2013-11-26T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58885, + "pk": 60685, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.684Z", + "updated": "2013-12-18T21:29:29.631Z", "slice": 11, - "created": "2013-12-13T22:19:47.550Z", - "amount": 0.1288, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.894Z", + "amount": 0.2688, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 1.84, - "invoice": 60, - "date": "2013-11-21T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.84, + "invoice": 75, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58886, + "pk": 60686, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.775Z", + "updated": "2013-12-18T21:29:29.648Z", "slice": 11, - "created": "2013-12-13T22:19:47.559Z", - "amount": 0.1624, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.903Z", + "amount": 0.336, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.32, - "invoice": 60, - "date": "2013-11-22T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.8, + "invoice": 75, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58887, + "pk": 60687, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.866Z", + "updated": "2013-12-18T21:29:29.664Z", "slice": 11, - "created": "2013-12-13T22:19:47.567Z", - "amount": 0.3248, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.911Z", + "amount": 0.2296, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.64, - "invoice": 60, - "date": "2013-11-22T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 75, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58888, + "pk": 60688, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.982Z", + "updated": "2013-12-18T21:29:29.681Z", "slice": 11, - "created": "2013-12-13T22:19:47.575Z", - "amount": 0.3248, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.919Z", + "amount": 0.2912, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.64, - "invoice": 60, - "date": "2013-11-22T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 75, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58889, + "pk": 60689, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.073Z", + "updated": "2013-12-18T21:29:29.697Z", "slice": 11, - "created": "2013-12-13T22:19:47.583Z", - "amount": 0.1848, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.928Z", + "amount": 0.308, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.64, - "invoice": 60, - "date": "2013-11-23T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 75, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58890, + "pk": 60690, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.164Z", + "updated": "2013-12-18T21:29:29.714Z", "slice": 11, - "created": "2013-12-13T22:19:47.592Z", - "amount": 0.3136, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.936Z", + "amount": 0.308, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.48, - "invoice": 60, - "date": "2013-11-23T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 75, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58891, + "pk": 60691, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.330Z", + "updated": "2013-12-18T21:29:29.730Z", "slice": 11, - "created": "2013-12-13T22:19:47.600Z", - "amount": 0.2128, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.944Z", + "amount": 0.336, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.04, - "invoice": 60, - "date": "2013-11-23T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.8, + "invoice": 75, + "date": "2013-11-28T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58892, + "pk": 60692, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.636Z", + "updated": "2013-12-18T21:29:29.747Z", "slice": 11, - "created": "2013-12-13T22:19:47.608Z", - "amount": 0.2688, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.952Z", + "amount": 0.336, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.84, - "invoice": 60, - "date": "2013-11-24T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.8, + "invoice": 75, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58893, + "pk": 60693, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.794Z", + "updated": "2013-12-18T21:29:29.763Z", "slice": 11, - "created": "2013-12-13T22:19:47.616Z", - "amount": 0.2968, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.961Z", + "amount": 0.336, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.24, - "invoice": 60, - "date": "2013-11-24T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.8, + "invoice": 75, + "date": "2013-11-29T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58894, + "pk": 60694, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.885Z", + "updated": "2013-12-18T21:29:29.780Z", "slice": 11, - "created": "2013-12-13T22:19:47.625Z", - "amount": 0.168, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.969Z", + "amount": 0.224, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.4, - "invoice": 60, - "date": "2013-11-24T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.2, + "invoice": 75, + "date": "2013-11-29T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58895, + "pk": 60695, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.984Z", + "updated": "2013-12-18T21:29:29.797Z", "slice": 11, - "created": "2013-12-13T22:19:47.633Z", - "amount": 0.3248, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.977Z", + "amount": 0.3304, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.64, - "invoice": 61, - "date": "2013-11-25T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 75, + "date": "2013-11-30T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58896, + "pk": 60696, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.075Z", + "updated": "2013-12-18T21:29:29.813Z", "slice": 11, - "created": "2013-12-13T22:19:47.641Z", - "amount": 0.2968, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.986Z", + "amount": 0.3136, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.24, - "invoice": 61, - "date": "2013-11-25T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 75, + "date": "2013-11-30T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58897, + "pk": 60697, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.166Z", + "updated": "2013-12-18T21:29:29.830Z", "slice": 11, - "created": "2013-12-13T22:19:47.650Z", - "amount": 0.2968, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:08.994Z", + "amount": 0.2856, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.24, - "invoice": 61, - "date": "2013-11-25T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 75, + "date": "2013-11-30T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58898, + "pk": 60698, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.262Z", + "updated": "2013-12-18T21:29:29.846Z", "slice": 11, - "created": "2013-12-13T22:19:47.658Z", - "amount": 0.2184, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.002Z", + "amount": 0.336, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.12, - "invoice": 61, - "date": "2013-11-26T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.8, + "invoice": 75, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58899, + "pk": 60699, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.354Z", + "updated": "2013-12-18T21:29:29.863Z", "slice": 11, - "created": "2013-12-13T22:19:47.666Z", - "amount": 0.3304, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.010Z", + "amount": 0.2128, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.72, - "invoice": 61, - "date": "2013-11-26T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 75, + "date": "2013-12-01T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58900, + "pk": 60700, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.445Z", + "updated": "2013-12-18T21:29:29.879Z", "slice": 11, - "created": "2013-12-13T22:19:47.674Z", - "amount": 0.1568, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.019Z", + "amount": 0.1456, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.24, - "invoice": 61, - "date": "2013-11-26T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 75, + "date": "2013-12-01T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58901, + "pk": 60701, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.536Z", + "updated": "2013-12-18T21:29:29.904Z", "slice": 11, - "created": "2013-12-13T22:19:47.683Z", - "amount": 0.1848, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.027Z", + "amount": 0.2128, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.64, - "invoice": 61, - "date": "2013-11-27T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 76, + "date": "2013-12-02T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58902, + "pk": 60702, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.627Z", + "updated": "2013-12-18T21:29:29.921Z", "slice": 11, - "created": "2013-12-13T22:19:47.691Z", - "amount": 0.308, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.035Z", + "amount": 0.2576, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.4, - "invoice": 61, - "date": "2013-11-27T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 76, + "date": "2013-12-02T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58903, + "pk": 60703, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.718Z", + "updated": "2013-12-18T21:29:29.937Z", "slice": 11, - "created": "2013-12-13T22:19:47.699Z", - "amount": 0.336, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.044Z", + "amount": 0.2856, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.8, - "invoice": 61, - "date": "2013-11-27T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 76, + "date": "2013-12-02T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58904, + "pk": 60704, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.809Z", + "updated": "2013-12-18T21:29:29.954Z", "slice": 11, - "created": "2013-12-13T22:19:47.708Z", - "amount": 0.2184, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.054Z", + "amount": 0.2464, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.12, - "invoice": 61, - "date": "2013-11-28T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 76, + "date": "2013-12-03T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58905, + "pk": 60705, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.900Z", + "updated": "2013-12-18T21:29:29.971Z", "slice": 11, - "created": "2013-12-13T22:19:47.716Z", - "amount": 0.1904, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.060Z", + "amount": 0.1736, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.72, - "invoice": 61, - "date": "2013-11-28T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 76, + "date": "2013-12-03T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58906, + "pk": 60706, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.991Z", + "updated": "2013-12-18T21:29:29.987Z", "slice": 11, - "created": "2013-12-13T22:19:47.724Z", - "amount": 0.1624, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.068Z", + "amount": 0.2464, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.32, - "invoice": 61, - "date": "2013-11-28T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 76, + "date": "2013-12-03T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58907, + "pk": 60707, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.083Z", + "updated": "2013-12-18T21:29:30.004Z", "slice": 11, - "created": "2013-12-13T22:19:47.733Z", - "amount": 0.2072, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.077Z", + "amount": 0.2744, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.96, - "invoice": 61, - "date": "2013-11-29T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 76, + "date": "2013-12-04T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58908, + "pk": 60708, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.174Z", + "updated": "2013-12-18T21:29:30.020Z", "slice": 11, - "created": "2013-12-13T22:19:47.741Z", - "amount": 0.2968, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.085Z", + "amount": 0.2016, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.24, - "invoice": 61, - "date": "2013-11-29T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.88, + "invoice": 76, + "date": "2013-12-04T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58909, + "pk": 60709, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.265Z", + "updated": "2013-12-18T21:29:30.037Z", "slice": 11, - "created": "2013-12-13T22:19:47.749Z", - "amount": 0.3024, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.093Z", + "amount": 0.308, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.32, - "invoice": 61, - "date": "2013-11-29T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 76, + "date": "2013-12-04T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58910, + "pk": 60710, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.356Z", + "updated": "2013-12-18T21:29:30.053Z", "slice": 11, - "created": "2013-12-13T22:19:47.757Z", - "amount": 0.2856, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.102Z", + "amount": 0.1288, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.08, - "invoice": 61, - "date": "2013-11-30T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 76, + "date": "2013-12-05T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58911, + "pk": 60711, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.449Z", + "updated": "2013-12-18T21:29:30.070Z", "slice": 11, - "created": "2013-12-13T22:19:47.765Z", + "created": "2013-12-18T21:29:09.110Z", "amount": 0.1232, - "object": 94, - "account": 13, + "object": 105, + "account": 16, "state": "invoiced", "coreHours": 1.76, - "invoice": 61, - "date": "2013-11-30T14:00:00Z", - "kind": "besteffort" + "invoice": 76, + "date": "2013-12-05T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58912, + "pk": 60712, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.540Z", + "updated": "2013-12-18T21:29:30.087Z", "slice": 11, - "created": "2013-12-13T22:19:47.774Z", - "amount": 0.1792, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.118Z", + "amount": 0.2184, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.56, - "invoice": 61, - "date": "2013-11-30T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 76, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58913, + "pk": 60713, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.631Z", + "updated": "2013-12-18T21:29:30.103Z", "slice": 11, - "created": "2013-12-13T22:19:47.782Z", - "amount": 0.1792, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.126Z", + "amount": 0.3192, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.56, - "invoice": 61, - "date": "2013-12-01T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 76, + "date": "2013-12-06T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58914, + "pk": 60714, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.722Z", + "updated": "2013-12-18T21:29:30.120Z", "slice": 11, - "created": "2013-12-13T22:19:47.791Z", - "amount": 0.1344, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.135Z", + "amount": 0.3192, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 1.92, - "invoice": 61, - "date": "2013-12-01T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 76, + "date": "2013-12-06T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58915, + "pk": 60715, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.805Z", + "updated": "2013-12-18T21:29:30.136Z", "slice": 11, - "created": "2013-12-13T22:19:47.799Z", - "amount": 0.3192, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.143Z", + "amount": 0.2744, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.56, - "invoice": 61, - "date": "2013-12-01T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 76, + "date": "2013-12-06T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58916, + "pk": 60716, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.904Z", + "updated": "2013-12-18T21:29:30.153Z", "slice": 11, - "created": "2013-12-13T22:19:47.807Z", + "created": "2013-12-18T21:29:09.151Z", "amount": 0.1232, - "object": 94, - "account": 13, + "object": 105, + "account": 16, "state": "invoiced", "coreHours": 1.76, - "invoice": 62, - "date": "2013-12-02T06:00:00Z", - "kind": "besteffort" + "invoice": 76, + "date": "2013-12-07T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58917, + "pk": 60717, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.995Z", + "updated": "2013-12-18T21:29:30.169Z", "slice": 11, - "created": "2013-12-13T22:19:47.815Z", - "amount": 0.1288, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.160Z", + "amount": 0.2912, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 1.84, - "invoice": 62, - "date": "2013-12-02T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 76, + "date": "2013-12-07T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58918, + "pk": 60718, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.087Z", + "updated": "2013-12-18T21:29:30.186Z", "slice": 11, - "created": "2013-12-13T22:19:47.824Z", - "amount": 0.2912, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.168Z", + "amount": 0.3304, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.16, - "invoice": 62, - "date": "2013-12-02T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 76, + "date": "2013-12-07T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58919, + "pk": 60719, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.178Z", + "updated": "2013-12-18T21:29:30.203Z", "slice": 11, - "created": "2013-12-13T22:19:47.832Z", - "amount": 0.2744, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.176Z", + "amount": 0.224, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.92, - "invoice": 62, - "date": "2013-12-03T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.2, + "invoice": 76, + "date": "2013-12-08T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58920, + "pk": 60720, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.269Z", + "updated": "2013-12-18T21:29:30.219Z", "slice": 11, - "created": "2013-12-13T22:19:47.840Z", - "amount": 0.1568, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.185Z", + "amount": 0.1456, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.24, - "invoice": 62, - "date": "2013-12-03T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 76, + "date": "2013-12-08T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58921, + "pk": 60721, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.360Z", + "updated": "2013-12-18T21:29:30.236Z", "slice": 11, - "created": "2013-12-13T22:19:47.849Z", - "amount": 0.2688, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.193Z", + "amount": 0.3192, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.84, - "invoice": 62, - "date": "2013-12-03T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 76, + "date": "2013-12-08T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58922, + "pk": 60722, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.451Z", + "updated": "2013-12-18T21:29:30.260Z", "slice": 11, - "created": "2013-12-13T22:19:47.857Z", - "amount": 0.336, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.201Z", + "amount": 0.2576, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.8, - "invoice": 62, - "date": "2013-12-04T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 77, + "date": "2013-12-09T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58923, + "pk": 60723, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.542Z", + "updated": "2013-12-18T21:29:30.277Z", "slice": 11, - "created": "2013-12-13T22:19:47.865Z", - "amount": 0.196, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.209Z", + "amount": 0.168, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.8, - "invoice": 62, - "date": "2013-12-04T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.4, + "invoice": 77, + "date": "2013-12-09T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58924, + "pk": 60724, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.633Z", + "updated": "2013-12-18T21:29:30.294Z", "slice": 11, - "created": "2013-12-13T22:19:47.873Z", - "amount": 0.1176, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.218Z", + "amount": 0.2856, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 1.68, - "invoice": 62, - "date": "2013-12-04T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 77, + "date": "2013-12-09T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58925, + "pk": 60725, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.724Z", + "updated": "2013-12-18T21:29:30.319Z", "slice": 11, - "created": "2013-12-13T22:19:47.885Z", - "amount": 0.1512, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.226Z", + "amount": 0.1232, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.16, - "invoice": 62, - "date": "2013-12-05T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 77, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58926, + "pk": 60726, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.816Z", + "updated": "2013-12-18T21:29:30.335Z", "slice": 11, - "created": "2013-12-13T22:19:47.893Z", - "amount": 0.308, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.234Z", + "amount": 0.168, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.4, - "invoice": 62, - "date": "2013-12-05T14:00:00Z", - "kind": "besteffort" + "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": 58927, + "pk": 60728, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.907Z", + "updated": "2013-12-18T21:29:30.369Z", "slice": 11, - "created": "2013-12-13T22:19:47.902Z", + "created": "2013-12-18T21:29:09.251Z", "amount": 0.3192, - "object": 94, - "account": 13, + "object": 105, + "account": 16, "state": "invoiced", "coreHours": 4.56, - "invoice": 62, - "date": "2013-12-05T22:00:00Z", - "kind": "besteffort" + "invoice": 77, + "date": "2013-12-11T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58928, + "pk": 60729, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.006Z", + "updated": "2013-12-18T21:29:30.385Z", "slice": 11, - "created": "2013-12-13T22:19:47.910Z", - "amount": 0.1904, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.259Z", + "amount": 0.1736, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.72, - "invoice": 62, - "date": "2013-12-06T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 77, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58929, + "pk": 60730, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.097Z", + "updated": "2013-12-18T21:29:30.402Z", "slice": 11, - "created": "2013-12-13T22:19:47.918Z", - "amount": 0.14, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.267Z", + "amount": 0.196, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.0, - "invoice": 62, - "date": "2013-12-06T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 77, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58930, + "pk": 60731, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.195Z", + "updated": "2013-12-18T21:29:30.418Z", "slice": 11, - "created": "2013-12-13T22:19:47.926Z", - "amount": 0.1288, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.276Z", + "amount": 0.112, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 1.84, - "invoice": 62, - "date": "2013-12-06T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 77, + "date": "2013-12-12T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58931, + "pk": 60732, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.286Z", + "updated": "2013-12-18T21:29:30.435Z", "slice": 11, - "created": "2013-12-13T22:19:47.935Z", - "amount": 0.1512, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.284Z", + "amount": 0.2856, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 2.16, - "invoice": 62, - "date": "2013-12-07T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 77, + "date": "2013-12-12T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58932, + "pk": 60733, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.377Z", + "updated": "2013-12-18T21:29:30.451Z", "slice": 11, - "created": "2013-12-13T22:19:47.943Z", - "amount": 0.252, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.292Z", + "amount": 0.1568, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 3.6, - "invoice": 62, - "date": "2013-12-07T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 77, + "date": "2013-12-12T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58933, + "pk": 60734, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.468Z", + "updated": "2013-12-18T21:29:30.468Z", "slice": 11, - "created": "2013-12-13T22:19:47.951Z", - "amount": 0.1232, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.300Z", + "amount": 0.2408, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 1.76, - "invoice": 62, - "date": "2013-12-07T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 77, + "date": "2013-12-13T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58934, + "pk": 60735, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.559Z", + "updated": "2013-12-18T21:29:30.485Z", "slice": 11, - "created": "2013-12-13T22:19:47.960Z", - "amount": 0.1232, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.309Z", + "amount": 0.2912, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 1.76, - "invoice": 62, - "date": "2013-12-08T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 77, + "date": "2013-12-13T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58935, + "pk": 60736, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.651Z", + "updated": "2013-12-18T21:29:30.501Z", "slice": 11, - "created": "2013-12-13T22:19:47.968Z", + "created": "2013-12-18T21:29:09.317Z", "amount": 0.1512, - "object": 94, - "account": 13, + "object": 105, + "account": 16, "state": "invoiced", "coreHours": 2.16, - "invoice": 62, - "date": "2013-12-08T14:00:00Z", - "kind": "besteffort" + "invoice": 77, + "date": "2013-12-13T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58936, + "pk": 60737, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.742Z", + "updated": "2013-12-18T21:29:30.518Z", "slice": 11, - "created": "2013-12-13T22:19:47.976Z", - "amount": 0.336, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.325Z", + "amount": 0.2632, + "object": 105, + "account": 16, "state": "invoiced", - "coreHours": 4.8, - "invoice": 62, - "date": "2013-12-08T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.76, + "invoice": 77, + "date": "2013-12-14T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58937, + "pk": 60738, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.984Z", + "updated": "2013-12-18T21:29:30.534Z", "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" + "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": 58938, + "pk": 60739, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:47.993Z", + "updated": "2013-12-18T21:29:30.551Z", "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" + "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": 58939, + "pk": 60740, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.001Z", + "updated": "2013-12-18T21:29:30.567Z", "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" + "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": 58940, + "pk": 60741, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.009Z", + "updated": "2013-12-18T21:29:30.584Z", "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" + "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": 58941, + "pk": 60742, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.017Z", + "updated": "2013-12-18T21:29:30.601Z", "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" + "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": 58942, + "pk": 60743, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.026Z", + "updated": "2013-12-18T21:29:09.375Z", "slice": 11, - "created": "2013-12-13T22:19:48.026Z", - "amount": 0.1848, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.375Z", + "amount": 0.1176, + "object": 105, + "account": 16, "state": "pending", - "coreHours": 2.64, + "coreHours": 1.68, "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58943, + "pk": 60744, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.034Z", + "updated": "2013-12-18T21:29:09.383Z", "slice": 11, - "created": "2013-12-13T22:19:48.034Z", - "amount": 0.1568, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.383Z", + "amount": 0.2128, + "object": 105, + "account": 16, "state": "pending", - "coreHours": 2.24, + "coreHours": 3.04, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58944, + "pk": 60745, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.042Z", + "updated": "2013-12-18T21:29:09.392Z", "slice": 11, - "created": "2013-12-13T22:19:48.042Z", - "amount": 0.1904, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.392Z", + "amount": 0.28, + "object": 105, + "account": 16, "state": "pending", - "coreHours": 2.72, + "coreHours": 4.0, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58945, + "pk": 60746, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.051Z", + "updated": "2013-12-18T21:29:09.400Z", "slice": 11, - "created": "2013-12-13T22:19:48.051Z", - "amount": 0.3192, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.400Z", + "amount": 0.224, + "object": 105, + "account": 16, "state": "pending", - "coreHours": 4.56, + "coreHours": 3.2, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58946, + "pk": 60747, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.059Z", + "updated": "2013-12-18T21:29:09.408Z", "slice": 11, - "created": "2013-12-13T22:19:48.059Z", - "amount": 0.1568, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.408Z", + "amount": 0.2184, + "object": 105, + "account": 16, "state": "pending", - "coreHours": 2.24, + "coreHours": 3.12, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58947, + "pk": 60748, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.067Z", + "updated": "2013-12-18T21:29:09.416Z", "slice": 11, - "created": "2013-12-13T22:19:48.067Z", - "amount": 0.2688, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.416Z", + "amount": 0.2464, + "object": 105, + "account": 16, "state": "pending", - "coreHours": 3.84, + "coreHours": 3.52, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58948, + "pk": 60749, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.075Z", + "updated": "2013-12-18T21:29:09.425Z", "slice": 11, - "created": "2013-12-13T22:19:48.075Z", - "amount": 0.2632, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.425Z", + "amount": 0.308, + "object": 105, + "account": 16, "state": "pending", - "coreHours": 3.76, + "coreHours": 4.4, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58949, + "pk": 60750, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.084Z", + "updated": "2013-12-18T21:29:09.433Z", "slice": 11, - "created": "2013-12-13T22:19:48.084Z", - "amount": 0.2856, - "object": 94, - "account": 13, + "created": "2013-12-18T21:29:09.433Z", + "amount": 0.3024, + "object": 105, + "account": 16, "state": "pending", - "coreHours": 4.08, + "coreHours": 4.32, "invoice": null, - "date": "2013-12-13T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58950, + "pk": 60751, "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" + "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": 58951, + "pk": 60752, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.440Z", + "updated": "2013-12-18T21:29:29.248Z", "slice": 12, - "created": "2013-12-13T22:19:48.115Z", - "amount": 0.2296, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.466Z", + "amount": 0.308, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.28, - "invoice": 59, - "date": "2013-11-13T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 74, + "date": "2013-11-19T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58952, + "pk": 60753, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.532Z", + "updated": "2013-12-18T21:29:29.265Z", "slice": 12, - "created": "2013-12-13T22:19:48.125Z", - "amount": 0.2352, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.474Z", + "amount": 0.2576, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.36, - "invoice": 59, - "date": "2013-11-14T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 74, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58953, + "pk": 60754, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.623Z", + "updated": "2013-12-18T21:29:29.281Z", "slice": 12, - "created": "2013-12-13T22:19:48.133Z", - "amount": 0.308, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.483Z", + "amount": 0.3192, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.4, - "invoice": 59, - "date": "2013-11-14T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 74, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58954, + "pk": 60755, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.714Z", + "updated": "2013-12-18T21:29:29.298Z", "slice": 12, - "created": "2013-12-13T22:19:48.142Z", - "amount": 0.252, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.491Z", + "amount": 0.1904, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.6, - "invoice": 59, - "date": "2013-11-14T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.72, + "invoice": 74, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58955, + "pk": 60756, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.805Z", + "updated": "2013-12-18T21:29:29.314Z", "slice": 12, - "created": "2013-12-13T22:19:48.150Z", - "amount": 0.308, - "object": 95, - "account": 13, + "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": 4.4, - "invoice": 59, - "date": "2013-11-15T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 74, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58956, + "pk": 60758, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.896Z", + "updated": "2013-12-18T21:29:29.347Z", "slice": 12, - "created": "2013-12-13T22:19:48.158Z", - "amount": 0.3024, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.516Z", + "amount": 0.28, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.32, - "invoice": 59, - "date": "2013-11-15T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 74, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58957, + "pk": 60759, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.004Z", + "updated": "2013-12-18T21:29:29.364Z", "slice": 12, - "created": "2013-12-13T22:19:48.167Z", - "amount": 0.1456, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.524Z", + "amount": 0.1232, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.08, - "invoice": 59, - "date": "2013-11-15T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 74, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58958, + "pk": 60760, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.096Z", + "updated": "2013-12-18T21:29:29.381Z", "slice": 12, - "created": "2013-12-13T22:19:48.175Z", - "amount": 0.2912, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.532Z", + "amount": 0.3136, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.16, - "invoice": 59, - "date": "2013-11-16T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 74, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58959, + "pk": 60761, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.187Z", + "updated": "2013-12-18T21:29:29.397Z", "slice": 12, - "created": "2013-12-13T22:19:48.183Z", - "amount": 0.1232, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.541Z", + "amount": 0.1456, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 1.76, - "invoice": 59, - "date": "2013-11-16T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 74, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58960, + "pk": 60762, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.278Z", + "updated": "2013-12-18T21:29:29.414Z", "slice": 12, - "created": "2013-12-13T22:19:48.191Z", - "amount": 0.2184, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.549Z", + "amount": 0.2576, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.12, - "invoice": 59, - "date": "2013-11-16T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 74, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58961, + "pk": 60763, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.361Z", + "updated": "2013-12-18T21:29:29.432Z", "slice": 12, - "created": "2013-12-13T22:19:48.200Z", - "amount": 0.2352, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.557Z", + "amount": 0.2016, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.36, - "invoice": 59, - "date": "2013-11-17T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.88, + "invoice": 74, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58962, + "pk": 60764, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.452Z", + "updated": "2013-12-18T21:29:29.448Z", "slice": 12, - "created": "2013-12-13T22:19:48.208Z", - "amount": 0.2016, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.565Z", + "amount": 0.3024, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.88, - "invoice": 59, - "date": "2013-11-17T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 74, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58963, + "pk": 60765, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.543Z", + "updated": "2013-12-18T21:29:29.465Z", "slice": 12, - "created": "2013-12-13T22:19:48.216Z", - "amount": 0.1512, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.574Z", + "amount": 0.3136, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.16, - "invoice": 59, - "date": "2013-11-17T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 74, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58964, + "pk": 60766, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.642Z", + "updated": "2013-12-18T21:29:29.482Z", "slice": 12, - "created": "2013-12-13T22:19:48.224Z", - "amount": 0.2296, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.582Z", + "amount": 0.2128, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.28, - "invoice": 60, - "date": "2013-11-18T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 74, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58965, + "pk": 60767, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.745Z", + "updated": "2013-12-18T21:29:29.498Z", "slice": 12, - "created": "2013-12-13T22:19:48.233Z", - "amount": 0.308, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.590Z", + "amount": 0.1848, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.4, - "invoice": 60, - "date": "2013-11-18T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 74, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58966, + "pk": 60768, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.836Z", + "updated": "2013-12-18T21:29:29.515Z", "slice": 12, - "created": "2013-12-13T22:19:48.241Z", - "amount": 0.2408, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.599Z", + "amount": 0.3136, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.44, - "invoice": 60, - "date": "2013-11-18T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 74, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58967, + "pk": 60769, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:59.927Z", + "updated": "2013-12-18T21:29:29.531Z", "slice": 12, - "created": "2013-12-13T22:19:48.249Z", - "amount": 0.1512, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.607Z", + "amount": 0.1456, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.16, - "invoice": 60, - "date": "2013-11-19T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 74, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58968, + "pk": 60770, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.019Z", + "updated": "2013-12-18T21:29:29.556Z", "slice": 12, - "created": "2013-12-13T22:19:48.258Z", - "amount": 0.2016, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.615Z", + "amount": 0.2576, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.88, - "invoice": 60, - "date": "2013-11-19T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 75, + "date": "2013-11-25T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58969, + "pk": 60771, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.110Z", + "updated": "2013-12-18T21:29:29.573Z", "slice": 12, - "created": "2013-12-13T22:19:48.266Z", - "amount": 0.2744, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.623Z", + "amount": 0.2912, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.92, - "invoice": 60, - "date": "2013-11-19T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 75, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58970, + "pk": 60772, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.201Z", + "updated": "2013-12-18T21:29:29.589Z", "slice": 12, - "created": "2013-12-13T22:19:48.274Z", - "amount": 0.2184, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.632Z", + "amount": 0.2744, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.12, - "invoice": 60, - "date": "2013-11-20T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 75, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58971, + "pk": 60773, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.292Z", + "updated": "2013-12-18T21:29:29.606Z", "slice": 12, - "created": "2013-12-13T22:19:48.283Z", - "amount": 0.2016, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.640Z", + "amount": 0.2296, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.88, - "invoice": 60, - "date": "2013-11-20T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 75, + "date": "2013-11-26T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58972, + "pk": 60774, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.386Z", + "updated": "2013-12-18T21:29:29.623Z", "slice": 12, - "created": "2013-12-13T22:19:48.291Z", - "amount": 0.1792, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.649Z", + "amount": 0.308, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.56, - "invoice": 60, - "date": "2013-11-20T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 75, + "date": "2013-11-26T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58973, + "pk": 60775, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.477Z", + "updated": "2013-12-18T21:29:29.639Z", "slice": 12, - "created": "2013-12-13T22:19:48.299Z", - "amount": 0.196, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.657Z", + "amount": 0.1736, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.8, - "invoice": 60, - "date": "2013-11-21T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 75, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58974, + "pk": 60776, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.568Z", + "updated": "2013-12-18T21:29:29.656Z", "slice": 12, - "created": "2013-12-13T22:19:48.308Z", - "amount": 0.1288, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.665Z", + "amount": 0.1176, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 1.84, - "invoice": 60, - "date": "2013-11-21T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 75, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58975, + "pk": 60777, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.675Z", + "updated": "2013-12-18T21:29:29.672Z", "slice": 12, - "created": "2013-12-13T22:19:48.316Z", - "amount": 0.224, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.673Z", + "amount": 0.1736, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.2, - "invoice": 60, - "date": "2013-11-21T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 75, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58976, + "pk": 60778, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.767Z", + "updated": "2013-12-18T21:29:29.689Z", "slice": 12, - "created": "2013-12-13T22:19:48.324Z", - "amount": 0.1904, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.682Z", + "amount": 0.2968, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.72, - "invoice": 60, - "date": "2013-11-22T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 75, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58977, + "pk": 60779, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.858Z", + "updated": "2013-12-18T21:29:29.706Z", "slice": 12, - "created": "2013-12-13T22:19:48.332Z", - "amount": 0.3304, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.690Z", + "amount": 0.252, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.72, - "invoice": 60, - "date": "2013-11-22T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 75, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58978, + "pk": 60780, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:00.974Z", + "updated": "2013-12-18T21:29:29.722Z", "slice": 12, - "created": "2013-12-13T22:19:48.341Z", + "created": "2013-12-18T21:29:09.698Z", "amount": 0.2632, - "object": 95, - "account": 13, + "object": 113, + "account": 16, "state": "invoiced", "coreHours": 3.76, - "invoice": 60, - "date": "2013-11-22T22:00:00Z", - "kind": "besteffort" + "invoice": 75, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58979, + "pk": 60781, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.065Z", + "updated": "2013-12-18T21:29:29.739Z", "slice": 12, - "created": "2013-12-13T22:19:48.349Z", - "amount": 0.168, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.706Z", + "amount": 0.1456, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.4, - "invoice": 60, - "date": "2013-11-23T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 75, + "date": "2013-11-28T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58980, + "pk": 60782, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.156Z", + "updated": "2013-12-18T21:29:29.755Z", "slice": 12, - "created": "2013-12-13T22:19:48.357Z", - "amount": 0.2464, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.715Z", + "amount": 0.1512, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.52, - "invoice": 60, - "date": "2013-11-23T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.16, + "invoice": 75, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58981, + "pk": 60783, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.314Z", + "updated": "2013-12-18T21:29:29.772Z", "slice": 12, - "created": "2013-12-13T22:19:48.365Z", - "amount": 0.196, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.723Z", + "amount": 0.2072, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.8, - "invoice": 60, - "date": "2013-11-23T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 75, + "date": "2013-11-29T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58982, + "pk": 60784, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.578Z", + "updated": "2013-12-18T21:29:29.788Z", "slice": 12, - "created": "2013-12-13T22:19:48.374Z", - "amount": 0.2408, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.731Z", + "amount": 0.1624, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.44, - "invoice": 60, - "date": "2013-11-24T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.32, + "invoice": 75, + "date": "2013-11-29T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58983, + "pk": 60785, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.786Z", + "updated": "2013-12-18T21:29:29.805Z", "slice": 12, - "created": "2013-12-13T22:19:48.382Z", - "amount": 0.3192, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.740Z", + "amount": 0.1848, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.56, - "invoice": 60, - "date": "2013-11-24T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 75, + "date": "2013-11-30T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58984, + "pk": 60786, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.877Z", + "updated": "2013-12-18T21:29:29.821Z", "slice": 12, - "created": "2013-12-13T22:19:48.390Z", - "amount": 0.1848, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.748Z", + "amount": 0.1176, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.64, - "invoice": 60, - "date": "2013-11-24T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 75, + "date": "2013-11-30T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58985, + "pk": 60787, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:01.976Z", + "updated": "2013-12-18T21:29:29.838Z", "slice": 12, - "created": "2013-12-13T22:19:48.399Z", - "amount": 0.168, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.756Z", + "amount": 0.196, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.4, - "invoice": 61, - "date": "2013-11-25T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 75, + "date": "2013-11-30T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58986, + "pk": 60788, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.067Z", + "updated": "2013-12-18T21:29:29.855Z", "slice": 12, - "created": "2013-12-13T22:19:48.407Z", - "amount": 0.224, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.764Z", + "amount": 0.1792, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.2, - "invoice": 61, - "date": "2013-11-25T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 75, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58987, + "pk": 60789, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.158Z", + "updated": "2013-12-18T21:29:29.871Z", "slice": 12, - "created": "2013-12-13T22:19:48.415Z", - "amount": 0.1736, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.773Z", + "amount": 0.2408, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.48, - "invoice": 61, - "date": "2013-11-25T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 75, + "date": "2013-12-01T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58988, + "pk": 60790, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.254Z", + "updated": "2013-12-18T21:29:29.888Z", "slice": 12, - "created": "2013-12-13T22:19:48.423Z", - "amount": 0.308, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.781Z", + "amount": 0.14, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.4, - "invoice": 61, - "date": "2013-11-26T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 75, + "date": "2013-12-01T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58989, + "pk": 60791, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.345Z", + "updated": "2013-12-18T21:29:29.913Z", "slice": 12, - "created": "2013-12-13T22:19:48.432Z", - "amount": 0.1736, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.789Z", + "amount": 0.112, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.48, - "invoice": 61, - "date": "2013-11-26T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 76, + "date": "2013-12-02T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58990, + "pk": 60792, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.436Z", + "updated": "2013-12-18T21:29:29.929Z", "slice": 12, - "created": "2013-12-13T22:19:48.440Z", - "amount": 0.1176, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.798Z", + "amount": 0.3136, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 1.68, - "invoice": 61, - "date": "2013-11-26T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 76, + "date": "2013-12-02T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58991, + "pk": 60793, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.527Z", + "updated": "2013-12-18T21:29:29.946Z", "slice": 12, - "created": "2013-12-13T22:19:48.448Z", - "amount": 0.2744, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.806Z", + "amount": 0.1456, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.92, - "invoice": 61, - "date": "2013-11-27T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 76, + "date": "2013-12-02T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58992, + "pk": 60794, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.619Z", + "updated": "2013-12-18T21:29:29.962Z", "slice": 12, - "created": "2013-12-13T22:19:48.457Z", - "amount": 0.224, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.814Z", + "amount": 0.2912, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.2, - "invoice": 61, - "date": "2013-11-27T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 76, + "date": "2013-12-03T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58993, + "pk": 60795, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.710Z", + "updated": "2013-12-18T21:29:29.979Z", "slice": 12, - "created": "2013-12-13T22:19:48.465Z", - "amount": 0.1176, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.822Z", + "amount": 0.2128, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 1.68, - "invoice": 61, - "date": "2013-11-27T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 76, + "date": "2013-12-03T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58994, + "pk": 60796, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.801Z", + "updated": "2013-12-18T21:29:29.995Z", "slice": 12, - "created": "2013-12-13T22:19:48.473Z", - "amount": 0.2184, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.831Z", + "amount": 0.1848, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.12, - "invoice": 61, - "date": "2013-11-28T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 76, + "date": "2013-12-03T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58995, + "pk": 60797, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.892Z", + "updated": "2013-12-18T21:29:30.012Z", "slice": 12, - "created": "2013-12-13T22:19:48.481Z", - "amount": 0.1904, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.839Z", + "amount": 0.3304, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.72, - "invoice": 61, - "date": "2013-11-28T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 76, + "date": "2013-12-04T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58996, + "pk": 60798, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:02.983Z", + "updated": "2013-12-18T21:29:30.029Z", "slice": 12, - "created": "2013-12-13T22:19:48.490Z", - "amount": 0.196, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.847Z", + "amount": 0.28, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.8, - "invoice": 61, - "date": "2013-11-28T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 76, + "date": "2013-12-04T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58997, + "pk": 60799, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.074Z", + "updated": "2013-12-18T21:29:30.045Z", "slice": 12, - "created": "2013-12-13T22:19:48.498Z", - "amount": 0.2464, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.855Z", + "amount": 0.308, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.52, - "invoice": 61, - "date": "2013-11-29T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 76, + "date": "2013-12-04T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58998, + "pk": 60800, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.165Z", + "updated": "2013-12-18T21:29:30.062Z", "slice": 12, - "created": "2013-12-13T22:19:48.506Z", - "amount": 0.1232, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.864Z", + "amount": 0.3304, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 1.76, - "invoice": 61, - "date": "2013-11-29T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 76, + "date": "2013-12-05T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 58999, + "pk": 60801, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.256Z", + "updated": "2013-12-18T21:29:30.078Z", "slice": 12, - "created": "2013-12-13T22:19:48.514Z", - "amount": 0.2016, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.872Z", + "amount": 0.2464, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.88, - "invoice": 61, - "date": "2013-11-29T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 76, + "date": "2013-12-05T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59000, + "pk": 60802, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.348Z", + "updated": "2013-12-18T21:29:30.095Z", "slice": 12, - "created": "2013-12-13T22:19:48.523Z", - "amount": 0.2408, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.880Z", + "amount": 0.3136, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.44, - "invoice": 61, - "date": "2013-11-30T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 76, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59001, + "pk": 60803, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.440Z", + "updated": "2013-12-18T21:29:30.111Z", "slice": 12, - "created": "2013-12-13T22:19:48.531Z", - "amount": 0.196, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.889Z", + "amount": 0.112, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.8, - "invoice": 61, - "date": "2013-11-30T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 76, + "date": "2013-12-06T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59002, + "pk": 60804, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.531Z", + "updated": "2013-12-18T21:29:30.128Z", "slice": 12, - "created": "2013-12-13T22:19:48.539Z", - "amount": 0.1848, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.897Z", + "amount": 0.2744, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.64, - "invoice": 61, - "date": "2013-11-30T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 76, + "date": "2013-12-06T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59003, + "pk": 60805, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.623Z", + "updated": "2013-12-18T21:29:30.145Z", "slice": 12, - "created": "2013-12-13T22:19:48.548Z", - "amount": 0.252, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.905Z", + "amount": 0.1792, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.6, - "invoice": 61, - "date": "2013-12-01T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 76, + "date": "2013-12-06T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59004, + "pk": 60806, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.714Z", + "updated": "2013-12-18T21:29:30.161Z", "slice": 12, - "created": "2013-12-13T22:19:48.556Z", - "amount": 0.14, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.913Z", + "amount": 0.1568, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.0, - "invoice": 61, - "date": "2013-12-01T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 76, + "date": "2013-12-07T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59005, + "pk": 60807, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.846Z", + "updated": "2013-12-18T21:29:30.178Z", "slice": 12, - "created": "2013-12-13T22:19:48.564Z", - "amount": 0.1288, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.922Z", + "amount": 0.2408, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 1.84, - "invoice": 61, - "date": "2013-12-01T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 76, + "date": "2013-12-07T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59006, + "pk": 60808, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:03.946Z", + "updated": "2013-12-18T21:29:30.194Z", "slice": 12, - "created": "2013-12-13T22:19:48.572Z", - "amount": 0.1456, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.930Z", + "amount": 0.1176, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.08, - "invoice": 62, - "date": "2013-12-02T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 76, + "date": "2013-12-07T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59007, + "pk": 60809, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.037Z", + "updated": "2013-12-18T21:29:30.211Z", "slice": 12, - "created": "2013-12-13T22:19:48.581Z", - "amount": 0.308, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.938Z", + "amount": 0.1176, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.4, - "invoice": 62, - "date": "2013-12-02T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 76, + "date": "2013-12-08T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59008, + "pk": 60810, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.128Z", + "updated": "2013-12-18T21:29:30.227Z", "slice": 12, - "created": "2013-12-13T22:19:48.589Z", - "amount": 0.1512, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.947Z", + "amount": 0.3304, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.16, - "invoice": 62, - "date": "2013-12-02T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 76, + "date": "2013-12-08T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59009, + "pk": 60811, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.219Z", + "updated": "2013-12-18T21:29:30.244Z", "slice": 12, - "created": "2013-12-13T22:19:48.597Z", - "amount": 0.2912, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.955Z", + "amount": 0.196, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.16, - "invoice": 62, - "date": "2013-12-03T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 76, + "date": "2013-12-08T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59010, + "pk": 60812, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.310Z", + "updated": "2013-12-18T21:29:30.269Z", "slice": 12, - "created": "2013-12-13T22:19:48.606Z", - "amount": 0.1568, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.963Z", + "amount": 0.2744, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.24, - "invoice": 62, - "date": "2013-12-03T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 77, + "date": "2013-12-09T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59011, + "pk": 60813, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.401Z", + "updated": "2013-12-18T21:29:30.285Z", "slice": 12, - "created": "2013-12-13T22:19:48.614Z", - "amount": 0.3192, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.971Z", + "amount": 0.1792, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.56, - "invoice": 62, - "date": "2013-12-03T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 77, + "date": "2013-12-09T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59012, + "pk": 60814, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.492Z", + "updated": "2013-12-18T21:29:30.302Z", "slice": 12, - "created": "2013-12-13T22:19:48.622Z", - "amount": 0.1232, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.980Z", + "amount": 0.112, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 1.76, - "invoice": 62, - "date": "2013-12-04T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 77, + "date": "2013-12-09T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59013, + "pk": 60815, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.584Z", + "updated": "2013-12-18T21:29:30.327Z", "slice": 12, - "created": "2013-12-13T22:19:48.630Z", - "amount": 0.3248, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.988Z", + "amount": 0.2296, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.64, - "invoice": 62, - "date": "2013-12-04T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 77, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59014, + "pk": 60816, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.675Z", + "updated": "2013-12-18T21:29:30.344Z", "slice": 12, - "created": "2013-12-13T22:19:48.639Z", - "amount": 0.1344, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:09.996Z", + "amount": 0.1232, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 1.92, - "invoice": 62, - "date": "2013-12-04T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 77, + "date": "2013-12-10T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59015, + "pk": 60817, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.766Z", + "updated": "2013-12-18T21:29:30.360Z", "slice": 12, - "created": "2013-12-13T22:19:48.647Z", - "amount": 0.252, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.005Z", + "amount": 0.1848, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.6, - "invoice": 62, - "date": "2013-12-05T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 77, + "date": "2013-12-10T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59016, + "pk": 60818, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.857Z", + "updated": "2013-12-18T21:29:30.377Z", "slice": 12, - "created": "2013-12-13T22:19:48.655Z", - "amount": 0.2856, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.013Z", + "amount": 0.2296, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 4.08, - "invoice": 62, - "date": "2013-12-05T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 77, + "date": "2013-12-11T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59017, + "pk": 60819, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.948Z", + "updated": "2013-12-18T21:29:30.393Z", "slice": 12, - "created": "2013-12-13T22:19:48.664Z", - "amount": 0.196, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.021Z", + "amount": 0.2968, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.8, - "invoice": 62, - "date": "2013-12-05T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 77, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59018, + "pk": 60820, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:04.998Z", + "updated": "2013-12-18T21:29:30.410Z", "slice": 12, - "created": "2013-12-13T22:19:48.672Z", - "amount": 0.196, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.029Z", + "amount": 0.112, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.8, - "invoice": 62, - "date": "2013-12-06T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 77, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59019, + "pk": 60821, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.089Z", + "updated": "2013-12-18T21:29:30.427Z", "slice": 12, - "created": "2013-12-13T22:19:48.680Z", - "amount": 0.1232, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.038Z", + "amount": 0.2576, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 1.76, - "invoice": 62, - "date": "2013-12-06T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 77, + "date": "2013-12-12T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59020, + "pk": 60822, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.187Z", + "updated": "2013-12-18T21:29:30.443Z", "slice": 12, - "created": "2013-12-13T22:19:48.688Z", - "amount": 0.2464, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.046Z", + "amount": 0.2856, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.52, - "invoice": 62, - "date": "2013-12-06T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 77, + "date": "2013-12-12T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59021, + "pk": 60823, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.278Z", + "updated": "2013-12-18T21:29:30.460Z", "slice": 12, - "created": "2013-12-13T22:19:48.697Z", - "amount": 0.2128, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.054Z", + "amount": 0.2576, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.04, - "invoice": 62, - "date": "2013-12-07T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 77, + "date": "2013-12-12T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59022, + "pk": 60824, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.369Z", + "updated": "2013-12-18T21:29:30.476Z", "slice": 12, - "created": "2013-12-13T22:19:48.705Z", - "amount": 0.1288, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.063Z", + "amount": 0.2688, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 1.84, - "invoice": 62, - "date": "2013-12-07T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.84, + "invoice": 77, + "date": "2013-12-13T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59023, + "pk": 60825, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.460Z", + "updated": "2013-12-18T21:29:30.493Z", "slice": 12, - "created": "2013-12-13T22:19:48.713Z", - "amount": 0.1904, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.071Z", + "amount": 0.252, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.72, - "invoice": 62, - "date": "2013-12-07T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 77, + "date": "2013-12-13T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59024, + "pk": 60826, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.551Z", + "updated": "2013-12-18T21:29:30.509Z", "slice": 12, - "created": "2013-12-13T22:19:48.722Z", - "amount": 0.1792, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.079Z", + "amount": 0.14, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 2.56, - "invoice": 62, - "date": "2013-12-08T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 77, + "date": "2013-12-13T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59025, + "pk": 60827, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.642Z", + "updated": "2013-12-18T21:29:30.526Z", "slice": 12, - "created": "2013-12-13T22:19:48.730Z", - "amount": 0.252, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.087Z", + "amount": 0.3304, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.6, - "invoice": 62, - "date": "2013-12-08T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 77, + "date": "2013-12-14T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59026, + "pk": 60828, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:20:05.733Z", + "updated": "2013-12-18T21:29:30.543Z", "slice": 12, - "created": "2013-12-13T22:19:48.738Z", - "amount": 0.2688, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.096Z", + "amount": 0.3304, + "object": 113, + "account": 16, "state": "invoiced", - "coreHours": 3.84, - "invoice": 62, - "date": "2013-12-08T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 77, + "date": "2013-12-14T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59027, + "pk": 60829, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.746Z", + "updated": "2013-12-18T21:29:30.559Z", "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" + "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": 59028, + "pk": 60830, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.755Z", + "updated": "2013-12-18T21:29:30.576Z", "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" + "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": 59029, + "pk": 60831, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.763Z", + "updated": "2013-12-18T21:29:30.592Z", "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" + "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": 59030, + "pk": 60832, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.771Z", + "updated": "2013-12-18T21:29:30.609Z", "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" + "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": 59031, + "pk": 60833, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.780Z", + "updated": "2013-12-18T21:29:10.137Z", "slice": 12, - "created": "2013-12-13T22:19:48.780Z", - "amount": 0.3024, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.137Z", + "amount": 0.14, + "object": 113, + "account": 16, "state": "pending", - "coreHours": 4.32, + "coreHours": 2.0, "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59032, + "pk": 60834, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.788Z", + "updated": "2013-12-18T21:29:10.146Z", "slice": 12, - "created": "2013-12-13T22:19:48.788Z", - "amount": 0.1176, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.146Z", + "amount": 0.14, + "object": 113, + "account": 16, "state": "pending", - "coreHours": 1.68, + "coreHours": 2.0, "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59033, + "pk": 60835, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.796Z", + "updated": "2013-12-18T21:29:10.154Z", "slice": 12, - "created": "2013-12-13T22:19:48.796Z", - "amount": 0.308, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.154Z", + "amount": 0.2184, + "object": 113, + "account": 16, "state": "pending", - "coreHours": 4.4, + "coreHours": 3.12, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59034, + "pk": 60836, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.805Z", + "updated": "2013-12-18T21:29:10.162Z", "slice": 12, - "created": "2013-12-13T22:19:48.805Z", - "amount": 0.2408, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.162Z", + "amount": 0.1904, + "object": 113, + "account": 16, "state": "pending", - "coreHours": 3.44, + "coreHours": 2.72, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59035, + "pk": 60837, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.813Z", + "updated": "2013-12-18T21:29:10.170Z", "slice": 12, - "created": "2013-12-13T22:19:48.813Z", - "amount": 0.1344, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.170Z", + "amount": 0.1624, + "object": 113, + "account": 16, "state": "pending", - "coreHours": 1.92, + "coreHours": 2.32, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59036, + "pk": 60838, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.821Z", + "updated": "2013-12-18T21:29:10.179Z", "slice": 12, - "created": "2013-12-13T22:19:48.821Z", - "amount": 0.112, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.179Z", + "amount": 0.252, + "object": 113, + "account": 16, "state": "pending", - "coreHours": 1.6, + "coreHours": 3.6, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59037, + "pk": 60839, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.829Z", + "updated": "2013-12-18T21:29:10.187Z", "slice": 12, - "created": "2013-12-13T22:19:48.829Z", - "amount": 0.1792, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.187Z", + "amount": 0.1904, + "object": 113, + "account": 16, "state": "pending", - "coreHours": 2.56, + "coreHours": 2.72, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59038, + "pk": 60840, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:48.838Z", + "updated": "2013-12-18T21:29:10.195Z", "slice": 12, - "created": "2013-12-13T22:19:48.838Z", - "amount": 0.1792, - "object": 95, - "account": 13, + "created": "2013-12-18T21:29:10.195Z", + "amount": 0.224, + "object": 113, + "account": 16, "state": "pending", - "coreHours": 2.56, + "coreHours": 3.2, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59039, + "pk": 60841, "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" + "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": 59040, + "pk": 60842, "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" + "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": 59041, + "pk": 60843, "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, + "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": 4.48, - "invoice": 54, - "date": "2013-11-13T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-19T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59042, + "pk": 60844, "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, + "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": 2.96, - "invoice": 54, - "date": "2013-11-14T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-19T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59043, + "pk": 60845, "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, + "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": 3.44, - "invoice": 54, - "date": "2013-11-14T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-20T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59044, + "pk": 60846, "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, + "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": 3.68, - "invoice": 54, - "date": "2013-11-14T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-20T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59045, + "pk": 60847, "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, + "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": 3.76, - "invoice": 54, - "date": "2013-11-15T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-20T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59046, + "pk": 60848, "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, + "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": 3.36, - "invoice": 54, - "date": "2013-11-15T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-21T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59047, + "pk": 60849, "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, + "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": 2.96, - "invoice": 54, - "date": "2013-11-15T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-21T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59048, + "pk": 60850, "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, + "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": 3.28, - "invoice": 54, - "date": "2013-11-16T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-21T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59049, + "pk": 60851, "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, + "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": 2.56, - "invoice": 54, - "date": "2013-11-16T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-22T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59050, + "pk": 60852, "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, + "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": 3.28, - "invoice": 54, - "date": "2013-11-16T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-22T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59051, + "pk": 60853, "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, + "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": 4.56, - "invoice": 54, - "date": "2013-11-17T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-22T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59052, + "pk": 60854, "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, + "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": 3.04, - "invoice": 54, - "date": "2013-11-17T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-23T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59053, + "pk": 60855, "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, + "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": 4.32, - "invoice": 54, - "date": "2013-11-17T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-23T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59054, + "pk": 60856, "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, + "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": 3.44, - "invoice": 55, - "date": "2013-11-18T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-23T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59055, + "pk": 60857, "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, + "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": 4.32, - "invoice": 55, - "date": "2013-11-18T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-24T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59056, + "pk": 60858, "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, + "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": 3.2, - "invoice": 55, - "date": "2013-11-18T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-24T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59057, + "pk": 60859, "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, + "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": 3.44, - "invoice": 55, - "date": "2013-11-19T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-24T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59058, + "pk": 60860, "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, + "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": 2.8, - "invoice": 55, - "date": "2013-11-19T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-25T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59059, + "pk": 60861, "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, + "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": 4.24, - "invoice": 55, - "date": "2013-11-19T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-25T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59060, + "pk": 60862, "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, + "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": 3.52, - "invoice": 55, - "date": "2013-11-20T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-25T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59061, + "pk": 60863, "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, + "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": 3.6, - "invoice": 55, - "date": "2013-11-20T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-26T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59062, + "pk": 60864, "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, + "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": 4.8, - "invoice": 55, - "date": "2013-11-20T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-26T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59063, + "pk": 60865, "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, + "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": 4.0, - "invoice": 55, - "date": "2013-11-21T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-26T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59064, + "pk": 60866, "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, + "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": 4.56, - "invoice": 55, - "date": "2013-11-21T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-27T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59065, + "pk": 60867, "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, + "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": 2.72, - "invoice": 55, - "date": "2013-11-21T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-27T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59066, + "pk": 60868, "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, + "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": 2.88, - "invoice": 55, - "date": "2013-11-22T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-27T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59067, + "pk": 60869, "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, + "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": 1.76, - "invoice": 55, - "date": "2013-11-22T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-28T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59068, + "pk": 60870, "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, + "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": 1.68, - "invoice": 55, - "date": "2013-11-22T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-28T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59069, + "pk": 60871, "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, + "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": 4.4, - "invoice": 55, - "date": "2013-11-23T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-28T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59070, + "pk": 60872, "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, + "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": 4.08, - "invoice": 55, - "date": "2013-11-23T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-29T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59071, + "pk": 60873, "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, + "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": 4.64, - "invoice": 55, - "date": "2013-11-23T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-29T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59072, + "pk": 60874, "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, + "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": 2.88, - "invoice": 55, - "date": "2013-11-24T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-29T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59073, + "pk": 60875, "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, + "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": 4.0, - "invoice": 55, - "date": "2013-11-24T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-30T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59074, + "pk": 60876, "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, + "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": 3.6, - "invoice": 55, - "date": "2013-11-24T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-30T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59075, + "pk": 60877, "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, + "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": 3.36, - "invoice": 56, - "date": "2013-11-25T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-30T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59076, + "pk": 60878, "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, + "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": 2.64, - "invoice": 56, - "date": "2013-11-25T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-12-01T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59077, + "pk": 60879, "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, + "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": 3.76, - "invoice": 56, - "date": "2013-11-25T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-12-01T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59078, + "pk": 60880, "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, + "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": 1.76, - "invoice": 56, - "date": "2013-11-26T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-12-01T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59079, + "pk": 60881, "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, + "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": 1.6, - "invoice": 56, - "date": "2013-11-26T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-02T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59080, + "pk": 60882, "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, + "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": 4.72, - "invoice": 56, - "date": "2013-11-26T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-02T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59081, + "pk": 60883, "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, + "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": 2.88, - "invoice": 56, - "date": "2013-11-27T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-02T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59082, + "pk": 60884, "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, + "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": 1.6, - "invoice": 56, - "date": "2013-11-27T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-03T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59083, + "pk": 60885, "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, + "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": 2.8, - "invoice": 56, - "date": "2013-11-27T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-03T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59084, + "pk": 60886, "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, + "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": 4.4, - "invoice": 56, - "date": "2013-11-28T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-03T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59085, + "pk": 60887, "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, + "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": 2.64, - "invoice": 56, - "date": "2013-11-28T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-04T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59086, + "pk": 60888, "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, + "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": 2.88, - "invoice": 56, - "date": "2013-11-28T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-04T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59087, + "pk": 60889, "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, + "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": 3.04, - "invoice": 56, - "date": "2013-11-29T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-04T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59088, + "pk": 60890, "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, + "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": 2.96, - "invoice": 56, - "date": "2013-11-29T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-05T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59089, + "pk": 60891, "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, + "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": 3.44, - "invoice": 56, - "date": "2013-11-29T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-05T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59090, + "pk": 60892, "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, + "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": 2.96, - "invoice": 56, - "date": "2013-11-30T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-05T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59091, + "pk": 60893, "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, + "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": 3.76, - "invoice": 56, - "date": "2013-11-30T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-06T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59092, + "pk": 60894, "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, + "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": 3.36, - "invoice": 56, - "date": "2013-11-30T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-06T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59093, + "pk": 60895, "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, + "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": 4.32, - "invoice": 56, - "date": "2013-12-01T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-06T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59094, + "pk": 60896, "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, + "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": 3.84, - "invoice": 56, - "date": "2013-12-01T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-07T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59095, + "pk": 60897, "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, + "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": 3.92, - "invoice": 56, - "date": "2013-12-01T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-07T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59096, + "pk": 60898, "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, + "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": 2.72, - "invoice": 57, - "date": "2013-12-02T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-07T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59097, + "pk": 60899, "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, + "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": 1.6, - "invoice": 57, - "date": "2013-12-02T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-08T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59098, + "pk": 60900, "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, + "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": 3.68, - "invoice": 57, - "date": "2013-12-02T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-08T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59099, + "pk": 60901, "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, + "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": 1.92, - "invoice": 57, - "date": "2013-12-03T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-08T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59100, + "pk": 60902, "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, + "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": 2.24, - "invoice": 57, - "date": "2013-12-03T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-09T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59101, + "pk": 60903, "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, + "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": 2.8, - "invoice": 57, - "date": "2013-12-03T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-09T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59102, + "pk": 60904, "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, + "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": 4.0, - "invoice": 57, - "date": "2013-12-04T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-09T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59103, + "pk": 60905, "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, + "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": 2.96, - "invoice": 57, - "date": "2013-12-04T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-10T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59104, + "pk": 60906, "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, + "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": 4.48, - "invoice": 57, - "date": "2013-12-04T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-10T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59105, + "pk": 60907, "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, + "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": 2.08, - "invoice": 57, - "date": "2013-12-05T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-10T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59106, + "pk": 60908, "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, + "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": 2.48, - "invoice": 57, - "date": "2013-12-05T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-11T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59107, + "pk": 60909, "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, + "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": 1.68, - "invoice": 57, - "date": "2013-12-05T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-11T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59108, + "pk": 60910, "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, + "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": 4.0, - "invoice": 57, - "date": "2013-12-06T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-11T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59109, + "pk": 60911, "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, + "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": 4.56, - "invoice": 57, - "date": "2013-12-06T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-12T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59110, + "pk": 60912, "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, + "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": 4.64, - "invoice": 57, - "date": "2013-12-06T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-12T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59111, + "pk": 60913, "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, + "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": 1.84, - "invoice": 57, - "date": "2013-12-07T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-12T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59112, + "pk": 60914, "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, + "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": 4.4, - "invoice": 57, - "date": "2013-12-07T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-13T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59113, + "pk": 60915, "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, + "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": 2.48, - "invoice": 57, - "date": "2013-12-07T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-13T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59114, + "pk": 60916, "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, + "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": 1.6, - "invoice": 57, - "date": "2013-12-08T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-13T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59115, + "pk": 60917, "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, + "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": 4.72, - "invoice": 57, - "date": "2013-12-08T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-14T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59116, + "pk": 60918, "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, + "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": 2.96, - "invoice": 57, - "date": "2013-12-08T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-14T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59117, + "pk": 60919, "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" + "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": 59118, + "pk": 60920, "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" + "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": 59119, + "pk": 60921, "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" + "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": 59120, + "pk": 60922, "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" + "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": 59121, + "pk": 60923, "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, + "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": 4.16, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59122, + "pk": 60924, "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, + "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": 4.08, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59123, + "pk": 60925, "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, + "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": 4.48, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59124, + "pk": 60926, "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, + "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": 1.84, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59125, + "pk": 60927, "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, + "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": 3.28, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59126, + "pk": 60928, "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, + "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": 2.16, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59127, + "pk": 60929, "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, + "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": 3.28, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59128, + "pk": 60930, "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, + "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": 3.6, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59129, + "pk": 60931, "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" + "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": 59130, + "pk": 60932, "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" + "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": 59131, + "pk": 60933, "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, + "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": 4.56, - "invoice": 54, - "date": "2013-11-13T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-19T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59132, + "pk": 60934, "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, + "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": 1.6, - "invoice": 54, - "date": "2013-11-14T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-19T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59133, + "pk": 60935, "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, + "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": 4.48, - "invoice": 54, - "date": "2013-11-14T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-20T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59134, + "pk": 60936, "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, + "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": 3.68, - "invoice": 54, - "date": "2013-11-14T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-20T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59135, + "pk": 60937, "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, + "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": 1.6, - "invoice": 54, - "date": "2013-11-15T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-20T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59136, + "pk": 60938, "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, + "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": 2.64, - "invoice": 54, - "date": "2013-11-15T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-21T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59137, + "pk": 60939, "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, + "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": 4.16, - "invoice": 54, - "date": "2013-11-15T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-21T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59138, + "pk": 60940, "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, + "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": 3.52, - "invoice": 54, - "date": "2013-11-16T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-21T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59139, + "pk": 60941, "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, + "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": 4.24, - "invoice": 54, - "date": "2013-11-16T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-22T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59140, + "pk": 60942, "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, + "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": 1.84, - "invoice": 54, - "date": "2013-11-16T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-22T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59141, + "pk": 60943, "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, + "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": 3.04, - "invoice": 54, - "date": "2013-11-17T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-22T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59142, + "pk": 60944, "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, + "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": 3.52, - "invoice": 54, - "date": "2013-11-17T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-23T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59143, + "pk": 60945, "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, + "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": 2.56, - "invoice": 54, - "date": "2013-11-17T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-23T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59144, + "pk": 60946, "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, + "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": 2.72, - "invoice": 55, - "date": "2013-11-18T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-23T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59145, + "pk": 60947, "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, + "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": 3.44, - "invoice": 55, - "date": "2013-11-18T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-24T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59146, + "pk": 60948, "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, + "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": 3.44, - "invoice": 55, - "date": "2013-11-18T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-24T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59147, + "pk": 60949, "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, + "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": 2.8, - "invoice": 55, - "date": "2013-11-19T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-24T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59148, + "pk": 60950, "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, + "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": 2.0, - "invoice": 55, - "date": "2013-11-19T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-25T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59149, + "pk": 60951, "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, + "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": 4.4, - "invoice": 55, - "date": "2013-11-19T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-25T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59150, + "pk": 60952, "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, + "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": 3.36, - "invoice": 55, - "date": "2013-11-20T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-25T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59151, + "pk": 60953, "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, + "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": 2.08, - "invoice": 55, - "date": "2013-11-20T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-26T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59152, + "pk": 60954, "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, + "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": 2.24, - "invoice": 55, - "date": "2013-11-20T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-26T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59153, + "pk": 60955, "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, + "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": 4.24, - "invoice": 55, - "date": "2013-11-21T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-26T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59154, + "pk": 60956, "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, + "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": 4.08, - "invoice": 55, - "date": "2013-11-21T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-27T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59155, + "pk": 60957, "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, + "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": 3.44, - "invoice": 55, - "date": "2013-11-21T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-27T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59156, + "pk": 60958, "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, + "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": 1.92, - "invoice": 55, - "date": "2013-11-22T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-27T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59157, + "pk": 60959, "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, + "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": 2.48, - "invoice": 55, - "date": "2013-11-22T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-28T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59158, + "pk": 60960, "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, + "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": 4.72, - "invoice": 55, - "date": "2013-11-22T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-28T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59159, + "pk": 60961, "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, + "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": 4.4, - "invoice": 55, - "date": "2013-11-23T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-28T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59160, + "pk": 60962, "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, + "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": 4.08, - "invoice": 55, - "date": "2013-11-23T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-29T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59161, + "pk": 60963, "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, + "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": 4.64, - "invoice": 55, - "date": "2013-11-23T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-29T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59162, + "pk": 60964, "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, + "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": 3.52, - "invoice": 55, - "date": "2013-11-24T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-29T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59163, + "pk": 60965, "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, + "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": 4.24, - "invoice": 55, - "date": "2013-11-24T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-30T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59164, + "pk": 60966, "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, + "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": 3.2, - "invoice": 55, - "date": "2013-11-24T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-30T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59165, + "pk": 60967, "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, + "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": 2.0, - "invoice": 56, - "date": "2013-11-25T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-30T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59166, + "pk": 60968, "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, + "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": 3.92, - "invoice": 56, - "date": "2013-11-25T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-12-01T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59167, + "pk": 60969, "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, + "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": 3.36, - "invoice": 56, - "date": "2013-11-25T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-12-01T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59168, + "pk": 60970, "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, + "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": 4.0, - "invoice": 56, - "date": "2013-11-26T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-12-01T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59169, + "pk": 60971, "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, + "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": 4.0, - "invoice": 56, - "date": "2013-11-26T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-02T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59170, + "pk": 60972, "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, + "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": 4.8, - "invoice": 56, - "date": "2013-11-26T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-02T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59171, + "pk": 60973, "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, + "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": 3.2, - "invoice": 56, - "date": "2013-11-27T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-02T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59172, + "pk": 60974, "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, + "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": 3.6, - "invoice": 56, - "date": "2013-11-27T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-03T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59173, + "pk": 60975, "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, + "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": 3.84, - "invoice": 56, - "date": "2013-11-27T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-03T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59174, + "pk": 60976, "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, + "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": 3.76, - "invoice": 56, - "date": "2013-11-28T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-03T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59175, + "pk": 60977, "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, + "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": 4.16, - "invoice": 56, - "date": "2013-11-28T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-04T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59176, + "pk": 60978, "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, + "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": 1.68, - "invoice": 56, - "date": "2013-11-28T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-04T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59177, + "pk": 60979, "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, + "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": 2.4, - "invoice": 56, - "date": "2013-11-29T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-04T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59178, + "pk": 60980, "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, + "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": 1.6, - "invoice": 56, - "date": "2013-11-29T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-05T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59179, + "pk": 60981, "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, + "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": 2.64, - "invoice": 56, - "date": "2013-11-29T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-05T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59180, + "pk": 60982, "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, + "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": 3.04, - "invoice": 56, - "date": "2013-11-30T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-05T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59181, + "pk": 60983, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.173Z", - "slice": 14, - "created": "2013-12-13T22:19:50.055Z", - "amount": 0.1624, - "object": 97, - "account": 12, + "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": 2.32, - "invoice": 56, - "date": "2013-11-30T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-06T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59182, + "pk": 60984, "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:26.051Z", + "slice": 13, + "created": "2013-12-18T21:29:11.421Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "invoiced", - "coreHours": 4.64, - "invoice": 56, - "date": "2013-11-30T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-06T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59183, + "pk": 60985, "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, + "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": 2.16, - "invoice": 56, - "date": "2013-12-01T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-06T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59184, + "pk": 60986, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.297Z", - "slice": 14, - "created": "2013-12-13T22:19:50.080Z", - "amount": 0.1176, - "object": 97, - "account": 12, + "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": 1.68, - "invoice": 56, - "date": "2013-12-01T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-07T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59185, + "pk": 60987, "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:26.374Z", + "slice": 13, + "created": "2013-12-18T21:29:11.446Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "invoiced", - "coreHours": 3.2, - "invoice": 56, - "date": "2013-12-01T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-07T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59186, + "pk": 60988, "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:26.481Z", + "slice": 13, + "created": "2013-12-18T21:29:11.454Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "invoiced", - "coreHours": 3.52, - "invoice": 57, - "date": "2013-12-02T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-07T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59187, + "pk": 60989, "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:26.589Z", + "slice": 13, + "created": "2013-12-18T21:29:11.463Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "invoiced", - "coreHours": 1.84, - "invoice": 57, - "date": "2013-12-02T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-08T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59188, + "pk": 60990, "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, + "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": 2.4, - "invoice": 57, - "date": "2013-12-02T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-08T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59189, + "pk": 60991, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.513Z", - "slice": 14, - "created": "2013-12-13T22:19:50.122Z", - "amount": 0.2856, - "object": 97, - "account": 12, + "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": 4.08, - "invoice": 57, - "date": "2013-12-03T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-08T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59190, + "pk": 60992, "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, + "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": 3.92, - "invoice": 57, - "date": "2013-12-03T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-09T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59191, + "pk": 60993, "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, + "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": 3.2, - "invoice": 57, - "date": "2013-12-03T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-09T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59192, + "pk": 60994, "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, + "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": 2.96, - "invoice": 57, - "date": "2013-12-04T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-09T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59193, + "pk": 60995, "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, + "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": 3.52, - "invoice": 57, - "date": "2013-12-04T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-10T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59194, + "pk": 60996, "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, + "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": 3.52, - "invoice": 57, - "date": "2013-12-04T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-10T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59195, + "pk": 60997, "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, + "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": 3.2, - "invoice": 57, - "date": "2013-12-05T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-10T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59196, + "pk": 60998, "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, + "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": 3.68, - "invoice": 57, - "date": "2013-12-05T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-11T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59197, + "pk": 60999, "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, + "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": 3.28, - "invoice": 57, - "date": "2013-12-05T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-11T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59198, + "pk": 61000, "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, + "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": 1.92, - "invoice": 57, - "date": "2013-12-06T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-11T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59199, + "pk": 61001, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.927Z", - "slice": 14, - "created": "2013-12-13T22:19:50.204Z", - "amount": 0.3304, - "object": 97, - "account": 12, + "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": 4.72, - "invoice": 57, - "date": "2013-12-06T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-12T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59200, + "pk": 61002, "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:28.055Z", + "slice": 13, + "created": "2013-12-18T21:29:11.570Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "invoiced", - "coreHours": 1.76, - "invoice": 57, - "date": "2013-12-06T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-12T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59201, + "pk": 61003, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.010Z", - "slice": 14, - "created": "2013-12-13T22:19:50.221Z", - "amount": 0.224, - "object": 97, - "account": 12, + "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": 3.2, - "invoice": 57, - "date": "2013-12-07T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-12T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59202, + "pk": 61004, "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:28.271Z", + "slice": 13, + "created": "2013-12-18T21:29:11.587Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "invoiced", - "coreHours": 3.36, - "invoice": 57, - "date": "2013-12-07T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-13T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59203, + "pk": 61005, "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:28.378Z", + "slice": 13, + "created": "2013-12-18T21:29:11.595Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "invoiced", - "coreHours": 3.52, - "invoice": 57, - "date": "2013-12-07T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-13T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59204, + "pk": 61006, "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:28.486Z", + "slice": 13, + "created": "2013-12-18T21:29:11.603Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "invoiced", - "coreHours": 4.16, - "invoice": 57, - "date": "2013-12-08T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-13T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59205, + "pk": 61007, "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:28.594Z", + "slice": 13, + "created": "2013-12-18T21:29:11.612Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "invoiced", - "coreHours": 3.44, - "invoice": 57, - "date": "2013-12-08T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-14T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59206, + "pk": 61008, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.217Z", - "slice": 14, - "created": "2013-12-13T22:19:50.262Z", - "amount": 0.1288, - "object": 97, - "account": 12, + "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": 1.84, - "invoice": 57, - "date": "2013-12-08T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-14T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59207, + "pk": 61009, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:50.271Z", - "slice": 14, - "created": "2013-12-13T22:19:50.271Z", - "amount": 0.2408, - "object": 97, - "account": 12, - "state": "pending", - "coreHours": 3.44, - "invoice": null, - "date": "2013-12-09T06:00:00Z", - "kind": "besteffort" + "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": 59208, + "pk": 61010, "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: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": 59209, + "pk": 61011, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:50.287Z", - "slice": 14, - "created": "2013-12-13T22:19:50.287Z", - "amount": 0.1512, - "object": 97, - "account": 12, - "state": "pending", - "coreHours": 2.16, - "invoice": null, - "date": "2013-12-09T22:00:00Z", - "kind": "besteffort" + "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": 59210, + "pk": 61012, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:50.296Z", - "slice": 14, - "created": "2013-12-13T22:19:50.296Z", - "amount": 0.3304, - "object": 97, - "account": 12, - "state": "pending", - "coreHours": 4.72, - "invoice": null, - "date": "2013-12-10T06:00:00Z", - "kind": "besteffort" + "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": 59211, + "pk": 61013, "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:11.662Z", + "slice": 13, + "created": "2013-12-18T21:29:11.662Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "pending", - "coreHours": 2.64, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59212, + "pk": 61014, "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:11.670Z", + "slice": 13, + "created": "2013-12-18T21:29:11.670Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "pending", - "coreHours": 1.76, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59213, + "pk": 61015, "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:11.678Z", + "slice": 13, + "created": "2013-12-18T21:29:11.678Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "pending", - "coreHours": 3.92, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59214, + "pk": 61016, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:50.329Z", - "slice": 14, - "created": "2013-12-13T22:19:50.329Z", - "amount": 0.1624, - "object": 97, - "account": 12, + "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": 2.32, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59215, + "pk": 61017, "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:11.695Z", + "slice": 13, + "created": "2013-12-18T21:29:11.695Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "pending", - "coreHours": 2.8, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59216, + "pk": 61018, "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:11.703Z", + "slice": 13, + "created": "2013-12-18T21:29:11.703Z", + "amount": 0.56, + "object": 115, + "account": 15, "state": "pending", - "coreHours": 3.84, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59217, + "pk": 61019, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:50.354Z", - "slice": 14, - "created": "2013-12-13T22:19:50.354Z", - "amount": 0.14, - "object": 97, - "account": 12, + "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": 2.0, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59218, + "pk": 61020, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:50.362Z", - "slice": 14, - "created": "2013-12-13T22:19:50.362Z", - "amount": 0.1848, - "object": 97, - "account": 12, + "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": 2.64, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59219, + "pk": 61021, "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" + "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": 59220, + "pk": 61022, "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" + "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": 59221, + "pk": 61023, "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, + "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": 1.92, - "invoice": 54, - "date": "2013-11-13T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-19T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59222, + "pk": 61024, "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, + "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": 3.44, - "invoice": 54, - "date": "2013-11-14T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-19T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59223, + "pk": 61025, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.142Z", - "slice": 14, - "created": "2013-12-13T22:19:50.412Z", - "amount": 0.28, - "object": 98, - "account": 12, + "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": 4.0, - "invoice": 54, - "date": "2013-11-14T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-20T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59224, + "pk": 61026, "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, + "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": 4.64, - "invoice": 54, - "date": "2013-11-14T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-20T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59225, + "pk": 61027, "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, + "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": 3.52, - "invoice": 54, - "date": "2013-11-15T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-20T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59226, + "pk": 61028, "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, + "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": 3.2, - "invoice": 54, - "date": "2013-11-15T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-21T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59227, + "pk": 61029, "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, + "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": 4.16, - "invoice": 54, - "date": "2013-11-15T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-21T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59228, + "pk": 61030, "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, + "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": 4.16, - "invoice": 54, - "date": "2013-11-16T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-21T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59229, + "pk": 61031, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.390Z", - "slice": 14, - "created": "2013-12-13T22:19:50.464Z", - "amount": 0.2016, - "object": 98, - "account": 12, + "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": 2.88, - "invoice": 54, - "date": "2013-11-16T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-22T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59230, + "pk": 61032, "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, + "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": 2.8, - "invoice": 54, - "date": "2013-11-16T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-22T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59231, + "pk": 61033, "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, + "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": 3.04, - "invoice": 54, - "date": "2013-11-17T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-22T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59232, + "pk": 61034, "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, + "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": 4.72, - "invoice": 54, - "date": "2013-11-17T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-23T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59233, + "pk": 61035, "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, + "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": 4.72, - "invoice": 54, - "date": "2013-11-17T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-23T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59234, + "pk": 61036, "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, + "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": 3.6, - "invoice": 55, - "date": "2013-11-18T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-23T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59235, + "pk": 61037, "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, + "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": 4.4, - "invoice": 55, - "date": "2013-11-18T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-24T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59236, + "pk": 61038, "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, + "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": 4.48, - "invoice": 55, - "date": "2013-11-18T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-24T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59237, + "pk": 61039, "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, + "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": 3.52, - "invoice": 55, - "date": "2013-11-19T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 69, + "date": "2013-11-24T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59238, + "pk": 61040, "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, + "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": 3.36, - "invoice": 55, - "date": "2013-11-19T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-25T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59239, + "pk": 61041, "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, + "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": 2.96, - "invoice": 55, - "date": "2013-11-19T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-25T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59240, + "pk": 61042, "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, + "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": 3.6, - "invoice": 55, - "date": "2013-11-20T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-25T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59241, + "pk": 61043, "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, + "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": 2.72, - "invoice": 55, - "date": "2013-11-20T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-26T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59242, + "pk": 61044, "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, + "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": 4.32, - "invoice": 55, - "date": "2013-11-20T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-26T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59243, + "pk": 61045, "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, + "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": 1.68, - "invoice": 55, - "date": "2013-11-21T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-26T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59244, + "pk": 61046, "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, + "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": 3.28, - "invoice": 55, - "date": "2013-11-21T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-27T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59245, + "pk": 61047, "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, + "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": 3.84, - "invoice": 55, - "date": "2013-11-21T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-27T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59246, + "pk": 61048, "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, + "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": 4.4, - "invoice": 55, - "date": "2013-11-22T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-27T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59247, + "pk": 61049, "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, + "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": 2.8, - "invoice": 55, - "date": "2013-11-22T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-28T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59248, + "pk": 61050, "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, + "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": 3.28, - "invoice": 55, - "date": "2013-11-22T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-28T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59249, + "pk": 61051, "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, + "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": 4.56, - "invoice": 55, - "date": "2013-11-23T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-28T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59250, + "pk": 61052, "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, + "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": 3.36, - "invoice": 55, - "date": "2013-11-23T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-29T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59251, + "pk": 61053, "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, + "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": 2.4, - "invoice": 55, - "date": "2013-11-23T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-29T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59252, + "pk": 61054, "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, + "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": 4.32, - "invoice": 55, - "date": "2013-11-24T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-29T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59253, + "pk": 61055, "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, + "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": 3.36, - "invoice": 55, - "date": "2013-11-24T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-30T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59254, + "pk": 61056, "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, + "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": 2.24, - "invoice": 55, - "date": "2013-11-24T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-30T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59255, + "pk": 61057, "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, + "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": 4.72, - "invoice": 56, - "date": "2013-11-25T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-11-30T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59256, + "pk": 61058, "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, + "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": 2.48, - "invoice": 56, - "date": "2013-11-25T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-12-01T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59257, + "pk": 61059, "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, + "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": 2.4, - "invoice": 56, - "date": "2013-11-25T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-12-01T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59258, + "pk": 61060, "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, + "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": 2.0, - "invoice": 56, - "date": "2013-11-26T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 70, + "date": "2013-12-01T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59259, + "pk": 61061, "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, + "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": 1.68, - "invoice": 56, - "date": "2013-11-26T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-02T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59260, + "pk": 61062, "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, + "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": 3.84, - "invoice": 56, - "date": "2013-11-26T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-02T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59261, + "pk": 61063, "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, + "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": 4.4, - "invoice": 56, - "date": "2013-11-27T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-02T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59262, + "pk": 61064, "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, + "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": 2.8, - "invoice": 56, - "date": "2013-11-27T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-03T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59263, + "pk": 61065, "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, + "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": 2.8, - "invoice": 56, - "date": "2013-11-27T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-03T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59264, + "pk": 61066, "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, + "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": 3.52, - "invoice": 56, - "date": "2013-11-28T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-03T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59265, + "pk": 61067, "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, + "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": 4.24, - "invoice": 56, - "date": "2013-11-28T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-04T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59266, + "pk": 61068, "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, + "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": 2.56, - "invoice": 56, - "date": "2013-11-28T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-04T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59267, + "pk": 61069, "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, + "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": 4.64, - "invoice": 56, - "date": "2013-11-29T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-04T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59268, + "pk": 61070, "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, + "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": 4.56, - "invoice": 56, - "date": "2013-11-29T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-05T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59269, + "pk": 61071, "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, + "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": 2.24, - "invoice": 56, - "date": "2013-11-29T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-05T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59270, + "pk": 61072, "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, + "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": 4.08, - "invoice": 56, - "date": "2013-11-30T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-05T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59271, + "pk": 61073, "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, + "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": 4.48, - "invoice": 56, - "date": "2013-11-30T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-06T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59272, + "pk": 61074, "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, + "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": 2.72, - "invoice": 56, - "date": "2013-11-30T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-06T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59273, + "pk": 61075, "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, + "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": 2.32, - "invoice": 56, - "date": "2013-12-01T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-06T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59274, + "pk": 61076, "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, + "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": 3.2, - "invoice": 56, - "date": "2013-12-01T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-07T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59275, + "pk": 61077, "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, + "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": 2.0, - "invoice": 56, - "date": "2013-12-01T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-07T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59276, + "pk": 61078, "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, + "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": 2.08, - "invoice": 57, - "date": "2013-12-02T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-07T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59277, + "pk": 61079, "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, + "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": 2.48, - "invoice": 57, - "date": "2013-12-02T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-08T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59278, + "pk": 61080, "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, + "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": 4.16, - "invoice": 57, - "date": "2013-12-02T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-08T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59279, + "pk": 61081, "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, + "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": 4.56, - "invoice": 57, - "date": "2013-12-03T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 71, + "date": "2013-12-08T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59280, + "pk": 61082, "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, + "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": 2.56, - "invoice": 57, - "date": "2013-12-03T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-09T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59281, + "pk": 61083, "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, + "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": 2.56, - "invoice": 57, - "date": "2013-12-03T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-09T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59282, + "pk": 61084, "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, + "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": 3.12, - "invoice": 57, - "date": "2013-12-04T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-09T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59283, + "pk": 61085, "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, + "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": 4.32, - "invoice": 57, - "date": "2013-12-04T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-10T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59284, + "pk": 61086, "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, + "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": 1.6, - "invoice": 57, - "date": "2013-12-04T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-10T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59285, + "pk": 61087, "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, + "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": 2.0, - "invoice": 57, - "date": "2013-12-05T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-10T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59286, + "pk": 61088, "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, + "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": 3.52, - "invoice": 57, - "date": "2013-12-05T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-11T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59287, + "pk": 61089, "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, + "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": 1.92, - "invoice": 57, - "date": "2013-12-05T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-11T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59288, + "pk": 61090, "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, + "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": 1.6, - "invoice": 57, - "date": "2013-12-06T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-11T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59289, + "pk": 61091, "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, + "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": 3.04, - "invoice": 57, - "date": "2013-12-06T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-12T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59290, + "pk": 61092, "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, + "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": 3.92, - "invoice": 57, - "date": "2013-12-06T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-12T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59291, + "pk": 61093, "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, + "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": 3.76, - "invoice": 57, - "date": "2013-12-07T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-12T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59292, + "pk": 61094, "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, + "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": 4.48, - "invoice": 57, - "date": "2013-12-07T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-13T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59293, + "pk": 61095, "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, + "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": 1.76, - "invoice": 57, - "date": "2013-12-07T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-13T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59294, + "pk": 61096, "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, + "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": 3.92, - "invoice": 57, - "date": "2013-12-08T06:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-13T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59295, + "pk": 61097, "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, + "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": 3.92, - "invoice": 57, - "date": "2013-12-08T14:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-14T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59296, + "pk": 61098, "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, + "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": 4.56, - "invoice": 57, - "date": "2013-12-08T22:00:00Z", - "kind": "besteffort" + "coreHours": 8.0, + "invoice": 72, + "date": "2013-12-14T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59297, + "pk": 61099, "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" + "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": 59298, + "pk": 61100, "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" + "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": 59299, + "pk": 61101, "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" + "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": 59300, + "pk": 61102, "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" + "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": 59301, + "pk": 61103, "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, + "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": 3.36, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59302, + "pk": 61104, "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, + "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": 4.24, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59303, + "pk": 61105, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:51.099Z", - "slice": 14, - "created": "2013-12-13T22:19:51.099Z", - "amount": 0.2576, - "object": 98, - "account": 12, + "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": 3.68, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59304, + "pk": 61106, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:51.107Z", - "slice": 14, - "created": "2013-12-13T22:19:51.107Z", - "amount": 0.2184, - "object": 98, - "account": 12, + "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": 3.12, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59305, + "pk": 61107, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:51.116Z", - "slice": 14, - "created": "2013-12-13T22:19:51.116Z", - "amount": 0.1848, - "object": 98, - "account": 12, + "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": 2.64, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59306, + "pk": 61108, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:51.124Z", - "slice": 14, - "created": "2013-12-13T22:19:51.124Z", - "amount": 0.2464, - "object": 98, - "account": 12, + "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": 3.52, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T21:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59307, + "pk": 61109, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:51.132Z", - "slice": 14, - "created": "2013-12-13T22:19:51.132Z", - "amount": 0.112, - "object": 98, - "account": 12, + "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": 1.6, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T05:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59308, + "pk": 61110, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:51.141Z", - "slice": 14, - "created": "2013-12-13T22:19:51.141Z", - "amount": 0.2632, - "object": 98, - "account": 12, + "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": 3.76, + "coreHours": 8.0, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T13:00:00Z", + "kind": "reservation", + "enacted": null } }, { - "pk": 59309, + "pk": 61111, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:51.149Z", + "updated": "2013-12-18T21:29:16.468Z", "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" + "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": 59310, + "pk": 61112, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:51.157Z", + "updated": "2013-12-18T21:29:16.510Z", "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" + "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": 59311, + "pk": 61113, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-13T22:00:00Z", - "kind": "reservation" + "coreHours": 4.4, + "invoice": 64, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59312, + "pk": 61114, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-14T06:00:00Z", - "kind": "reservation" + "coreHours": 2.96, + "invoice": 64, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59313, + "pk": 61115, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-14T14:00:00Z", - "kind": "reservation" + "coreHours": 2.96, + "invoice": 64, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59314, + "pk": 61116, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-14T22:00:00Z", - "kind": "reservation" + "coreHours": 3.6, + "invoice": 64, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59315, + "pk": 61117, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-15T06:00:00Z", - "kind": "reservation" + "coreHours": 3.84, + "invoice": 64, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59316, + "pk": 61118, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-15T14:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 64, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59317, + "pk": 61119, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-15T22:00:00Z", - "kind": "reservation" + "coreHours": 4.64, + "invoice": 64, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59318, + "pk": 61120, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-16T06:00:00Z", - "kind": "reservation" + "coreHours": 2.96, + "invoice": 64, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59319, + "pk": 61121, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-16T14:00:00Z", - "kind": "reservation" + "coreHours": 3.68, + "invoice": 64, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59320, + "pk": 61122, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-16T22:00:00Z", - "kind": "reservation" + "coreHours": 2.0, + "invoice": 64, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59321, + "pk": 61123, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-17T06:00:00Z", - "kind": "reservation" + "coreHours": 2.16, + "invoice": 64, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59322, + "pk": 61124, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-17T14:00:00Z", - "kind": "reservation" + "coreHours": 4.0, + "invoice": 64, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59323, + "pk": 61125, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-17T22:00:00Z", - "kind": "reservation" + "coreHours": 3.44, + "invoice": 64, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59324, + "pk": 61126, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-18T06:00:00Z", - "kind": "reservation" + "coreHours": 4.4, + "invoice": 64, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59325, + "pk": 61127, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-18T14:00:00Z", - "kind": "reservation" + "coreHours": 4.08, + "invoice": 64, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59326, + "pk": 61128, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-18T22:00:00Z", - "kind": "reservation" + "coreHours": 1.76, + "invoice": 64, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59327, + "pk": 61129, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-19T06:00:00Z", - "kind": "reservation" + "coreHours": 2.64, + "invoice": 64, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59328, + "pk": 61130, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-19T14:00:00Z", - "kind": "reservation" + "coreHours": 2.88, + "invoice": 65, + "date": "2013-11-25T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59329, + "pk": 61131, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-19T22:00:00Z", - "kind": "reservation" + "coreHours": 3.28, + "invoice": 65, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59330, + "pk": 61132, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-20T06:00:00Z", - "kind": "reservation" + "coreHours": 4.24, + "invoice": 65, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59331, + "pk": 61133, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-20T14:00:00Z", - "kind": "reservation" + "coreHours": 2.48, + "invoice": 65, + "date": "2013-11-26T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59332, + "pk": 61134, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-20T22:00:00Z", - "kind": "reservation" + "coreHours": 4.8, + "invoice": 65, + "date": "2013-11-26T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59333, + "pk": 61135, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-21T06:00:00Z", - "kind": "reservation" + "coreHours": 4.4, + "invoice": 65, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59334, + "pk": 61136, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-21T14:00:00Z", - "kind": "reservation" + "coreHours": 3.92, + "invoice": 65, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59335, + "pk": 61137, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-21T22:00:00Z", - "kind": "reservation" + "coreHours": 2.88, + "invoice": 65, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59336, + "pk": 61138, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-22T06:00:00Z", - "kind": "reservation" + "coreHours": 2.16, + "invoice": 65, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59337, + "pk": 61139, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-22T14:00:00Z", - "kind": "reservation" + "coreHours": 4.16, + "invoice": 65, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59338, + "pk": 61140, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-22T22:00:00Z", - "kind": "reservation" + "coreHours": 4.64, + "invoice": 65, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59339, + "pk": 61141, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-23T06:00:00Z", - "kind": "reservation" + "coreHours": 4.56, + "invoice": 65, + "date": "2013-11-28T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59340, + "pk": 61142, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-23T14:00:00Z", - "kind": "reservation" + "coreHours": 2.48, + "invoice": 65, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59341, + "pk": 61143, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-23T22:00:00Z", - "kind": "reservation" + "coreHours": 3.76, + "invoice": 65, + "date": "2013-11-29T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59342, + "pk": 61144, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-24T06:00:00Z", - "kind": "reservation" + "coreHours": 3.52, + "invoice": 65, + "date": "2013-11-29T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59343, + "pk": 61145, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-24T14:00:00Z", - "kind": "reservation" + "coreHours": 4.56, + "invoice": 65, + "date": "2013-11-30T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59344, + "pk": 61146, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-24T22:00:00Z", - "kind": "reservation" + "coreHours": 4.0, + "invoice": 65, + "date": "2013-11-30T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59345, + "pk": 61147, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-25T06:00:00Z", - "kind": "reservation" + "coreHours": 1.84, + "invoice": 65, + "date": "2013-11-30T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59346, + "pk": 61148, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-25T14:00:00Z", - "kind": "reservation" + "coreHours": 2.24, + "invoice": 65, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59347, + "pk": 61149, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-25T22:00:00Z", - "kind": "reservation" + "coreHours": 2.72, + "invoice": 65, + "date": "2013-12-01T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59348, + "pk": 61150, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-26T06:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 65, + "date": "2013-12-01T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59349, + "pk": 61151, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-26T14:00:00Z", - "kind": "reservation" + "coreHours": 2.08, + "invoice": 66, + "date": "2013-12-02T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59350, + "pk": 61152, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-26T22:00:00Z", - "kind": "reservation" + "coreHours": 3.52, + "invoice": 66, + "date": "2013-12-02T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59351, + "pk": 61153, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-27T06:00:00Z", - "kind": "reservation" + "coreHours": 3.52, + "invoice": 66, + "date": "2013-12-02T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59352, + "pk": 61154, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-27T14:00:00Z", - "kind": "reservation" + "coreHours": 2.88, + "invoice": 66, + "date": "2013-12-03T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59353, + "pk": 61155, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-27T22:00:00Z", - "kind": "reservation" + "coreHours": 2.48, + "invoice": 66, + "date": "2013-12-03T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59354, + "pk": 61156, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-28T06:00:00Z", - "kind": "reservation" + "coreHours": 3.44, + "invoice": 66, + "date": "2013-12-03T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59355, + "pk": 61157, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-28T14:00:00Z", - "kind": "reservation" + "coreHours": 4.16, + "invoice": 66, + "date": "2013-12-04T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59356, + "pk": 61158, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-28T22:00:00Z", - "kind": "reservation" + "coreHours": 1.84, + "invoice": 66, + "date": "2013-12-04T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59357, + "pk": 61159, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-29T06:00:00Z", - "kind": "reservation" + "coreHours": 3.76, + "invoice": 66, + "date": "2013-12-04T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59358, + "pk": 61160, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-29T14:00:00Z", - "kind": "reservation" + "coreHours": 4.32, + "invoice": 66, + "date": "2013-12-05T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59359, + "pk": 61161, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-29T22:00:00Z", - "kind": "reservation" + "coreHours": 3.28, + "invoice": 66, + "date": "2013-12-05T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59360, + "pk": 61162, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-30T06:00:00Z", - "kind": "reservation" + "coreHours": 4.72, + "invoice": 66, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59361, + "pk": 61163, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-30T14:00:00Z", - "kind": "reservation" + "coreHours": 1.68, + "invoice": 66, + "date": "2013-12-06T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59362, + "pk": 61164, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-30T22:00:00Z", - "kind": "reservation" + "coreHours": 4.0, + "invoice": 66, + "date": "2013-12-06T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59363, + "pk": 61165, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-12-01T06:00:00Z", - "kind": "reservation" + "coreHours": 3.2, + "invoice": 66, + "date": "2013-12-06T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59364, + "pk": 61166, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-12-01T14:00:00Z", - "kind": "reservation" + "coreHours": 3.84, + "invoice": 66, + "date": "2013-12-07T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59365, + "pk": 61167, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-12-01T22:00:00Z", - "kind": "reservation" + "coreHours": 2.24, + "invoice": 66, + "date": "2013-12-07T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59366, + "pk": 61168, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-02T06:00:00Z", - "kind": "reservation" + "coreHours": 2.32, + "invoice": 66, + "date": "2013-12-07T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59367, + "pk": 61169, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-02T14:00:00Z", - "kind": "reservation" + "coreHours": 3.84, + "invoice": 66, + "date": "2013-12-08T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59368, + "pk": 61170, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-02T22:00:00Z", - "kind": "reservation" + "coreHours": 4.16, + "invoice": 66, + "date": "2013-12-08T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59369, + "pk": 61171, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-03T06:00:00Z", - "kind": "reservation" + "coreHours": 1.92, + "invoice": 66, + "date": "2013-12-08T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59370, + "pk": 61172, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-03T14:00:00Z", - "kind": "reservation" + "coreHours": 2.8, + "invoice": 67, + "date": "2013-12-09T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59371, + "pk": 61173, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-03T22:00:00Z", - "kind": "reservation" + "coreHours": 3.12, + "invoice": 67, + "date": "2013-12-09T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59372, + "pk": 61174, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-04T06:00:00Z", - "kind": "reservation" + "coreHours": 4.72, + "invoice": 67, + "date": "2013-12-09T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59373, + "pk": 61175, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-04T14:00:00Z", - "kind": "reservation" + "coreHours": 3.12, + "invoice": 67, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59374, + "pk": 61176, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-04T22:00:00Z", - "kind": "reservation" + "coreHours": 1.68, + "invoice": 67, + "date": "2013-12-10T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59375, + "pk": 61177, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-05T06:00:00Z", - "kind": "reservation" + "coreHours": 2.32, + "invoice": 67, + "date": "2013-12-10T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59376, + "pk": 61178, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-05T14:00:00Z", - "kind": "reservation" + "coreHours": 4.24, + "invoice": 67, + "date": "2013-12-11T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59377, + "pk": 61179, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-05T22:00:00Z", - "kind": "reservation" + "coreHours": 1.92, + "invoice": 67, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59378, + "pk": 61180, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-06T06:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 67, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59379, + "pk": 61181, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-06T14:00:00Z", - "kind": "reservation" + "coreHours": 1.92, + "invoice": 67, + "date": "2013-12-12T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59380, + "pk": 61182, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-06T22:00:00Z", - "kind": "reservation" + "coreHours": 1.6, + "invoice": 67, + "date": "2013-12-12T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59381, + "pk": 61183, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-07T06:00:00Z", - "kind": "reservation" + "coreHours": 1.68, + "invoice": 67, + "date": "2013-12-12T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59382, + "pk": 61184, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-07T14:00:00Z", - "kind": "reservation" + "coreHours": 2.08, + "invoice": 67, + "date": "2013-12-13T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59383, + "pk": 61185, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-07T22:00:00Z", - "kind": "reservation" + "coreHours": 4.4, + "invoice": 67, + "date": "2013-12-13T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59384, + "pk": 61186, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-08T06:00:00Z", - "kind": "reservation" + "coreHours": 4.0, + "invoice": 67, + "date": "2013-12-13T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59385, + "pk": 61187, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-08T14:00:00Z", - "kind": "reservation" + "coreHours": 4.8, + "invoice": 67, + "date": "2013-12-14T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59386, + "pk": 61188, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-08T22:00:00Z", - "kind": "reservation" + "coreHours": 1.92, + "invoice": 67, + "date": "2013-12-14T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59387, + "pk": 61189, "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" + "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": 59388, + "pk": 61190, "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" + "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": 59389, + "pk": 61191, "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" + "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": 59390, + "pk": 61192, "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" + "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": 59391, + "pk": 61193, "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, + "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": 8.0, + "coreHours": 1.84, "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "reservation" + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59392, + "pk": 61194, "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, + "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": 8.0, + "coreHours": 4.8, "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "reservation" + "date": "2013-12-16T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59393, + "pk": 61195, "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, + "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": 8.0, + "coreHours": 2.32, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "reservation" + "date": "2013-12-16T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59394, + "pk": 61196, "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, + "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": 8.0, + "coreHours": 2.72, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "reservation" + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59395, + "pk": 61197, "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, + "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": 8.0, + "coreHours": 4.56, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "reservation" + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59396, + "pk": 61198, "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, + "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": 8.0, + "coreHours": 2.0, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "reservation" + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59397, + "pk": 61199, "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, + "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": 8.0, + "coreHours": 1.84, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "reservation" + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59398, + "pk": 61200, "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, + "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": 8.0, + "coreHours": 3.76, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "reservation" + "date": "2013-12-18T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59399, + "pk": 61201, "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" + "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": 59400, + "pk": 61202, "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" + "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": 59401, + "pk": 61203, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-13T22:00:00Z", - "kind": "reservation" + "coreHours": 4.24, + "invoice": 64, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59402, + "pk": 61204, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-14T06:00:00Z", - "kind": "reservation" + "coreHours": 3.28, + "invoice": 64, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59403, + "pk": 61205, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-14T14:00:00Z", - "kind": "reservation" + "coreHours": 2.0, + "invoice": 64, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59404, + "pk": 61206, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-14T22:00:00Z", - "kind": "reservation" + "coreHours": 4.24, + "invoice": 64, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59405, + "pk": 61207, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-15T06:00:00Z", - "kind": "reservation" + "coreHours": 2.16, + "invoice": 64, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59406, + "pk": 61208, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-15T14:00:00Z", - "kind": "reservation" + "coreHours": 4.8, + "invoice": 64, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59407, + "pk": 61209, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-15T22:00:00Z", - "kind": "reservation" + "coreHours": 3.84, + "invoice": 64, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59408, + "pk": 61210, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-16T06:00:00Z", - "kind": "reservation" + "coreHours": 4.4, + "invoice": 64, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59409, + "pk": 61211, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-16T14:00:00Z", - "kind": "reservation" + "coreHours": 2.56, + "invoice": 64, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59410, + "pk": 61212, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-16T22:00:00Z", - "kind": "reservation" + "coreHours": 4.72, + "invoice": 64, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59411, + "pk": 61213, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-17T06:00:00Z", - "kind": "reservation" + "coreHours": 1.84, + "invoice": 64, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59412, + "pk": 61214, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-17T14:00:00Z", - "kind": "reservation" + "coreHours": 3.36, + "invoice": 64, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59413, + "pk": 61215, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-17T22:00:00Z", - "kind": "reservation" + "coreHours": 4.72, + "invoice": 64, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59414, + "pk": 61216, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-18T06:00:00Z", - "kind": "reservation" + "coreHours": 4.16, + "invoice": 64, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59415, + "pk": 61217, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-18T14:00:00Z", - "kind": "reservation" + "coreHours": 2.16, + "invoice": 64, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59416, + "pk": 61218, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-18T22:00:00Z", - "kind": "reservation" + "coreHours": 1.6, + "invoice": 64, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59417, + "pk": 61219, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-19T06:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 64, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59418, + "pk": 61220, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-19T14:00:00Z", - "kind": "reservation" + "coreHours": 2.16, + "invoice": 65, + "date": "2013-11-25T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59419, + "pk": 61221, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-19T22:00:00Z", - "kind": "reservation" + "coreHours": 2.88, + "invoice": 65, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59420, + "pk": 61222, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-20T06:00:00Z", - "kind": "reservation" + "coreHours": 4.24, + "invoice": 65, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59421, + "pk": 61223, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-20T14:00:00Z", - "kind": "reservation" + "coreHours": 2.48, + "invoice": 65, + "date": "2013-11-26T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59422, + "pk": 61224, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-20T22:00:00Z", - "kind": "reservation" + "coreHours": 4.72, + "invoice": 65, + "date": "2013-11-26T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59423, + "pk": 61225, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-21T06:00:00Z", - "kind": "reservation" + "coreHours": 4.64, + "invoice": 65, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59424, + "pk": 61226, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-21T14:00:00Z", - "kind": "reservation" + "coreHours": 1.92, + "invoice": 65, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59425, + "pk": 61227, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-21T22:00:00Z", - "kind": "reservation" + "coreHours": 2.72, + "invoice": 65, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59426, + "pk": 61228, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-22T06:00:00Z", - "kind": "reservation" + "coreHours": 3.68, + "invoice": 65, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59427, + "pk": 61229, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-22T14:00:00Z", - "kind": "reservation" + "coreHours": 4.32, + "invoice": 65, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59428, + "pk": 61230, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-22T22:00:00Z", - "kind": "reservation" + "coreHours": 4.8, + "invoice": 65, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59429, + "pk": 61231, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-23T06:00:00Z", - "kind": "reservation" + "coreHours": 2.88, + "invoice": 65, + "date": "2013-11-28T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59430, + "pk": 61232, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-23T14:00:00Z", - "kind": "reservation" + "coreHours": 2.0, + "invoice": 65, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59431, + "pk": 61233, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-23T22:00:00Z", - "kind": "reservation" + "coreHours": 2.0, + "invoice": 65, + "date": "2013-11-29T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59432, + "pk": 61234, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-24T06:00:00Z", - "kind": "reservation" + "coreHours": 1.76, + "invoice": 65, + "date": "2013-11-29T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59433, + "pk": 61235, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-24T14:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 65, + "date": "2013-11-30T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59434, + "pk": 61236, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-24T22:00:00Z", - "kind": "reservation" + "coreHours": 4.32, + "invoice": 65, + "date": "2013-11-30T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59435, + "pk": 61237, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-25T06:00:00Z", - "kind": "reservation" + "coreHours": 4.24, + "invoice": 65, + "date": "2013-11-30T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59436, + "pk": 61238, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-25T14:00:00Z", - "kind": "reservation" + "coreHours": 4.56, + "invoice": 65, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59437, + "pk": 61239, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-25T22:00:00Z", - "kind": "reservation" + "coreHours": 2.8, + "invoice": 65, + "date": "2013-12-01T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59438, + "pk": 61240, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-26T06:00:00Z", - "kind": "reservation" + "coreHours": 1.92, + "invoice": 65, + "date": "2013-12-01T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59439, + "pk": 61241, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-26T14:00:00Z", - "kind": "reservation" + "coreHours": 2.16, + "invoice": 66, + "date": "2013-12-02T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59440, + "pk": 61242, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-26T22:00:00Z", - "kind": "reservation" + "coreHours": 4.72, + "invoice": 66, + "date": "2013-12-02T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59441, + "pk": 61243, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-27T06:00:00Z", - "kind": "reservation" + "coreHours": 2.72, + "invoice": 66, + "date": "2013-12-02T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59442, + "pk": 61244, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-27T14:00:00Z", - "kind": "reservation" + "coreHours": 4.16, + "invoice": 66, + "date": "2013-12-03T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59443, + "pk": 61245, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-27T22:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 66, + "date": "2013-12-03T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59444, + "pk": 61246, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-28T06:00:00Z", - "kind": "reservation" + "coreHours": 4.0, + "invoice": 66, + "date": "2013-12-03T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59445, + "pk": 61247, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-28T14:00:00Z", - "kind": "reservation" + "coreHours": 4.08, + "invoice": 66, + "date": "2013-12-04T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59446, + "pk": 61248, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-28T22:00:00Z", - "kind": "reservation" + "coreHours": 1.68, + "invoice": 66, + "date": "2013-12-04T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59447, + "pk": 61249, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-29T06:00:00Z", - "kind": "reservation" + "coreHours": 2.48, + "invoice": 66, + "date": "2013-12-04T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59448, + "pk": 61250, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-29T14:00:00Z", - "kind": "reservation" + "coreHours": 3.12, + "invoice": 66, + "date": "2013-12-05T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59449, + "pk": 61251, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-29T22:00:00Z", - "kind": "reservation" + "coreHours": 2.32, + "invoice": 66, + "date": "2013-12-05T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59450, + "pk": 61252, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-30T06:00:00Z", - "kind": "reservation" + "coreHours": 4.56, + "invoice": 66, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59451, + "pk": 61253, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-30T14:00:00Z", - "kind": "reservation" + "coreHours": 4.08, + "invoice": 66, + "date": "2013-12-06T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59452, + "pk": 61254, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-30T22:00:00Z", - "kind": "reservation" + "coreHours": 1.6, + "invoice": 66, + "date": "2013-12-06T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59453, + "pk": 61255, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-12-01T06:00:00Z", - "kind": "reservation" + "coreHours": 3.84, + "invoice": 66, + "date": "2013-12-06T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59454, + "pk": 61256, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-12-01T14:00:00Z", - "kind": "reservation" + "coreHours": 1.68, + "invoice": 66, + "date": "2013-12-07T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59455, + "pk": 61257, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-12-01T22:00:00Z", - "kind": "reservation" + "coreHours": 3.84, + "invoice": 66, + "date": "2013-12-07T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59456, + "pk": 61258, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-02T06:00:00Z", - "kind": "reservation" + "coreHours": 3.28, + "invoice": 66, + "date": "2013-12-07T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59457, + "pk": 61259, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-02T14:00:00Z", - "kind": "reservation" + "coreHours": 3.2, + "invoice": 66, + "date": "2013-12-08T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59458, + "pk": 61260, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-02T22:00:00Z", - "kind": "reservation" + "coreHours": 4.08, + "invoice": 66, + "date": "2013-12-08T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59459, + "pk": 61261, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-03T06:00:00Z", - "kind": "reservation" + "coreHours": 3.2, + "invoice": 66, + "date": "2013-12-08T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59460, + "pk": 61262, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-03T14:00:00Z", - "kind": "reservation" + "coreHours": 3.68, + "invoice": 67, + "date": "2013-12-09T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59461, + "pk": 61263, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-03T22:00:00Z", - "kind": "reservation" + "coreHours": 3.28, + "invoice": 67, + "date": "2013-12-09T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59462, + "pk": 61264, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-04T06:00:00Z", - "kind": "reservation" + "coreHours": 3.76, + "invoice": 67, + "date": "2013-12-09T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59463, + "pk": 61265, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-04T14:00:00Z", - "kind": "reservation" + "coreHours": 4.08, + "invoice": 67, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59464, + "pk": 61266, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-04T22:00:00Z", - "kind": "reservation" + "coreHours": 4.8, + "invoice": 67, + "date": "2013-12-10T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59465, + "pk": 61267, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-05T06:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 67, + "date": "2013-12-10T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59466, + "pk": 61268, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-05T14:00:00Z", - "kind": "reservation" + "coreHours": 4.24, + "invoice": 67, + "date": "2013-12-11T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59467, + "pk": 61269, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-05T22:00:00Z", - "kind": "reservation" + "coreHours": 2.72, + "invoice": 67, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59468, + "pk": 61270, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-06T06:00:00Z", - "kind": "reservation" + "coreHours": 3.12, + "invoice": 67, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59469, + "pk": 61271, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-06T14:00:00Z", - "kind": "reservation" + "coreHours": 3.36, + "invoice": 67, + "date": "2013-12-12T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59470, + "pk": 61272, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-06T22:00:00Z", - "kind": "reservation" + "coreHours": 1.68, + "invoice": 67, + "date": "2013-12-12T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59471, + "pk": 61273, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-07T06:00:00Z", - "kind": "reservation" + "coreHours": 3.52, + "invoice": 67, + "date": "2013-12-12T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59472, + "pk": 61274, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-07T14:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 67, + "date": "2013-12-13T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59473, + "pk": 61275, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-07T22:00:00Z", - "kind": "reservation" + "coreHours": 2.8, + "invoice": 67, + "date": "2013-12-13T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59474, + "pk": 61276, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-08T06:00:00Z", - "kind": "reservation" + "coreHours": 2.32, + "invoice": 67, + "date": "2013-12-13T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59475, + "pk": 61277, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-08T14:00:00Z", - "kind": "reservation" + "coreHours": 1.76, + "invoice": 67, + "date": "2013-12-14T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59476, + "pk": 61278, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-08T22:00:00Z", - "kind": "reservation" + "coreHours": 3.28, + "invoice": 67, + "date": "2013-12-14T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59477, + "pk": 61279, "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" + "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": 59478, + "pk": 61280, "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" + "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": 59479, + "pk": 61281, "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" + "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": 59480, + "pk": 61282, "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" + "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": 59481, + "pk": 61283, "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, + "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": 8.0, + "coreHours": 1.92, "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "reservation" + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59482, + "pk": 61284, "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, + "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": 8.0, + "coreHours": 2.64, "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "reservation" + "date": "2013-12-16T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59483, + "pk": 61285, "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, + "updated": "2013-12-18T21:29:14.032Z", + "slice": 14, + "created": "2013-12-18T21:29:14.031Z", + "amount": 0.2128, + "object": 118, + "account": 14, "state": "pending", - "coreHours": 8.0, + "coreHours": 3.04, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "reservation" + "date": "2013-12-16T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59484, + "pk": 61286, "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, + "updated": "2013-12-18T21:29:14.040Z", + "slice": 14, + "created": "2013-12-18T21:29:14.040Z", + "amount": 0.2464, + "object": 118, + "account": 14, "state": "pending", - "coreHours": 8.0, + "coreHours": 3.52, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "reservation" + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59485, + "pk": 61287, "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, + "updated": "2013-12-18T21:29:14.048Z", + "slice": 14, + "created": "2013-12-18T21:29:14.048Z", + "amount": 0.2352, + "object": 118, + "account": 14, "state": "pending", - "coreHours": 8.0, + "coreHours": 3.36, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "reservation" + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59486, + "pk": 61288, "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, + "updated": "2013-12-18T21:29:14.056Z", + "slice": 14, + "created": "2013-12-18T21:29:14.056Z", + "amount": 0.2128, + "object": 118, + "account": 14, "state": "pending", - "coreHours": 8.0, + "coreHours": 3.04, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "reservation" + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59487, + "pk": 61289, "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, + "updated": "2013-12-18T21:29:14.065Z", + "slice": 14, + "created": "2013-12-18T21:29:14.065Z", + "amount": 0.14, + "object": 118, + "account": 14, "state": "pending", - "coreHours": 8.0, + "coreHours": 2.0, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "reservation" + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59488, + "pk": 61290, "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, + "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": 8.0, + "coreHours": 2.56, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "reservation" + "date": "2013-12-18T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59489, + "pk": 61291, "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" + "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": 59490, + "pk": 61292, "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" + "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": 59491, + "pk": 61293, "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, + "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": 8.0, - "invoice": 58, - "date": "2013-11-13T22:00:00Z", - "kind": "reservation" + "coreHours": 4.08, + "invoice": 64, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59492, + "pk": 61294, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-14T06:00:00Z", - "kind": "reservation" + "coreHours": 2.0, + "invoice": 64, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59493, + "pk": 61295, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-14T14:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 64, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59494, + "pk": 61296, "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, + "updated": "2013-12-18T21:29:16.651Z", + "slice": 14, + "created": "2013-12-18T21:29:14.131Z", + "amount": 0.1792, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-14T22:00:00Z", - "kind": "reservation" + "coreHours": 2.56, + "invoice": 64, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59495, + "pk": 61297, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-15T06:00:00Z", - "kind": "reservation" + "coreHours": 3.6, + "invoice": 64, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59496, + "pk": 61298, "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, + "updated": "2013-12-18T21:29:16.734Z", + "slice": 14, + "created": "2013-12-18T21:29:14.148Z", + "amount": 0.2464, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-15T14:00:00Z", - "kind": "reservation" + "coreHours": 3.52, + "invoice": 64, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59497, + "pk": 61299, "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, + "updated": "2013-12-18T21:29:16.775Z", + "slice": 14, + "created": "2013-12-18T21:29:14.156Z", + "amount": 0.2184, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-15T22:00:00Z", - "kind": "reservation" + "coreHours": 3.12, + "invoice": 64, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59498, + "pk": 61300, "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, + "updated": "2013-12-18T21:29:16.816Z", + "slice": 14, + "created": "2013-12-18T21:29:14.164Z", + "amount": 0.252, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-16T06:00:00Z", - "kind": "reservation" + "coreHours": 3.6, + "invoice": 64, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59499, + "pk": 61301, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-16T14:00:00Z", - "kind": "reservation" + "coreHours": 2.32, + "invoice": 64, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59500, + "pk": 61302, "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, + "updated": "2013-12-18T21:29:16.899Z", + "slice": 14, + "created": "2013-12-18T21:29:14.181Z", + "amount": 0.2072, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 59, - "date": "2013-11-16T22:00:00Z", - "kind": "reservation" + "coreHours": 2.96, + "invoice": 64, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59501, + "pk": 61303, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-17T06:00:00Z", - "kind": "reservation" + "coreHours": 2.72, + "invoice": 64, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59502, + "pk": 61304, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-17T14:00:00Z", - "kind": "reservation" + "coreHours": 4.08, + "invoice": 64, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59503, + "pk": 61305, "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, + "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": 8.0, - "invoice": 59, - "date": "2013-11-17T22:00:00Z", - "kind": "reservation" + "coreHours": 2.88, + "invoice": 64, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59504, + "pk": 61306, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-18T06:00:00Z", - "kind": "reservation" + "coreHours": 3.12, + "invoice": 64, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59505, + "pk": 61307, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-18T14:00:00Z", - "kind": "reservation" + "coreHours": 2.0, + "invoice": 64, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59506, + "pk": 61308, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-18T22:00:00Z", - "kind": "reservation" + "coreHours": 1.84, + "invoice": 64, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59507, + "pk": 61309, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-19T06:00:00Z", - "kind": "reservation" + "coreHours": 3.76, + "invoice": 64, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59508, + "pk": 61310, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-19T14:00:00Z", - "kind": "reservation" + "coreHours": 4.08, + "invoice": 65, + "date": "2013-11-25T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59509, + "pk": 61311, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-19T22:00:00Z", - "kind": "reservation" + "coreHours": 2.24, + "invoice": 65, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59510, + "pk": 61312, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-20T06:00:00Z", - "kind": "reservation" + "coreHours": 3.36, + "invoice": 65, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59511, + "pk": 61313, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-20T14:00:00Z", - "kind": "reservation" + "coreHours": 3.36, + "invoice": 65, + "date": "2013-11-26T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59512, + "pk": 61314, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-20T22:00:00Z", - "kind": "reservation" + "coreHours": 4.72, + "invoice": 65, + "date": "2013-11-26T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59513, + "pk": 61315, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-21T06:00:00Z", - "kind": "reservation" + "coreHours": 3.44, + "invoice": 65, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59514, + "pk": 61316, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-21T14:00:00Z", - "kind": "reservation" + "coreHours": 4.16, + "invoice": 65, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59515, + "pk": 61317, "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, + "updated": "2013-12-18T21:29:17.642Z", + "slice": 14, + "created": "2013-12-18T21:29:14.305Z", + "amount": 0.2688, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-21T22:00:00Z", - "kind": "reservation" + "coreHours": 3.84, + "invoice": 65, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59516, + "pk": 61318, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-22T06:00:00Z", - "kind": "reservation" + "coreHours": 2.4, + "invoice": 65, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59517, + "pk": 61319, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-22T14:00:00Z", - "kind": "reservation" + "coreHours": 2.56, + "invoice": 65, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59518, + "pk": 61320, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-22T22:00:00Z", - "kind": "reservation" + "coreHours": 3.12, + "invoice": 65, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59519, + "pk": 61321, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-23T06:00:00Z", - "kind": "reservation" + "coreHours": 2.64, + "invoice": 65, + "date": "2013-11-28T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59520, + "pk": 61322, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-23T14:00:00Z", - "kind": "reservation" + "coreHours": 2.56, + "invoice": 65, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59521, + "pk": 61323, "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, + "updated": "2013-12-18T21:29:17.891Z", + "slice": 14, + "created": "2013-12-18T21:29:14.355Z", + "amount": 0.112, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 60, - "date": "2013-11-23T22:00:00Z", - "kind": "reservation" + "coreHours": 1.6, + "invoice": 65, + "date": "2013-11-29T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59522, + "pk": 61324, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-24T06:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 65, + "date": "2013-11-29T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59523, + "pk": 61325, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-24T14:00:00Z", - "kind": "reservation" + "coreHours": 2.24, + "invoice": 65, + "date": "2013-11-30T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59524, + "pk": 61326, "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, + "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": 8.0, - "invoice": 60, - "date": "2013-11-24T22:00:00Z", - "kind": "reservation" + "coreHours": 4.32, + "invoice": 65, + "date": "2013-11-30T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59525, + "pk": 61327, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-25T06:00:00Z", - "kind": "reservation" + "coreHours": 4.8, + "invoice": 65, + "date": "2013-11-30T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59526, + "pk": 61328, "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, + "updated": "2013-12-18T21:29:18.098Z", + "slice": 14, + "created": "2013-12-18T21:29:14.396Z", + "amount": 0.28, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 61, - "date": "2013-11-25T14:00:00Z", - "kind": "reservation" + "coreHours": 4.0, + "invoice": 65, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59527, + "pk": 61329, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-25T22:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 65, + "date": "2013-12-01T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59528, + "pk": 61330, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-26T06:00:00Z", - "kind": "reservation" + "coreHours": 1.68, + "invoice": 65, + "date": "2013-12-01T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59529, + "pk": 61331, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-26T14:00:00Z", - "kind": "reservation" + "coreHours": 4.64, + "invoice": 66, + "date": "2013-12-02T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59530, + "pk": 61332, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-26T22:00:00Z", - "kind": "reservation" + "coreHours": 1.84, + "invoice": 66, + "date": "2013-12-02T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59531, + "pk": 61333, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-27T06:00:00Z", - "kind": "reservation" + "coreHours": 2.64, + "invoice": 66, + "date": "2013-12-02T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59532, + "pk": 61334, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-27T14:00:00Z", - "kind": "reservation" + "coreHours": 2.4, + "invoice": 66, + "date": "2013-12-03T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59533, + "pk": 61335, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-27T22:00:00Z", - "kind": "reservation" + "coreHours": 2.32, + "invoice": 66, + "date": "2013-12-03T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59534, + "pk": 61336, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-28T06:00:00Z", - "kind": "reservation" + "coreHours": 1.6, + "invoice": 66, + "date": "2013-12-03T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59535, + "pk": 61337, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-28T14:00:00Z", - "kind": "reservation" + "coreHours": 3.12, + "invoice": 66, + "date": "2013-12-04T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59536, + "pk": 61338, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-28T22:00:00Z", - "kind": "reservation" + "coreHours": 3.68, + "invoice": 66, + "date": "2013-12-04T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59537, + "pk": 61339, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-29T06:00:00Z", - "kind": "reservation" + "coreHours": 2.96, + "invoice": 66, + "date": "2013-12-04T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59538, + "pk": 61340, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-29T14:00:00Z", - "kind": "reservation" + "coreHours": 1.76, + "invoice": 66, + "date": "2013-12-05T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59539, + "pk": 61341, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-29T22:00:00Z", - "kind": "reservation" + "coreHours": 3.76, + "invoice": 66, + "date": "2013-12-05T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59540, + "pk": 61342, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-30T06:00:00Z", - "kind": "reservation" + "coreHours": 2.0, + "invoice": 66, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59541, + "pk": 61343, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-30T14:00:00Z", - "kind": "reservation" + "coreHours": 2.8, + "invoice": 66, + "date": "2013-12-06T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59542, + "pk": 61344, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-11-30T22:00:00Z", - "kind": "reservation" + "coreHours": 3.68, + "invoice": 66, + "date": "2013-12-06T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59543, + "pk": 61345, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-12-01T06:00:00Z", - "kind": "reservation" + "coreHours": 2.4, + "invoice": 66, + "date": "2013-12-06T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59544, + "pk": 61346, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-12-01T14:00:00Z", - "kind": "reservation" + "coreHours": 3.52, + "invoice": 66, + "date": "2013-12-07T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59545, + "pk": 61347, "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, + "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": 8.0, - "invoice": 61, - "date": "2013-12-01T22:00:00Z", - "kind": "reservation" + "coreHours": 4.8, + "invoice": 66, + "date": "2013-12-07T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59546, + "pk": 61348, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-02T06:00:00Z", - "kind": "reservation" + "coreHours": 3.52, + "invoice": 66, + "date": "2013-12-07T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59547, + "pk": 61349, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-02T14:00:00Z", - "kind": "reservation" + "coreHours": 3.68, + "invoice": 66, + "date": "2013-12-08T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59548, + "pk": 61350, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-02T22:00:00Z", - "kind": "reservation" + "coreHours": 2.48, + "invoice": 66, + "date": "2013-12-08T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59549, + "pk": 61351, "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, + "updated": "2013-12-18T21:29:19.059Z", + "slice": 14, + "created": "2013-12-18T21:29:14.587Z", + "amount": 0.3024, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-03T06:00:00Z", - "kind": "reservation" + "coreHours": 4.32, + "invoice": 66, + "date": "2013-12-08T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59550, + "pk": 61352, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-03T14:00:00Z", - "kind": "reservation" + "coreHours": 2.64, + "invoice": 67, + "date": "2013-12-09T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59551, + "pk": 61353, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-03T22:00:00Z", - "kind": "reservation" + "coreHours": 4.32, + "invoice": 67, + "date": "2013-12-09T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59552, + "pk": 61354, "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, + "updated": "2013-12-18T21:29:19.191Z", + "slice": 14, + "created": "2013-12-18T21:29:14.611Z", + "amount": 0.2856, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-04T06:00:00Z", - "kind": "reservation" + "coreHours": 4.08, + "invoice": 67, + "date": "2013-12-09T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59553, + "pk": 61355, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-04T14:00:00Z", - "kind": "reservation" + "coreHours": 4.48, + "invoice": 67, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59554, + "pk": 61356, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-04T22:00:00Z", - "kind": "reservation" + "coreHours": 1.68, + "invoice": 67, + "date": "2013-12-10T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59555, + "pk": 61357, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-05T06:00:00Z", - "kind": "reservation" + "coreHours": 2.96, + "invoice": 67, + "date": "2013-12-10T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59556, + "pk": 61358, "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, + "updated": "2013-12-18T21:29:19.357Z", + "slice": 14, + "created": "2013-12-18T21:29:14.645Z", + "amount": 0.2632, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-05T14:00:00Z", - "kind": "reservation" + "coreHours": 3.76, + "invoice": 67, + "date": "2013-12-11T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59557, + "pk": 61359, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-05T22:00:00Z", - "kind": "reservation" + "coreHours": 3.44, + "invoice": 67, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59558, + "pk": 61360, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-06T06:00:00Z", - "kind": "reservation" + "coreHours": 3.92, + "invoice": 67, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59559, + "pk": 61361, "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, + "updated": "2013-12-18T21:29:19.481Z", + "slice": 14, + "created": "2013-12-18T21:29:14.669Z", + "amount": 0.3024, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-06T14:00:00Z", - "kind": "reservation" + "coreHours": 4.32, + "invoice": 67, + "date": "2013-12-12T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59560, + "pk": 61362, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-06T22:00:00Z", - "kind": "reservation" + "coreHours": 2.64, + "invoice": 67, + "date": "2013-12-12T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59561, + "pk": 61363, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-07T06:00:00Z", - "kind": "reservation" + "coreHours": 2.4, + "invoice": 67, + "date": "2013-12-12T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59562, + "pk": 61364, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-07T14:00:00Z", - "kind": "reservation" + "coreHours": 3.68, + "invoice": 67, + "date": "2013-12-13T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59563, + "pk": 61365, "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, + "updated": "2013-12-18T21:29:19.647Z", + "slice": 14, + "created": "2013-12-18T21:29:14.702Z", + "amount": 0.3024, + "object": 119, + "account": 14, "state": "invoiced", - "coreHours": 8.0, - "invoice": 62, - "date": "2013-12-07T22:00:00Z", - "kind": "reservation" + "coreHours": 4.32, + "invoice": 67, + "date": "2013-12-13T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59564, + "pk": 61366, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-08T06:00:00Z", - "kind": "reservation" + "coreHours": 4.0, + "invoice": 67, + "date": "2013-12-13T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59565, + "pk": 61367, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-08T14:00:00Z", - "kind": "reservation" + "coreHours": 3.2, + "invoice": 67, + "date": "2013-12-14T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59566, + "pk": 61368, "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, + "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": 8.0, - "invoice": 62, - "date": "2013-12-08T22:00:00Z", - "kind": "reservation" + "coreHours": 2.48, + "invoice": 67, + "date": "2013-12-14T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59567, + "pk": 61369, "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" + "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": 59568, + "pk": 61370, "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" + "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": 59569, + "pk": 61371, "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" + "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": 59570, + "pk": 61372, "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" + "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": 59571, + "pk": 61373, "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, + "updated": "2013-12-18T21:29:14.769Z", + "slice": 14, + "created": "2013-12-18T21:29:14.769Z", + "amount": 0.1288, + "object": 119, + "account": 14, "state": "pending", - "coreHours": 8.0, + "coreHours": 1.84, "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "reservation" + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59572, + "pk": 61374, "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, + "updated": "2013-12-18T21:29:14.777Z", + "slice": 14, + "created": "2013-12-18T21:29:14.777Z", + "amount": 0.3136, + "object": 119, + "account": 14, "state": "pending", - "coreHours": 8.0, + "coreHours": 4.48, "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "reservation" + "date": "2013-12-16T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59573, + "pk": 61375, "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, + "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": 8.0, + "coreHours": 2.08, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "reservation" + "date": "2013-12-16T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59574, + "pk": 61376, "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, + "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": 8.0, + "coreHours": 4.56, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "reservation" + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59575, + "pk": 61377, "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, + "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": 8.0, + "coreHours": 2.08, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "reservation" + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59576, + "pk": 61378, "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, + "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": 8.0, + "coreHours": 4.72, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "reservation" + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59577, + "pk": 61379, "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, + "updated": "2013-12-18T21:29:14.818Z", + "slice": 14, + "created": "2013-12-18T21:29:14.818Z", + "amount": 0.28, + "object": 119, + "account": 14, "state": "pending", - "coreHours": 8.0, + "coreHours": 4.0, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "reservation" + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59578, + "pk": 61380, "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, + "updated": "2013-12-18T21:29:14.827Z", + "slice": 14, + "created": "2013-12-18T21:29:14.827Z", + "amount": 0.2352, + "object": 119, + "account": 14, "state": "pending", - "coreHours": 8.0, + "coreHours": 3.36, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "reservation" + "date": "2013-12-18T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59579, + "pk": 61381, "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" + "updated": "2013-12-18T21:29:16.452Z", + "slice": 15, + "created": "2013-12-18T21:29:14.858Z", + "amount": 0.252, + "object": 120, + "account": 14, + "state": "invoiced", + "coreHours": 3.6, + "invoice": 64, + "date": "2013-11-18T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59580, + "pk": 61382, "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" + "updated": "2013-12-18T21:29:16.494Z", + "slice": 15, + "created": "2013-12-18T21:29:14.868Z", + "amount": 0.2688, + "object": 120, + "account": 14, + "state": "invoiced", + "coreHours": 3.84, + "invoice": 64, + "date": "2013-11-19T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59581, + "pk": 61383, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.051Z", + "updated": "2013-12-18T21:29:16.535Z", "slice": 15, - "created": "2013-12-13T22:19:53.467Z", - "amount": 0.14, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.876Z", + "amount": 0.1736, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.0, - "invoice": 54, - "date": "2013-11-13T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 64, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59582, + "pk": 61384, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.092Z", + "updated": "2013-12-18T21:29:16.576Z", "slice": 15, - "created": "2013-12-13T22:19:53.477Z", - "amount": 0.3024, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.885Z", + "amount": 0.2464, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.32, - "invoice": 54, - "date": "2013-11-14T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 64, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59583, + "pk": 61385, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.134Z", + "updated": "2013-12-18T21:29:16.618Z", "slice": 15, - "created": "2013-12-13T22:19:53.485Z", - "amount": 0.1512, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.893Z", + "amount": 0.196, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.16, - "invoice": 54, - "date": "2013-11-14T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 64, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59584, + "pk": 61386, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.175Z", + "updated": "2013-12-18T21:29:16.659Z", "slice": 15, - "created": "2013-12-13T22:19:53.493Z", - "amount": 0.2464, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.901Z", + "amount": 0.1232, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.52, - "invoice": 54, - "date": "2013-11-14T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.76, + "invoice": 64, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59585, + "pk": 61387, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.216Z", + "updated": "2013-12-18T21:29:16.700Z", "slice": 15, - "created": "2013-12-13T22:19:53.502Z", - "amount": 0.224, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.910Z", + "amount": 0.14, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.2, - "invoice": 54, - "date": "2013-11-15T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 64, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59586, + "pk": 61388, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.258Z", + "updated": "2013-12-18T21:29:16.742Z", "slice": 15, - "created": "2013-12-13T22:19:53.510Z", - "amount": 0.2464, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.918Z", + "amount": 0.1624, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.52, - "invoice": 54, - "date": "2013-11-15T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.32, + "invoice": 64, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59587, + "pk": 61389, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.299Z", + "updated": "2013-12-18T21:29:16.783Z", "slice": 15, - "created": "2013-12-13T22:19:53.518Z", - "amount": 0.336, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.926Z", + "amount": 0.196, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.8, - "invoice": 54, - "date": "2013-11-15T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 64, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59588, + "pk": 61390, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.341Z", + "updated": "2013-12-18T21:29:16.825Z", "slice": 15, - "created": "2013-12-13T22:19:53.527Z", - "amount": 0.308, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.934Z", + "amount": 0.196, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.4, - "invoice": 54, - "date": "2013-11-16T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 64, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59589, + "pk": 61391, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.382Z", + "updated": "2013-12-18T21:29:16.866Z", "slice": 15, - "created": "2013-12-13T22:19:53.535Z", - "amount": 0.2184, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.943Z", + "amount": 0.1792, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.12, - "invoice": 54, - "date": "2013-11-16T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 64, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59590, + "pk": 61392, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.423Z", + "updated": "2013-12-18T21:29:16.908Z", "slice": 15, - "created": "2013-12-13T22:19:53.543Z", - "amount": 0.2352, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.951Z", + "amount": 0.168, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.36, - "invoice": 54, - "date": "2013-11-16T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.4, + "invoice": 64, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59591, + "pk": 61393, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.465Z", + "updated": "2013-12-18T21:29:16.949Z", "slice": 15, - "created": "2013-12-13T22:19:53.551Z", - "amount": 0.2072, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.959Z", + "amount": 0.1624, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.96, - "invoice": 54, - "date": "2013-11-17T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.32, + "invoice": 64, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59592, + "pk": 61394, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.506Z", + "updated": "2013-12-18T21:29:16.990Z", "slice": 15, - "created": "2013-12-13T22:19:53.560Z", - "amount": 0.2128, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.968Z", + "amount": 0.2968, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.04, - "invoice": 54, - "date": "2013-11-17T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 64, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59593, + "pk": 61395, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.548Z", + "updated": "2013-12-18T21:29:17.032Z", "slice": 15, - "created": "2013-12-13T22:19:53.568Z", - "amount": 0.252, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.976Z", + "amount": 0.3136, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.6, - "invoice": 54, - "date": "2013-11-17T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 64, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59594, + "pk": 61396, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.622Z", + "updated": "2013-12-18T21:29:17.073Z", "slice": 15, - "created": "2013-12-13T22:19:53.576Z", - "amount": 0.1792, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:14.984Z", + "amount": 0.2576, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.56, - "invoice": 55, - "date": "2013-11-18T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 64, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59595, + "pk": 61397, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.664Z", + "updated": "2013-12-18T21:29:17.115Z", "slice": 15, - "created": "2013-12-13T22:19:53.584Z", + "created": "2013-12-18T21:29:14.992Z", "amount": 0.196, - "object": 102, - "account": 12, + "object": 120, + "account": 14, "state": "invoiced", "coreHours": 2.8, - "invoice": 55, - "date": "2013-11-18T14:00:00Z", - "kind": "besteffort" + "invoice": 64, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59596, + "pk": 61398, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.705Z", + "updated": "2013-12-18T21:29:17.156Z", "slice": 15, - "created": "2013-12-13T22:19:53.593Z", - "amount": 0.2632, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.001Z", + "amount": 0.2912, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.76, - "invoice": 55, - "date": "2013-11-18T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 64, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59597, + "pk": 61399, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.747Z", + "updated": "2013-12-18T21:29:17.198Z", "slice": 15, - "created": "2013-12-13T22:19:53.601Z", - "amount": 0.1344, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.009Z", + "amount": 0.2352, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.92, - "invoice": 55, - "date": "2013-11-19T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.36, + "invoice": 64, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59598, + "pk": 61400, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.788Z", + "updated": "2013-12-18T21:29:17.264Z", "slice": 15, - "created": "2013-12-13T22:19:53.609Z", - "amount": 0.3192, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.017Z", + "amount": 0.1176, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.56, - "invoice": 55, - "date": "2013-11-19T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 65, + "date": "2013-11-25T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59599, + "pk": 61401, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.830Z", + "updated": "2013-12-18T21:29:17.328Z", "slice": 15, - "created": "2013-12-13T22:19:53.618Z", - "amount": 0.1176, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.025Z", + "amount": 0.3024, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.68, - "invoice": 55, - "date": "2013-11-19T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 65, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59600, + "pk": 61402, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.871Z", + "updated": "2013-12-18T21:29:17.369Z", "slice": 15, - "created": "2013-12-13T22:19:53.626Z", - "amount": 0.2464, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.034Z", + "amount": 0.3136, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.52, - "invoice": 55, - "date": "2013-11-20T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 65, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59601, + "pk": 61403, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.912Z", + "updated": "2013-12-18T21:29:17.410Z", "slice": 15, - "created": "2013-12-13T22:19:53.634Z", - "amount": 0.336, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.042Z", + "amount": 0.2744, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.8, - "invoice": 55, - "date": "2013-11-20T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 65, + "date": "2013-11-26T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59602, + "pk": 61404, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.954Z", + "updated": "2013-12-18T21:29:17.452Z", "slice": 15, - "created": "2013-12-13T22:19:53.642Z", - "amount": 0.3248, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.050Z", + "amount": 0.336, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.64, - "invoice": 55, - "date": "2013-11-20T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.8, + "invoice": 65, + "date": "2013-11-26T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59603, + "pk": 61405, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.995Z", + "updated": "2013-12-18T21:29:17.493Z", "slice": 15, - "created": "2013-12-13T22:19:53.651Z", - "amount": 0.2856, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.059Z", + "amount": 0.2184, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.08, - "invoice": 55, - "date": "2013-11-21T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 65, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59604, + "pk": 61406, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.036Z", + "updated": "2013-12-18T21:29:17.609Z", "slice": 15, - "created": "2013-12-13T22:19:53.659Z", - "amount": 0.2296, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.067Z", + "amount": 0.1176, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.28, - "invoice": 55, - "date": "2013-11-21T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 65, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59605, + "pk": 61407, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.078Z", + "updated": "2013-12-18T21:29:17.651Z", "slice": 15, - "created": "2013-12-13T22:19:53.667Z", - "amount": 0.2128, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.075Z", + "amount": 0.196, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.04, - "invoice": 55, - "date": "2013-11-21T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 65, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59606, + "pk": 61408, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.119Z", + "updated": "2013-12-18T21:29:17.692Z", "slice": 15, - "created": "2013-12-13T22:19:53.676Z", - "amount": 0.252, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.084Z", + "amount": 0.1512, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.6, - "invoice": 55, - "date": "2013-11-22T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.16, + "invoice": 65, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59607, + "pk": 61409, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.161Z", + "updated": "2013-12-18T21:29:17.733Z", "slice": 15, - "created": "2013-12-13T22:19:53.684Z", - "amount": 0.1904, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.092Z", + "amount": 0.196, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.72, - "invoice": 55, - "date": "2013-11-22T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 65, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59608, + "pk": 61410, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.202Z", + "updated": "2013-12-18T21:29:17.775Z", "slice": 15, - "created": "2013-12-13T22:19:53.692Z", - "amount": 0.1736, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.100Z", + "amount": 0.2128, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.48, - "invoice": 55, - "date": "2013-11-22T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 65, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59609, + "pk": 61411, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.244Z", + "updated": "2013-12-18T21:29:17.816Z", "slice": 15, - "created": "2013-12-13T22:19:53.700Z", - "amount": 0.2912, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.108Z", + "amount": 0.3192, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.16, - "invoice": 55, - "date": "2013-11-23T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.56, + "invoice": 65, + "date": "2013-11-28T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59610, + "pk": 61412, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.285Z", + "updated": "2013-12-18T21:29:17.858Z", "slice": 15, - "created": "2013-12-13T22:19:53.709Z", - "amount": 0.14, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.117Z", + "amount": 0.224, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.0, - "invoice": 55, - "date": "2013-11-23T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.2, + "invoice": 65, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59611, + "pk": 61413, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.327Z", + "updated": "2013-12-18T21:29:17.899Z", "slice": 15, - "created": "2013-12-13T22:19:53.717Z", - "amount": 0.3304, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.125Z", + "amount": 0.1624, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.72, - "invoice": 55, - "date": "2013-11-23T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.32, + "invoice": 65, + "date": "2013-11-29T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59612, + "pk": 61414, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.368Z", + "updated": "2013-12-18T21:29:17.940Z", "slice": 15, - "created": "2013-12-13T22:19:53.725Z", - "amount": 0.1344, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.133Z", + "amount": 0.336, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.92, - "invoice": 55, - "date": "2013-11-24T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.8, + "invoice": 65, + "date": "2013-11-29T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59613, + "pk": 61415, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.409Z", + "updated": "2013-12-18T21:29:17.982Z", "slice": 15, - "created": "2013-12-13T22:19:53.734Z", - "amount": 0.2352, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.142Z", + "amount": 0.1288, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.36, - "invoice": 55, - "date": "2013-11-24T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 65, + "date": "2013-11-30T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59614, + "pk": 61416, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.451Z", + "updated": "2013-12-18T21:29:18.023Z", "slice": 15, - "created": "2013-12-13T22:19:53.742Z", - "amount": 0.2352, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.150Z", + "amount": 0.2016, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.36, - "invoice": 55, - "date": "2013-11-24T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.88, + "invoice": 65, + "date": "2013-11-30T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59615, + "pk": 61417, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.500Z", + "updated": "2013-12-18T21:29:18.065Z", "slice": 15, - "created": "2013-12-13T22:19:53.750Z", - "amount": 0.2856, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.158Z", + "amount": 0.2296, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.08, - "invoice": 56, - "date": "2013-11-25T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 65, + "date": "2013-11-30T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59616, + "pk": 61418, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.542Z", + "updated": "2013-12-18T21:29:18.106Z", "slice": 15, - "created": "2013-12-13T22:19:53.758Z", - "amount": 0.1176, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.166Z", + "amount": 0.1568, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.68, - "invoice": 56, - "date": "2013-11-25T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 65, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59617, + "pk": 61419, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.583Z", + "updated": "2013-12-18T21:29:18.148Z", "slice": 15, - "created": "2013-12-13T22:19:53.767Z", - "amount": 0.3304, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.175Z", + "amount": 0.2912, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.72, - "invoice": 56, - "date": "2013-11-25T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 65, + "date": "2013-12-01T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59618, + "pk": 61420, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.625Z", + "updated": "2013-12-18T21:29:18.189Z", "slice": 15, - "created": "2013-12-13T22:19:53.775Z", - "amount": 0.1288, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.183Z", + "amount": 0.1176, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.84, - "invoice": 56, - "date": "2013-11-26T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 65, + "date": "2013-12-01T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59619, + "pk": 61421, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.668Z", + "updated": "2013-12-18T21:29:18.239Z", "slice": 15, - "created": "2013-12-13T22:19:53.783Z", - "amount": 0.1904, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.191Z", + "amount": 0.14, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.72, - "invoice": 56, - "date": "2013-11-26T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 66, + "date": "2013-12-02T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59620, + "pk": 61422, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.709Z", + "updated": "2013-12-18T21:29:18.280Z", "slice": 15, - "created": "2013-12-13T22:19:53.792Z", - "amount": 0.2184, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.200Z", + "amount": 0.1456, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.12, - "invoice": 56, - "date": "2013-11-26T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 66, + "date": "2013-12-02T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59621, + "pk": 61423, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.751Z", + "updated": "2013-12-18T21:29:18.321Z", "slice": 15, - "created": "2013-12-13T22:19:53.800Z", - "amount": 0.2016, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.208Z", + "amount": 0.1848, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.88, - "invoice": 56, - "date": "2013-11-27T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 66, + "date": "2013-12-02T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59622, + "pk": 61424, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.792Z", + "updated": "2013-12-18T21:29:18.363Z", "slice": 15, - "created": "2013-12-13T22:19:53.808Z", - "amount": 0.2856, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.216Z", + "amount": 0.2688, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.08, - "invoice": 56, - "date": "2013-11-27T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.84, + "invoice": 66, + "date": "2013-12-03T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59623, + "pk": 61425, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.833Z", + "updated": "2013-12-18T21:29:18.404Z", "slice": 15, - "created": "2013-12-13T22:19:53.816Z", - "amount": 0.3024, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.224Z", + "amount": 0.252, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.32, - "invoice": 56, - "date": "2013-11-27T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 66, + "date": "2013-12-03T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59624, + "pk": 61426, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.875Z", + "updated": "2013-12-18T21:29:18.446Z", "slice": 15, - "created": "2013-12-13T22:19:53.825Z", - "amount": 0.1232, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.233Z", + "amount": 0.3304, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.76, - "invoice": 56, - "date": "2013-11-28T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 66, + "date": "2013-12-03T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59625, + "pk": 61427, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.916Z", + "updated": "2013-12-18T21:29:18.487Z", "slice": 15, - "created": "2013-12-13T22:19:53.833Z", - "amount": 0.252, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.241Z", + "amount": 0.2968, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.6, - "invoice": 56, - "date": "2013-11-28T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 66, + "date": "2013-12-04T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59626, + "pk": 61428, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.958Z", + "updated": "2013-12-18T21:29:18.529Z", "slice": 15, - "created": "2013-12-13T22:19:53.841Z", - "amount": 0.224, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.249Z", + "amount": 0.2072, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.2, - "invoice": 56, - "date": "2013-11-28T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 66, + "date": "2013-12-04T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59627, + "pk": 61429, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.999Z", + "updated": "2013-12-18T21:29:18.570Z", "slice": 15, - "created": "2013-12-13T22:19:53.850Z", - "amount": 0.336, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.258Z", + "amount": 0.2408, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.8, - "invoice": 56, - "date": "2013-11-29T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 66, + "date": "2013-12-04T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59628, + "pk": 61430, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.041Z", + "updated": "2013-12-18T21:29:18.611Z", "slice": 15, - "created": "2013-12-13T22:19:53.858Z", - "amount": 0.336, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.266Z", + "amount": 0.196, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.8, - "invoice": 56, - "date": "2013-11-29T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 66, + "date": "2013-12-05T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59629, + "pk": 61431, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.082Z", + "updated": "2013-12-18T21:29:18.653Z", "slice": 15, - "created": "2013-12-13T22:19:53.866Z", - "amount": 0.1512, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.274Z", + "amount": 0.1568, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.16, - "invoice": 56, - "date": "2013-11-29T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 66, + "date": "2013-12-05T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59630, + "pk": 61432, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.115Z", + "updated": "2013-12-18T21:29:18.694Z", "slice": 15, - "created": "2013-12-13T22:19:53.874Z", - "amount": 0.112, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.282Z", + "amount": 0.1792, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.6, - "invoice": 56, - "date": "2013-11-30T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 66, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59631, + "pk": 61433, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.156Z", + "updated": "2013-12-18T21:29:18.736Z", "slice": 15, - "created": "2013-12-13T22:19:53.883Z", - "amount": 0.3304, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.291Z", + "amount": 0.14, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.72, - "invoice": 56, - "date": "2013-11-30T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 66, + "date": "2013-12-06T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59632, + "pk": 61434, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.198Z", + "updated": "2013-12-18T21:29:18.777Z", "slice": 15, - "created": "2013-12-13T22:19:53.891Z", - "amount": 0.112, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.299Z", + "amount": 0.1904, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.6, - "invoice": 56, - "date": "2013-11-30T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.72, + "invoice": 66, + "date": "2013-12-06T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59633, + "pk": 61435, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.239Z", + "updated": "2013-12-18T21:29:18.819Z", "slice": 15, - "created": "2013-12-13T22:19:53.899Z", - "amount": 0.14, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.307Z", + "amount": 0.1568, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.0, - "invoice": 56, - "date": "2013-12-01T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 66, + "date": "2013-12-06T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59634, + "pk": 61436, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.281Z", + "updated": "2013-12-18T21:29:18.860Z", "slice": 15, - "created": "2013-12-13T22:19:53.908Z", - "amount": 0.2912, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.315Z", + "amount": 0.196, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.16, - "invoice": 56, - "date": "2013-12-01T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 66, + "date": "2013-12-07T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59635, + "pk": 61437, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.322Z", + "updated": "2013-12-18T21:29:18.901Z", "slice": 15, - "created": "2013-12-13T22:19:53.916Z", - "amount": 0.2072, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.324Z", + "amount": 0.1624, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.96, - "invoice": 56, - "date": "2013-12-01T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.32, + "invoice": 66, + "date": "2013-12-07T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59636, + "pk": 61438, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.372Z", + "updated": "2013-12-18T21:29:18.943Z", "slice": 15, - "created": "2013-12-13T22:19:53.924Z", - "amount": 0.2688, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.332Z", + "amount": 0.2912, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.84, - "invoice": 57, - "date": "2013-12-02T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 66, + "date": "2013-12-07T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59637, + "pk": 61439, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.413Z", + "updated": "2013-12-18T21:29:18.984Z", "slice": 15, - "created": "2013-12-13T22:19:53.932Z", - "amount": 0.196, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.340Z", + "amount": 0.2352, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.8, - "invoice": 57, - "date": "2013-12-02T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.36, + "invoice": 66, + "date": "2013-12-08T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59638, + "pk": 61440, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.455Z", + "updated": "2013-12-18T21:29:19.026Z", "slice": 15, - "created": "2013-12-13T22:19:53.941Z", - "amount": 0.1232, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.348Z", + "amount": 0.1736, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.76, - "invoice": 57, - "date": "2013-12-02T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 66, + "date": "2013-12-08T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59639, + "pk": 61441, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.496Z", + "updated": "2013-12-18T21:29:19.067Z", "slice": 15, - "created": "2013-12-13T22:19:53.949Z", - "amount": 0.308, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.357Z", + "amount": 0.336, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.4, - "invoice": 57, - "date": "2013-12-03T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.8, + "invoice": 66, + "date": "2013-12-08T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59640, + "pk": 61442, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.538Z", + "updated": "2013-12-18T21:29:19.117Z", "slice": 15, - "created": "2013-12-13T22:19:53.957Z", - "amount": 0.2688, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.365Z", + "amount": 0.3136, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.84, - "invoice": 57, - "date": "2013-12-03T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 67, + "date": "2013-12-09T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59641, + "pk": 61443, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.579Z", + "updated": "2013-12-18T21:29:19.158Z", "slice": 15, - "created": "2013-12-13T22:19:53.966Z", - "amount": 0.112, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.373Z", + "amount": 0.2744, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.6, - "invoice": 57, - "date": "2013-12-03T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 67, + "date": "2013-12-09T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59642, + "pk": 61444, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.620Z", + "updated": "2013-12-18T21:29:19.200Z", "slice": 15, - "created": "2013-12-13T22:19:53.974Z", - "amount": 0.28, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.382Z", + "amount": 0.1176, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.0, - "invoice": 57, - "date": "2013-12-04T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.68, + "invoice": 67, + "date": "2013-12-09T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59643, + "pk": 61445, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.662Z", + "updated": "2013-12-18T21:29:19.241Z", "slice": 15, - "created": "2013-12-13T22:19:53.982Z", - "amount": 0.3024, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.390Z", + "amount": 0.1456, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.32, - "invoice": 57, - "date": "2013-12-04T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 67, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59644, + "pk": 61446, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.703Z", + "updated": "2013-12-18T21:29:19.283Z", "slice": 15, - "created": "2013-12-13T22:19:53.990Z", - "amount": 0.1512, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.398Z", + "amount": 0.1344, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.16, - "invoice": 57, - "date": "2013-12-04T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.92, + "invoice": 67, + "date": "2013-12-10T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59645, + "pk": 61447, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.745Z", + "updated": "2013-12-18T21:29:19.324Z", "slice": 15, - "created": "2013-12-13T22:19:53.999Z", - "amount": 0.14, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.407Z", + "amount": 0.1456, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.0, - "invoice": 57, - "date": "2013-12-05T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 67, + "date": "2013-12-10T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59646, + "pk": 61448, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.786Z", + "updated": "2013-12-18T21:29:19.365Z", "slice": 15, - "created": "2013-12-13T22:19:54.007Z", - "amount": 0.14, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.415Z", + "amount": 0.112, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.0, - "invoice": 57, - "date": "2013-12-05T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 67, + "date": "2013-12-11T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59647, + "pk": 61449, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.828Z", + "updated": "2013-12-18T21:29:19.407Z", "slice": 15, - "created": "2013-12-13T22:19:54.015Z", + "created": "2013-12-18T21:29:15.423Z", "amount": 0.14, - "object": 102, - "account": 12, + "object": 120, + "account": 14, "state": "invoiced", "coreHours": 2.0, - "invoice": 57, - "date": "2013-12-05T22:00:00Z", - "kind": "besteffort" + "invoice": 67, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59648, + "pk": 61450, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.869Z", + "updated": "2013-12-18T21:29:19.448Z", "slice": 15, - "created": "2013-12-13T22:19:54.024Z", - "amount": 0.2632, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.431Z", + "amount": 0.2744, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.76, - "invoice": 57, - "date": "2013-12-06T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 67, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59649, + "pk": 61451, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.910Z", + "updated": "2013-12-18T21:29:19.490Z", "slice": 15, - "created": "2013-12-13T22:19:54.032Z", - "amount": 0.2632, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.440Z", + "amount": 0.2408, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.76, - "invoice": 57, - "date": "2013-12-06T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 67, + "date": "2013-12-12T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59650, + "pk": 61452, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.952Z", + "updated": "2013-12-18T21:29:19.531Z", "slice": 15, - "created": "2013-12-13T22:19:54.040Z", - "amount": 0.2856, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.448Z", + "amount": 0.1848, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 4.08, - "invoice": 57, - "date": "2013-12-06T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 67, + "date": "2013-12-12T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59651, + "pk": 61453, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.993Z", + "updated": "2013-12-18T21:29:19.572Z", "slice": 15, - "created": "2013-12-13T22:19:54.048Z", - "amount": 0.2744, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.456Z", + "amount": 0.308, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.92, - "invoice": 57, - "date": "2013-12-07T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 67, + "date": "2013-12-12T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59652, + "pk": 61454, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.035Z", + "updated": "2013-12-18T21:29:19.614Z", "slice": 15, - "created": "2013-12-13T22:19:54.057Z", - "amount": 0.2632, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.464Z", + "amount": 0.1568, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 3.76, - "invoice": 57, - "date": "2013-12-07T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 67, + "date": "2013-12-13T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59653, + "pk": 61455, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.076Z", + "updated": "2013-12-18T21:29:19.655Z", "slice": 15, - "created": "2013-12-13T22:19:54.065Z", - "amount": 0.1176, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.473Z", + "amount": 0.14, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.68, - "invoice": 57, - "date": "2013-12-07T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 67, + "date": "2013-12-13T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59654, + "pk": 61456, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.117Z", + "updated": "2013-12-18T21:29:19.697Z", "slice": 15, - "created": "2013-12-13T22:19:54.073Z", - "amount": 0.1792, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.481Z", + "amount": 0.1568, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.56, - "invoice": 57, - "date": "2013-12-08T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 67, + "date": "2013-12-13T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59655, + "pk": 61457, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.159Z", + "updated": "2013-12-18T21:29:19.738Z", "slice": 15, - "created": "2013-12-13T22:19:54.081Z", - "amount": 0.1456, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.489Z", + "amount": 0.336, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 2.08, - "invoice": 57, - "date": "2013-12-08T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.8, + "invoice": 67, + "date": "2013-12-14T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59656, + "pk": 61458, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.200Z", + "updated": "2013-12-18T21:29:19.779Z", "slice": 15, - "created": "2013-12-13T22:19:54.090Z", - "amount": 0.1176, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.498Z", + "amount": 0.2072, + "object": 120, + "account": 14, "state": "invoiced", - "coreHours": 1.68, - "invoice": 57, - "date": "2013-12-08T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 67, + "date": "2013-12-14T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59657, + "pk": 61459, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.098Z", + "updated": "2013-12-18T21:29:19.829Z", "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" + "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": 59658, + "pk": 61460, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.106Z", + "updated": "2013-12-18T21:29:19.871Z", "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" + "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": 59659, + "pk": 61461, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.115Z", + "updated": "2013-12-18T21:29:19.912Z", "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" + "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": 59660, + "pk": 61462, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.123Z", + "updated": "2013-12-18T21:29:19.953Z", "slice": 15, - "created": "2013-12-13T22:19:54.123Z", - "amount": 0.3024, - "object": 102, - "account": 12, - "state": "pending", - "coreHours": 4.32, - "invoice": null, - "date": "2013-12-10T06:00:00Z", - "kind": "besteffort" + "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": 59661, + "pk": 61463, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.131Z", + "updated": "2013-12-18T21:29:15.541Z", "slice": 15, - "created": "2013-12-13T22:19:54.131Z", + "created": "2013-12-18T21:29:15.541Z", "amount": 0.3192, - "object": 102, - "account": 12, + "object": 120, + "account": 14, "state": "pending", "coreHours": 4.56, "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59662, + "pk": 61464, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.140Z", + "updated": "2013-12-18T21:29:15.549Z", "slice": 15, - "created": "2013-12-13T22:19:54.139Z", - "amount": 0.336, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.549Z", + "amount": 0.3136, + "object": 120, + "account": 14, "state": "pending", - "coreHours": 4.8, + "coreHours": 4.48, "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59663, + "pk": 61465, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.148Z", + "updated": "2013-12-18T21:29:15.557Z", "slice": 15, - "created": "2013-12-13T22:19:54.148Z", - "amount": 0.3024, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.557Z", + "amount": 0.1456, + "object": 120, + "account": 14, "state": "pending", - "coreHours": 4.32, + "coreHours": 2.08, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59664, + "pk": 61466, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.156Z", + "updated": "2013-12-18T21:29:15.566Z", "slice": 15, - "created": "2013-12-13T22:19:54.156Z", - "amount": 0.2128, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.566Z", + "amount": 0.28, + "object": 120, + "account": 14, "state": "pending", - "coreHours": 3.04, + "coreHours": 4.0, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59665, + "pk": 61467, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.164Z", + "updated": "2013-12-18T21:29:15.574Z", "slice": 15, - "created": "2013-12-13T22:19:54.164Z", - "amount": 0.2296, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.574Z", + "amount": 0.2072, + "object": 120, + "account": 14, "state": "pending", - "coreHours": 3.28, + "coreHours": 2.96, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59666, + "pk": 61468, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.173Z", + "updated": "2013-12-18T21:29:15.582Z", "slice": 15, - "created": "2013-12-13T22:19:54.173Z", - "amount": 0.1288, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.582Z", + "amount": 0.2352, + "object": 120, + "account": 14, "state": "pending", - "coreHours": 1.84, + "coreHours": 3.36, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59667, + "pk": 61469, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.181Z", + "updated": "2013-12-18T21:29:15.591Z", "slice": 15, - "created": "2013-12-13T22:19:54.181Z", - "amount": 0.2912, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.590Z", + "amount": 0.336, + "object": 120, + "account": 14, "state": "pending", - "coreHours": 4.16, + "coreHours": 4.8, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59668, + "pk": 61470, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.189Z", + "updated": "2013-12-18T21:29:15.599Z", "slice": 15, - "created": "2013-12-13T22:19:54.189Z", - "amount": 0.224, - "object": 102, - "account": 12, + "created": "2013-12-18T21:29:15.599Z", + "amount": 0.1232, + "object": 120, + "account": 14, "state": "pending", - "coreHours": 3.2, + "coreHours": 1.76, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59669, + "pk": 61471, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.197Z", + "updated": "2013-12-18T21:29:16.460Z", "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" + "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": 59670, + "pk": 61472, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.206Z", + "updated": "2013-12-18T21:29:16.502Z", "slice": 15, - "created": "2013-12-13T22:19:54.206Z", - "amount": 0.3136, - "object": 102, - "account": 12, - "state": "pending", - "coreHours": 4.48, - "invoice": null, - "date": "2013-12-13T14:00:00Z", - "kind": "besteffort" + "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": 59671, + "pk": 61473, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.034Z", + "updated": "2013-12-18T21:29:16.543Z", "slice": 15, - "created": "2013-12-13T22:19:54.221Z", - "amount": 0.1176, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.632Z", + "amount": 0.1456, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 1.68, - "invoice": 53, - "date": "2013-11-13T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 64, + "date": "2013-11-19T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59672, + "pk": 61474, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.084Z", + "updated": "2013-12-18T21:29:16.585Z", "slice": 15, - "created": "2013-12-13T22:19:54.231Z", - "amount": 0.2968, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.640Z", + "amount": 0.2184, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.24, - "invoice": 54, - "date": "2013-11-14T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 64, + "date": "2013-11-19T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59673, + "pk": 61475, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.125Z", + "updated": "2013-12-18T21:29:16.626Z", "slice": 15, - "created": "2013-12-13T22:19:54.239Z", - "amount": 0.2016, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.649Z", + "amount": 0.252, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.88, - "invoice": 54, - "date": "2013-11-14T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 64, + "date": "2013-11-20T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59674, + "pk": 61476, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.167Z", + "updated": "2013-12-18T21:29:16.667Z", "slice": 15, - "created": "2013-12-13T22:19:54.247Z", - "amount": 0.224, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.657Z", + "amount": 0.2352, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.2, - "invoice": 54, - "date": "2013-11-14T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.36, + "invoice": 64, + "date": "2013-11-20T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59675, + "pk": 61477, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.208Z", + "updated": "2013-12-18T21:29:16.709Z", "slice": 15, - "created": "2013-12-13T22:19:54.255Z", - "amount": 0.308, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.665Z", + "amount": 0.2408, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.4, - "invoice": 54, - "date": "2013-11-15T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 64, + "date": "2013-11-20T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59676, + "pk": 61478, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.250Z", + "updated": "2013-12-18T21:29:16.750Z", "slice": 15, - "created": "2013-12-13T22:19:54.264Z", - "amount": 0.1288, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.673Z", + "amount": 0.168, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 1.84, - "invoice": 54, - "date": "2013-11-15T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.4, + "invoice": 64, + "date": "2013-11-21T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59677, + "pk": 61479, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.291Z", + "updated": "2013-12-18T21:29:16.792Z", "slice": 15, - "created": "2013-12-13T22:19:54.272Z", - "amount": 0.112, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.682Z", + "amount": 0.1904, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 1.6, - "invoice": 54, - "date": "2013-11-15T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.72, + "invoice": 64, + "date": "2013-11-21T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59678, + "pk": 61480, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.332Z", + "updated": "2013-12-18T21:29:16.833Z", "slice": 15, - "created": "2013-12-13T22:19:54.280Z", - "amount": 0.1568, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.690Z", + "amount": 0.14, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.24, - "invoice": 54, - "date": "2013-11-16T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.0, + "invoice": 64, + "date": "2013-11-21T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59679, + "pk": 61481, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.374Z", + "updated": "2013-12-18T21:29:16.874Z", "slice": 15, - "created": "2013-12-13T22:19:54.289Z", - "amount": 0.1848, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.698Z", + "amount": 0.3248, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.64, - "invoice": 54, - "date": "2013-11-16T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.64, + "invoice": 64, + "date": "2013-11-22T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59680, + "pk": 61482, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.415Z", + "updated": "2013-12-18T21:29:16.916Z", "slice": 15, - "created": "2013-12-13T22:19:54.297Z", - "amount": 0.2912, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.707Z", + "amount": 0.2072, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.16, - "invoice": 54, - "date": "2013-11-16T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 64, + "date": "2013-11-22T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59681, + "pk": 61483, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.457Z", + "updated": "2013-12-18T21:29:16.957Z", "slice": 15, - "created": "2013-12-13T22:19:54.305Z", - "amount": 0.2128, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.715Z", + "amount": 0.1736, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.04, - "invoice": 54, - "date": "2013-11-17T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 64, + "date": "2013-11-22T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59682, + "pk": 61484, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.498Z", + "updated": "2013-12-18T21:29:16.999Z", "slice": 15, - "created": "2013-12-13T22:19:54.314Z", - "amount": 0.1624, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.723Z", + "amount": 0.1904, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.32, - "invoice": 54, - "date": "2013-11-17T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.72, + "invoice": 64, + "date": "2013-11-23T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59683, + "pk": 61485, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.539Z", + "updated": "2013-12-18T21:29:17.040Z", "slice": 15, - "created": "2013-12-13T22:19:54.322Z", - "amount": 0.2352, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.731Z", + "amount": 0.2744, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.36, - "invoice": 54, - "date": "2013-11-17T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 64, + "date": "2013-11-23T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59684, + "pk": 61486, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.614Z", + "updated": "2013-12-18T21:29:17.081Z", "slice": 15, - "created": "2013-12-13T22:19:54.330Z", - "amount": 0.1512, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.740Z", + "amount": 0.2184, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.16, - "invoice": 55, - "date": "2013-11-18T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 64, + "date": "2013-11-23T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59685, + "pk": 61487, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.655Z", + "updated": "2013-12-18T21:29:17.123Z", "slice": 15, - "created": "2013-12-13T22:19:54.339Z", - "amount": 0.112, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.748Z", + "amount": 0.2912, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 1.6, - "invoice": 55, - "date": "2013-11-18T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 64, + "date": "2013-11-24T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59686, + "pk": 61488, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.697Z", + "updated": "2013-12-18T21:29:17.164Z", "slice": 15, - "created": "2013-12-13T22:19:54.347Z", - "amount": 0.3024, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.756Z", + "amount": 0.3136, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.32, - "invoice": 55, - "date": "2013-11-18T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 64, + "date": "2013-11-24T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59687, + "pk": 61489, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.738Z", + "updated": "2013-12-18T21:29:17.206Z", "slice": 15, - "created": "2013-12-13T22:19:54.355Z", - "amount": 0.2744, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.765Z", + "amount": 0.168, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.92, - "invoice": 55, - "date": "2013-11-19T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.4, + "invoice": 64, + "date": "2013-11-24T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59688, + "pk": 61490, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.780Z", + "updated": "2013-12-18T21:29:17.278Z", "slice": 15, - "created": "2013-12-13T22:19:54.363Z", - "amount": 0.196, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.773Z", + "amount": 0.224, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.8, - "invoice": 55, - "date": "2013-11-19T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.2, + "invoice": 65, + "date": "2013-11-25T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59689, + "pk": 61491, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.821Z", + "updated": "2013-12-18T21:29:17.336Z", "slice": 15, - "created": "2013-12-13T22:19:54.371Z", + "created": "2013-12-18T21:29:15.781Z", "amount": 0.2856, - "object": 103, - "account": 12, + "object": 121, + "account": 14, "state": "invoiced", "coreHours": 4.08, - "invoice": 55, - "date": "2013-11-19T22:00:00Z", - "kind": "besteffort" + "invoice": 65, + "date": "2013-11-25T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59690, + "pk": 61492, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.863Z", + "updated": "2013-12-18T21:29:17.377Z", "slice": 15, - "created": "2013-12-13T22:19:54.380Z", - "amount": 0.28, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.789Z", + "amount": 0.336, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.0, - "invoice": 55, - "date": "2013-11-20T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.8, + "invoice": 65, + "date": "2013-11-25T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59691, + "pk": 61493, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.904Z", + "updated": "2013-12-18T21:29:17.419Z", "slice": 15, - "created": "2013-12-13T22:19:54.388Z", - "amount": 0.2576, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.798Z", + "amount": 0.1736, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.68, - "invoice": 55, - "date": "2013-11-20T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.48, + "invoice": 65, + "date": "2013-11-26T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59692, + "pk": 61494, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.945Z", + "updated": "2013-12-18T21:29:17.460Z", "slice": 15, - "created": "2013-12-13T22:19:54.396Z", - "amount": 0.112, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.806Z", + "amount": 0.1792, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 1.6, - "invoice": 55, - "date": "2013-11-20T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 65, + "date": "2013-11-26T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59693, + "pk": 61495, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:55.987Z", + "updated": "2013-12-18T21:29:17.501Z", "slice": 15, - "created": "2013-12-13T22:19:54.405Z", - "amount": 0.3248, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.814Z", + "amount": 0.1288, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.64, - "invoice": 55, - "date": "2013-11-21T06:00:00Z", - "kind": "besteffort" + "coreHours": 1.84, + "invoice": 65, + "date": "2013-11-26T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59694, + "pk": 61496, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.028Z", + "updated": "2013-12-18T21:29:17.618Z", "slice": 15, - "created": "2013-12-13T22:19:54.413Z", - "amount": 0.2352, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.822Z", + "amount": 0.2744, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.36, - "invoice": 55, - "date": "2013-11-21T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.92, + "invoice": 65, + "date": "2013-11-27T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59695, + "pk": 61497, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.070Z", + "updated": "2013-12-18T21:29:17.659Z", "slice": 15, - "created": "2013-12-13T22:19:54.421Z", - "amount": 0.1904, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.831Z", + "amount": 0.196, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.72, - "invoice": 55, - "date": "2013-11-21T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 65, + "date": "2013-11-27T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59696, + "pk": 61498, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.111Z", + "updated": "2013-12-18T21:29:17.700Z", "slice": 15, - "created": "2013-12-13T22:19:54.429Z", - "amount": 0.2408, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.839Z", + "amount": 0.2296, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.44, - "invoice": 55, - "date": "2013-11-22T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 65, + "date": "2013-11-27T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59697, + "pk": 61499, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.153Z", + "updated": "2013-12-18T21:29:17.742Z", "slice": 15, - "created": "2013-12-13T22:19:54.438Z", + "created": "2013-12-18T21:29:15.847Z", "amount": 0.1288, - "object": 103, - "account": 12, + "object": 121, + "account": 14, "state": "invoiced", "coreHours": 1.84, - "invoice": 55, - "date": "2013-11-22T14:00:00Z", - "kind": "besteffort" + "invoice": 65, + "date": "2013-11-28T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59698, + "pk": 61500, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.194Z", + "updated": "2013-12-18T21:29:17.783Z", "slice": 15, - "created": "2013-12-13T22:19:54.446Z", - "amount": 0.2968, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.856Z", + "amount": 0.2912, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.24, - "invoice": 55, - "date": "2013-11-22T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 65, + "date": "2013-11-28T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59699, + "pk": 61501, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.235Z", + "updated": "2013-12-18T21:29:17.824Z", "slice": 15, - "created": "2013-12-13T22:19:54.454Z", + "created": "2013-12-18T21:29:15.864Z", "amount": 0.2464, - "object": 103, - "account": 12, + "object": 121, + "account": 14, "state": "invoiced", "coreHours": 3.52, - "invoice": 55, - "date": "2013-11-23T06:00:00Z", - "kind": "besteffort" - } -}, -{ - "pk": 59700, - "model": "core.charge", - "fields": { - "updated": "2013-12-13T22:19:56.277Z", - "slice": 15, - "created": "2013-12-13T22:19:54.463Z", - "amount": 0.196, - "object": 103, - "account": 12, - "state": "invoiced", - "coreHours": 2.8, - "invoice": 55, - "date": "2013-11-23T14:00:00Z", - "kind": "besteffort" + "invoice": 65, + "date": "2013-11-28T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59701, + "pk": 61502, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.318Z", + "updated": "2013-12-18T21:29:17.866Z", "slice": 15, - "created": "2013-12-13T22:19:54.471Z", - "amount": 0.28, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.872Z", + "amount": 0.224, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.0, - "invoice": 55, - "date": "2013-11-23T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.2, + "invoice": 65, + "date": "2013-11-29T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59702, + "pk": 61503, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.360Z", + "updated": "2013-12-18T21:29:17.907Z", "slice": 15, - "created": "2013-12-13T22:19:54.479Z", - "amount": 0.2016, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.880Z", + "amount": 0.2408, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.88, - "invoice": 55, - "date": "2013-11-24T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 65, + "date": "2013-11-29T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59703, + "pk": 61504, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.401Z", + "updated": "2013-12-18T21:29:17.949Z", "slice": 15, - "created": "2013-12-13T22:19:54.487Z", - "amount": 0.1792, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.889Z", + "amount": 0.1456, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.56, - "invoice": 55, - "date": "2013-11-24T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 65, + "date": "2013-11-29T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59704, + "pk": 61505, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.442Z", + "updated": "2013-12-18T21:29:17.990Z", "slice": 15, - "created": "2013-12-13T22:19:54.496Z", - "amount": 0.2128, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.897Z", + "amount": 0.1848, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.04, - "invoice": 55, - "date": "2013-11-24T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 65, + "date": "2013-11-30T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59705, + "pk": 61506, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.492Z", + "updated": "2013-12-18T21:29:18.032Z", "slice": 15, - "created": "2013-12-13T22:19:54.504Z", - "amount": 0.2016, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.905Z", + "amount": 0.2576, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.88, - "invoice": 56, - "date": "2013-11-25T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.68, + "invoice": 65, + "date": "2013-11-30T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59706, + "pk": 61507, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.534Z", + "updated": "2013-12-18T21:29:18.073Z", "slice": 15, - "created": "2013-12-13T22:19:54.512Z", - "amount": 0.1456, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.914Z", + "amount": 0.2128, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.08, - "invoice": 56, - "date": "2013-11-25T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.04, + "invoice": 65, + "date": "2013-11-30T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59707, + "pk": 61508, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.575Z", + "updated": "2013-12-18T21:29:18.114Z", "slice": 15, - "created": "2013-12-13T22:19:54.521Z", - "amount": 0.2688, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.922Z", + "amount": 0.3248, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.84, - "invoice": 56, - "date": "2013-11-25T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.64, + "invoice": 65, + "date": "2013-12-01T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59708, + "pk": 61509, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.616Z", + "updated": "2013-12-18T21:29:18.156Z", "slice": 15, - "created": "2013-12-13T22:19:54.529Z", - "amount": 0.336, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.930Z", + "amount": 0.224, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.8, - "invoice": 56, - "date": "2013-11-26T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.2, + "invoice": 65, + "date": "2013-12-01T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59709, + "pk": 61510, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.659Z", + "updated": "2013-12-18T21:29:18.197Z", "slice": 15, - "created": "2013-12-13T22:19:54.537Z", - "amount": 0.112, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.938Z", + "amount": 0.3136, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 1.6, - "invoice": 56, - "date": "2013-11-26T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 65, + "date": "2013-12-01T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59710, + "pk": 61511, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.701Z", + "updated": "2013-12-18T21:29:18.247Z", "slice": 15, - "created": "2013-12-13T22:19:54.545Z", - "amount": 0.2968, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.947Z", + "amount": 0.2912, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.24, - "invoice": 56, - "date": "2013-11-26T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.16, + "invoice": 66, + "date": "2013-12-02T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59711, + "pk": 61512, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.742Z", + "updated": "2013-12-18T21:29:18.288Z", "slice": 15, - "created": "2013-12-13T22:19:54.554Z", - "amount": 0.1232, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.955Z", + "amount": 0.252, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 1.76, - "invoice": 56, - "date": "2013-11-27T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 66, + "date": "2013-12-02T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59712, + "pk": 61513, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.784Z", + "updated": "2013-12-18T21:29:18.330Z", "slice": 15, - "created": "2013-12-13T22:19:54.562Z", - "amount": 0.3192, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.963Z", + "amount": 0.2968, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.56, - "invoice": 56, - "date": "2013-11-27T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 66, + "date": "2013-12-02T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59713, + "pk": 61514, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.825Z", + "updated": "2013-12-18T21:29:18.371Z", "slice": 15, - "created": "2013-12-13T22:19:54.570Z", - "amount": 0.2072, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.972Z", + "amount": 0.1568, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.96, - "invoice": 56, - "date": "2013-11-27T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 66, + "date": "2013-12-03T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59714, + "pk": 61515, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.867Z", + "updated": "2013-12-18T21:29:18.413Z", "slice": 15, - "created": "2013-12-13T22:19:54.579Z", - "amount": 0.1624, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.980Z", + "amount": 0.3024, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.32, - "invoice": 56, - "date": "2013-11-28T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 66, + "date": "2013-12-03T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59715, + "pk": 61516, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.908Z", + "updated": "2013-12-18T21:29:18.454Z", "slice": 15, - "created": "2013-12-13T22:19:54.587Z", - "amount": 0.1456, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.988Z", + "amount": 0.196, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.08, - "invoice": 56, - "date": "2013-11-28T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.8, + "invoice": 66, + "date": "2013-12-03T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59716, + "pk": 61517, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.949Z", + "updated": "2013-12-18T21:29:18.496Z", "slice": 15, - "created": "2013-12-13T22:19:54.595Z", - "amount": 0.112, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:15.997Z", + "amount": 0.2968, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 1.6, - "invoice": 56, - "date": "2013-11-28T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.24, + "invoice": 66, + "date": "2013-12-04T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59717, + "pk": 61518, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:56.991Z", + "updated": "2013-12-18T21:29:18.537Z", "slice": 15, - "created": "2013-12-13T22:19:54.603Z", - "amount": 0.2688, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.005Z", + "amount": 0.3304, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.84, - "invoice": 56, - "date": "2013-11-29T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 66, + "date": "2013-12-04T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59718, + "pk": 61519, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.032Z", + "updated": "2013-12-18T21:29:18.578Z", "slice": 15, - "created": "2013-12-13T22:19:54.612Z", - "amount": 0.14, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.013Z", + "amount": 0.1848, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.0, - "invoice": 56, - "date": "2013-11-29T14:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 66, + "date": "2013-12-04T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59719, + "pk": 61520, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.074Z", + "updated": "2013-12-18T21:29:18.620Z", "slice": 15, - "created": "2013-12-13T22:19:54.620Z", - "amount": 0.1288, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.021Z", + "amount": 0.2408, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 1.84, - "invoice": 56, - "date": "2013-11-29T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.44, + "invoice": 66, + "date": "2013-12-05T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59720, + "pk": 61521, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.148Z", + "updated": "2013-12-18T21:29:18.661Z", "slice": 15, - "created": "2013-12-13T22:19:54.628Z", - "amount": 0.1736, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.030Z", + "amount": 0.2464, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.48, - "invoice": 56, - "date": "2013-11-30T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.52, + "invoice": 66, + "date": "2013-12-05T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59721, + "pk": 61522, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.190Z", + "updated": "2013-12-18T21:29:18.703Z", "slice": 15, - "created": "2013-12-13T22:19:54.637Z", - "amount": 0.2464, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.038Z", + "amount": 0.28, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.52, - "invoice": 56, - "date": "2013-11-30T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 66, + "date": "2013-12-05T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59722, + "pk": 61523, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.231Z", + "updated": "2013-12-18T21:29:18.744Z", "slice": 15, - "created": "2013-12-13T22:19:54.645Z", - "amount": 0.2184, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.046Z", + "amount": 0.1848, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.12, - "invoice": 56, - "date": "2013-11-30T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.64, + "invoice": 66, + "date": "2013-12-06T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59723, + "pk": 61524, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.272Z", + "updated": "2013-12-18T21:29:18.785Z", "slice": 15, - "created": "2013-12-13T22:19:54.653Z", - "amount": 0.2744, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.054Z", + "amount": 0.308, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.92, - "invoice": 56, - "date": "2013-12-01T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 66, + "date": "2013-12-06T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59724, + "pk": 61525, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.314Z", + "updated": "2013-12-18T21:29:18.827Z", "slice": 15, - "created": "2013-12-13T22:19:54.661Z", - "amount": 0.2744, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.063Z", + "amount": 0.3248, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.92, - "invoice": 56, - "date": "2013-12-01T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.64, + "invoice": 66, + "date": "2013-12-06T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59725, + "pk": 61526, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.355Z", + "updated": "2013-12-18T21:29:18.868Z", "slice": 15, - "created": "2013-12-13T22:19:54.670Z", - "amount": 0.2352, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.071Z", + "amount": 0.112, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.36, - "invoice": 56, - "date": "2013-12-01T22:00:00Z", - "kind": "besteffort" + "coreHours": 1.6, + "invoice": 66, + "date": "2013-12-07T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59726, + "pk": 61527, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.405Z", + "updated": "2013-12-18T21:29:18.910Z", "slice": 15, - "created": "2013-12-13T22:19:54.678Z", - "amount": 0.2744, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.079Z", + "amount": 0.252, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.92, - "invoice": 57, - "date": "2013-12-02T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.6, + "invoice": 66, + "date": "2013-12-07T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59727, + "pk": 61528, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.446Z", + "updated": "2013-12-18T21:29:18.951Z", "slice": 15, - "created": "2013-12-13T22:19:54.686Z", - "amount": 0.3192, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.088Z", + "amount": 0.308, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.56, - "invoice": 57, - "date": "2013-12-02T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 66, + "date": "2013-12-07T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59728, + "pk": 61529, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.488Z", + "updated": "2013-12-18T21:29:18.993Z", "slice": 15, - "created": "2013-12-13T22:19:54.695Z", - "amount": 0.28, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.096Z", + "amount": 0.3304, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.0, - "invoice": 57, - "date": "2013-12-02T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.72, + "invoice": 66, + "date": "2013-12-08T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59729, + "pk": 61530, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.529Z", + "updated": "2013-12-18T21:29:19.034Z", "slice": 15, - "created": "2013-12-13T22:19:54.703Z", - "amount": 0.2912, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.104Z", + "amount": 0.2296, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.16, - "invoice": 57, - "date": "2013-12-03T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.28, + "invoice": 66, + "date": "2013-12-08T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59730, + "pk": 61531, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.571Z", + "updated": "2013-12-18T21:29:19.075Z", "slice": 15, - "created": "2013-12-13T22:19:54.711Z", - "amount": 0.252, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.112Z", + "amount": 0.3024, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.6, - "invoice": 57, - "date": "2013-12-03T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.32, + "invoice": 66, + "date": "2013-12-08T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59731, + "pk": 61532, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.612Z", + "updated": "2013-12-18T21:29:19.125Z", "slice": 15, - "created": "2013-12-13T22:19:54.719Z", - "amount": 0.1792, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.121Z", + "amount": 0.1456, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.56, - "invoice": 57, - "date": "2013-12-03T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 67, + "date": "2013-12-09T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59732, + "pk": 61533, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.653Z", + "updated": "2013-12-18T21:29:19.167Z", "slice": 15, - "created": "2013-12-13T22:19:54.728Z", - "amount": 0.2408, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.129Z", + "amount": 0.1456, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.44, - "invoice": 57, - "date": "2013-12-04T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.08, + "invoice": 67, + "date": "2013-12-09T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59733, + "pk": 61534, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.695Z", + "updated": "2013-12-18T21:29:19.208Z", "slice": 15, - "created": "2013-12-13T22:19:54.736Z", - "amount": 0.2352, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.137Z", + "amount": 0.2184, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.36, - "invoice": 57, - "date": "2013-12-04T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 67, + "date": "2013-12-09T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59734, + "pk": 61535, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.736Z", + "updated": "2013-12-18T21:29:19.249Z", "slice": 15, - "created": "2013-12-13T22:19:54.744Z", - "amount": 0.3248, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.146Z", + "amount": 0.2184, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.64, - "invoice": 57, - "date": "2013-12-04T22:00:00Z", - "kind": "besteffort" + "coreHours": 3.12, + "invoice": 67, + "date": "2013-12-10T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59735, + "pk": 61536, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.778Z", + "updated": "2013-12-18T21:29:19.291Z", "slice": 15, - "created": "2013-12-13T22:19:54.753Z", - "amount": 0.2408, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.154Z", + "amount": 0.1624, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.44, - "invoice": 57, - "date": "2013-12-05T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.32, + "invoice": 67, + "date": "2013-12-10T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59736, + "pk": 61537, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.819Z", + "updated": "2013-12-18T21:29:19.332Z", "slice": 15, - "created": "2013-12-13T22:19:54.761Z", - "amount": 0.224, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.162Z", + "amount": 0.308, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.2, - "invoice": 57, - "date": "2013-12-05T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.4, + "invoice": 67, + "date": "2013-12-10T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59737, + "pk": 61538, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.861Z", + "updated": "2013-12-18T21:29:19.374Z", "slice": 15, - "created": "2013-12-13T22:19:54.769Z", - "amount": 0.2128, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.170Z", + "amount": 0.1568, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.04, - "invoice": 57, - "date": "2013-12-05T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.24, + "invoice": 67, + "date": "2013-12-11T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59738, + "pk": 61539, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.902Z", + "updated": "2013-12-18T21:29:19.415Z", "slice": 15, - "created": "2013-12-13T22:19:54.777Z", - "amount": 0.2072, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.179Z", + "amount": 0.2856, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.96, - "invoice": 57, - "date": "2013-12-06T06:00:00Z", - "kind": "besteffort" + "coreHours": 4.08, + "invoice": 67, + "date": "2013-12-11T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59739, + "pk": 61540, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.943Z", + "updated": "2013-12-18T21:29:19.457Z", "slice": 15, - "created": "2013-12-13T22:19:54.786Z", - "amount": 0.252, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.187Z", + "amount": 0.3136, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.6, - "invoice": 57, - "date": "2013-12-06T14:00:00Z", - "kind": "besteffort" + "coreHours": 4.48, + "invoice": 67, + "date": "2013-12-11T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59740, + "pk": 61541, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:57.985Z", + "updated": "2013-12-18T21:29:19.498Z", "slice": 15, - "created": "2013-12-13T22:19:54.794Z", + "created": "2013-12-18T21:29:16.195Z", "amount": 0.224, - "object": 103, - "account": 12, + "object": 121, + "account": 14, "state": "invoiced", "coreHours": 3.2, - "invoice": 57, - "date": "2013-12-06T22:00:00Z", - "kind": "besteffort" + "invoice": 67, + "date": "2013-12-12T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59741, + "pk": 61542, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.026Z", + "updated": "2013-12-18T21:29:19.539Z", "slice": 15, - "created": "2013-12-13T22:19:54.802Z", - "amount": 0.196, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.204Z", + "amount": 0.2688, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 2.8, - "invoice": 57, - "date": "2013-12-07T06:00:00Z", - "kind": "besteffort" + "coreHours": 3.84, + "invoice": 67, + "date": "2013-12-12T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59742, + "pk": 61543, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.068Z", + "updated": "2013-12-18T21:29:19.581Z", "slice": 15, - "created": "2013-12-13T22:19:54.811Z", - "amount": 0.2352, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.212Z", + "amount": 0.224, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.36, - "invoice": 57, - "date": "2013-12-07T14:00:00Z", - "kind": "besteffort" + "coreHours": 3.2, + "invoice": 67, + "date": "2013-12-12T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59743, + "pk": 61544, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.109Z", + "updated": "2013-12-18T21:29:19.622Z", "slice": 15, - "created": "2013-12-13T22:19:54.819Z", - "amount": 0.2408, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.220Z", + "amount": 0.28, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.44, - "invoice": 57, - "date": "2013-12-07T22:00:00Z", - "kind": "besteffort" + "coreHours": 4.0, + "invoice": 67, + "date": "2013-12-13T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59744, + "pk": 61545, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.151Z", + "updated": "2013-12-18T21:29:19.664Z", "slice": 15, - "created": "2013-12-13T22:19:54.827Z", - "amount": 0.3304, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.228Z", + "amount": 0.1792, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.72, - "invoice": 57, - "date": "2013-12-08T06:00:00Z", - "kind": "besteffort" + "coreHours": 2.56, + "invoice": 67, + "date": "2013-12-13T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59745, + "pk": 61546, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.192Z", + "updated": "2013-12-18T21:29:19.705Z", "slice": 15, - "created": "2013-12-13T22:19:54.835Z", - "amount": 0.336, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.237Z", + "amount": 0.1344, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 4.8, - "invoice": 57, - "date": "2013-12-08T14:00:00Z", - "kind": "besteffort" + "coreHours": 1.92, + "invoice": 67, + "date": "2013-12-13T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59746, + "pk": 61547, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:58.233Z", + "updated": "2013-12-18T21:29:19.746Z", "slice": 15, - "created": "2013-12-13T22:19:54.844Z", - "amount": 0.2464, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.245Z", + "amount": 0.2072, + "object": 121, + "account": 14, "state": "invoiced", - "coreHours": 3.52, - "invoice": 57, - "date": "2013-12-08T22:00:00Z", - "kind": "besteffort" + "coreHours": 2.96, + "invoice": 67, + "date": "2013-12-14T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59747, + "pk": 61548, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.852Z", + "updated": "2013-12-18T21:29:19.788Z", "slice": 15, - "created": "2013-12-13T22:19:54.852Z", + "created": "2013-12-18T21:29:16.253Z", "amount": 0.252, - "object": 103, - "account": 12, - "state": "pending", + "object": 121, + "account": 14, + "state": "invoiced", "coreHours": 3.6, - "invoice": null, - "date": "2013-12-09T06:00:00Z", - "kind": "besteffort" + "invoice": 67, + "date": "2013-12-14T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59748, + "pk": 61549, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.860Z", + "updated": "2013-12-18T21:29:19.837Z", "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: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": 59749, + "pk": 61550, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.869Z", + "updated": "2013-12-18T21:29:19.879Z", "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: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": 59750, + "pk": 61551, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.877Z", + "updated": "2013-12-18T21:29:19.920Z", "slice": 15, - "created": "2013-12-13T22:19:54.877Z", - "amount": 0.224, - "object": 103, - "account": 12, - "state": "pending", - "coreHours": 3.2, - "invoice": null, - "date": "2013-12-10T06:00:00Z", - "kind": "besteffort" + "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": 59751, + "pk": 61552, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.885Z", + "updated": "2013-12-18T21:29:19.962Z", "slice": 15, - "created": "2013-12-13T22:19:54.885Z", - "amount": 0.1232, - "object": 103, - "account": 12, - "state": "pending", - "coreHours": 1.76, - "invoice": null, - "date": "2013-12-10T14:00:00Z", - "kind": "besteffort" + "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": 59752, + "pk": 61553, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.894Z", + "updated": "2013-12-18T21:29:16.295Z", "slice": 15, - "created": "2013-12-13T22:19:54.893Z", - "amount": 0.3304, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.295Z", + "amount": 0.2128, + "object": 121, + "account": 14, "state": "pending", - "coreHours": 4.72, + "coreHours": 3.04, "invoice": null, - "date": "2013-12-10T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59753, + "pk": 61554, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.902Z", + "updated": "2013-12-18T21:29:16.303Z", "slice": 15, - "created": "2013-12-13T22:19:54.902Z", - "amount": 0.1736, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.303Z", + "amount": 0.3192, + "object": 121, + "account": 14, "state": "pending", - "coreHours": 2.48, + "coreHours": 4.56, "invoice": null, - "date": "2013-12-11T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59754, + "pk": 61555, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.910Z", + "updated": "2013-12-18T21:29:16.311Z", "slice": 15, - "created": "2013-12-13T22:19:54.910Z", - "amount": 0.28, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.311Z", + "amount": 0.1232, + "object": 121, + "account": 14, "state": "pending", - "coreHours": 4.0, + "coreHours": 1.76, "invoice": null, - "date": "2013-12-11T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-16T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59755, + "pk": 61556, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.918Z", + "updated": "2013-12-18T21:29:16.320Z", "slice": 15, - "created": "2013-12-13T22:19:54.918Z", - "amount": 0.2464, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.320Z", + "amount": 0.1736, + "object": 121, + "account": 14, "state": "pending", - "coreHours": 3.52, + "coreHours": 2.48, "invoice": null, - "date": "2013-12-11T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59756, + "pk": 61557, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.927Z", + "updated": "2013-12-18T21:29:16.328Z", "slice": 15, - "created": "2013-12-13T22:19:54.927Z", - "amount": 0.1288, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.328Z", + "amount": 0.1792, + "object": 121, + "account": 14, "state": "pending", - "coreHours": 1.84, + "coreHours": 2.56, "invoice": null, - "date": "2013-12-12T06:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T13:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59757, + "pk": 61558, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.935Z", + "updated": "2013-12-18T21:29:16.336Z", "slice": 15, - "created": "2013-12-13T22:19:54.935Z", - "amount": 0.168, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.336Z", + "amount": 0.112, + "object": 121, + "account": 14, "state": "pending", - "coreHours": 2.4, + "coreHours": 1.6, "invoice": null, - "date": "2013-12-12T14:00:00Z", - "kind": "besteffort" + "date": "2013-12-17T21:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59758, + "pk": 61559, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.943Z", + "updated": "2013-12-18T21:29:16.344Z", "slice": 15, - "created": "2013-12-13T22:19:54.943Z", - "amount": 0.1512, - "object": 103, - "account": 12, + "created": "2013-12-18T21:29:16.344Z", + "amount": 0.196, + "object": 121, + "account": 14, "state": "pending", - "coreHours": 2.16, + "coreHours": 2.8, "invoice": null, - "date": "2013-12-12T22:00:00Z", - "kind": "besteffort" + "date": "2013-12-18T05:00:00Z", + "kind": "besteffort", + "enacted": null } }, { - "pk": 59759, + "pk": 61560, "model": "core.charge", "fields": { - "updated": "2013-12-13T22:19:54.951Z", + "updated": "2013-12-18T21:29:16.353Z", "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,4 +1,81 @@ [ +{ + "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", @@ -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,10 +533,263 @@ "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", @@ -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": { + "updated": "2013-06-21T21:17:13.982Z", + "name": "node33.gt.vicci.org", + "created": "2013-04-03T23:14:11.072Z", "site": 11, - "updated": "2013-06-21T21:17:13.982Z", "deployment": 8, - "name": "node33.gt.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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", + "name": "node48.mpisws.vicci.org", + "created": "2013-04-03T23:14:11.072Z", + "site": 12, "deployment": 9, - "name": "node48.mpisws.vicci.org", - "created": "2013-04-03T23:14:11.072Z" + "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,23 +49701,13 @@ "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 - } -}, -{ - "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" + "contentProvider": 35, + "enacted": null } }, - { "pk": 5, "model": "syndicate.syndicateservice", @@ -46192,79 +49715,14 @@ }, { "pk": 1, - "model": "syndicate.syndicateuser", - "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", + "model": "core.siteprivilege", "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 Service 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 @@ class Network(PlCoreBase): 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 @@ class NetworkSlice(PlCoreBase): 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 @@ class NetworkSliver(PlCoreBase): 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 @@ class PlCoreBase(models.Model): 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 @@ class PlCoreBase(models.Model): 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 @@ class Reservation(PlCoreBase): 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 @@ class ReservedResource(PlCoreBase): 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 @@ class ServiceClass(PlCoreBase): 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 @@ class Site(PlCoreBase): 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 @@ class SitePrivilege(PlCoreBase): 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 ' + 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 @@ class DeploymentPrivilege(PlCoreBase): 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") + + @staticmethod + def select_by_user(user): + return SiteDeployments.objects.all() - class Meta: - db_table = 'site_deployments' - #auto_created = Site + #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 ServiceClass 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 @@ class Slice(PlCoreBase): 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 @@ class SlicePrivilege(PlCoreBase): 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 @@ class SliceTag(PlCoreBase): 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 @@ class Sliver(PlCoreBase): 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 @@ class Sliver(PlCoreBase): 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 @@ class Tag(PlCoreBase): 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 os 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 @@ class User(AbstractBaseUser): 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 @@ class User(AbstractBaseUser): timezone = TimeZoneField() + dashboards = models.ManyToManyField('DashboardView', through='UserDashboardView', blank=True) + objects = UserManager() USERNAME_FIELD = 'email' @@ -113,6 +116,20 @@ class User(AbstractBaseUser): 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 @@ class User(AbstractBaseUser): 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 @@ class SliceSerializer(serializers.HyperlinkedModelSerializer): '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 Binary files /dev/null and b/planetstack/core/static/chartsBg.jpg 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 Binary files /dev/null and b/planetstack/core/static/img/bg_left_white.gif 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 @@ + + + +log4javascript + + + + + + + + + + +
+
+
+Filters: + + + + + + + +
+ +
+Options: + + + + + + + +
+
+
+
+
+
+ + +
+
+ + 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 @@ + + + + log4javascript + + + + + + + + + + + +
+
+
+ Filters: + + + + + + + +
+ +
+ Options: + + + + + + + +
+
+
+
+
+
+ + +
+
+ + 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 @@ + + + + + log4javascript basic demo + + + + + + + + + +
+ +
+ +

log4javascript basic demo

+

+ NB. Since the demo below uses pop-up windows, you will + need to disable any pop-up blockers you may have for it to work. +

+

+ This demo demonstrates the default logger. For more options, please see the + demos area. +

+

+ 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. +

+
+ + + + + + +
+ + +
+ Generate random log entries + +
+ + +
+ +
+ + + +
+ + + +
+
+
+ +
+ + + 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 @@ + +Blank page + + \ 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 @@ + + + + + log4javascript demos + + + + + + + +
+ +
+ +

log4javascript demos

+ +
+
+ +
+ + + 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 @@ + + + + + log4javascript in-page console demo + + + + + + + + + +
+ +
+ +

log4javascript in-page console demo

+

+ 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. +

+

+ 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. +

+
+ +
+ + + + + + +
+ + +
+ Generate random log entries + +
+ + +
+ +
+ + + +
+ + + +
+
+
+
+ +
+ + + 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 @@ + + + + + log4javascript lite demo + + + + + + + + + +
+ +
+ +

log4javascript lite demo

+

+ NB. Since the demo below uses pop-up windows, you will + need to disable any pop-up blockers you may have for it to work. +

+

+ This demo demonstrates the lite edition of log4javascript. +

+

+ Enter a log message below and click on one of the buttons to log + your message at your desired level. +

+
+ + + + + + + +
+ Generate random log entries + +
+ + +
+ +
+
+
+
+ +
+ + 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 @@ + + + + + log4javascript - backwards incompatibilities in version 1.4 + + + + + + + +
+ +
+ +

Backwards incompatibilities in log4javascript 1.4

+
    +
  • + Loggers are now hierarchical. This means logger names containing full stops have + special meaning. For example, from version 1.4 the logger named myapp.ajax + by default inherits all the appenders of the logger named myapp, while + prior to version 1.4 these loggers would be entirely independent; +
  • +
  • + The signature of the log method of Logger has changed. + However, you should not use this method directly; instead, use one of the level-specific + wrapper functions (debug, info, error etc.); +
  • +
  • + Appenders can no longer be configured via constructor parameters. Instead you must use + setter methods; +
  • +
  • + The format of requests sent via AjaxAppender + has changed when using JsonLayout or + XmlLayout: the formatted log messages are sent + as a name-value pair (with default name data) rather than a single unencoded string; +
  • +
  • + All timestamps returned by XmlLayout, + JsonLayout and + HttpPostDataLayout are + now measured in milliseconds since January 1st 1970 (previously they were returned + as seconds since January 1st 1970); +
  • +
  • + The constructors for JsonLayout and + HttpPostDataLayout have changed; the property names + used for the properties of the logging event are now set via setKeys rather than + in the constructor; +
  • +
  • + setReadable has been removed from JsonLayout. + The readable property should now be set via the constructor; +
  • +
  • + addErrorListener and removeErrorListener removed from + the log4javascript object and replaced with the more generic + addEventListener + and removeEventListener methods. The listener functions are passed + different parameters. +
  • +
+
+ +
+ + + 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 @@ + + + + + log4javascript 1.4 distribution + + + + + + + +
+ +
+ +

log4javascript 1.4 distribution

+

+ From version 1.4 the distribution includes three different editions of log4javascript: +

+
    +
  • +
    Standard Edition
    +

    + Equivalent to log4javascript from earlier versions and suitable for general JavaScript + debugging and logging (including via Ajax). +

    +
  • +
  • +
    Production Edition
    +

    + 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 + AjaxAppender, resulting in a drastically reduced + file size compared to the standard edition. +

    +
  • +
  • +
    Lite Edition
    +

    + 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. +

    +
  • +
+

+ 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. +

+

+ 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. +

+

+ Finally, each edition comes with a suite of unit tests, available as HTML pages in the + test/ directory. Note that these tests crash old versions (pre-3.1) of Safari. Sorry. +

+
+ +
+ + + 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 @@ + + + + + log4javascript documentation + + + + + + + +
+ +
+

log4javascript 1.4 documentation

+ + +
+

What it is

+

+ log4javascript is a JavaScript logging framework based on the Java + logging framework log4j. +

+

+ 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. +

+

+ If you just want to start using it, try the quickstart + tutorial. +

+

+ Top +

+
+
+

Who it's for

+

+ log4javascript is aimed at JavaScript developers. +

+

+ Top +

+
+
+

Note on previous versions

+

+ Documentation for previous versions of log4javascript are not available here. + However, documentation is bundled with every previous version, all of which + are available to download. +

+
+
+

Features

+
    +
  • can be initialized with one JavaScript include and one line of code;
  • +
  • + 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; +
  • +
  • + can send log messages to the server via HTTP (Ajax, if you like); +
  • +
  • + highly configurable using familiar methods from log4j, including the + powerful PatternLayout + which gives the developer complete control over the format of the log messages. +
  • +
+

+ Top +

+
+
+

Browser support

+

Fully supported browsers:

+
    +
  • All versions Firefox back to 0.6
  • +
  • Other Mozilla-based browsers, as far back as Netscape 7
  • +
  • Internet Explorer 5 and higher for Windows
  • +
  • Safari 1.3 and higher (untested on earlier versions)
  • +
  • Opera 8.01 and higher (pre- version 9 browsers have a rendering + bug related to scrolling that affects searching in PopUpAppender and InPageAppender)
  • +
  • Konqueror 3.4.3 and higher (untested on earlier versions)
  • +
  • Google Chrome
  • +
+

Partially supported browsers:

+
    +
  • Older Mozilla-based browsers, e.g. Netscape 6.2 (generally OK except for + display problems searching and filtering PopUpAppender and InPageAppender)
  • +
  • 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)
  • +
+

Unsupported browsers:

+
    +
  • + Internet Explorer for Mac. There are no plans to make log4javascript work + in this browser. +
  • +
+

+ Top +

+
+
+

Licence

+

+ log4javascript is licenced under the Apache License, + Version 2.0. The Apache website has more details. +

+

+ Top +

+
+
+

Further reading

+

+ In order to gain an understanding of the ideas behind log4j and therefore log4javascript, + I highly recommend reading the short + introduction to log4j 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. +

+

+ The full log4javascript manual +

+

+ Top +

+
+
+ +
+ + + \ 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 @@ + + + + + log4javascript 1.4 Lite + + + + + + + + + + +
+ +
+ +

log4javascript 1.4 Lite

+

Contents

+ +
+

Introduction

+

+ 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. +

+

+ Top +

+
+
+

Code

+

+ You can copy the code for log4javascript Lite below: +

+ +

+ Press this button to copy the code to the clipboard: + +

+

+ You can either paste the above code inside a script tag: +

+
+<script type="text/javascript">
+	... [Code here]...
+</script>
+
+

+ ... or include the log4javascript_lite.js included in the distribution: +

+
+<script type="text/javascript" src="log4javascript_lite.js"></script>
+
+
+<script type="text/javascript">
+	var log = log4javascript.getDefaultLogger();
+</script>
+
+

+ Using log4javascript Lite is identical to using log4javascript with its default logger: +

+
+<script type="text/javascript">
+	var log = log4javascript.getDefaultLogger();
+	log.debug("What's going on here then?");
+</script>
+
+

+ Top +

+
+
+

API

+

+ The functions available in log4javascript Lite make up a small subset of those provided + by log4javascript proper. Each function is named and called identically to the equivalent + function in log4javascript. Full details can be found in the + log4javascript Lite manual. +

+

+ Top +

+
+
+ +
+ + + 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 @@ + + + + + log4javascript 1.4 manual + + + + + + + +
+ +
+ +

log4javascript 1.4 manual

+

Contents

+ +
+

Introduction

+

+ Anyone who has done a reasonable amount of JavaScript development will be + familiar with alert 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. +

+

+ At the other end of the scale there is + Venkman, + 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. +

+

+ Nowadays, easily the best option for day-to-day JavaScript development is the brilliant + Firebug, 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. +

+

+ 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. +

+

+ 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. +

+

+ Top +

+
+
+

Note about the log4javascript object

+

+ 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: +

+

+ var popUpAppender = new log4javascript.PopUpAppender(); +

+

+ Top +

+
+
+

Loggers, Appenders, Layouts and Levels

+

+ A logger in log4javascript is the object on which log calls are + made. A logger may be assigned zero or more appenders. + An appender is an object that actually does the logging: for example, + a PopUpAppender logs messages to + a pop-up console window while an AjaxAppender + uses HTTP to send log messages back to the server. Each appender is assigned + a layout, which is responsible for formatting log messages that + are passed to an appender. +

+

+ Every log message has a level. This is the severity of the message. + Available levels are TRACE, DEBUG, INFO, + WARN, ERROR and FATAL - these correspond to + the logging methods trace, debug, info, + warn, error and fatal of Logger. + Levels are ordered as follows: TRACE < DEBUG < + INFO < WARN < ERROR < + FATAL. This means the FATAL is the most severe and + TRACE the least. Also included are levels called ALL + and OFF intended to enable or disable all logging respectively. +

+

+ Both loggers and appenders also have threshold levels (by default, DEBUG + for loggers and ALL 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 INFO is set on a + logger then only log messages of severity INFO or greater will be logged, + meaning DEBUG and TRACE messages will not be logged. If the + same logger had two appenders, one of level DEBUG and one of level + WARN then the first appender will still only log messages of + INFO or greater while the second appender will only log messages of level + WARN or greater. +

+

+ This allows the developer fine control over which messages get logged where. +

+
+

Configuring appenders

+

+ From version 1.4, configuring appenders is only possible via configuration + methods. As the number of configuration options increases it becomes increasingly + undesirable to use constructor parameters, so support for it has been dropped. +

+
+
+

Example

+

+ NB. The Ajax side of this example relies on having + server-side processing in place. +

+

+ First, log4javascript is initialized, and a logger (actually the + anonymous logger) is assigned to a variable called log: +

+
+<script type="text/javascript" src="log4javascript.js"></script>
+<script type="text/javascript">
+	//<![CDATA[
+	var log = log4javascript.getLogger();
+
+

+ log does not yet have any appenders, so a call to log.debug() + will do nothing as yet. For this example we will use a + PopUpAppender 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 PatternLayout + 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 below. +

+
+	var popUpAppender = new log4javascript.PopUpAppender();
+	var popUpLayout = new log4javascript.PatternLayout("%d{HH:mm:ss} %-5p - %m%n");
+	popUpAppender.setLayout(popUpLayout);
+	log.addAppender(popUpAppender);
+
+

+ Suppose that we also want to send log messages to the server, but limited to + error messages only. To achieve this we use an + AjaxAppender. Note that if no layout is + specified then for convenience a default layout is used; in the case of + AjaxAppender, that is HttpPostDataLayout, + 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: +

+
+	var ajaxAppender = new log4javascript.AjaxAppender("myloggingservlet.do");
+	ajaxAppender.setThreshold(log4javascript.Level.ERROR);
+	log.addAppender(ajaxAppender);
+
+

+ Finally, some test log messages and the closing script tag: +

+
+	log.debug("Debugging message (appears in pop-up)");
+	log.error("Error message (appears in pop-up and in server log)");
+	//]]>
+</script>
+
+

+ The full script: +

+
+<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>
+
+

+ See this example in action (opens in new window) +

+
+

+ Top +

+
+
+

log4javascript static properties/methods

+

Properties

+
    +
  • +
    version
    +
    + The version number of your copy of log4javascript. +
    +
  • +
  • +
    edition
    +
    + The edition of your copy of log4javascript. +
    +
  • +
  • +
    logLog
    +
    + log4javascript's internal logging object. See below for more details. +
    +
  • +
+

Methods

+
    +
  • +
    getLogger
    +
    Logger getLogger([String loggerName])
    +
    Parameters:
    +
      +
    • + loggerName + [optional] +
    • +
    +
    +

    + 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 [anonymous], and + subsequent calls to getLogger() (with no logger name specified) will return + this same logger object. +

    +

    + Note that the names [anonymous], [default], [null] + and root are reserved for + the anonymous logger, default logger, null logger and root logger respectively. +

    +
    +
  • +
  • +
    getDefaultLogger
    +
    Logger getDefaultLogger()
    +
    + Convenience method that returns the default logger. The default logger + has a single appender: a PopUpAppender + with the default layout, width and height, and with focusPopUp set to false + and lazyInit, useOldPopUp and + complainAboutPopUpBlocking all set to true. +
    +
  • +
  • +
    getNullLogger
    +
    Logger getNullLogger()
    +
    + Returns an empty logger with no appenders. Useful for disabling all logging. +
    +
  • +
  • +
    getRootLogger
    +
    Logger getRootLogger()
    +
    + Returns the root logger from which all other loggers derive. +
    +
  • +
  • +
    resetConfiguration
    +
    void resetConfiguration()
    +
    + Resets the all loggers to their default level. +
    +
  • +
  • +
    setEnabled
    +
    void setEnabled(Boolean enabled)
    +
    Parameters:
    +
      +
    • + enabled +
    • +
    +
    + Enables or disables all logging, depending on enabled. +
    +
  • +
  • +
    isEnabled
    +
    Boolean isEnabled()
    +
    + Returns true or false depending on whether logging is enabled. +
    +
  • +
  • +
    addEventListener
    +
    void addEventListener(String eventType, Function listener)
    +
    Parameters:
    +
      +
    • + eventType +
    • +
    • + listener +
    • +
    +
    +

    + Adds a function to be called when an event of the type specified occurs in log4javascript. + Supported event types are load (occurs once the page has loaded) and + error. +

    +

    + Each listener is pased three paramaters: +

    +
      +
    • sender. The object that raised the event (i.e. the log4javascript object);
    • +
    • eventType. The type of the event;
    • +
    • + eventArgs. An object containing of event-specific arguments. For the error event, + this is an object with properties message and exception. For the load + event this is an empty object. +
    • +
    +
    +
  • +
  • +
    removeEventListener
    +
    void removeEventListener(String eventType, Function listener)
    +
    Parameters:
    +
      +
    • + eventType +
    • +
    • + listener +
    • +
    +
    + Removes the event listener function supplied for the event of the type specified. +
    +
  • +
  • +
    dispatchEvent
    +
    void dispatchEvent(String eventType, Object eventArgs)
    +
    Parameters:
    +
      +
    • + eventType +
    • +
    • + eventArgs +
    • +
    +
    + Raises an event of type eventType on the log4javascript object. + Each of the listeners for this type of event (registered via addEventListener) + is called and passed eventArgs as the third parameter. +
    +
  • +
  • +
    setEventTypes
    +
    void setEventTypes(Array eventTypes)
    +
    Parameters:
    +
      +
    • + eventTypes +
    • +
    +
    + Used internally to specify the types of events that the log4javascript object can raise. +
    +
  • +
  • +
    setShowStackTraces
    +
    void setShowStackTraces(Boolean show)
    +
    Parameters:
    +
      +
    • + show +
    • +
    +
    + Enables or disables displaying of error stack traces, depending on show. + By default, stack traces are not displayed. (Only works in Firefox) +
    +
  • +
  • +
    evalInScope
    +
    Object evalInScope(String expr)
    +
    Parameters:
    +
      +
    • + expr +
    • +
    +
    + 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. +
    +
  • +
+

+ Top +

+
+
+

Levels

+

+ Levels are available as static properties of the log4javascript.Level + object. In ascending order of severity: +

+
    +
  1. log4javascript.Level.ALL
  2. +
  3. log4javascript.Level.TRACE
  4. +
  5. log4javascript.Level.DEBUG
  6. +
  7. log4javascript.Level.INFO
  8. +
  9. log4javascript.Level.WARN
  10. +
  11. log4javascript.Level.ERROR
  12. +
  13. log4javascript.Level.FATAL
  14. +
  15. log4javascript.Level.OFF
  16. +
+

+ Top +

+
+
+

Loggers

+

+ 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. +

+
+

Logger hierarchy and appender additivity

+

+ 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 tim.app.security + inherits from tim.app, which in turn inherits from tim which, + finally, inherits from the root logger. +

+

+ 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 appender additivity in log4j. This + behaviour can be enabled or disabled via setAdditivity(). See below). In the + above example, if the root logger has a level of DEBUG and one appender, + each of the loggers tim.app.security, tim.app and tim would + inherit the root level's appender. If, say, tim.app's threshold level was set + to WARN, tim's effective level would remain at DEBUG + (inherited from the root logger) while tim.app.security's effective level would + be WARN, inherited from tim.app. 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. +

+

+ For a detailed explanation of the logger hierarchy, see the + log4j manual. +

+
+

Notes

+
    +
  • + It is not possible to instantiate loggers directly. Instead you must use + one of the methods of the log4javascript object: getLogger, + getRootLogger, getDefaultLogger or getNullLogger. +
  • +
+

Logger methods

+
    +
  • +
    addAppender
    +
    void addAppender(Appender appender)
    +
    Parameters:
    +
      +
    • + appender +
    • +
    +
    + Adds the given appender. +
    +
  • +
  • +
    removeAppender
    +
    void removeAppender(Appender appender)
    +
    Parameters:
    +
      +
    • + appender +
    • +
    +
    + Removes the given appender. +
    +
  • +
  • +
    removeAllAppenders
    +
    void removeAllAppenders()
    +
    + Clears all appenders for the current logger. +
    +
  • +
  • +
    setLevel
    +
    void setLevel(Level level)
    +
    Parameters:
    +
      +
    • + level +
    • +
    +
    + Sets the level. Log messages of a lower level than level will not be logged. + Default value is DEBUG. +
    +
  • +
  • +
    getLevel
    +
    Level getLevel()
    +
    + Returns the level explicitly set for this logger or null if none has been set. +
    +
  • +
  • +
    getEffectiveLevel
    +
    Level getEffectiveLevel()
    +
    + 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. +
    +
  • +
  • +
    setAdditivity
    +
    void setAdditivity(Boolean additivity)
    +
    Parameters:
    +
      +
    • + additivity +
    • +
    +
    +

    + 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. +

    +

    + Default value is true. +

    +
    +
  • +
  • +
    getAdditivity
    +
    Level getLevel()
    +
    + Returns whether additivity is enabled for this logger. +
    +
  • +
  • +
    log
    +
    void log(Level level, Object params)
    +
    Parameters:
    +
      +
    • + level +
    • +
    • + params +
    • +
    +
    + Generic logging method used by wrapper methods such as debug, + error etc. +
    +

    Notes

    +
      +
    • + The signature of this method has changed in 1.4. +
    • +
    +
  • +
  • +
    trace
    +
    void trace(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level TRACE. +
    +

    Notes

    +
      +
    • + Logging of multiple messages in one call is new in 1.4. +
    • +
    +
  • +
  • +
    debug
    +
    void debug(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level DEBUG. +
    +

    Notes

    +
      +
    • + Logging of multiple messages in one call is new in 1.4. +
    • +
    +
  • +
  • +
    info
    +
    void info(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level INFO. +
    +

    Notes

    +
      +
    • + Logging of multiple messages in one call is new in 1.4. +
    • +
    +
  • +
  • +
    warn
    +
    void warn(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level WARN. +
    +

    Notes

    +
      +
    • + Logging of multiple messages in one call is new in 1.4. +
    • +
    +
  • +
  • +
    error
    +
    void error(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level ERROR. +
    +

    Notes

    +
      +
    • + Logging of multiple messages in one call is new in 1.4. +
    • +
    +
  • +
  • +
    fatal
    +
    void fatal(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level FATAL. +
    +

    Notes

    +
      +
    • + Logging of multiple messages in one call is new in 1.4. +
    • +
    +
  • +
  • +
    isEnabledFor
    +
    Boolean isEnabledFor(Level level, Error exception)
    +
    Parameters:
    +
      +
    • + level +
    • +
    +
    + Returns whether the logger is enabled for the specified level. +
    +
  • +
  • +
    isTraceEnabled
    +
    Boolean isTraceEnabled()
    +
    + Returns whether the logger is enabled for TRACE messages. +
    +
  • +
  • +
    isDebugEnabled
    +
    Boolean isDebugEnabled()
    +
    + Returns whether the logger is enabled for DEBUG messages. +
    +
  • +
  • +
    isInfoEnabled
    +
    Boolean isInfoEnabled()
    +
    + Returns whether the logger is enabled for INFO messages. +
    +
  • +
  • +
    isWarnEnabled
    +
    Boolean isWarnEnabled()
    +
    + Returns whether the logger is enabled for WARN messages. +
    +
  • +
  • +
    isErrorEnabled
    +
    Boolean isErrorEnabled()
    +
    + Returns whether the logger is enabled for ERROR messages. +
    +
  • +
  • +
    isFatalEnabled
    +
    Boolean isFatalEnabled()
    +
    + Returns whether the logger is enabled for FATAL messages. +
    +
  • +
  • +
    group
    +
    void group(String name, Boolean initiallyExpanded)
    +
    Parameters:
    +
      +
    • + name +
    • +
    • + initiallyExpanded + [optional] +
    • +
    +
    + Starts a new group of log messages. In appenders that support grouping (currently + PopUpAppender and + InPageAppender), a group appears as an expandable + section in the console, labelled with the name specified. + Specifying initiallyExpanded determines whether the + group starts off expanded (the default is true). Groups may be nested. +
    +
  • +
  • +
    groupEnd
    +
    void groupEnd()
    +
    + Ends the current group. If there is no group then this function has no effect. +
    +
  • +
  • +
    time
    +
    void time(String name, Level level)
    +
    Parameters:
    +
      +
    • + name +
    • +
    • + level + [optional] +
    • +
    +
    + Starts a timer with name name. When the timer is ended with a + call to timeEnd using the same name, the amount of time that + has elapsed in milliseconds since the timer was started is logged at level + level. If not level is supplied, the level defaults to INFO. +
    +
  • +
  • +
    timeEnd
    +
    void timeEnd(String name)
    +
    Parameters:
    +
      +
    • + name +
    • +
    +
    + Ends the timer with name name and logs the time elapsed. +
    +
  • +
  • +
    assert
    +
    void assert(Object expr)
    +
    Parameters:
    +
      +
    • + expr +
    • +
    +
    + Asserts the given expression is true or evaluates to true. + If so, nothing is logged. If not, an error is logged at the ERROR level. +
    +
  • +
+

+ Top +

+
+
+

Appenders

+
+

Appender

+

+ There are methods common to all appenders, as listed below. +

+

Methods

+
    +
  • +
    doAppend
    +
    void doAppend(LoggingEvent loggingEvent)
    +
    Parameters:
    +
      +
    • + loggingEvent +
    • +
    +
    +

    + Checks the logging event's level is at least as severe as the appender's + threshold and calls the appender's append method if so. +

    +

    + This method should not in general be used directly or overridden. +

    +
    +
  • +
  • +
    append
    +
    void append(LoggingEvent loggingEvent)
    +
    Parameters:
    +
      +
    • + loggingEvent +
    • +
    +
    + Appender-specific method to append a log message. Every appender object should implement + this method. +
    +
  • +
  • +
    setLayout
    +
    void setLayout(Layout layout)
    +
    Parameters:
    +
      +
    • + layout +
    • +
    +
    + Sets the appender's layout. +
    +
  • +
  • +
    getLayout
    +
    Layout getLayout()
    +
    + Returns the appender's layout. +
    +
  • +
  • +
    setThreshold
    +
    void setThreshold(Level level)
    +
    Parameters:
    +
      +
    • + level +
    • +
    +
    + Sets the appender's threshold. Log messages of level less severe than this + threshold will not be logged. +
    +
  • +
  • +
    getThreshold
    +
    Level getThreshold()
    +
    + Returns the appender's threshold. +
    +
  • +
  • +
    toString
    +
    string toString()
    +
    + Returns a string representation of the appender. Every appender object should implement + this method. +
    +
  • +
+

+ Top +

+
+
+

AlertAppender

+

Editions: Standard

+

+ Displays a log message as a JavaScript alert. +

+

Constructor

+
    +
  • +
    AlertAppender
    +
    AlertAppender()
    +
  • +
+

+ Top +

+
+
+

AjaxAppender

+

Editions: Standard, Production

+

+ 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 + XmlLayout). +

+

+ The default configuration is to send each log message as a separate HTTP post + request to the server using an HttpPostDataLayout, + without waiting for a response before sending any subsequent requests. However, + an AjaxAppender may be configured to do any one of or combinations of the following: +

+
    +
  • + send log messages in batches (if the selected layout supports it - particularly suited + to AjaxAppender are JsonLayout and + XmlLayout, both of which allow batching); +
  • +
  • + wait for a response from a previous request before sending the next log message / batch + of messages; +
  • +
  • + send all queued log messages at timed intervals. +
  • +
+

Notes

+
    +
  • + AjaxAppender relies on the XMLHttpRequest object. It also requires + the presence of correctly implemented setRequestHeader 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. +
  • +
  • + In AjaxAppender only, setLayout may not be called after the first + message has been logged. +
  • +
  • + The default layout is HttpPostDataLayout. +
  • +
  • + From version 1.4, log message data is always sent as one or more name/value pairs. + In the case of HttpPostDataLayout, data + is sent the same as in previous versions. For other layouts such as + JsonLayout and + XmlLayout, the formatted log message is posted as + the value of a parameter called data, though this may be changed via + setPostVarName. +
  • +
  • + 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. +
  • +
  • +

    + 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 setSendAllOnUnload; see + below. +

    +

    + This behaviour is dependent on window.onbeforeunload; unfortunately, + Opera does not always raise this event, so this feature does not work reliably in + Opera. +

    +
  • +
+

Constructor

+
    +
  • +
    AjaxAppender
    +
    + AjaxAppender(String url) +
    +
    Parameters:
    +
      +
    • + url +
      + 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. +
      +
    • +
    +
  • +
+

Methods

+
    +
  • +
    setSendAllOnUnload
    +
    void setSendAllOnUnload(Boolean sendAllOnUnload)
    +
    +

    + [not available after first message logged] +

    +

    + Whether to send all remaining unsent log messages to the server when the page + unloads. +

    +

    + Since version 1.4.3, the default value is false. Previously the + default was true. +

    +

    Notes

    +
      +
    • + 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. +
    • +
    • + This feature does not work in any version of Opera. +
    • +
    +
    +
  • +
  • +
    isSendAllOnUnload
    +
    Boolean isSendAllOnUnload()
    +
    + Returns whether all remaining unsent log messages are sent to the server when the page unloads. +
    +
  • +
  • +
    setPostVarName
    +
    void setPostVarName(String postVarName)
    +
    +

    + [not available after first message logged] +

    +

    + Sets the post variable name whose value will the formatted log message(s) for + each request. +

    +

    + Default value is data. +

    +

    Notes

    + +
    +
  • +
  • +
    getPostVarName
    +
    String getPostVarName()
    +
    + Returns the post variable name whose value will the formatted log message(s) for + each request. +
    +
  • +
  • +
    setTimed
    +
    void setTimed(Boolean timed)
    +
    +

    + [not available after first message logged] +

    +

    + Whether to send log messages to the server at regular, timed intervals. +

    +

    + Default value is false. +

    +
    +
  • +
  • +
    isTimed
    +
    Boolean isTimed()
    +
    + Returns whether log messages are sent to the server at regular, timed intervals. +
    +
  • +
  • +
    setWaitForResponse
    +
    void setWaitForResponse(Boolean waitForResponse)
    +
    +

    + [not available after first message logged] +

    +

    + Sets whether to wait for a response from a previous HTTP request from this + appender before sending the next log message / batch of messages. +

    +

    + Default value is false. +

    +
    +
  • +
  • +
    isWaitForResponse
    +
    Boolean isWaitForResponse()
    +
    + 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. +
    +
  • +
  • +
    setBatchSize
    +
    void setBatchSize(Number batchSize)
    +
    +

    + [not available after first message logged] +

    +

    + Sets the number of log messages to send in each request. If not specified, + defaults to 1. +

    +

    Notes

    +
      +
    • + 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 sendAllOnUnload + is not set to true, any log messages waiting in the queue will not be sent. +
    • +
    • + If batching is used in conjunction with timed sending of log messages, + messages will still be sent in batches of size batchSize, + 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 sendAllOnUnload is set to true. +
    • +
    +
    +
  • +
  • +
    getBatchSize
    +
    Number getBatchSize()
    +
    + Returns the number of log messages sent in each request. See above for more details. +
    +
  • +
  • +
    setTimerInterval
    +
    void setTimerInterval(Number timerInterval)
    +
    +

    + [not available after first message logged] +

    +

    + Sets the length of time in milliseconds between each sending of queued log + messages. +

    +

    Notes

    +
      +
    • + timerInterval only has an effect in conjunction with + timed (set by setTimed(). If timed + is set to false then timerInterval has no effect. +
    • +
    • + 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 waitForResponse is set to true, + the final response received). This means that the actual interval at + which the queue of messages is cleared cannot be fixed. +
    • +
    +
    +
  • +
  • +
    getTimerInterval
    +
    Number getTimerInterval()
    +
    + Returns the length of time in milliseconds between each sending of queued log + messages. See above for more details. +
    +
  • +
  • +
    setRequestSuccessCallback
    +
    void setRequestSuccessCallback(Function requestSuccessCallback)
    +
    +

    + 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. +

    +

    + A single parameter, xmlHttp, is passed to the callback function. + This is the XMLHttpRequest object that performed the request. +

    +
    +
  • +
  • +
    setFailCallback
    +
    void setFailCallback(Function failCallback)
    +
    +

    + 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. +

    +

    + A single parameter, message, is passed to the callback function. + This is the error-specific message that caused the failure. +

    +
    +
  • +
  • +
    setSessionId
    +
    void setSessionId(String sessionId)
    +
    + Sets the session id sent to the server each time a request is made. +
    +
  • +
  • +
    getSessionId
    +
    String getSessionId()
    +
    + Returns the session id sent to the server each time a request is made. +
    +
  • +
  • +
    addHeader
    +
    void addHeader(String name, + String value)
    +
    +

    + Adds an HTTP header that is sent with each request. +

    +

    + Since: 1.4.3 +

    +
    +
  • +
  • +
    getHeaders
    +
    Array getHeaders()
    +
    + Returns an array of the additional headers that are sent with each HTTP request. + Each array item is an object with properties name and + value. +

    + Since: 1.4.3 +

    +
    +
  • +
  • +
    sendAll
    +
    void sendAll()
    +
    + Sends all log messages in the queue. If log messages are batched then only completed + batches are sent. +
    +
  • +
+

+ Top +

+
+
+

PopUpAppender

+

Editions: Standard

+

+ 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: +

+
    +
  • log messages are colour-coded by severity;
  • +
  • log messages are displayed in a monospace font to allow easy readability;
  • +
  • switchable wrap mode to allow wrapping of long lines
  • +
  • all whitespace in log messages is honoured (except in wrap mode);
  • +
  • filters to show and hide messages of a particular level;
  • +
  • + search facility that allows searching of log messages as you type, with the + following features: +
      +
    • supports regular expressions;
    • +
    • case sensitive or insensitive matching;
    • +
    • buttons to navigate through all the matches;
    • +
    • switch to highlight all matches;
    • +
    • switch to filter out all log messages that contain no matches;
    • +
    • switch to enable or disable the search;
    • +
    • search is dynamically applied to every log message as it is added to the console.
    • +
    +
  • +
  • switch to toggle between logging from the top down and from the bottom up;
  • +
  • switch to turn automatic scrolling when a new message is logged on and off;
  • +
  • switch to turn off all logging to the pop-up (useful if a timer is generating unwanted log messages);
  • +
  • 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;
  • +
  • grouped log messages. Groups may be nested and each has a button to show or hide the log messages in that group;
  • +
  • clear button to allow user to delete all current log messages.
  • +
  • + command prompt with up/down arrow history. Command line functions may be added + to the appender. Several command line functions are built in: +
      +
    • +
      $(String id)
      +
      + Prints a string representation of a single element with the id supplied. +
      +
    • +
    • +
      dir(Object obj)
      +
      + Prints a list of a properties of the object supplied. +
      +
    • +
    • +
      dirxml(HTMLElement el)
      +
      + Prints the XML source code of an HTML or XML element +
      +
    • +
    • +
      cd(Object win)
      +
      + 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). +
      +
    • +
    • +
      clear()
      +
      + Clears the console. +
      +
    • +
    • +
      keys(Object obj)
      +
      + Prints a list of the names of all properties of the object supplied. +
      +
    • +
    • +
      values(Object obj)
      +
      + Prints a list of the values of all properties of the object supplied. +
      +
    • +
    • +
      expansionDepth(Number depth)
      +
      + Sets the number of levels of expansion of objects that are displayed by + the command line. The default value is 1. +
      +
    • +
    +
  • +
+

Notes

+
    +
  • +

    + The default layout for this appender is PatternLayout + with pattern string +

    +

    + %d{HH:mm:ss} %-5p - %m{1}%n +

    +
  • +
+

Constructor

+
    +
  • +
    PopUpAppender
    +
    + PopUpAppender([Boolean lazyInit, + Boolean initiallyMinimized, Boolean useDocumentWrite, + Number width, Number height]) +
    +
    Parameters:
    +
      +
    • + lazyInit + [optional] +
      + Set this to true 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 false. +
      +
    • +
    • + initiallyMinimized + [optional] +
      +

      + Whether the console window should start off hidden / minimized. + If not specified, defaults to false. +

      +
      +
    • +
    • + useDocumentWrite + [optional] +
      +

      + Specifies how the console window is created. By default, the console window is + created dynamically using document's write method. This has the + advantage of keeping all the code in one single JavaScript file. However, if your + page sets document.domain then the browser prevents script access to + a window unless it too has the same value set for document.domain. To + get round this issue, you can set useDocumentWrite to false + and log4javascript will instead use the external HTML file console.html + (or console_uncompressed.html if you're using an uncompressed version of + log4javascript.js), which must be placed in the same directory as your log4javascript.js file. +

      +

      + Note that if useDocumentWrite is set to true, the old pop-up + window will always be closed and a new one created whenever the page is refreshed, even + if setUseOldPopUp(true) has been called. +

      +

      + In general it's simpler to use the document.write method, so unless your + page needs to set document.domain, useDocumentWrite should + be set to true. +

      +

      + If not specified, defaults to true. +

      +
      +
    • +
    • + width + [optional] +
      + The outer width in pixels of the pop-up window. If not specified, + defaults to 600. +
      +
    • +
    • + height + [optional] +
      + The outer height in pixels of the pop-up window. If not specified, + defaults to 400. +
      +
    • +
    +
  • +
+

Methods

+
    +
  • +
    isInitiallyMinimized
    +
    Boolean isInitiallyMinimized()
    +
    + Returns whether the console window starts off hidden / minimized. +
    +
  • +
  • +
    setInitiallyMinimized
    +
    void setInitiallyMinimized(Boolean initiallyMinimized)
    +
    + [not available after initialization] +
    + Sets whether the console window should start off hidden / minimized. +
    +
  • +
  • +
    isFocusPopUp
    +
    Boolean isFocusPopUp()
    +
    + 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 false. +
    +
  • +
  • +
    setFocusPopUp
    +
    void setFocusPopUp(Boolean focusPopUp)
    +
    + Sets whether to focus the pop-up window (i.e. bring it to the front) + when a new log message is added. +
    +
  • +
  • +
    isUseOldPopUp
    +
    Boolean isUseOldPopUp()
    +
    +

    + Returns whether the same pop-up window is used if the main page is + reloaded. If set to true, 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 + true. +

    +

    Notes

    +
      +
    • + 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. +
    • +
    +
    +
  • +
  • +
    setUseOldPopUp
    +
    void setUseOldPopUp(Boolean useOldPopUp)
    +
    + [not available after initialization] +
    + Sets whether to use the same pop-up window if the main page is reloaded. + See isUseOldPopUp above for details. +
    +
  • +
  • +
    isComplainAboutPopUpBlocking
    +
    Boolean isComplainAboutPopUpBlocking()
    +
    + 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 true. +
    +
  • +
  • +
    setComplainAboutPopUpBlocking
    +
    void setComplainAboutPopUpBlocking(Boolean complainAboutPopUpBlocking)
    +
    + [not available after initialization] +
    + 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. +
    +
  • +
  • +
    isNewestMessageAtTop
    +
    Boolean isNewestMessageAtTop()
    +
    + Returns whether new log messages are displayed at the top of the pop-up window. + Default value is false (i.e. log messages are appended to the bottom of the window). +
    +
  • +
  • +
    setNewestMessageAtTop
    +
    void setNewestMessageAtTop(Boolean newestMessageAtTop)
    +
    + Sets whether to display new log messages at the top inside the pop-up window. +
    +
  • +
  • +
    isScrollToLatestMessage
    +
    Boolean isScrollToLatestMessage()
    +
    + Returns whether the pop-up window scrolls to display the latest log message when a new message + is logged. Default value is true. +
    +
  • +
  • +
    setScrollToLatestMessage
    +
    void setScrollToLatestMessage(Boolean scrollToLatestMessage)
    +
    + Sets whether to scroll the pop-up window to display the latest log message when a new message + is logged. +
    +
  • +
  • +
    isReopenWhenClosed
    +
    Boolean isReopenWhenClosed()
    +
    + Returns whether the pop-up window reopens automatically after being closed when a new log message is logged. + Default value is false. +
    +
  • +
  • +
    setReopenWhenClosed
    +
    void setReopenWhenClosed(Boolean reopenWhenClosed)
    +
    + Sets whether to reopen the pop-up window automatically after being closed when a new log message is logged. +
    +
  • +
  • +
    getWidth
    +
    Number getWidth()
    +
    + Returns the outer width in pixels of the pop-up window. +
    +
  • +
  • +
    setWidth
    +
    void setWidth(Number width)
    +
    + [not available after initialization] +
    + Sets the outer width in pixels of the pop-up window. +
    +
  • +
  • +
    getHeight
    +
    Number getHeight()
    +
    + [not available after initialization] +
    + Returns the outer height in pixels of the pop-up window. +
    +
  • +
  • +
    setHeight
    +
    void setHeight(Number height)
    +
    + Sets the outer height in pixels of the pop-up window. +
    +
  • +
  • +
    getMaxMessages
    +
    Number getMaxMessages()
    +
    + 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 null, which means no + limit is applied. +
    +
  • +
  • +
    setMaxMessages
    +
    void setMaxMessages(Number maxMessages)
    +
    + [not available after initialization] +
    + Sets the largest number of messages displayed and stored by the console window. Set + this to null to make this number unlimited. +
    +
  • +
  • +
    isShowCommandLine
    +
    Boolean isShowCommandLine()
    +
    + Returns whether the console includes a command line. + Default value is true. +
    +
  • +
  • +
    setShowCommandLine
    +
    void setShowCommandLine(Boolean showCommandLine)
    +
    + Sets whether the console includes a command line. +
    +
  • +
  • +
    getCommandLineObjectExpansionDepth
    +
    Number getCommandLineObjectExpansionDepth()
    +
    + 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). +
    +
  • +
  • +
    setCommandLineObjectExpansionDepth:
    +
    void setCommandLineObjectExpansionDepth(Number expansionDepth)
    +
    + Sets the number of levels to expand when an object value is logged to the console. +
    +
  • +
  • +
    getCommandWindow
    +
    Window getCommandWindow()
    +
    + Returns a reference to the window in which commands typed into the command line + are currently being executed. +
    +
  • +
  • +
    setCommandWindow
    +
    void setCommandWindow(Window commandWindow)
    +
    + Sets the window in which commands typed into the command line are executed. +
    +
  • +
  • +
    getCommandLayout
    +
    Number getCommandLayout()
    +
    + Returns the layout used to format the output for commands typed into the command line. + The default value is a PatternLayout with + pattern string %m +
    +
  • +
  • +
    setCommandLayout
    +
    void setCommandLayout(Layout commandLayout)
    +
    + Sets the layout used to format the output for commands typed into the command line. +
    +
  • +
  • +
    clear
    +
    void clear()
    +
    + Clears all messages from the console window. +
    +
  • +
  • +
    close
    +
    void close()
    +
    + Closes the pop-up window. +
    +
  • +
  • +
    show
    +
    void show()
    +
    + Opens the pop-up window, if not already open. +
    +
  • +
  • +
    hide
    +
    void hide()
    +
    + Closes the pop-up window. +
    +
  • +
  • +
    focus
    +
    void focus()
    +
    + Brings the console window to the top and gives it the focus. +
    +
  • +
  • +
    focusCommandLine
    +
    void focusCommandLine()
    +
    + Brings the console window to the top and gives the focus to the command line. +
    +
  • +
  • +
    focusSearch
    +
    void focusSearch()
    +
    + Brings the console window to the top and gives the focus to the search box. +
    +
  • +
  • +
    evalCommandAndAppend
    +
    void evalCommandAndAppend(String expr)
    +
    + Evaluates the expression and appends the result to the console. +
    +
  • +
  • +
    addCommandLineFunction
    +
    void addCommandLineFunction(String functionName, Function commandLineFunction)
    +
    +

    + 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. +

    +

    + When you call the function on the command line, commandLineFunction is executed with the + following three parameters: +

    +
      +
    • appender. A reference to the appender in which the command was executed;
    • +
    • args. + An array-like list of parameters passed into the function on the command line + (actually a reference to the arguments object representing the parameters passed + into the function by the user);
    • +
    • returnValue. This is an object with two properties that allow the function to control + how the result is displayed: +
        +
      • appendResult. A boolean value that determines whether the returned value from this + function is appended to the console. The default value is true;
      • +
      • isError. A boolean value that specifies whether the output of this function + should be displayed as an error. The default value is false.
      • +
      +
    • +
    +

    + The value returned by the function is formatted by the command layout and appended to the console. +

    +
    +
  • +
+

+ Top +

+
+
+

InPageAppender

+

Editions: Standard

+

+ Logs messages to a console window in the page. The console is identical + to that used by the PopUpAppender, except + for the absence of a 'Close' button. +

+

Notes

+
    +
  • + 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. +
  • +
  • +

    + The default layout for this appender is PatternLayout + with pattern string +

    +

    + %d{HH:mm:ss} %-5p - %m{1}%n +

    +
  • +
+

Constructor

+
    +
  • +
    InPageAppender
    +
    + InPageAppender(HTMLElement container[, + Boolean lazyInit, Boolean initiallyMinimized, + Boolean useDocumentWrite, String width, String height]) +
    +
    Parameters:
    +
      +
    • + container +
      + The container element for the console window. This should be an HTML element. +
      +
    • +
    • + lazyInit + [optional] +
      + Set this to true 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 true. +
      +
    • +
    • + initiallyMinimized + [optional] +
      +

      + Whether the console window should start off hidden / minimized. + If not specified, defaults to false. +

      +

      Notes

      +
        +
      • + In Safari (and possibly other browsers) hiding an iframe + resets its document, thus destroying the console window. +
      • +
      +
      +
    • +
    • + useDocumentWrite + [optional] +
      +

      + Specifies how the console window is created. By default, the console window is + created dynamically using document's write method. This has the + advantage of keeping all the code in one single JavaScript file. However, if your + page sets document.domain then the browser prevents script access to + a window unless it too has the same value set for document.domain. To + get round this issue, you can set useDocumentWrite to false + and log4javascript will instead use the external HTML file console.html + (or console_uncompressed.html if you're using an uncompressed version of + log4javascript.js), which must be placed in the same directory as your log4javascript.js file. +

      +

      + In general it's simpler to use the document.write method, so unless your + page needs to set document.domain, useDocumentWrite should + be set to true. +

      +

      + If not specified, defaults to true. +

      +
      +
    • +
    • + width + [optional] +
      + The width of the console window. Any valid CSS length may be used. If not + specified, defaults to 100%. +
      +
    • +
    • + height + [optional] +
      + The height of the console window. Any valid CSS length may be used. If not + specified, defaults to 250px. +
      +
    • +
    +
  • +
+

Methods

+
    +
  • +
    addCssProperty
    +
    void addCssProperty(String name, String value)
    +
    + Sets a CSS style property on the HTML element containing the console iframe. +
    +
  • +
  • +
    isVisible
    +
    Boolean isVisible()
    +
    + Returns whether the console window is currently visible. +
    +
  • +
  • +
    isInitiallyMinimized
    +
    Boolean isInitiallyMinimized()
    +
    + Returns whether the console window starts off hidden / minimized. +
    +
  • +
  • +
    setInitiallyMinimized
    +
    void setInitiallyMinimized(Boolean initiallyMinimized)
    +
    + [not available after initialization] +
    + Sets whether the console window should start off hidden / minimized. +
    +
  • +
  • +
    isNewestMessageAtTop
    +
    Boolean isNewestMessageAtTop()
    +
    + Returns whether new log messages are displayed at the top of the console window. +
    +
  • +
  • +
    setNewestMessageAtTop
    +
    void setNewestMessageAtTop(Boolean newestMessageAtTop)
    +
    + Sets whether to display new log messages at the top inside the console window. +
    +
  • +
  • +
    isScrollToLatestMessage
    +
    Boolean isScrollToLatestMessage()
    +
    + Returns whether the pop-up window scrolls to display the latest log message when a new message + is logged. +
    +
  • +
  • +
    setScrollToLatestMessage
    +
    void setScrollToLatestMessage(Boolean scrollToLatestMessage)
    +
    + Sets whether to scroll the console window to display the latest log message when a new message + is logged. +
    +
  • +
  • +
    getWidth
    +
    String getWidth()
    +
    + Returns the outer width of the console window. +
    +
  • +
  • +
    setWidth
    +
    void setWidth(String width)
    +
    + [not available after initialization] +
    + Sets the outer width of the console window. Any valid CSS length may be used. +
    +
  • +
  • +
    getHeight
    +
    String getHeight()
    +
    + Returns the outer height of the console window. +
    +
  • +
  • +
    setHeight
    +
    void setHeight(String height)
    +
    + [not available after initialization] +
    + Sets the outer height of the console window. Any valid CSS length may be used. +
    +
  • +
  • +
    getMaxMessages
    +
    Number getMaxMessages()
    +
    + Returns the largest number of messages displayed and stored by the console window. +
    +
  • +
  • +
    setMaxMessages
    +
    void setMaxMessages(Number maxMessages)
    +
    + [not available after initialization] +
    + Sets the largest number of messages displayed and stored by the console window. Set + this to null to make this number unlimited. +
    +
  • +
  • +
    isShowCommandLine
    +
    Boolean isShowCommandLine()
    +
    + Returns whether the console includes a command line. + Default value is true. +
    +
  • +
  • +
    setShowCommandLine
    +
    void setShowCommandLine(Boolean showCommandLine)
    +
    + Sets whether the console includes a command line. +
    +
  • +
  • +
    getCommandLineObjectExpansionDepth
    +
    Number getCommandLineObjectExpansionDepth()
    +
    + 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). +
    +
  • +
  • +
    setCommandLineObjectExpansionDepth:
    +
    void setCommandLineObjectExpansionDepth(Number expansionDepth)
    +
    + Sets the number of levels to expand when an object value is logged to the console. +
    +
  • +
  • +
    getCommandWindow
    +
    Window getCommandWindow()
    +
    + Returns a reference to the window in which commands typed into the command line + are currently being executed. +
    +
  • +
  • +
    setCommandWindow
    +
    void setCommandWindow(Window commandWindow)
    +
    + Sets the window in which commands typed into the command line are executed. +
    +
  • +
  • +
    getCommandLayout
    +
    Number getCommandLayout()
    +
    + Returns the layout used to format the output for commands typed into the command line. + The default value is a PatternLayout with + pattern string %m +
    +
  • +
  • +
    setCommandLayout
    +
    void setCommandLayout(Layout commandLayout)
    +
    + Sets the layout used to format the output for commands typed into the command line. +
    +
  • +
  • +
    clear
    +
    void clear()
    +
    + Clears all messages from the console window. +
    +
  • +
  • +
    show
    +
    void show()
    +
    +

    + Shows / unhides the console window. +

    +

    Notes

    +
      +
    • + In Safari (and possibly other browsers), hiding an iframe + resets its document, thus destroying the console window. +
    • +
    +
    +
  • +
  • +
    hide
    +
    void hide()
    +
    +

    + Hides / minimizes the console window. +

    +

    Notes

    +
      +
    • + In Safari (and possibly other browsers), hiding an iframe + resets its document, thus destroying the console window. +
    • +
    +
    +
  • +
  • +
    close
    +
    void close()
    +
    + Removes the console window iframe from the main document. +
    +
  • +
  • +
    focus
    +
    void focus()
    +
    + Brings the console window to the top and gives it the focus. +
    +
  • +
  • +
    focusCommandLine
    +
    void focusCommandLine()
    +
    + Brings the console window to the top and gives the focus to the command line. +
    +
  • +
  • +
    focusSearch
    +
    void focusSearch()
    +
    + Brings the console window to the top and gives the focus to the search box. +
    +
  • +
  • +
    evalCommandAndAppend
    +
    void evalCommandAndAppend(String expr)
    +
    + Evaluates the expression and appends the result to the console. +
    +
  • +
  • +
    addCommandLineFunction
    +
    void addCommandLineFunction(String functionName, Function commandLineFunction)
    +
    +

    + 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. +

    +

    + When you call the function on the command line, commandLineFunction is executed with the + following three parameters: +

    +
      +
    • appender. A reference to the appender in which the command was executed;
    • +
    • args. + An array-like list of parameters passed into the function on the command line + (actually a reference to an arguments object);
    • +
    • returnValue. This is an object with two properties that allow the function to control + how the result is displayed: +
        +
      • appendResult. A boolean value that determines whether the returned value from this + function is appended to the console. The default value is true;
      • +
      • isError. A boolean value that specifies whether the output of this function + should be displayed as an error. The default value is false.
      • +
      +
    • +
    +

    + The value returned by the function is formatted by the command layout and appended to the console. +

    +
    +
  • +
+

+ Top +

+
+
+

BrowserConsoleAppender

+

Editions: Standardl

+

+ Writes log messages to the browser's built-in console, if present. This only works + currently in Safari, Opera and Firefox with the excellent + Firebug extension installed. +

+

Notes

+
    +
  • + As of log4javascript 1.3, the default threshold for this appender is DEBUG + as opposed to WARN as it was previously; +
  • +
  • +

    + 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: +

    +
      +
    • log4javascript TRACE, DEBUG -> Firebug debug
    • +
    • log4javascript INFO -> Firebug info
    • +
    • log4javascript WARN -> Firebug warn
    • +
    • log4javascript ERROR, FATAL -> Firebug error
    • +
    +

    + ... and the ability to pass objects into Firebug and take advantage of its object inspection. + This is because the default layout is now NullLayout, + which performs no formatting on an object. +

    +
  • +
+

Constructor

+
    +
  • +
    BrowserConsoleAppender
    +
    BrowserConsoleAppender()
    +
  • +
+

+ Top +

+
+
+
+

Layouts

+
+

Layout

+

+ There are a few methods common to all layouts: +

+

Methods

+
    +
  • +
    format
    +
    String format(LoggingEvent loggingEvent)
    +
    Parameters:
    +
      +
    • + loggingEvent +
    • +
    +
    + Formats the log message. You should override this method in your own layouts. +
    +
  • +
  • +
    ignoresThrowable
    +
    Boolean ignoresThrowable()
    +
    + Returns whether the layout ignores an error object in a logging event passed + to its format method. +
    +
  • +
  • +
    getContentType
    +
    String getContentType()
    +
    + Returns the content type of the output of the layout. +
    +
  • +
  • +
    allowBatching
    +
    Boolean allowBatching()
    +
    + Returns whether the layout's output is suitable for batching. + JsonLayout and XmlLayout + are the only built-in layouts that return true for this method. +
    +
  • +
  • +
    getDataValues
    +
    Array getDataValues(LoggingEvent loggingEvent)
    +
    Parameters:
    +
      +
    • + loggingEvent +
    • +
    +
    + Used internally by log4javascript in constructing formatted output for some layouts. +
    +
  • +
  • +
    setKeys
    +
    void setKeys(String loggerKey, + String timeStampKey, String levelKey, String messageKey, + String exceptionKey, String urlKey)
    +
    Parameters:
    +
      +
    • + loggerKey +
      + Parameter to use for the log message's logger name. Default is logger. +
      +
    • +
    • + timeStampKey +
      + Parameter to use for the log message's timestamp. Default is timestamp. +
      +
    • +
    • + levelKey +
      + Parameter to use for the log message's level. Default is level. +
      +
    • +
    • + messageKey +
      + Parameter to use for the message itself. Default is message. +
      +
    • +
    • + exceptionKey +
      + Parameter to use for the log message's error (exception). Default is exception. +
      +
    • +
    • + urlKey +
      + Parameter to use for the current page URL. Default is url. +
      +
    • +
    +
    + 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 + JsonLayout and + HttpPostDataLayout. +
    +
  • +
  • +
    setCustomField
    +
    void setCustomField(String name, + String value)
    +
    Parameters:
    +
      +
    • + name +
      + Name of the custom property you wish to be included in the formmtted output. +
      +
    • +
    • + value +
      + Value of the custom property you wish to be included in the formatted output. +
      +
    • +
    +
    + Some layouts (JsonLayout, + HttpPostDataLayout, + PatternLayout and + XmlLayout) 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 value. +
    +

    Notes

    +
      +
    • +

      + 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: +

      +
        +
      • layout. A reference to the layout being used;
      • +
      • loggingEvent. A reference to the logging event being formatted.
      • +
      +
    • +
    +
  • +
  • +
    hasCustomFields
    +
    Boolean hasCustomFields()
    +
    + Returns whether the layout has any custom fields. +
    +
  • +
+

+ Top +

+
+
+

NullLayout

+

Editions: All

+

+ The most basic layout. NullLayout's format() methods performs no + formatting at all and simply returns the message logged. +

+

Constructor

+
    +
  • +
    NullLayout
    +
    NullLayout()
    +
  • +
+

+ Top +

+
+
+

SimpleLayout

+

Editions: Standard, Production

+

+ Provides basic formatting. SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, +

+

DEBUG - Hello world

+

Constructor

+
    +
  • +
    SimpleLayout
    +
    SimpleLayout()
    +
  • +
+

+ Top +

+
+
+

PatternLayout

+

Editions: All

+

+ 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 PatternLayout + 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. +

+

+ The conversion pattern consists of literal text interspersed with special strings starting with + a % symbol called conversion specifiers. A conversion specifier consists of the + % symbol, a conversion character (possible characters are listed below) and + format modifiers. For full documentation of the conversion pattern, see + log4j's + documentation. Below is a list of all conversion characters available in log4javascript. +

+

Conversion characters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Conversion CharacterEffect
a +

+ Outputs log messages specified as an array. +

+

+ Behaves exactly like %m, except that multiple log messages are + assumed to have been specified in the logging call as an array rather than + as multiple parameters. +

+

+ Since: 1.4 +

+
c +

+ Outputs the logger name. +

+
d +

+ Outputs the date of the logging event. The date conversion specifier + may be followed by a date format specifier enclosed between braces. For + example, %d{HH:mm:ss,SSS} or + %d{dd MMM yyyy HH:mm:ss,SSS}. If no date + format specifier is given then ISO8601 format is assumed. +

+

+ The date format specifier is the same as that used by Java's + SimpleDateFormat. log4javascript + includes a full implementation of SimpleDateFormat's + format method, with the exception of the pattern letter + 'z', (string representation of the timezone) for which the information + is not available in JavaScript. +

+
f +

+ 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. +

+

+ Since: 1.3 +

+
m +

+ Outputs the log messages of the logging event (i.e. the log + messages supplied by the client code). +

+

+ As of version 1.4, multiple log messages may be supplied to logging calls. + %m displays each log message (using the rules below) one after + another, separated by spaces. +

+

+ 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, %m{1} 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 [object Object]. +

+
n +

+ Outputs a line separator. +

+
p +

+ Outputs the level of the logging event. +

+
r +

+ Outputs the number of milliseconds since log4javascript was initialized. +

+
% +

+ The sequence %% outputs a single percent sign. +

+
+

Static properties

+
    +
  • +
    TTCC_CONVERSION_PATTERN
    +
    + Built-in conversion pattern, equivalent to %r %p %c - %m%n. +
    +
  • +
  • +
    DEFAULT_CONVERSION_PATTERN
    +
    + Built-in conversion pattern, equivalent to %m%n. +
    +
  • +
  • +
    ISO8601_DATEFORMAT
    +
    + Built-in date format (and also the default), equivalent to + yyyy-MM-dd HH:mm:ss,SSS. +
    +
  • +
  • +
    DATETIME_DATEFORMAT
    +
    + Built-in date format, equivalent to dd MMM YYYY HH:mm:ss,SSS. +
    +
  • +
  • +
    ABSOLUTETIME_DATEFORMAT
    +
    + Built-in date format, equivalent to HH:mm:ss,SSS. +
    +
  • +
+

Constructor

+
    +
  • +
    PatternLayout
    +
    PatternLayout(String pattern)
    +
    Parameters:
    +
      +
    • + pattern +
      + The conversion pattern string to use. +
      +
    • +
    +
  • +
+

+ Top +

+
+
+

XmlLayout

+

Editions: Standard, Production

+

+ Based on log4j's XmlLayout, this layout formats a log message as a + fragment of XML. An example of the format of the fragment is as follows: +

+
+<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>
+
+

Notes

+
    +
  • + This layout supports batching of log messages when used in an + AjaxAppender. A batch of + messages is simply concatenated to form a string of several XML + frgaments similar to that above. +
  • +
  • + The <log4javascript:exception> element is only present if an + exception was passed into the original log call. +
  • +
  • + 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 + Date object's standard measurement. +
  • +
  • + Also as of version 1.4, multiple messages may be specified as separate parameters + in a single logging call. In XmlLayout, multiple messages may be + formatted as a single combined message or may be formated as several + <log4javascript:message> elements inside one + <log4javascript:messages> element as shown below: +
    +
    +<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>
    +
    +
  • +
  • + 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 <log4javascript:event> + tag: +
    +
    +<log4javascript:customfield name="sessionid"><![CDATA[1234]]></log4javascript:customfield>
    +
    +
  • +
+

Constructor

+
    +
  • +
    XmlLayout
    +
    XmlLayout([Boolean combineMessages])
    +
      +
    • + combineMessages +
      + Whether or not to format multiple log messages as a combined single + <log4javascript:message> element + composed of each individual message separated by line breaks or to include + a <log4javascript:message> element for each message inside + one <log4javascript:messages> element. + If not specified, defaults to true. +
      +
    • +
    +
  • +
+

+ Top +

+
+
+

JsonLayout

+

Editions: Standard, Production

+

+ 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 + json.org for more details + about JSON. +

+

Example:

+
+{
+	"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"
+}
+
+

+ The exception property is only present if an exception was passed + into the original log call. +

+

Notes

+
    +
  • + This layout supports batching of log messages when used in an + AjaxAppender. 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. +
  • +
  • +

    + 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: +

    +
    +	"sessionid": 1234
    +
    +
  • +
  • + From version 1.4, the variable names used for log event properties such as + the message, timestamp and exception are specified using the setKeys() + method of Layout. +
  • +
  • +

    + Also as of version 1.4, multiple messages may be specified as separate parameters + in a single logging call. In JsonLayout, multiple messages may be + formatted as a single combined message or may be formated as an array of messages + as shown below: +

    +
    +{
    +	"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"
    +}
    +
    +
  • +
+

Constructor

+
    +
  • +
    JsonLayout
    +
    JsonLayout([Boolean readable, Boolean combineMessages])
    +
    Parameters:
    +
      +
    • + readable +
      + Whether or not to format each log message with line breaks and tabs. + If not specified, defaults to false. +
      +
    • +
    • + combineMessages +
      + Whether or not to format multiple log messages as a combined single + message property composed of each individual message separated by line + breaks or to format multiple messages as an array. + If not specified, defaults to true. +
      +
    • +
    +
  • +
+

Methods

+
    +
  • +
    isReadable
    +
    Boolean isReadable()
    +
    + Returns whether or not to each log message is formatted with line breaks and tabs. +
    +

    Notes

    +
      +
    • +

      + setReadable has been removed in version 1.4. This property can + be set via the constructor. +

      +
    • +
    +
  • +
+
+
+

HttpPostDataLayout

+

Editions: Standard, Production

+

+ 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 + AjaxAppender. +

+

Constructor

+
    +
  • +
    HttpPostDataLayout
    +
    HttpPostDataLayout()
    +
  • +
+

Notes

+
    +
  • + 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. +
  • +
  • + From version 1.4, the variable names used for log event properties such as + the message, timestamp and exception are specified using the setKeys() + method of Layout. +
  • +
+

+ Top +

+
+
+
+

Enabling / disabling log4javascript

+

+ All logging can be enabled or disabled in log4javascript in a number of ways: +

+
    +
  • + At any time, you can call + log4javascript.setEnabled(enabled). This will + enable or disable all logging, depending on whether enabled + is set to true or false. +
  • +
  • +

    + Assign a value to the global variable log4javascript_disabled. + 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 before 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: +

    +

    + var log4javascript_disabled = true; +

    +
  • +
  • + Assign your logger object a value of log4javascript.getNullLogger(). +
  • +
  • + 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. +
  • +
+

+ Top +

+
+
+

log4javascript error handling

+

+ log4javascript has a single rudimentary logger-like object of its own to handle + messages generated by log4javascript itself. This logger is called LogLog + and is accessed via log4javascript.logLog. +

+
+

Methods

+
    +
  • +
    setQuietMode
    +
    void setQuietMode(Boolean quietMode)
    +
    Parameters:
    +
      +
    • + quietMode +
      + Whether to turn quiet mode on or off. +
      +
    • +
    +
    + Sets whether LogLog is in quiet mode or not. In quiet mode, no + messages sent to LogLog have any visible effect. By default, + quiet mode is switched off. +
    +
  • +
  • +
    setAlertAllErrors
    +
    void setAlertAllErrors(Boolean alertAllErrors)
    +
    Parameters:
    +
      +
    • + showAllErrors +
      + Whether to show all errors or just the first. +
      +
    • +
    +
    + Sets how many errors LogLog 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 true to this method then all errors + will generate alerts. +
    +
  • +
  • +
    debug
    +
    void debug(String message[, Error exception])
    +
    Parameters:
    +
      +
    • + message +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs a debugging message to an in-memory list. This implementation is new in version 1.4. +
    +
  • +
  • +
    displayDebug
    +
    void displayDebug()
    +
    + Displays an alert of all debugging messages. This method is new in version 1.4. +
    +
  • +
  • +
    warn
    +
    void warn(String message[, Error exception])
    +
    Parameters:
    +
      +
    • + message +
    • +
    • + exception + [optional] +
    • +
    +
    + Currently has no effect. +
    +
  • +
  • +
    error
    +
    void error(String message[, Error exception])
    +
    Parameters:
    +
      +
    • + message +
    • +
    • + exception + [optional] +
    • +
    +
    + Generates an alert to the user if and only if the error is the first one + encountered and setAlertAllErrors(true) has not been called. +
    +
  • +
+

+ Top +

+
+
+
+

Differences between log4javascript and log4j

+

+ 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: +

+
    +
  • Filters
  • +
  • Configurators
  • +
  • Renderers
  • +
+

+ Top +

+
+
+ +
+ + + 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 @@ + + + + + log4javascript 1.4 Lite manual + + + + + + + +
+ +
+ +

log4javascript 1.4 Lite manual

+

Contents

+ +
+

Introduction

+

+ 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. +

+

+ 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 named and called identically to the equivalent + function in log4javascript. Please refer to the + log4javascript manual for a detailed explanation + of all the concepts alluded to in this document. +

+

+ Top +

+
+
+

log4javascript static properties/methods

+

Properties

+
    +
  • +
    version
    +
    + The version number of your copy of log4javascript. +
    +
  • +
  • +
    edition
    +
    + The edition of your copy of log4javascript ("log4javascript_lite" in this case"). +
    +
  • +
+

Methods

+
    +
  • +
    getDefaultLogger
    +
    Logger getDefaultLogger()
    +
    + Returns the default and only logger (apart from the null logger). The default logger + logs to a simple pop-up window. +
    +
  • +
  • +
    getNullLogger
    +
    Logger getNullLogger()
    +
    + Returns an empty logger. Useful for disabling all logging. +
    +
  • +
  • +
    setEnabled
    +
    void setEnabled(Boolean enabled)
    +
    Parameters:
    +
      +
    • + enabled +
    • +
    +
    + Enables or disables all logging, depending on enabled. +
    +
  • +
  • +
    isEnabled
    +
    Boolean isEnabled()
    +
    + Returns true or false depending on whether logging is enabled. +
    +
  • +
  • +
    setShowStackTraces
    +
    void setShowStackTraces(Boolean show)
    +
    Parameters:
    +
      +
    • + show +
    • +
    +
    + Enables or disables displaying of error stack traces, depending on show. + By default, stack traces are not displayed. (Only works in Firefox) +
    +
  • +
+

+ Top +

+
+
+

Levels

+

+ Levels are available as static properties of the log4javascript.Level + object. In ascending order of severity: +

+
    +
  1. log4javascript.Level.ALL
  2. +
  3. log4javascript.Level.TRACE
  4. +
  5. log4javascript.Level.DEBUG
  6. +
  7. log4javascript.Level.INFO
  8. +
  9. log4javascript.Level.WARN
  10. +
  11. log4javascript.Level.ERROR
  12. +
  13. log4javascript.Level.FATAL
  14. +
  15. log4javascript.Level.NONE
  16. +
+

+ Top +

+
+
+

Loggers

+

+ There are only two loggers in log4javascript Lite: the default logger obtained + by calling log4javascript.getDefaultLogger() and the empty logger + returned by log4javascript.getNullLogger(). +

+

Logger methods

+
    +
  • +
    setLevel
    +
    void setLevel(Level level)
    +
    Parameters:
    +
      +
    • + level +
    • +
    +
    + Sets the level. Log messages of a lower level than level will not be logged. + Default value is ALL (unlike in log4javascript, where the default level is + DEBUG). +
    +
  • +
  • +
    getLevel
    +
    Level getLevel()
    +
    + Returns the level for this logger. +
    +
  • +
  • +
    trace
    +
    void trace(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level TRACE. +
    +
  • +
  • +
    debug
    +
    void debug(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level DEBUG. +
    +
  • +
  • +
    info
    +
    void info(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level INFO. +
    +
  • +
  • +
    warn
    +
    void warn(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level WARN. +
    +
  • +
  • +
    error
    +
    void error(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level ERROR. +
    +
  • +
  • +
    fatal
    +
    void fatal(Object message1[, Object message2, ... ][, Error exception])
    +
    Parameters:
    +
      +
    • + message1[, message2...] +
    • +
    • + exception + [optional] +
    • +
    +
    + Logs one or more messages and optionally an error at level FATAL. +
    +
  • +
  • +
    isEnabledFor
    +
    Boolean isEnabledFor(Level level, Error exception)
    +
    Parameters:
    +
      +
    • + level +
    • +
    +
    + Returns whether the logger is enabled for the specified level. +
    +
  • +
  • +
    isTraceEnabled
    +
    Boolean isTraceEnabled()
    +
    + Returns whether the logger is enabled for TRACE messages. +
    +
  • +
  • +
    isDebugEnabled
    +
    Boolean isDebugEnabled()
    +
    + Returns whether the logger is enabled for DEBUG messages. +
    +
  • +
  • +
    isInfoEnabled
    +
    Boolean isInfoEnabled()
    +
    + Returns whether the logger is enabled for INFO messages. +
    +
  • +
  • +
    isWarnEnabled
    +
    Boolean isWarnEnabled()
    +
    + Returns whether the logger is enabled for WARN messages. +
    +
  • +
  • +
    isErrorEnabled
    +
    Boolean isErrorEnabled()
    +
    + Returns whether the logger is enabled for ERROR messages. +
    +
  • +
  • +
    isFatalEnabled
    +
    Boolean isFatalEnabled()
    +
    + Returns whether the logger is enabled for FATAL messages. +
    +
  • +
+

+ Top +

+
+
+

Enabling / disabling log4javascript Lite

+

+ All logging can be enabled or disabled in log4javascript Lite in a number of ways: +

+
    +
  • + At any time, you can call + log4javascript.setEnabled(enabled). This will + enable or disable all logging, depending on whether enabled + is set to true or false. +
  • +
  • + Assign your logger object a value of log4javascript.getNullLogger(). +
  • +
  • + 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. +
  • +
+

+ Top +

+
+
+ +
+ + + 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 @@ + + + + + log4javascript quick start tutorial + + + + + + + +
+ +
+ +

log4javascript quick start tutorial

+

Three step guide

+
    +
  1. +

    Download the code

    +

    + Unzip the distribution and copy log4javascript.js into the desired + location. No other files are necessary. +

    +
  2. +
  3. +

    Initialize log4javascript in your web page

    +

    + Include log4javascript.js in your page using the code below. This + code assumes log4javascript is stored in the same directory as + your web page. +

    +
    +<script type="text/javascript" src="log4javascript.js"></script>
    +<script type="text/javascript">
    +	var log = log4javascript.getDefaultLogger();
    +</script>
    +
    +

    + The default logger uses a PopUpAppender + 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. +

    +
  4. +
  5. +

    Include logging statements in your code

    +

    + 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: +

    +
      +
    • log.trace(message[, message2, ... ][, exception])
    • +
    • log.debug(message[, message2, ... ][, exception])
    • +
    • log.info(message[, message2, ... ][, exception])
    • +
    • log.warn(message[, message2, ... ][, exception])
    • +
    • log.error(message[, message2, ... ][, exception])
    • +
    • log.fatal(message[, message2, ... ][, exception])
    • +
    +

    + And that's it, log away. Below are some examples of common types of logging. +

    +
  6. +
+

Logging examples

+
    +
  1. +

    A simple logging message string

    +
    +	log.info("Hello world");
    +
    +displays +
    +19:52:03 INFO  - Hello world
    +
    +
  2. +
  3. +

    Logging an error with a message

    +
    +	try {
    +		throw new Error("Faking something going wrong!");
    +	} catch (e) {
    +		log.error("An error occurred", e);
    +	}
    +
    +displays +
    +19:52:32 ERROR - An error occurred
    +Exception: Faking something going wrong! on line number 80 in file basic.html
    +
    +
  4. +
  5. +

    Logging multiple messages with one logging call

    +
    +	var a = "Hello";
    +	var b = 3;
    +	log.debug(a, b);
    +
    +displays +
    +19:53:05 DEBUG  - Hello 3
    +
    +
  6. +
  7. +

    Logging an object

    +

    Logging an object:

    +
    +	var obj = new Object();
    +	obj.name = "Octopus";
    +	obj.tentacles = 8;
    +	log.info(obj);
    +
    +displays +
    +19:53:17 INFO  - {
    +	name: Octopus,
    +	tentacles: 8
    +}
    +
    +
  8. +
+

Tweaking the default logger

+

+ 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)? +

+

+ In this case, you will need to create a new logger, then create a + PopUpAppender, set options + on it, and add it to the logger: +

+
+<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>
+
+

+ See this example in action (opens in new window) +

+

+ Refer to the manual for more information about + configuring appenders and more + details about PopUpAppender. +

+

Sending log messages to the server

+

+ For this you will need to use an AjaxAppender + as follows: +

+
+	var ajaxAppender = new log4javascript.AjaxAppender(URL);
+	log.addAppender(ajaxAppender);
+
+

+ 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. +

+

+ See AjaxAppender for more details + on formatting log messages. +

+

Changing the format of log messages

+

+ Using a Layout, you can + format log messages however you like. For example: +

+
+	var log = log4javascript.getLogger("mylogger");
+	var popUpAppender = new log4javascript.PopUpAppender();
+	var layout = new log4javascript.PatternLayout("[%-5p] %m");
+	popUpAppender.setLayout(layout);
+
+

A call to

+
+	log.debug("Hello world");
+
+

will now result in output in the pop-up window of

+
+[DEBUG] Hello world
+
+

+ See PatternLayout for more details + on formatting log messages. +

+
+ +
+ + + 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 @@ + + + + + log4javascript - what's new in version 1.4 + + + + + + + +
+ +
+ +

log4javascript - what's new in version 1.4

+
    +
  • + log4javascript now comes in three different editions: Standard, Production + and Lite. Full details here. +
  • +
  • + 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. +
  • +
  • + The logging console used by PopUpAppender and + InPageAppendernow 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. +
  • +
  • + It is now possible to specify multiple messages in a single log call. +
  • +
  • + Log messages may be grouped in the logging console. +
  • +
  • + Built-in timers. +
  • +
  • + Improved AjaxAppender, 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. +
  • +
  • + Support for IE8 beta 2. +
  • +
  • + Many minor enhancements and bug fixes. See the change log for full + details. +
  • +
+

+ Please note that there are a few minor incompatibilities + with earlier versions of log4javascript. +

+
+ +
+ + + 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 @@ + + + + + log4javascript demo redirect + + + + + + + + This page has been replaced by the basic demo page. + Please use this link if you are not redirected automatically. + + 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 @@ + + + + + log4javascript example from manual + + + + + + + + +

log4javascript example from manual

+ + + + 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 @@ + + + + + log4javascript quick start example 1 + + + + + + + + +

log4javascript quick start example 1

+ + + + 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 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 @@ + + + +log4javascript + + + + + + + + + + +
+
+
+Filters: + + + + + + + +
+ +
+Options: + + + + + + + +
+
+
+
+
+
+ + +
+
+ + 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 @@ + + + + log4javascript + + + + + + + + + + + +
+
+
+ Filters: + + + + + + + +
+ +
+ Options: + + + + + + + +
+
+
+
+
+
+ + +
+
+ + 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 @@ + + + +log4javascript + + + + + + + +
+Options: + + + +
+
+ + \ 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 @@ + + + + log4javascript + + + + + + + + +
+ Options: + + + +
+
+ + \ 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;i0){var firstItem=this[0];for(var i=0,len=this.length-1;i2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i=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;i1&&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;i0)?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;i0);},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(/\]\]>/,"]]>]]>";} +var str=""+newLine;if(this.combineMessages){str+=formatMessage(loggingEvent.getCombinedMessages());}else{str+=""+newLine;for(i=0,len=loggingEvent.messages.length;i"+newLine;}} +if(loggingEvent.exception){str+=""+newLine;} +str+=""+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;i0){objectsExpanded.push(obj);expansion="["+newLine;childDepth=depth-1;childIndentation=indentation+" ";childLines=[];for(i=0,len=obj.length;i0){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()=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=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;i0&&(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=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','','','log4javascript','','','','','','','','','','','
','
','
','Filters:','','','','','','','','
','','
','Options:','','','','','','','','
','
','
','
','
','
','','','
','
','','',''];};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";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]*>","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"+newLine;case nodeTypes.DOCUMENT_NODE:xhtml="";for(var i=0,len=rootNode.childNodes.length;i0){var firstItem=this[0];for(var i=0,len=this.length-1;i=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['','','','log4javascript','','','','','','','','
','Options:','','','','
','
','',''];};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;i0){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 [ +'', +'', +' ', +' log4javascript', +' ', +' ', +' ', +' ', +' ', +' ', +'', +' ', +'
', +' Options:', +' ', +' ', +' ', +'
', +'
', +' ', +'' +]; + }; + + 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;i0){var firstItem=this[0];for(var i=0,len=this.length-1;i2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i=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;i1&&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;i0)?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;i0);},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(/\]\]>/,"]]>]]>";} +var str=""+newLine;if(this.combineMessages){str+=formatMessage(loggingEvent.getCombinedMessages());}else{str+=""+newLine;for(i=0,len=loggingEvent.messages.length;i"+newLine;}} +if(loggingEvent.exception){str+=""+newLine;} +str+=""+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;i0){objectsExpanded.push(obj);expansion="["+newLine;childDepth=depth-1;childIndentation=indentation+" ";childLines=[];for(i=0,len=obj.length;i0){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()=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=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;i0&&(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=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 + * 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(/\]\]>/, "]]>]]>"; + } + + var str = "" + newLine; + if (this.combineMessages) { + str += formatMessage(loggingEvent.getCombinedMessages()); + } else { + str += "" + newLine; + for (i = 0, len = loggingEvent.messages.length; i < len; i++) { + str += formatMessage(loggingEvent.messages[i]) + newLine; + } + str += "" + newLine; + } + if (this.hasCustomFields()) { + for (i = 0, len = this.customFields.length; i < len; i++) { + str += "" + newLine; + } + } + if (loggingEvent.exception) { + str += "" + newLine; + } + str += "" + 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 + * 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(/\]\]>/, "]]>]]>"; + } + + var str = "" + newLine; + if (this.combineMessages) { + str += formatMessage(loggingEvent.getCombinedMessages()); + } else { + str += "" + newLine; + for (i = 0, len = loggingEvent.messages.length; i < len; i++) { + str += formatMessage(loggingEvent.messages[i]) + newLine; + } + str += "" + newLine; + } + if (this.hasCustomFields()) { + for (i = 0, len = this.customFields.length; i < len; i++) { + str += "" + newLine; + } + } + if (loggingEvent.exception) { + str += "" + newLine; + } + str += "" + 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 [ +'', +'', +' ', +' log4javascript', +' ', +' ', +' ', +' ', +' ', +' ', +' ', +' ', +' ', +'', +' ', +'
', +'
', +'
', +' Filters:', +' ', +' ', +' ', +' ', +' ', +' ', +' ', +'
', +' ', +'
', +' Options:', +' ', +' ', +' ', +' ', +' ', +' ', +' ', +'
', +'
', +'
', +'
', +'
', +'
', +' ', +' ', +'
', +'
', +' ', +'', +'' +]; + }; + + 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 = ""; + 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(/]*>", "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 "" + 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\s*<\/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(/^\s*<\/log4javascript:message>\s*\s*<\/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('^\\s*\\s*\\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('^\\s*\\s*\\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('^\\s*\\s*\\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\s*<\/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(/^\s*<\/log4javascript:message>\s*\s*<\/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('^\\s*\\s*\\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('^\\s*\\s*\\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('^\\s*\\s*\\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(/^\s*<\/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(/^\s*<\/log4javascript:message>\s*\s*<\/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('^\\s*\\s*\\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('^\\s*\\s*\\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('^\\s*\\s*\\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(/^\s*<\/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(/^\s*<\/log4javascript:message>\s*\s*<\/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('^\\s*\\s*\\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('^\\s*\\s*\\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('^\\s*\\s*\\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;i0){var firstItem=this[0];for(var i=0,len=this.length-1;i2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i=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;i1&&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;i0)?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;i0);},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(/\]\]>/,"]]>]]>";} +var str=""+newLine;if(this.combineMessages){str+=formatMessage(loggingEvent.getCombinedMessages());}else{str+=""+newLine;for(i=0,len=loggingEvent.messages.length;i"+newLine;}} +if(loggingEvent.exception){str+=""+newLine;} +str+=""+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;i0){objectsExpanded.push(obj);expansion="["+newLine;childDepth=depth-1;childIndentation=indentation+" ";childLines=[];for(i=0,len=obj.length;i0){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()=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=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;i0&&(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=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','','','log4javascript','','','','','','','','','','','
','
','
','Filters:','','','','','','','','
','','
','Options:','','','','','','','','
','
','
','
','
','
','','','
','
','','',''];};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";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]*>","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"+newLine;case nodeTypes.DOCUMENT_NODE:xhtml="";for(var i=0,len=rootNode.childNodes.length;i + * 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(/\]\]>/, "]]>]]>
"; + } + + var str = "" + newLine; + if (this.combineMessages) { + str += formatMessage(loggingEvent.getCombinedMessages()); + } else { + str += "" + newLine; + for (i = 0, len = loggingEvent.messages.length; i < len; i++) { + str += formatMessage(loggingEvent.messages[i]) + newLine; + } + str += "" + newLine; + } + if (this.hasCustomFields()) { + for (i = 0, len = this.customFields.length; i < len; i++) { + str += "" + newLine; + } + } + if (loggingEvent.exception) { + str += "" + newLine; + } + str += "" + 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 [ +'', +'', +' ', +' log4javascript', +' ', +' ', +' ', +' ', +' ', +' ', +' ', +' ', +' ', +'', +' ', +'
', +'
', +'
', +' Filters:', +' ', +' ', +' ', +' ', +' ', +' ', +' ', +'
', +' ', +'
', +' Options:', +' ', +' ', +' ', +' ', +' ', +' ', +' ', +'
', +'
', +'
', +'
', +'
', +'
', +' ', +' ', +'
', +'
', +' ', +'', +'' +]; + }; + + 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 = ""; + 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(/]*>", "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 "" + 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 @@ + + + + + log4javascript - Tests + + + + + 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 @@ + + + + + log4javascript - log4javascript - Tests + + + + + + + +
+
+ + 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 @@ + + + + + log4javascript - log4javascript_lite - Tests + + + + + + + +
+
+ + 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 @@ + + + + + log4javascript - log4javascript_lite_uncompressed - Tests + + + + + + + +
+
+ + 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 @@ + + + + + log4javascript - log4javascript_production - Tests + + + + + + + +
+
+ + 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 @@ + + + + + log4javascript - log4javascript_production_uncompressed - Tests + + + + + + + +
+
+ + 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 @@ + + + + + log4javascript - log4javascript_uncompressed - Tests + + + + + + + +
+
+ + 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 @@ + + + + + log4javascript - %%build:edition%% - Tests + + + + + + + +
+
+ + 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, "
"); + } + 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 @@ width: 100%; 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 @@ margin-bottom: 5px; } -/*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 @@ padding-left: 5px; .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 @@ background-image: url("right_arrow.png"); .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 @@ line-height: 0; .left-nav>ul>li.active>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;*/ +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: #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: 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; -color:#ffffff; +/*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 @@ vertical-align: middle; */ -.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 @@ background-color: #ffffff; }*/ .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 @@ padding-left: 45px; /*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 @@ border: none; .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 @@ background-repeat: no-repeat; width: 265px; } +/** Leave room for scroll bar now that contents can be appropriately scrolled **/ +.form-horizontal .inline-group .add-row { + margin: -1px -1px 15px 0px; +} -.header{ -background-color: #000000; -background-image: url('bg2.jpg'); -background-size: 100% auto; +/** 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 @@ background-color:#ffffff; .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 { @@ -402,9 +659,6 @@ height: 84.5%; #wrap { 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; @@ -429,7 +683,8 @@ height: 84.5%; } .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 @@ height: 84.5%; } .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 @@ height:22px; 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 @@ background-image: url("Users_over.png"); .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 @@ sys.path.append('.') 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" + +# 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") -g = globals() 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.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, 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 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(admin.TabularInline): +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 OriginServerAdmin(admin.ModelAdmin): +class ContentProviderROInline(ReadOnlyTabularInline): + model = ContentProvider + extra = 0 + suit_classes = 'suit-tab suit-tab-cps' + +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 @@ class CDNPrefixForm(forms.ModelForm): '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 ContentProvider(PlCoreBase): 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 @@ class ContentProvider(PlCoreBase): 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 @@ class CDNPrefix(PlCoreBase): 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("%s" % str(row[key])) + new_rows.append("%s" % "".join(new_row)) + + new_result = "%s
" % "\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 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 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 @@ if (not observer_disabled): 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 @@ class SliverDeleter(Deleter): 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 openstack.driver import OpenStackDriver 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 @@ logger = Logger(level=logging.INFO) 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 @@ class PlanetStackObserver: 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 @@ class PlanetStackObserver: 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 @@ class PlanetStackObserver: 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 - - 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(S) - self.save_run_times() - except: - logger.log_exc("Exception in observer run loop") - traceback.print_exc() + 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 + + while True: + try: + self.wait_for_event(timeout=30) + except: + logger.log_exc("Exception in observer wait for event") + 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 @@ from fofum import Fofum 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 @@ class EventHandler: if hasattr(self, event): return getattr(self, event)(*args, **kwds) - + class EventSender: def __init__(self,user=None,clientid=None): try: @@ -47,8 +71,8 @@ class EventSender: 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 @@ class EventListener: 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 @@ class EventListener: 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 django.db.models import F, Q 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 @@ class GarbageCollector(OpenStackSyncStep): 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 @@ class GarbageCollector(OpenStackSyncStep): 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 @@ class GarbageCollector(OpenStackSyncStep): 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 @@ class GarbageCollector(OpenStackSyncStep): 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 @@ class GarbageCollector(OpenStackSyncStep): 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 @@ class GarbageCollector(OpenStackSyncStep): 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 @@ class GarbageCollector(OpenStackSyncStep): 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 @@ class GarbageCollector(OpenStackSyncStep): 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 @@ class GarbageCollector(OpenStackSyncStep): 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 @@ class SyncImages(OpenStackSyncStep): 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 @@ class SyncNetworkSlivers(OpenStackSyncStep): 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 @@ class SyncNetworks(OpenStackSyncStep): 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 @@ class SyncNodes(OpenStackSyncStep): 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 observer.openstacksyncstep import OpenStackSyncStep 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 @@ class SyncRoles(OpenStackSyncStep): 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 django.db.models import F, Q 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 @@ class SyncSitePrivileges(OpenStackSyncStep): 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 @@ class SyncSites(OpenStackSyncStep): 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 django.db.models import F, Q 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 @@ class SyncSliceMemberships(OpenStackSyncStep): 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 netaddr import IPAddress, IPNetwork 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 @@ class SyncSlices(OpenStackSyncStep): 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 @@ class SyncSliverIps(OpenStackSyncStep): 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 @@ class SyncSliverIps(OpenStackSyncStep): 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 django.db.models import F, Q 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 @@ class SyncSlivers(OpenStackSyncStep): 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 @@ class SyncSlivers(OpenStackSyncStep): 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 @@ import hashlib 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 @@ class SyncUsers(OpenStackSyncStep): 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 @@ class SyncStep: 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 @@ class SyncStep: 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 traceback 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 = {} + # Final order + order = [] + + # DFS stack, not using recursion + stack = [] + + # Unmarked set + unmarked = all_nodes - for k,v in g.items(): - for rk in v: + # visiting = [] - skip, don't expect 1000s of nodes, |E|/|V| is small + + while unmarked: + stack.insert(0,unmarked[0]) # push first unmarked + + while (stack): + n = stack[0] + add = True try: - reverse[rk].append(k) - except: - reverse[rk]=k + 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) - sources = [] - for k,v in g.items(): - if not reverse.has_key(k): - sources.append(k) + noorder = list(set(steps) - set(order)) + return order + noorder - for k,v in reverse.iteritems(): - if (not v): - sources.append(k) +def main(): + graph_file=open('planetstack.deps').read() + g = json.loads(graph_file) + print toposort(g) - 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) - - order.reverse() - - return order - -graph_file=open('model-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 @@ def parse_novarc(filename): 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 @@ class Client: 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 @@ class KeystoneClient(Client): 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 @@ class GlanceClient(Client): 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 @@ class OpenStackClient: 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 @@ manager_enabled = Config().api_nova_enabled 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 @@ class OpenStackDriver: 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 @@ class OpenStackDriver: 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 @@ class OpenStackDriver: 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 @@ class OpenStackDriver: 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 @@ class OpenStackDriver: 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 django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP from config import Config config = Config() +GEOIP_PATH = "/usr/share/GeoIP" + DEBUG = True TEMPLATE_DEBUG = DEBUG @@ -59,12 +61,12 @@ USE_TZ = True # 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 @@ INSTALLED_APPS = ( 'core', 'hpc', 'requestrouter', + 'cassandra', + 'kairos', + 'nagios', 'syndicate', 'geoposition', ) @@ -149,6 +154,7 @@ INSTALLED_APPS = ( # 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 @@ SUIT_CONFIG = { {'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 @@ LOGGING = { }, } } + +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 6c9acfa..49b144f 100644 --- a/planetstack/planetstack/urls.py +++ b/planetstack/planetstack/urls.py @@ -18,14 +18,21 @@ from core.views.slivers import SliverList, SliverDetail from core.views.tags import TagList, TagDetail from core.views.users 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 @@ urlpatterns = patterns('', #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[a-zA-Z0-9\-]+)/$', DeploymentDetail.as_view(), name='deployment-detail'), @@ -89,6 +96,9 @@ urlpatterns = patterns('', url(r'^legacyapi/$', 'core.views.legacyapi.LegacyXMLRPC', name='xmlrpc'), +# url(r'^analytics/(?P\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 @@ ratelimit_enabled=0 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_flavor=m1.small 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.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 +from core.admin import SingletonAdmin,SliceInline,ServiceAttrAsTabInline, SliceROInline,ServiceAttrAsTabROInline, ReadOnlyAwareAdmin class RequestRouterServiceAdmin(SingletonAdmin): model = RequestRouterService @@ -20,12 +20,26 @@ class RequestRouterServiceAdmin(SingletonAdmin): 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 @@ class RequestRouterService(SingletonModel,Service): 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' + +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 - def __unicode__(self): return 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 core.admin import ReadOnlyTabularInline,ReadOnlyAwareAdmin,SingletonAdmin,S 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 @@ class SyndicateServiceAdmin(SingletonAdmin,ReadOnlyAwareAdmin): ('serviceattrs','Additional Attributes'), ) + class VolumeAccessRightForUserROInline(ReadOnlyTabularInline): model = VolumeAccessRight extra = 0 @@ -47,40 +49,10 @@ class VolumeAccessRightInline(PlStackTabularInline): 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 @@ class VolumeROInline(ReadOnlyTabularInline): 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] - - 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] + inlines = [VolumeAccessRightInline, VolumeSliceInline] - suit_form_tabs =(('general', 'Volume Details'), - ('volumeKeys', 'Access Keys'), - ('volumeAccessRequests', 'Volume Access Requests'), - ('volumeAccessRights', 'Volume Access Rights'), - ) + user_readonly_fields = ['name','owner_id','description','blocksize','private','default_gateway_caps'] - - -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']}), - ] + user_readonly_inlines = [VolumeAccessRightROInline, VolumeSliceROInline] suit_form_tabs =(('general', 'Volume Details'), - ('volumes', 'Volumes'), - ('volumeAccessRequests', 'Volume Access Requests'), + #('volumeKeys', 'Access Keys'), + ('volumeSlices', 'Slices'), ('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 @@ class SyndicateService(SingletonModel,Service): 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") - - file_quota = models.IntegerField(help_text='Maximum number of files and directories allowed in this Volume (-1 means "unlimited")') + 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.") - 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') - 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') - def __unicode__(self): return self.owner_id.user.email +class VolumeAccessRight(PlCoreBase): + class Meta: + app_label = "syndicate" -class VolumeAccessRequest(models.Model): - owner_id = models.ForeignKey(SyndicateUser, verbose_name='user') + owner_id = models.ForeignKey(User, 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') + gateway_caps = BitField(flags=("read data", "write data", "host files"), verbose_name="User Capabilities") + + def __unicode__(self): return "%s-%s" % (self.owner_id.email, self.volume.name) + + +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" ) - def __unicode__(self): return self.owner_id.user.email 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 %} +{% load admin_static %}{% load suit_tags %}{% load url from future %} {% block title %} {%if title %} {{ title }} | {% endif %} {{ 'ADMIN_NAME'|suit_conf }}{% endblock %} @@ -9,7 +9,12 @@ {% block extrastyle %}{% endblock %} {% if LANGUAGE_BIDI %}{% endif %} - + + + + + + {% if 'SHOW_REQUIRED_ASTERISK'|suit_conf %} @@ -18,7 +23,6 @@ {% block blockbots %} {% endblock %} - {% load i18n %} @@ -31,19 +35,13 @@ {% block container %}
+

{% block header %} {% if not is_popup %} -