コード例 #1
0
def create_app(config=None):
    app = Flask(__name__)
    app.secret_key = conf.get('webserver', 'SECRET_KEY')
    #app.config = config
    login.login_manager.init_app(app)

    cache = Cache(app=app,
                  config={
                      'CACHE_TYPE': 'filesystem',
                      'CACHE_DIR': '/tmp'
                  })

    app.register_blueprint(ck, url_prefix='/ck')
    app.register_blueprint(routes)
    app.jinja_env.add_extension("chartkick.ext.charts")

    with app.app_context():
        from airflow.www.views import HomeView
        admin = Admin(
            app,
            name='Airflow',
            static_url_path='/admin',
            index_view=HomeView(endpoint='', url='/admin'),
            template_mode='bootstrap3',
        )

        from airflow.www import views
        admin.add_view(views.Airflow(name='DAGs'))

        admin.add_view(
            views.SlaMissModelView(models.SlaMiss,
                                   Session,
                                   name="SLA Misses",
                                   category="Browse"))
        admin.add_view(
            views.TaskInstanceModelView(models.TaskInstance,
                                        Session,
                                        name="Task Instances",
                                        category="Browse"))

        admin.add_view(
            views.LogModelView(models.Log,
                               Session,
                               name="Logs",
                               category="Browse"))
        admin.add_view(
            views.JobModelView(jobs.BaseJob,
                               Session,
                               name="Jobs",
                               category="Browse"))

        admin.add_view(
            views.QueryView(name='Ad Hoc Query', category="Data Profiling"))
        admin.add_view(
            views.ChartModelView(models.Chart,
                                 Session,
                                 name="Charts",
                                 category="Data Profiling"))
        admin.add_view(
            views.KnowEventView(models.KnownEvent,
                                Session,
                                name="Known Events",
                                category="Data Profiling"))

        admin.add_view(
            views.PoolModelView(models.Pool,
                                Session,
                                name="Pools",
                                category="Admin"))
        admin.add_view(
            views.ConfigurationView(name='Configuration', category="Admin"))
        admin.add_view(
            views.UserModelView(models.User,
                                Session,
                                name="Users",
                                category="Admin"))
        admin.add_view(
            views.ConnectionModelView(models.Connection,
                                      Session,
                                      name="Connections",
                                      category="Admin"))
        admin.add_view(
            views.VariableView(models.Variable,
                               Session,
                               name="Variables",
                               category="Admin"))

        admin.add_link(
            base.MenuLink(category='Docs',
                          name='Documentation',
                          url='http://pythonhosted.org/airflow/'))
        admin.add_link(
            base.MenuLink(category='Docs',
                          name='Github',
                          url='https://github.com/airbnb/airflow'))

        admin.add_view(views.DagModelView(models.DagModel, Session, name=None))
        # Hack to not add this view to the menu
        admin._menu = admin._menu[:-1]

        def integrate_plugins():
            """Integrate plugins to the context"""
            from airflow.plugins_manager import (admin_views, flask_blueprints,
                                                 menu_links)
            for v in admin_views:
                admin.add_view(v)
            for bp in flask_blueprints:
                print(bp)
                app.register_blueprint(bp)
            for ml in menu_links:
                admin.add_link(ml)

        integrate_plugins()

        @app.context_processor
        def jinja_globals():
            return {
                'hostname': socket.gethostname(),
            }

        @app.teardown_appcontext
        def shutdown_session(exception=None):
            settings.Session.remove()

        return app
コード例 #2
0
        def init_views(appbuilder):
            from airflow.www import views
            appbuilder.add_view_no_menu(views.Airflow())
            appbuilder.add_view_no_menu(views.DagModelView())
            appbuilder.add_view_no_menu(views.ConfigurationView())
            appbuilder.add_view_no_menu(views.VersionView())
            appbuilder.add_view(views.DagRunModelView,
                                "DAG Runs",
                                category="Browse",
                                category_icon="fa-globe")
            appbuilder.add_view(views.JobModelView, "Jobs", category="Browse")
            appbuilder.add_view(views.LogModelView, "Logs", category="Browse")
            appbuilder.add_view(views.SlaMissModelView,
                                "SLA Misses",
                                category="Browse")
            appbuilder.add_view(views.TaskInstanceModelView,
                                "Task Instances",
                                category="Browse")
            appbuilder.add_link("Configurations",
                                href='/configuration',
                                category="Admin",
                                category_icon="fa-user")
            appbuilder.add_view(views.ConnectionModelView,
                                "Connections",
                                category="Admin")
            appbuilder.add_view(views.PoolModelView, "Pools", category="Admin")
            appbuilder.add_view(views.VariableModelView,
                                "Variables",
                                category="Admin")
            appbuilder.add_view(views.XComModelView, "XComs", category="Admin")
            appbuilder.add_link("Documentation",
                                href='https://airflow.apache.org/',
                                category="Docs",
                                category_icon="fa-cube")
            appbuilder.add_link("GitHub",
                                href='https://github.com/apache/airflow',
                                category="Docs")
            appbuilder.add_link('Version',
                                href='/version',
                                category='About',
                                category_icon='fa-th')

            def integrate_plugins():
                """Integrate plugins to the context"""
                from airflow.plugins_manager import (
                    flask_appbuilder_views, flask_appbuilder_menu_links)

                for v in flask_appbuilder_views:
                    log.debug("Adding view %s", v["name"])
                    appbuilder.add_view(v["view"],
                                        v["name"],
                                        category=v["category"])
                for ml in sorted(flask_appbuilder_menu_links,
                                 key=lambda x: x["name"]):
                    log.debug("Adding menu link %s", ml["name"])
                    appbuilder.add_link(ml["name"],
                                        href=ml["href"],
                                        category=ml["category"],
                                        category_icon=ml["category_icon"])

            integrate_plugins()