コード例 #1
0
ファイル: api.py プロジェクト: Labgoo/stashboard
    def get(self, version):
        if not self.valid_version(version):
            self.error(404, "API Version %s not supported" % version)
            return

        query = Status.query().order(Status.name)

        data = [s.rest(self.base_url(version)) for s in query]
        self.json({"statuses": data})
コード例 #2
0
ファイル: admin.py プロジェクト: Labgoo/stashboard
    def get(self, slug):
        service = Service.get_by_slug(slug)
        if not service:
            self.not_found()
            return

        td = {
            "services_selected": True,
            "service": service,
            "statuses": Status.query().fetch(100),
            }

        td.update(site.default_template_data())
        self.render(td, 'admin/events_create.html')
コード例 #3
0
ファイル: api.py プロジェクト: Labgoo/stashboard
    def post(self, version, status_slug):
        if not self.valid_version(version):
            self.error(404, "API Version %s not supported" % version)
            return

        status = Status.get_by_slug(status_slug)

        if not status:
            self.error(404, "No status with the slug %s found" % status_slug)
            return

        name = self.request.get('name', default_value=None)
        image_slug = self.request.get('image', default_value=None)
        image = None
        default = self.request.get('default', default_value=None)
        description = self.request.get('description', default_value=None)

        if image_slug is not None:
            image = Image.get_by_slug(image_slug)

            if image is None:
                self.error(400, "An Image with the "
                           "slug %s doesn't exist" % image_slug)
                return

            status.image = image.path

        if description is not None:
            status.description = description

        if default is not None and default in ["false", "true"]:

            # Reset default status
            if default == "true":
                for stat in Status.query().filter(Status.default == True):
                    stat.default = False
                    stat.put()

            status.default = default == "true"

        if name is not None:
            status.name = name

        if description or name or image or default:
            status.put()
            invalidate_cache()

        self.json(status.rest(self.base_url(version)))
コード例 #4
0
ファイル: site.py プロジェクト: Labgoo/stashboard
    def data(self):
        default_status = Status.get_default()

        lists = []
        for list in self.lists:
            l = List.get_by_slug(list)
            if l is not None:
                lists.append(l)

        @ndb.toplevel
        def get_services():
            services = []
            for service in Service.query().filter(Service.list in lists).order(Service.name).fetch(100):
                event = yield service.current_event_async()
                if event is not None:
                    status = event.status
                else:
                    status = default_status

                if len(self.statuses) and not status.slug in self.statuses: continue

                today = datetime.today() + timedelta(days=1)
                current = yield service.history_async(1, default_status, start=today)
                
                current = current[0]

                has_issues = current["information"] and status.key == default_status.key

                history = yield service.history_async(5, default_status)

                service_dict = {
                    "slug": service.slug,
                    "name": service.name,
                    "url": service.url(),
                    "status": status,
                    "has_issues": has_issues,
                    "history": history,
                    }
                services.append(service_dict)

            raise ndb.Return(services)

        return {
            "days": get_past_days(5),
            "statuses": Status.query().fetch(100),
            "services": get_services(),
            }
コード例 #5
0
ファイル: api.py プロジェクト: Labgoo/stashboard
    def post(self, version):
        if not self.valid_version(version):
            self.error(404, "API Version %s not supported" % version)
            return

        name = self.request.get('name', default_value=None)
        description = self.request.get('description', default_value=None)
        image_slug = self.request.get('image', default_value=None)
        default = self.request.get('default', default_value="false")

        if default not in ["true", "false"]:
            self.error(400, "Default must be true or false")
            return

        if not name or not description or not image_slug:
            self.error(400, "Bad Data")
            return

        slug = slugify.slugify(name)
        status = Status.get_by_slug(slug)
        image = Image.get_by_slug(image_slug)

        if status is not None:
            self.error(400, "A Status with the slug %s already exists" % slug)
            return

        if image is None:
            msg = "An Image with the slug %s doesn't exist" % image_slug
            self.error(400, msg)
            return

        # Reset default status
        if default == "true":
            for stat in Status.query().filter(Status.default == True):
                stat.default = False
                stat.put()

        default = default == "true"
        status = Status(name=name, id=slug, description=description,
                        image=image.path, default=default)
        status.put()
        invalidate_cache()

        self.response.set_status(201)
        self.json(status.rest(self.base_url(version)))
コード例 #6
0
ファイル: site.py プロジェクト: Labgoo/stashboard
    def get(self, service_slug, year=None, month=None, day=None):
        service = Service.get_by_slug(service_slug)

        if not service:
            self.not_found()
            return

        try:
            if day:
                start_date = datetime(int(year), int(month), int(day))
                end_date = start_date + timedelta(days=1)
            elif month:
                start_date = datetime(int(year), int(month), 1)
                days = calendar.monthrange(start_date.year,
                                           start_date.month)[1]
                end_date = start_date + timedelta(days=days)
            elif year:
                start_date = datetime(int(year), 1, 1)
                end_date = start_date + timedelta(days=365)
            else:
                start_date = None
                end_date = None
        except ValueError:
            self.not_found(404)
            return

        events = service.events

        if start_date and end_date:
            events.filter(Event.start >= start_date).filter(Event.start < end_date)

        td = default_template_data()
        td["statuses"] = Status.query().fetch(100)
        td["service"] = service
        td["events"] = events.order(-Event.start).fetch(500)

        self.render(td, 'service.html')
コード例 #7
0
ファイル: site.py プロジェクト: Labgoo/stashboard
    def data(self):
        
        default_status = Status.get_default()

        @ndb.toplevel
        def get_lists():
            lists = {}
            for service in Service.query.order(Service.list).fetch(100):
                event = yield service.current_event_async()
                if event is not None:
                    status = event.status
                else:
                    status = default_status

                if service.list and not lists.has_key(service.list.slug) or \
                    lists[service.list.slug]["status"].name < status.name:
                    lists[service.list.slug] = {"list": service.list, "status": status}

            raise ndb.Return(lists)

        return {
            "lists": get_lists(),
            "statuses": Status.query().fetch(100),
            }
コード例 #8
0
ファイル: migrations.py プロジェクト: Labgoo/stashboard
    def run(self):
        logging.info("Update each status")
        # For each status
        for status in Status.query().fetch(100):

            # Set the status to default
            status.default = False

            # Update the status url
            status.image = "icons/fugue/" + status.image + ".png"

            # Save the status
            status.put()

        # Get the up status and make it default
        default_status = Status.get_by_slug("up")

        if default_status is None:
            logging.error("Could not find the up status")
            return

        default_status.default = True
        default_status.put()
        logging.info("Set up status as the default")
コード例 #9
0
ファイル: admin.py プロジェクト: Labgoo/stashboard
 def get(self):
     td = default_template_data()
     td["statuses_selected"] = True
     td["statuses"] = Status.query().order(Status.name).fetch(1000)
     self.render(td, 'admin/status.html')